special-cell-usage.scm
(module special-cell-usage mzscheme
        (require "hwikireq.scm")
        (require "users.scm")
        (require "page.scm")
        (require "template.scm")
        (require "config.scm")
        (require "hwiki-manager.scm")
        (provide special:cell-usage)

        (def-class
         (this (special:cell-usage context))
         (supers (page-base))
         (private
          (define _template (template 'context context 'name "admin"))
          (define _users    (users context))
          )
         (public
          (define (get-template)  _template)

          (define (create-html)
            (lambda (url)
              (let ((manager (dynamic-require "hwiki.scm" 'manager)))
                (make-response/xhtml
                 `(html
                   (head (link (link ((rel "stylesheet") (href ,(-> _template css)) (type "text/css")))
                               (title ,(_ "HWiki Cell Usage (memory)"))))
                   (body
                    (div ((class "cellusage"))
                         (h1 ,(_ "HWiki Cell Usage"))
                         (p (a ((href ,(let ((paths (cfile context)))
                                         (-> paths htmllink 'page (-> context from-where)))))
                               ,(_ "Return to previous page")))
                         ,(let ((cells (sort (hwiki-cell-usage manager) (lambda (a b) (> (cadr a) (cadr b))))))
                            `(p (format "Number of cells: ~a" (length cells)))
                            (append
                             `(table ((class "cellusage")) )
                             `((tr (th ((class "id"))            ,(_ "cell id"))
                                   (th ((class "begintime"))     ,(_ "begin time"))
                                   (th ((class "timeout"))       ,(_ "timeout"))
                                   (th ((class "tdiff"))         ,(_ "duration"))
                                   (th ((class "continuations")) ,(_ "#continuations"))))
                             (map
                              (lambda (cell)
                                (apply (lambda (id begin-time timeout continuations)
                                         `(tr (td ((class "id")) ,(number->string id))
                                              (td ((class "begintime")) ,(date->string (time-utc->date (make-time time-utc 0 begin-time)) "~5"))
                                              (td ((class "timeout"))   ,(number->string timeout))
                                              (td ((class "tdiff"))     ,(number->string (- (current-seconds) begin-time)))
                                              (td ((class "continuations")) ,(number->string continuations))))
                                       cell))
                              cells))))))))))
          )
         (constructor
          (-> supers special!)
          )
         )


        (register-page "special:cellusage" special:cell-usage)

        )