aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOscar Najera <hi@oscarnajera.com>2025-02-09 15:07:28 +0100
committerOscar Najera <hi@oscarnajera.com>2025-02-09 15:07:28 +0100
commitd75062d57029f09a0b51b640e2b4f0a1a50fa6e1 (patch)
tree3ac527ef3c6c67b7bae2c69c18fb1449dd996940
parent050efc586b961f46f6e917cb8e4f522234f975cc (diff)
downloadscratch-d75062d57029f09a0b51b640e2b4f0a1a50fa6e1.tar.gz
scratch-d75062d57029f09a0b51b640e2b4f0a1a50fa6e1.tar.bz2
scratch-d75062d57029f09a0b51b640e2b4f0a1a50fa6e1.zip
small js to track visit
-rw-r--r--webstats/server.lisp34
-rw-r--r--webstats/stats.paren21
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)