made it far less busy to update running cache.
This commit is contained in:
@@ -435,13 +435,32 @@
|
|||||||
(sort-by (juxt first second))
|
(sort-by (juxt first second))
|
||||||
(build-running-balance lookup-account))))
|
(build-running-balance lookup-account))))
|
||||||
|
|
||||||
|
(def last-run-running-balance (atom nil))
|
||||||
|
|
||||||
(defn build-running-balance-cache []
|
(defn build-running-balance-cache []
|
||||||
(reduce
|
(let [clients-needing-refresh (if-let [last-run @last-run-running-balance]
|
||||||
(fn [acc client]
|
(->> (d/query
|
||||||
(log/info "Computing running balance cache for " (:client/code client))
|
{:query {:find ['?v]
|
||||||
(assoc acc (:db/id client) (running-balance-for (:db/id client))))
|
:in ['$ '?log '?since '?till]
|
||||||
{}
|
:where ['[(tx-ids ?log ?since ?till) [?tx ...]]
|
||||||
(d-clients/get-all)))
|
'[$ _ :journal-entry/client ?v ?tx]]}
|
||||||
|
:args [(d/history (d/db conn))
|
||||||
|
(d/log conn)
|
||||||
|
last-run
|
||||||
|
(java.util.Date.)]})
|
||||||
|
(map first)
|
||||||
|
(into #{}))
|
||||||
|
(into #{} (map :db/id (d-clients/get-all))))
|
||||||
|
starting (java.util.Date.)]
|
||||||
|
(log/info (count clients-needing-refresh) "Clients need their balance cache refreshed.")
|
||||||
|
(reduce
|
||||||
|
(fn [acc client]
|
||||||
|
(log/info "Computing running balance cache for " (:client/code (d/entity (d/db conn) client)))
|
||||||
|
(assoc acc client (running-balance-for client)))
|
||||||
|
{}
|
||||||
|
clients-needing-refresh)
|
||||||
|
(log/info "Done refreshing " (count clients-needing-refresh) " client caches")
|
||||||
|
(reset! last-run-running-balance starting)))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -455,6 +474,6 @@
|
|||||||
|
|
||||||
|
|
||||||
(mount/defstate running-balance-cache-worker
|
(mount/defstate running-balance-cache-worker
|
||||||
:start (scheduler/every (* 30 60 1000) refresh-running-balance-cache)
|
:start (scheduler/every (* 15 60 1000) refresh-running-balance-cache)
|
||||||
:stop (scheduler/stop running-balance-cache-worker))
|
:stop (scheduler/stop running-balance-cache-worker))
|
||||||
|
|
||||||
|
|||||||
@@ -280,6 +280,7 @@
|
|||||||
(d/query {:query {:find ['?e '?lia]
|
(d/query {:query {:find ['?e '?lia]
|
||||||
:in ['$]
|
:in ['$]
|
||||||
:where ['[?e :invoice/expense-accounts ?li]
|
:where ['[?e :invoice/expense-accounts ?li]
|
||||||
|
'(not [?e :invoice/total 0.0])
|
||||||
'[?li :invoice-expense-account/account ?lia]
|
'[?li :invoice-expense-account/account ?lia]
|
||||||
'[?lia :account/name]
|
'[?lia :account/name]
|
||||||
'(not [?lia :account/numeric-code 21000])
|
'(not [?lia :account/numeric-code 21000])
|
||||||
|
|||||||
Reference in New Issue
Block a user