Changeset 3447
- Timestamp:
- 07/15/08 14:16:38 (6 months ago)
- Files:
-
- trunk/bknr/web/src/bknr.web.asd (modified) (1 diff)
- trunk/bknr/web/src/web/handler-statistics-handler.lisp (added)
- trunk/bknr/web/src/web/handlers.lisp (modified) (3 diffs)
- trunk/projects/bos/web/webserver.lisp (modified) (1 diff)
- trunk/projects/lisp-ecoop/src/webserver.lisp (modified) (1 diff)
- trunk/thirdparty/closure-common/closure-common.asd (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/bknr/web/src/bknr.web.asd
r3344 r3447 80 80 "site")) 81 81 82 (:file "handler-statistics-handler" 83 :depends-on ("handlers")) 84 82 85 (:file "template-handler" 83 86 :depends-on ("handlers")) trunk/bknr/web/src/web/handlers.lisp
r3398 r3447 211 211 :initform "text/html") 212 212 (site :initarg :site 213 :reader page-handler-site)) 213 :reader page-handler-site) 214 (statistics :initform (make-handler-statistics) 215 :accessor page-handler-statistics)) 214 216 (:documentation "Simple page handler publishing a serve request under a simple URL")) 215 217 … … 224 226 (print-unreadable-object (handler stream :type t) 225 227 (format stream "~A" (page-handler-prefix handler)))) 228 229 ;; Each handler has a statistics record that keeps track of the 230 ;; slowest and fastest URLs on this handler and the average time that 231 ;; processing on this handler takes. 232 233 (defconstant +statistics-keep-atypical-count+ 10) 234 235 (defstruct (handler-statistics (:conc-name hs-)) 236 (slowest (make-array +statistics-keep-atypical-count+ :initial-element nil)) 237 (fastest (make-array +statistics-keep-atypical-count+ :initial-element nil)) 238 (count 0) 239 average) 240 241 (defun slowest-time (statistics) 242 (or (car (aref (hs-slowest statistics) 0)) 243 0)) 244 245 (defun fastest-time (statistics) 246 (or (car (aref (hs-fastest statistics) 0)) 247 most-positive-fixnum)) 248 249 (defun note-run-time-for-statistics (handler run-time) 250 (let ((statistics (page-handler-statistics handler))) 251 (when (< run-time (fastest-time statistics)) 252 (setf (aref (hs-fastest statistics) 0) (cons run-time (tbnl:script-name*)) 253 (hs-fastest statistics) (sort (hs-fastest statistics) #'> 254 :key (lambda (entry) 255 (or (car entry) 256 most-positive-fixnum))))) 257 (when (> run-time (slowest-time statistics)) 258 (setf (aref (hs-slowest statistics) 0) (cons run-time (tbnl:script-name*)) 259 (hs-slowest statistics) (sort (hs-slowest statistics) #'< 260 :key (lambda (entry) 261 (or (car entry) 262 0))))) 263 (cond 264 ((plusp (hs-count statistics)) 265 (setf (hs-average statistics) (/ (+ (* (hs-count statistics) (hs-average statistics)) 266 run-time) 267 (1+ (hs-count statistics)))) 268 (incf (hs-count statistics))) 269 (t 270 (setf (hs-average statistics) run-time 271 (hs-count statistics) 1))))) 226 272 227 273 (defgeneric handle (page-handler) … … 280 326 (website-show-error-page *website* e)) 281 327 (do-error-log-request e))))))) 282 (handle handler)))) 328 (let ((start (get-internal-real-time))) 329 (prog1 330 (handle handler) 331 (let ((duration (- (get-internal-real-time) start))) 332 (note-run-time-for-statistics handler duration))))))) 333 283 334 284 335 (defmethod handle ((page-handler page-handler)) trunk/projects/bos/web/webserver.lisp
r3398 r3447 239 239 ("/statistics" statistics-handler) 240 240 ("/rss" rss-handler) 241 ("/handler-statistics" bknr.web::handler-statistics-handler) 241 242 ("/favicon.ico" 242 243 file-handler trunk/projects/lisp-ecoop/src/webserver.lisp
r3359 r3447 26 26 images 27 27 stats 28 ("/handler-statistics" bknr.web::handler-statistics-handler) 28 29 mailinglist 29 30 mailinglist-registration trunk/thirdparty/closure-common/closure-common.asd
r3436 r3447 27 27 (error "conflicting unicode configuration. Please recompile.") 28 28 (pushnew :rune-is-integer *features*)) 29 ((ignore-errors (code-char 70000)) 29 (#+cmu (ignore-errors (code-char 70000)) 30 #-cmu (code-char 70000) 30 31 (when (test #xD800) 31 32 (format t " WARNING: Lisp implementation doesn't use UTF-16, ~
