summaryrefslogtreecommitdiff
path: root/src/site.clj
diff options
context:
space:
mode:
authorScott Ostler <sbsotler@gmail.com>2010-11-23 01:24:16 -0500
committerScott Ostler <sbsotler@gmail.com>2010-11-23 01:24:16 -0500
commit85e6d3994f7d547fe525fb60cb8fcc0f96066c02 (patch)
tree081936889a458c60ca58254c57695f0ac3b2e036 /src/site.clj
parent2b7162504314d4207df4c462d3cad12ad144b7c0 (diff)
Fetch directory/hall from redis
Diffstat (limited to 'src/site.clj')
-rw-r--r--src/site.clj90
1 files changed, 52 insertions, 38 deletions
diff --git a/src/site.clj b/src/site.clj
index e79b937..3548149 100644
--- a/src/site.clj
+++ b/src/site.clj
@@ -376,6 +376,8 @@ ORDER BY cnt DESC
(comp take-images :content)
dumps))))))
+(def use-redis-favscore true)
+
(defn profile
([session profile-nick] (profile session profile-nick "profile"))
([session profile-nick template]
@@ -385,7 +387,9 @@ ORDER BY cnt DESC
nick (session :nick)
logger (make-time-logger)
is-home (and nick (= nick profile-nick))
- score (lookup-score profile-nick)
+ score (if use-redis-favscore
+ (fetch-redis-favscore profile-nick)
+ (lookup-score profile-nick))
dumps (logger tags/fetch-dumps
:user-tag-id (:user_id session)
:nick profile-nick
@@ -448,7 +452,9 @@ ORDER BY cnt DESC
(defn build-mini-profile [user-info]
(let [st (fetch-template-fragment "mini_profile")
nick (user-info :nick)
- score (lookup-score nick)]
+ score (if use-redis-favscore
+ (fetch-redis-favscore nick)
+ (lookup-score nick))]
(doseq [a [:nick :avatar :contact :bio]]
(let [v (user-info a)]
(.setAttribute st (name a)
@@ -516,6 +522,7 @@ ORDER BY cnt DESC
raw-dumps (if use-popular-redis
(fetch-popular-dumps-redis profile-nick (:nick session))
(fetch-popular-dumps profile-nick (:nick session)))
+ raw-dumps (filter #(> (:count %) 0) raw-dumps)
dumps (map process-message-for-output raw-dumps)]
(.setAttribute st "nick" profile-nick)
(.setAttribute st "mini_profile" (build-mini-profile user-info))
@@ -528,10 +535,8 @@ ORDER BY cnt DESC
(def *per-directory-page* 25)
(defn process-directory-entry [entry]
- (let [score (lookup-score (:nick entry))]
- (assoc (stringify-and-escape entry)
- "score_ent" (score-to-entity score)
- "score" score)))
+ (assoc (stringify-and-escape entry)
+ "score_ent" (score-to-entity (:score entry))))
(def directory-cache-ttl (minutes 10))
@@ -541,15 +546,25 @@ ORDER BY cnt DESC
(defn add-recent-posts [user-id users]
(if-not (empty? users)
- (let [f (if user-id lookup-recent-posts lookup-recent-posts-tagless)
- res (f user-id (map :user_id users))]
+ (let [res (if user-id
+ (lookup-recent-posts user-id (map :user_id users))
+ (lookup-recent-posts-tagless (map :user_id users)))]
(for [u users]
(merge u (find-first #(= (:user_id u) (:user_id %)) res))))))
+(defn add-recent-posts-nick [user-id users]
+ (if-not (empty? users)
+ (let [nicks (map :nick users)
+ res (if user-id
+ (lookup-recent-posts-by-nicks user-id nicks)
+ (lookup-recent-posts-tagless-by-nicks nicks))]
+ (for [u users]
+ (merge u (find-first #(= (:nick u) (:nick %)) res))))))
+
(defn get-directory-info [user-id offset]
- (map process-directory-entry
- (add-recent-posts user-id
- (get-user-ranking offset *per-directory-page*))))
+ (let [res (fetch-redis-directory offset *per-directory-page*)]
+ (map process-directory-entry
+ (add-recent-posts-nick user-id res))))
(defn directory [session offset]
(let [st (fetch-template "directory" session)
@@ -805,28 +820,31 @@ ORDER BY cnt DESC
(try
(do-insert "tags"
["user_id" "message_id" "tag"]
- [(:user_id user) (msg :message_id) tag])
- (if (and (= tag "favorite")
- (not (= (msg :nick) (user :nick))))
+ [(:user_id user) (:message_id msg) tag])
+ (when (and (= tag "favorite")
+ (not (= (msg :nick) (:nick user))))
+ (if-not (:admin_only msg)
+ (incrby-redis-favscore! (:nick msg) (:message_id msg) 1))
(insert-fav-notification! (msg :nick)
(user :nick)
(user :avatar)
(msg :content)))
true
; catch error when inserting duplicate tags
- (catch Exception e false)))
+ (catch Exception e
+ (do (println e)
+ false))))
(defn validated-add-tag [session params]
(if (session :nick)
(let [nick (session :nick)
user-id (session :user_id)
- user-admin? (session :admin-only)
- msg-id (params :message_id)
+ msg-id (params :message_id)
tag (validate-tag (params :tag))
msg (fetch-message-by-id msg-id)
access (or (is-vip? session)
- (not (:admin-only msg)))]
+ (not (:admin_only msg)))]
(cond (not msg) (resp-error "NO_MSG")
(not access) (resp-error "NO_MSG")
(not tag) (resp-error "NO_TAG")
@@ -835,10 +853,18 @@ ORDER BY cnt DESC
(resp-error "TAG_EXISTS_ALREADY_OR_SOMETHING_ELSE_IS_FUCKED"))))
(resp-error "NO_USER")))
-(defn remove-tag [user-id message-id tag]
- (let [query "user_id = ? AND message_id = ? AND lower(tag) = ?"]
- (do-delete "tags" [query user-id (maybe-parse-int message-id) (normalize-tag-for-db (.toLowerCase tag))])
- (resp-success "OK")))
+(defn remove-tag [user-id msg-id tag]
+ (let [query "user_id = ? AND message_id = ? AND lower(tag) = ?"
+ msg-id (maybe-parse-int msg-id)
+ tag (normalize-tag-for-db tag)
+ msg (fetch-message-by-id msg-id)]
+ (let [rows-deleted (first (do-delete "tags" [query user-id msg-id tag]))]
+ (if-not (zero? rows-deleted)
+ (do
+ (if-not (:admin_only msg)
+ (incrby-redis-favscore! (:nick msg) msg-id -1))
+ (resp-success "OK"))
+ (resp-error "NO_TAG")))))
(defn validated-remove-tag [session params]
(if (session :nick)
@@ -1149,9 +1175,8 @@ ORDER BY cnt DESC
(unknown-page)))
(defn hall-of-fame [session]
- (let [st (fetch-template "fame" session)
- msgs (add-user-favs-to-msgs (poll hall-results)
- (session :user_id))]
+ (let [st (fetch-template "fame" session)
+ msgs (fetch-redis-hall (:nick session))]
(.setAttribute st "dumps" (map process-message-for-output msgs))
(.toString st)))
@@ -1394,23 +1419,12 @@ ORDER BY cnt DESC
(load-rooms!)
(start! reserved-nicks)
-(def server (start-server (options :port)))
-(start! *active-mutes*)
-; Delay the following to reduce start-load
-(Thread/sleep 15000)
-(start! *user-scores*)
+(def server (start-server (options :port)))
+(start! *active-mutes*)
(start-user-flusher!)
(start-session-pruner!)
-(start! hall-results)
-
-;; Scott 2010/8/30: disable feeds to test impact on server load
-;; (and see if anyone notices)
-;; (if (= *server-url* "http://dump.fm")
-;; (do (start! feed-downloader)
-;; (start! feed-inserter)))
-
;(if (not= *server-url* "http://dump.fm")
; (start! random-poster))