forked from cadence/breezewiki
		
	Add basic request logging, disabled by default
This commit is contained in:
		
							parent
							
								
									0ba20c9e38
								
							
						
					
					
						commit
						c3c4ea9e55
					
				
					 6 changed files with 70 additions and 5 deletions
				
			
		| 
						 | 
					@ -61,7 +61,7 @@
 | 
				
			||||||
                         "Documentation and more information"))
 | 
					                         "Documentation and more information"))
 | 
				
			||||||
                     (p
 | 
					                     (p
 | 
				
			||||||
                      (a (@ (href "https://lists.sr.ht/~cadence/breezewiki-discuss"))
 | 
					                      (a (@ (href "https://lists.sr.ht/~cadence/breezewiki-discuss"))
 | 
				
			||||||
                         "Discussions / Bug reports / Feature requests"))
 | 
					                         "Chat / Bug reports / Feature requests"))
 | 
				
			||||||
                     ,(if (config-true? 'instance_is_official)
 | 
					                     ,(if (config-true? 'instance_is_official)
 | 
				
			||||||
                          `(p ,(format "This instance is run by the ~a developer, " (config-get 'application_name))
 | 
					                          `(p ,(format "This instance is run by the ~a developer, " (config-get 'application_name))
 | 
				
			||||||
                              (a (@ (href "https://cadence.moe/contact"))
 | 
					                              (a (@ (href "https://cadence.moe/contact"))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -39,7 +39,9 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    (feature_offline::enabled . "false")
 | 
					    (feature_offline::enabled . "false")
 | 
				
			||||||
    (feature_offline::format . "json.gz")
 | 
					    (feature_offline::format . "json.gz")
 | 
				
			||||||
    (feature_offline::only . "false")))
 | 
					    (feature_offline::only . "false")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    (access_log::enabled . "false")))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(define loaded-alist
 | 
					(define loaded-alist
 | 
				
			||||||
  (with-handlers
 | 
					  (with-handlers
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										54
									
								
								src/log.rkt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								src/log.rkt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,54 @@
 | 
				
			||||||
 | 
					#lang typed/racket/base
 | 
				
			||||||
 | 
					(require racket/file
 | 
				
			||||||
 | 
					         racket/port
 | 
				
			||||||
 | 
					         racket/runtime-path
 | 
				
			||||||
 | 
					         racket/string
 | 
				
			||||||
 | 
					         typed/srfi/19
 | 
				
			||||||
 | 
					         "config.rkt")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(provide
 | 
				
			||||||
 | 
					 log-page-request
 | 
				
			||||||
 | 
					 log-styles-request
 | 
				
			||||||
 | 
					 log-set-settings-request)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(define last-flush 0)
 | 
				
			||||||
 | 
					(define flush-every-millis 60000)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(define-runtime-path log-file "../storage/logs/access-0.log")
 | 
				
			||||||
 | 
					(define log-port
 | 
				
			||||||
 | 
					  (if (config-true? 'access_log::enabled)
 | 
				
			||||||
 | 
					      (begin
 | 
				
			||||||
 | 
					        (make-directory* (simplify-path (build-path log-file 'up)))
 | 
				
			||||||
 | 
					         (open-output-file log-file #:exists 'append))
 | 
				
			||||||
 | 
					      (open-output-nowhere)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(: get-date-iso8601 (-> String))
 | 
				
			||||||
 | 
					(define (get-date-iso8601)
 | 
				
			||||||
 | 
					  (date->string (current-date 0) "~5"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(: offline-string (Boolean -> String))
 | 
				
			||||||
 | 
					(define (offline-string offline?)
 | 
				
			||||||
 | 
					  (if offline? "---" "ooo"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(: log (String * -> Void))
 | 
				
			||||||
 | 
					(define (log . entry)
 | 
				
			||||||
 | 
					  ;; create log entry string
 | 
				
			||||||
 | 
					  (define full-entry (cons (get-date-iso8601) entry))
 | 
				
			||||||
 | 
					  ;; write to output port
 | 
				
			||||||
 | 
					  (displayln (string-join full-entry ";") log-port)
 | 
				
			||||||
 | 
					  ;; flush output port to file (don't do this too frequently)
 | 
				
			||||||
 | 
					  (when ((- (current-milliseconds) last-flush) . >= . flush-every-millis)
 | 
				
			||||||
 | 
					    (flush-output log-port)
 | 
				
			||||||
 | 
					    (set! last-flush (current-milliseconds))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(: log-page-request (Boolean String String (U 'light 'dark 'default) -> Void))
 | 
				
			||||||
 | 
					(define (log-page-request offline? wikiname title theme)
 | 
				
			||||||
 | 
					  (log "page" (offline-string offline?) wikiname title (symbol->string theme)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(: log-styles-request (Boolean String String -> Void))
 | 
				
			||||||
 | 
					(define (log-styles-request offline? wikiname basename)
 | 
				
			||||||
 | 
					  (log "style" (offline-string offline?) wikiname basename))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(: log-set-settings-request (Symbol -> Void))
 | 
				
			||||||
 | 
					(define (log-set-settings-request theme)
 | 
				
			||||||
 | 
					  (log "settings" (symbol->string theme)))
 | 
				
			||||||
| 
						 | 
					@ -4,6 +4,7 @@
 | 
				
			||||||
         web-server/http
 | 
					         web-server/http
 | 
				
			||||||
         "application-globals.rkt"
 | 
					         "application-globals.rkt"
 | 
				
			||||||
         "data.rkt"
 | 
					         "data.rkt"
 | 
				
			||||||
 | 
					         "log.rkt"
 | 
				
			||||||
         "../lib/url-utils.rkt"
 | 
					         "../lib/url-utils.rkt"
 | 
				
			||||||
         "../lib/xexpr-utils.rkt")
 | 
					         "../lib/xexpr-utils.rkt")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -14,5 +15,6 @@
 | 
				
			||||||
  (response-handler
 | 
					  (response-handler
 | 
				
			||||||
   (define next-location (dict-ref (url-query (request-uri req)) 'next_location))
 | 
					   (define next-location (dict-ref (url-query (request-uri req)) 'next_location))
 | 
				
			||||||
   (define new-settings (read (open-input-string (dict-ref (url-query (request-uri req)) 'new_settings))))
 | 
					   (define new-settings (read (open-input-string (dict-ref (url-query (request-uri req)) 'new_settings))))
 | 
				
			||||||
 | 
					   (log-set-settings-request (user-cookies^-theme new-settings))
 | 
				
			||||||
   (define headers (user-cookies-setter new-settings))
 | 
					   (define headers (user-cookies-setter new-settings))
 | 
				
			||||||
   (generate-redirect next-location #:headers headers)))
 | 
					   (generate-redirect next-location #:headers headers)))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,7 +12,8 @@
 | 
				
			||||||
         "../archiver/archiver.rkt"
 | 
					         "../archiver/archiver.rkt"
 | 
				
			||||||
         "../lib/mime-types.rkt"
 | 
					         "../lib/mime-types.rkt"
 | 
				
			||||||
         "../lib/xexpr-utils.rkt"
 | 
					         "../lib/xexpr-utils.rkt"
 | 
				
			||||||
         "../src/config.rkt")
 | 
					         "config.rkt"
 | 
				
			||||||
 | 
					         "log.rkt")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(provide
 | 
					(provide
 | 
				
			||||||
 page-static-archive)
 | 
					 page-static-archive)
 | 
				
			||||||
| 
						 | 
					@ -53,6 +54,7 @@
 | 
				
			||||||
(define (handle-style wikiname dest)
 | 
					(define (handle-style wikiname dest)
 | 
				
			||||||
  (when (config-true? 'debug)
 | 
					  (when (config-true? 'debug)
 | 
				
			||||||
    (printf "using offline mode for style ~a ~a~n" wikiname dest))
 | 
					    (printf "using offline mode for style ~a ~a~n" wikiname dest))
 | 
				
			||||||
 | 
					  (log-styles-request #t wikiname dest)
 | 
				
			||||||
  (define fs-path (build-path path-archive wikiname "styles" dest))
 | 
					  (define fs-path (build-path path-archive wikiname "styles" dest))
 | 
				
			||||||
  (println fs-path)
 | 
					  (println fs-path)
 | 
				
			||||||
  (unless (file-exists? fs-path)
 | 
					  (unless (file-exists? fs-path)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -22,6 +22,7 @@
 | 
				
			||||||
         "application-globals.rkt"
 | 
					         "application-globals.rkt"
 | 
				
			||||||
         "config.rkt"
 | 
					         "config.rkt"
 | 
				
			||||||
         "data.rkt"
 | 
					         "data.rkt"
 | 
				
			||||||
 | 
					         "log.rkt"
 | 
				
			||||||
         "page-wiki.rkt"
 | 
					         "page-wiki.rkt"
 | 
				
			||||||
         "../lib/archive-file-mappings.rkt"
 | 
					         "../lib/archive-file-mappings.rkt"
 | 
				
			||||||
         "../lib/pure-utils.rkt"
 | 
					         "../lib/pure-utils.rkt"
 | 
				
			||||||
| 
						 | 
					@ -47,6 +48,12 @@
 | 
				
			||||||
   (define maybe-hashed-basename (if ((string-length basename) . > . 240)
 | 
					   (define maybe-hashed-basename (if ((string-length basename) . > . 240)
 | 
				
			||||||
                                     (sha1 (string->bytes/latin-1 basename))
 | 
					                                     (sha1 (string->bytes/latin-1 basename))
 | 
				
			||||||
                                     basename))
 | 
					                                     basename))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   (define user-cookies (user-cookies-getter req))
 | 
				
			||||||
 | 
					   (define theme (user-cookies^-theme user-cookies))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   (log-page-request #t wikiname maybe-hashed-basename theme)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   (define archive-format
 | 
					   (define archive-format
 | 
				
			||||||
     (case (config-get 'feature_offline::format)
 | 
					     (case (config-get 'feature_offline::format)
 | 
				
			||||||
       [(".json" "json") (cons "~a.json" (λ () (read-json)))]
 | 
					       [(".json" "json") (cons "~a.json" (λ () (read-json)))]
 | 
				
			||||||
| 
						 | 
					@ -98,8 +105,6 @@
 | 
				
			||||||
       (define original-page (html->xexp (preprocess-html-wiki (jp "/parse/text" data))))
 | 
					       (define original-page (html->xexp (preprocess-html-wiki (jp "/parse/text" data))))
 | 
				
			||||||
       (define page ((query-selector (λ (t a c) (has-class? "mw-parser-output" a)) original-page)))
 | 
					       (define page ((query-selector (λ (t a c) (has-class? "mw-parser-output" a)) original-page)))
 | 
				
			||||||
       (define initial-head-data ((head-data-getter wikiname) data))
 | 
					       (define initial-head-data ((head-data-getter wikiname) data))
 | 
				
			||||||
       (define user-cookies (user-cookies-getter req))
 | 
					 | 
				
			||||||
       (define theme (user-cookies^-theme user-cookies))
 | 
					 | 
				
			||||||
       (define head-data
 | 
					       (define head-data
 | 
				
			||||||
         (case theme
 | 
					         (case theme
 | 
				
			||||||
           [(light dark)
 | 
					           [(light dark)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue