[CalendarServer-changes] [147]
CalendarServer/branches/users/cdaboo/quota
source_changes at macosforge.org
source_changes at macosforge.org
Mon Sep 18 14:05:38 PDT 2006
Revision: 147
Author: cdaboo at apple.com
Date: 2006-09-18 14:05:35 -0700 (Mon, 18 Sep 2006)
Log Message:
-----------
Access log support. Split logging into two files: access log (server.log) and error log (error.log). Access log
is Apache-style log, error log is what we had before. Error log still spews out request info for OK requests
so more work is required there to actually make it useful.
Modified Paths:
--------------
CalendarServer/branches/users/cdaboo/quota/bin/caldavd
CalendarServer/branches/users/cdaboo/quota/conf/caldavd-dev.plist
CalendarServer/branches/users/cdaboo/quota/conf/caldavd.plist
CalendarServer/branches/users/cdaboo/quota/conf/launchd.plist
CalendarServer/branches/users/cdaboo/quota/twistedcaldav/logging.py
Modified: CalendarServer/branches/users/cdaboo/quota/bin/caldavd
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/bin/caldavd 2006-09-18 19:47:33 UTC (rev 146)
+++ CalendarServer/branches/users/cdaboo/quota/bin/caldavd 2006-09-18 21:05:35 UTC (rev 147)
@@ -56,10 +56,14 @@
self.keyfile = "/etc/certificates/Default.key"
self.certfile = "/etc/certificates/Default.crt"
- self.logfile = "/var/log/caldavd/server.log"
+ self.serverlogfile = "/var/log/caldavd/server.log"
+ self.errorlogfile = "/var/log/caldavd/error.log"
self.pidfile = "/var/run/caldavd.pid"
self.twistd = "/usr/share/caldavd/bin/twistd"
+
+ self.maxsize = 1048576 # 1 Mb
+ self.quota = 104857600 # 100 Mb
self.action = None
@@ -83,9 +87,12 @@
print "Only Use SSL: %s" % (self.onlyssl,)
print "SSL Private Key File: %s" % (self.keyfile,)
print "SSL Certificate File: %s" % (self.certfile,)
- print "Log File: %s" % (self.logfile,)
+ print "Server Log File: %s" % (self.serverlogfile,)
+ print "Error Log File: %s" % (self.errorlogfile,)
print "PID File: %s" % (self.pidfile,)
print "twistd Location: %s" % (self.twistd,)
+ print "Maximum Calendar Resource Size: %d bytes" % (self.maxsize,)
+ print "Global per-user quota limit: %d bytes" % (self.quota,)
def run(self):
"""
@@ -125,7 +132,7 @@
args.append(self.twistd)
if not self.daemonize:
args.append("-n")
- args.append("--logfile=%s" % (self.logfile,))
+ args.append("--logfile=%s" % (self.errorlogfile,))
args.append("--pidfile=%s" % (self.pidfile,))
args.append("-y")
args.append(tac)
@@ -247,21 +254,24 @@
# dict that maps between plist keys and class attributes
mapper = {
- "Verbose": "verbose",
- "RunStandalone": "daemonize",
- "DocumentRoot": "docroot",
- "Port": "port",
- "SSLEnable": "dossl",
- "SSLPort": "sslport",
- "SSLOnly": "onlyssl",
- "SSLPrivateKey": "keyfile",
- "SSLCertificate": "certfile",
- "LogFile": "logfile",
- "PIDFile": "pidfile",
- "Repository": "repo",
- "CreateAccounts": "doacct",
- "ResetAccountACLs": "doacl",
- "twistdLocation": "twistd",
+ "Verbose": "verbose",
+ "RunStandalone": "daemonize",
+ "DocumentRoot": "docroot",
+ "Port": "port",
+ "SSLEnable": "dossl",
+ "SSLPort": "sslport",
+ "SSLOnly": "onlyssl",
+ "SSLPrivateKey": "keyfile",
+ "SSLCertificate": "certfile",
+ "ServerLogFile": "serverlogfile",
+ "ErrorLogFile": "errorlogfile",
+ "PIDFile": "pidfile",
+ "Repository": "repo",
+ "CreateAccounts": "doacct",
+ "ResetAccountACLs": "doacl",
+ "twistdLocation": "twistd",
+ "MaximumAttachmentSizeBytes": "maxsize",
+ "UserQuotaBytes": "quota",
}
for k,v in root.items():
@@ -292,7 +302,7 @@
self.dossl = True
if not self.daemonize:
- self.logfile = "-"
+ self.errorlogfile = "-"
if not os.path.exists(self.twistd):
print "twistd does not exist: %s" % (self.twistd,)
@@ -317,17 +327,21 @@
import os
from os.path import dirname, join
-docroot = "%(docroot)s"
-repo = "%(repo)s"
-doacct = %(doacct)s
-doacl = %(doacl)s
-dossl = %(dossl)s
-keyfile = "%(keyfile)s"
-certfile = "%(certfile)s"
-onlyssl = %(onlyssl)s
-port = %(port)d
-sslport = %(sslport)d
+docroot = "%(docroot)s"
+repo = "%(repo)s"
+doacct = %(doacct)s
+doacl = %(doacl)s
+dossl = %(dossl)s
+keyfile = "%(keyfile)s"
+certfile = "%(certfile)s"
+onlyssl = %(onlyssl)s
+port = %(port)d
+sslport = %(sslport)d
+maxsize = %(maxsize)d
+quota = %(quota)d
+serverlog = "%(serverlogfile)s"
+
if not dossl and onlyssl:
dossl = True
@@ -352,26 +366,48 @@
else:
raise IOError("SSL Certificate file does not exist: %%s" %% (certfile,))
-from twisted.application.service import Application, IServiceCollection
+from twisted.application.service import Application, IServiceCollection, MultiService
from twisted.application.internet import TCPServer
-from twisted.cred.portal import Portal
-from twisted.web2.auth import basic
+from twisted.cred.portal import Portal
+from twisted.web2.auth import basic
from twisted.web2.dav import davxml, auth
+from twisted.web2.log import LogWrapperResource
from twisted.web2.server import Site
from twisted.web2.channel.http import HTTPFactory
if dossl:
from twisted.application.internet import SSLServer
- from twisted.internet.ssl import DefaultOpenSSLContextFactory
+ from twisted.internet.ssl import DefaultOpenSSLContextFactory
+from twistedcaldav.logging import RotatingFileAccessLoggingObserver
from twistedcaldav.repository import RepositoryBuilder
-builder = RepositoryBuilder(docroot, doAccounts=doacct, resetACLs=doacl)
+class Web2Service(MultiService):
+ def __init__(self, logObserver):
+ self.logObserver = logObserver
+ MultiService.__init__(self)
+
+ def startService(self):
+ MultiService.startService(self)
+ self.logObserver.start()
+
+ def stopService(self):
+ MultiService.stopService(self)
+ self.logObserver.stop()
+
+builder = RepositoryBuilder(docroot,
+ doAccounts=doacct,
+ resetACLs=doacl,
+ maxsize=maxsize,
+ quota=quota)
builder.buildFromFile(repo)
rootresource = builder.docRoot.collection.resource
application = Application("CalDAVServer")
parent = IServiceCollection(application)
+web2 = Web2Service(RotatingFileAccessLoggingObserver(serverlog))
+web2.setServiceParent(parent)
+parent = web2
portal = Portal(auth.DavRealm())
portal.registerChecker(auth.TwistedPropertyChecker())
@@ -380,10 +416,10 @@
loginInterfaces = (auth.IPrincipal,)
-site = Site(auth.AuthenticationWrapper(rootresource,
- portal,
- credentialFactories,
- loginInterfaces))
+site = Site(LogWrapperResource(auth.AuthenticationWrapper(rootresource,
+ portal,
+ credentialFactories,
+ loginInterfaces)))
factory = HTTPFactory(site)
@@ -395,16 +431,19 @@
print "Starting https server"
sslContext = DefaultOpenSSLContextFactory(keyfile, certfile)
sslserver = SSLServer(sslport, factory, sslContext).setServiceParent(parent)
-""" % {"docroot": self.docroot,
- "repo": self.repo,
- "doacct": self.doacct,
- "doacl": self.doacl,
- "dossl": self.dossl,
- "keyfile": self.keyfile,
- "certfile": self.certfile,
- "onlyssl": self.onlyssl,
- "port": self.port,
- "sslport": self.sslport}
+""" % {"docroot": self.docroot,
+ "repo": self.repo,
+ "doacct": self.doacct,
+ "doacl": self.doacl,
+ "dossl": self.dossl,
+ "keyfile": self.keyfile,
+ "certfile": self.certfile,
+ "onlyssl": self.onlyssl,
+ "port": self.port,
+ "sslport": self.sslport,
+ "maxsize": self.maxsize,
+ "quota": self.quota,
+ "serverlogfile": self.serverlogfile}
if __name__ == "__main__":
Modified: CalendarServer/branches/users/cdaboo/quota/conf/caldavd-dev.plist
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/conf/caldavd-dev.plist 2006-09-18 19:47:33 UTC (rev 146)
+++ CalendarServer/branches/users/cdaboo/quota/conf/caldavd-dev.plist 2006-09-18 21:05:35 UTC (rev 147)
@@ -47,9 +47,12 @@
<key>SSLCertificate</key>
<string>conf/server.pem</string>
- <key>LogFile</key>
- <string>bin/caldavd.log</string>
+ <key>ServerLogFile</key>
+ <string>bin/server.log</string>
+ <key>ErrorLogFile</key>
+ <string>bin/error.log</string>
+
<key>PIDFile</key>
<string>bin/twistd-caldavd.pid</string>
Modified: CalendarServer/branches/users/cdaboo/quota/conf/caldavd.plist
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/conf/caldavd.plist 2006-09-18 19:47:33 UTC (rev 146)
+++ CalendarServer/branches/users/cdaboo/quota/conf/caldavd.plist 2006-09-18 21:05:35 UTC (rev 147)
@@ -47,9 +47,12 @@
<key>SSLCertificate</key>
<string>/etc/certificates/Default.crt</string>
- <key>LogFile</key>
+ <key>ServerLogFile</key>
<string>/var/log/caldavd/server.log</string>
+ <key>ErrorLogFile</key>
+ <string>/var/log/caldavd/error.log</string>
+
<key>PIDFile</key>
<string>/var/log/caldavd/caldavd.pid</string>
Modified: CalendarServer/branches/users/cdaboo/quota/conf/launchd.plist
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/conf/launchd.plist 2006-09-18 19:47:33 UTC (rev 146)
+++ CalendarServer/branches/users/cdaboo/quota/conf/launchd.plist 2006-09-18 21:05:35 UTC (rev 147)
@@ -46,7 +46,7 @@
<true/>
<key>StandardOutPath</key>
- <string>/var/log/caldavd/error.log</string>
+ <string>/var/log/caldavd/server.log</string>
<key>StandardErrorPath</key>
<string>/var/log/caldavd/error.log</string>
Modified: CalendarServer/branches/users/cdaboo/quota/twistedcaldav/logging.py
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/twistedcaldav/logging.py 2006-09-18 19:47:33 UTC (rev 146)
+++ CalendarServer/branches/users/cdaboo/quota/twistedcaldav/logging.py 2006-09-18 21:05:35 UTC (rev 147)
@@ -22,12 +22,16 @@
0 - no logging
1 - errors only
2 - errors and warnings only
-3 - errors, warnings and debug
+3 - errors, warnings and info
+3 - errors, warnings, info and debug
"""
+import datetime
+
from twisted.python import log
+from twisted.web2.log import BaseCommonAccessLoggingObserver
-logtypes = {"none": 0, "info": 1, "warning": 2, "error": 3, "debug": 4}
+logtypes = {"none": 0, "error": 1, "warning": 2, "info": 3, "debug": 4}
currentLogLevel = 1
@@ -85,3 +89,22 @@
if canLog("debug"):
log.msg(message, debug=True, **kwargs)
+class RotatingFileAccessLoggingObserver(BaseCommonAccessLoggingObserver):
+ """I log requests to a single logfile
+ """
+
+ def __init__(self, logpath):
+ self.logpath = logpath
+
+ def logMessage(self, message):
+ self.f.write(message + '\n')
+
+ def start(self):
+ super(RotatingFileAccessLoggingObserver, self).start()
+ self.f = open(self.logpath, 'a', 1)
+ self.logMessage("Log opened: [%s]." % (datetime.datetime.now().ctime(),))
+
+ def stop(self):
+ self.logMessage("Log closed: [%s]." % (datetime.datetime.now().ctime(),))
+ super(RotatingFileAccessLoggingObserver, self).stop()
+ self.f.close()
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20060918/f8977703/attachment.html
More information about the calendarserver-changes
mailing list