diff options
author | Oscar Najera <hi@oscarnajera.com> | 2025-02-09 15:07:28 +0100 |
---|---|---|
committer | Oscar Najera <hi@oscarnajera.com> | 2025-02-09 15:07:28 +0100 |
commit | d75062d57029f09a0b51b640e2b4f0a1a50fa6e1 (patch) | |
tree | 3ac527ef3c6c67b7bae2c69c18fb1449dd996940 | |
parent | 050efc586b961f46f6e917cb8e4f522234f975cc (diff) | |
download | scratch-d75062d57029f09a0b51b640e2b4f0a1a50fa6e1.tar.gz scratch-d75062d57029f09a0b51b640e2b4f0a1a50fa6e1.tar.bz2 scratch-d75062d57029f09a0b51b640e2b4f0a1a50fa6e1.zip |
small js to track visit
-rw-r--r-- | webstats/server.lisp | 34 | ||||
-rw-r--r-- | webstats/stats.paren | 21 |
2 files changed, 46 insertions, 9 deletions
diff --git a/webstats/server.lisp b/webstats/server.lisp index cff23f7..0c80060 100644 --- a/webstats/server.lisp +++ b/webstats/server.lisp @@ -1,8 +1,14 @@ -(ql:quickload '(hunchentoot spinneret cl-yesql cl-yesql/sqlite)) +(ql:quickload '(hunchentoot spinneret cl-yesql cl-yesql/sqlite parenscript)) (defpackage :webstats (:use :common-lisp :hunchentoot :spinneret)) +(defpackage :webstats-js + (:use :cl :parenscript)) + +(in-package :webstats-js) +(setf *js-target-version* "1.9") + (in-package :webstats) (overlord:set-package-base "/home/titan/dev/scratch/webstats/") @@ -48,26 +54,36 @@ (referer) (user-agent)))) -(hunchentoot:define-easy-handler (visit :uri "/visit") () +(hunchentoot:define-easy-handler + (visit :uri "/visit" :default-request-type :both) + (title page referer click) (sqlite:with-open-database (db "test.db") (format nil "you are our visit ~d" (insert db - :click nil - :page (script-name*) - :referer (referer) + :click click + :page page + :referer referer :ip (remote-addr*) :user-agent (user-agent) - :title "try")) - )) + :title title)))) +(hunchentoot:define-easy-handler (stat-js :uri "/stats.js") () + (ps:ps-compile-file "stats.paren")) + (hunchentoot:define-easy-handler (link :uri "/link") () (with-html-string (:doctype) (:html - (:header (:title "hu yu ipi")) + (:header (:title "hu yu ipi") + (:script :src "/stats.js")) (:body (:p "learning " (:a :href "vars" "some explodiert") - (:a :href "visit" "count visit")))) + (:a :href "visit" "count visit")) + + (:form :action "/visit" + :method "post" + (:input :type "text" :name "title") + (:input :type "submit" :value "submit" :name "submit")))) )) diff --git a/webstats/stats.paren b/webstats/stats.paren new file mode 100644 index 0000000..04faff7 --- /dev/null +++ b/webstats/stats.paren @@ -0,0 +1,21 @@ +;; -*- mode: lisp; -*- +;; (pushnew '(SLYNK:*STRING-ELISION-LENGTH* . nil) slynk:*slynk-pprint-bindings* :test #'equal) + +(in-package :webstats-js) + +(defun register-visit () + (let ((data (create :title (@ document title) + :page (@ window location href) + :referer (@ document referrer)))) + (chain + (fetch "http://localhost:4252/visit" + (create :method "POST" + :headers (create "Content-Type" "application/x-www-form-urlencoded") + :body (new (-u-r-l-search-params data)) + )) + (then (lambda (r) + ((@ console log) r) + ((@ r text)))) + (then (@ console log))))) + +(add-event-listener "load" register-visit) |