summaryrefslogtreecommitdiff
path: root/src/utils.clj
blob: 3ffd54b6d895e4e37a543db82624b400f8759d5a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
(ns utils
  (:import java.text.SimpleDateFormat
           java.util.Date)
  (:use clojure.contrib.json.write
        clojure.contrib.sql))

(let [db-host "localhost"
      db-port 5432
      db-name "dumpfm"]
  (def db {:classname "org.postgresql.Driver"
           :subprotocol "postgresql"
           :subname (str "//" db-host ":" db-port "/" db-name)
           :user "postgres"
           :password "root"}))

;; JSON responses

(def yyyy-mm-dd-formatter (new SimpleDateFormat "yyyy-MM-dd"))

(defmethod print-json Date
  [d]
  (print-json (.format yyyy-mm-dd-formatter d)))

(defn resp-error [message]
  {:status 400 :headers {} :body message})

(defn resp-success [message]
  {:status 200 :headers {} :body (json-str message)})

;; Database

(defn do-select [query]
  (with-connection db
    (with-query-results rs query
      (doall rs))))

(defn do-count [query]
  ((first (with-connection db
	    (with-query-results rs query
	      (doall rs))))
   :count))


;; Stats

(defn msg-stats [ts]
  (let [qry (str "SELECT created_on::date, count(*) FROM messages "
                 "GROUP BY created_on::date "
                 "ORDER BY created_on::date")]
    (do-select [qry])))

(defn new-user-stats [ts]
  (let [qry (str "SELECT created_on::date, count(*) FROM users "
                 "GROUP BY created_on::date "
                 "ORDER BY created_on::date")]
    (do-select [qry])))

(defn msgs-per-user-stats [ts]
  true)

(def *stat-map* {"msgs" msg-stats
                 "new users" new-user-stats
                 "msgs per user" msgs-per-user-stats})

(defn stats [session params]
  (let [stat (params :stat)
        ts   (params :timescale)]
    (if-let [f (*stat-map* stat)]
      (resp-success (f ts))
      (resp-error "UNKNOWN STAT"))))

(defn validated-stats [session params]
  (if (session :is_admin)
    (stats session params)
    (resp-error "BAD_REQUEST")))