Skip to content

Commit 6724984

Browse files
committed
feat: add line graph & make it pretty
1 parent 1d978a9 commit 6724984

File tree

2 files changed

+66
-13
lines changed

2 files changed

+66
-13
lines changed

resources/public/js/stats.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
var ctx = document.getElementById('message-chart');
2+
3+
var messageJson = document.getElementById('message-data').innerHTML;
4+
var messageData = JSON.parse(messageJson.replace(/"/g,'"'));
5+
var labels = messageData.map(function(elem) {
6+
return elem["day"];
7+
})
8+
var data = messageData.map(function(elem) {
9+
return elem["msg-count"];
10+
})
11+
12+
var messageChart = new Chart(ctx, {
13+
type: 'line',
14+
data: {
15+
labels: labels,
16+
datasets: [{
17+
label: 'No. of slack messages',
18+
fill: false,
19+
data: data,
20+
backgroundColor: 'rgba(255, 99, 132, 0.2)',
21+
borderColor: 'rgba(54, 162, 235, 1)',
22+
borderWidth: 2
23+
}]
24+
},
25+
});

src/clojurians_log/views.clj

Lines changed: 41 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
(:require [hiccup2.core :as hiccup]
33
[cemerick.url :refer [url]]
44
[clojurians-log.time-util :as cl.tu]
5+
[clojure.data.json :as json]
56
[clojure.string :as str]
67
[clojurians-log.slack-messages :as slack-messages]
78
[reitit.core]
@@ -16,6 +17,11 @@
1617
[messages ts]
1718
(some #(when (= (:message/ts %) ts) %) messages))
1819

20+
(defn jsfile [path]
21+
(when-let [f (io/file (io/resource (str "public" path)))]
22+
(let [ts (.lastModified f)]
23+
[:script
24+
{:src (str path "?version=" ts)}])))
1925

2026
(defn stylesheet [path]
2127
(when-let [f (io/file (io/resource (str "public" path)))]
@@ -286,20 +292,42 @@
286292
:date day}))]
287293
[:lastmod day]]))])
288294

295+
296+
(defn- page-head-stats [{:data/keys [title]}]
297+
[:head
298+
[:meta {:charset "utf-8"}]
299+
[:meta {:http-equiv "X-UA-Compatible" :content "IE=edge"}]
300+
[:meta {:content="width=device-width, initial-scale=1" :name "viewport"}]
301+
[:title title]
302+
[:link {:href "https://unpkg.com/sakura.css/css/sakura.css"
303+
:rel "stylesheet"
304+
:type "text/css"}]
305+
(stylesheet "/css/gh-fork-ribbon.min.css")
306+
[:script {:src "https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.4/Chart.min.js"}]
307+
])
308+
289309
(defn- message-stats-page-html [{:data/keys [message-stats] :as context}]
290-
[:div
291-
[:h3 (str "Showing message stats between "
292-
(:day (first message-stats))
293-
" to "
294-
(:day (last message-stats)))]
295-
[:table
296-
[:thead
297-
[:tr
298-
[:th "Day"]
299-
[:th "Message count"]]]
300-
[:tbody
301-
(for [day-stat message-stats] [:tr [:td (:day day-stat)] [:td (:msg-count day-stat)]])]]
302-
[:h4 "Total message count: " (reduce #(+ %1 (:msg-count %2)) 0 message-stats)]])
310+
[:html
311+
(page-head-stats context)
312+
[:body
313+
[:div
314+
[:h4 "Slack message stats"]
315+
[:p
316+
[:strong {:style {:border-bottom "1px solid black"}} (:day (first message-stats))]
317+
" to "
318+
[:strong {:style {:border-bottom "1px solid black"}} (:day (last message-stats))]]
319+
[:div {:width "100%"}
320+
[:canvas#message-chart]]
321+
[:h4 "Total message count: " (reduce #(+ %1 (:msg-count %2)) 0 message-stats)]
322+
[:table
323+
[:thead
324+
[:tr
325+
[:th "Day"]
326+
[:th "Message count"]]]
327+
[:tbody
328+
(for [day-stat message-stats] [:tr [:td (:day day-stat)] [:td (:msg-count day-stat)]])]]]
329+
[:script#message-data {:type "application/json"} (json/write-str message-stats)]
330+
(jsfile "/js/stats.js")]])
303331

304332
(defn log-page [context]
305333
(assoc context :response/html (log-page-html context)))

0 commit comments

Comments
 (0)