Periodicically update bounty total USD values to DB
* peridic updating of total USD value for open bounties * support 1 and 10 minute interval tasks in scheduler
This commit is contained in:
parent
e995769e90
commit
9cfd27a0b6
|
@ -339,6 +339,13 @@ updated = timezone('utc'::text, now())
|
||||||
WHERE contract_address = :contract_address;
|
WHERE contract_address = :contract_address;
|
||||||
|
|
||||||
|
|
||||||
|
-- :name update-usd-value :! :n
|
||||||
|
-- :doc updates issue with given USD value
|
||||||
|
UPDATE issues
|
||||||
|
SET value_usd = :usd_value
|
||||||
|
WHERE contract_address = :contract_address;
|
||||||
|
|
||||||
|
|
||||||
-- :name open-bounties :? :*
|
-- :name open-bounties :? :*
|
||||||
-- :doc all bounty issues for given owner
|
-- :doc all bounty issues for given owner
|
||||||
SELECT
|
SELECT
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
[issue-id commit-sha]
|
[issue-id commit-sha]
|
||||||
(jdbc/with-db-connection [con-db *db*]
|
(jdbc/with-db-connection [con-db *db*]
|
||||||
(db/update-commit-sha con-db {:issue_id issue-id
|
(db/update-commit-sha con-db {:issue_id issue-id
|
||||||
:commit_sha commit-sha})))
|
:commit_sha commit-sha})))
|
||||||
|
|
||||||
(defn get-issue-titles
|
(defn get-issue-titles
|
||||||
[]
|
[]
|
||||||
|
@ -26,7 +26,7 @@
|
||||||
|
|
||||||
(defn update-issue-title
|
(defn update-issue-title
|
||||||
[issue-id title]
|
[issue-id title]
|
||||||
(jdbc/with-db-connection [con-db *db*]
|
(jdbc/with-db-connection [con-db *db*]
|
||||||
(db/update-issue-title con-db {:issue_id issue-id
|
(db/update-issue-title con-db {:issue_id issue-id
|
||||||
:title title})))
|
:title title})))
|
||||||
|
|
||||||
|
@ -68,10 +68,16 @@
|
||||||
[contract-address balance]
|
[contract-address balance]
|
||||||
(jdbc/with-db-connection [con-db *db*]
|
(jdbc/with-db-connection [con-db *db*]
|
||||||
(db/update-eth-balance con-db {:contract_address contract-address
|
(db/update-eth-balance con-db {:contract_address contract-address
|
||||||
:balance balance})))
|
:balance balance})))
|
||||||
|
|
||||||
(defn update-token-balances
|
(defn update-token-balances
|
||||||
[contract-address balances]
|
[contract-address balances]
|
||||||
(jdbc/with-db-connection [con-db *db*]
|
(jdbc/with-db-connection [con-db *db*]
|
||||||
(db/update-token-balances con-db {:contract_address contract-address
|
(db/update-token-balances con-db {:contract_address contract-address
|
||||||
:token_balances balances})))
|
:token_balances balances})))
|
||||||
|
|
||||||
|
(defn update-usd-value
|
||||||
|
[contract-address usd-value]
|
||||||
|
(jdbc/with-db-connection [con-db *db*]
|
||||||
|
(db/update-usd-value con-db {:contract_address contract-address
|
||||||
|
:usd_value usd-value})))
|
||||||
|
|
|
@ -155,7 +155,6 @@
|
||||||
[bounty-addr]
|
[bounty-addr]
|
||||||
(doseq [[tla token-data] (token-data/as-map)]
|
(doseq [[tla token-data] (token-data/as-map)]
|
||||||
(let [balance (multisig/token-balance bounty-addr tla)]
|
(let [balance (multisig/token-balance bounty-addr tla)]
|
||||||
(println tla bounty-addr balance)
|
|
||||||
(when (> balance 0)
|
(when (> balance 0)
|
||||||
(do
|
(do
|
||||||
(log/debug "bounty at" bounty-addr "has" balance "of token" tla)
|
(log/debug "bounty at" bounty-addr "has" balance "of token" tla)
|
||||||
|
@ -169,9 +168,30 @@
|
||||||
[]
|
[]
|
||||||
(doseq [{bounty-address :contract_address}
|
(doseq [{bounty-address :contract_address}
|
||||||
(db-bounties/open-bounty-contracts)]
|
(db-bounties/open-bounty-contracts)]
|
||||||
(println "bounty-address" bounty-address)
|
|
||||||
(update-bounty-token-balances bounty-address)))
|
(update-bounty-token-balances bounty-address)))
|
||||||
|
|
||||||
|
|
||||||
|
(defn get-bounty-funds
|
||||||
|
"Get funds in given bounty contract.
|
||||||
|
Returns map of asset -> balance
|
||||||
|
+ key total-usd -> current total USD value for all funds"
|
||||||
|
[bounty-addr]
|
||||||
|
(let [token-balances (multisig/token-balances bounty-addr)
|
||||||
|
eth-balance (read-string (eth/get-balance-eth bounty-addr 4))
|
||||||
|
all-funds
|
||||||
|
(merge token-balances
|
||||||
|
{:ETH eth-balance})]
|
||||||
|
(merge all-funds {:total-usd (fiat-util/bounty-usd-value all-funds)})))
|
||||||
|
|
||||||
|
(defn update-open-issue-usd-values
|
||||||
|
"Sum up current USD values of all crypto assets in a bounty and store to DB"
|
||||||
|
[]
|
||||||
|
(doseq [{bounty-addr :contract_address}
|
||||||
|
(db-bounties/open-bounty-contracts)]
|
||||||
|
(let [funds (get-bounty-funds bounty-addr)]
|
||||||
|
(issues/update-usd-value bounty-addr
|
||||||
|
(:total-usd funds)))))
|
||||||
|
|
||||||
(defn update-balances
|
(defn update-balances
|
||||||
[]
|
[]
|
||||||
(doseq [{contract-address :contract_address
|
(doseq [{contract-address :contract_address
|
||||||
|
@ -211,23 +231,10 @@
|
||||||
balance-eth
|
balance-eth
|
||||||
balance-eth-str))))))
|
balance-eth-str))))))
|
||||||
|
|
||||||
(defn get-bounty-funds
|
|
||||||
"Get funds in given bounty contract.
|
|
||||||
Returns map of asset -> balance
|
|
||||||
+ key total-usd -> current total USD value for all funds"
|
|
||||||
[bounty-addr]
|
|
||||||
(let [token-balances (multisig/token-balances bounty-addr)
|
|
||||||
eth-balance (read-string (eth/get-balance-eth bounty-addr 4))
|
|
||||||
all-funds
|
|
||||||
(merge token-balances
|
|
||||||
{:ETH eth-balance})]
|
|
||||||
(merge all-funds {:total-usd (fiat-util/bounty-usd-value all-funds)})))
|
|
||||||
|
|
||||||
|
(defn run-1-min-interval-tasks [time]
|
||||||
|
|
||||||
(defn run-periodic-tasks [time]
|
|
||||||
(do
|
(do
|
||||||
(log/debug "run-periodic-tasks" time)
|
(log/debug "run-1-min-interval-tasks" time)
|
||||||
;; TODO: disabled for now. looks like it may cause extraneus
|
;; TODO: disabled for now. looks like it may cause extraneus
|
||||||
;; contract deployments and costs
|
;; contract deployments and costs
|
||||||
#_(redeploy-failed-contracts)
|
#_(redeploy-failed-contracts)
|
||||||
|
@ -238,21 +245,35 @@
|
||||||
(self-sign-bounty)
|
(self-sign-bounty)
|
||||||
(update-contract-internal-balances)
|
(update-contract-internal-balances)
|
||||||
(update-balances)
|
(update-balances)
|
||||||
(log/debug "run-periodic-tasks done")))
|
(log/debug "run-1-min-interval-tasks done")))
|
||||||
|
|
||||||
|
|
||||||
|
(defn run-10-min-interval-tasks [time]
|
||||||
|
(do
|
||||||
|
(log/debug "run-1-min-interval-tasks" time)
|
||||||
|
(update-open-issue-usd-values)
|
||||||
|
(log/debug "run-10-min-interval-tasks done")))
|
||||||
|
|
||||||
|
|
||||||
(mount/defstate scheduler
|
(mount/defstate scheduler
|
||||||
:start (let [every-minute (rest
|
:start (let [every-minute (rest
|
||||||
(periodic-seq (t/now)
|
(periodic-seq (t/now)
|
||||||
(t/minutes 1)))
|
(t/minutes 1)))
|
||||||
|
every-10-minutes (rest
|
||||||
|
(periodic-seq (t/now)
|
||||||
|
(t/minutes 10)))
|
||||||
|
error-handler (fn [e]
|
||||||
|
(log/error "Scheduled task failed" e)
|
||||||
|
(throw e))
|
||||||
stop-fn (chime-at every-minute
|
stop-fn (chime-at every-minute
|
||||||
run-periodic-tasks
|
run-1-min-interval-tasks
|
||||||
{:error-handler (fn [e]
|
{:error-handler error-handler})
|
||||||
(log/error "Scheduled task failed" e)
|
stop-fn2 (chime-at every-10-minutes
|
||||||
(throw e))})]
|
run-10-min-interval-tasks
|
||||||
|
{:error-handler error-handler})]
|
||||||
(log/info "started scheduler")
|
(log/info "started scheduler")
|
||||||
(bounties/update-bounty-issue-titles)
|
(bounties/update-bounty-issue-titles)
|
||||||
stop-fn)
|
(fn [] (do (stop-fn) (stop-fn2))))
|
||||||
:stop (do
|
:stop (do
|
||||||
(log/info "stopping scheduler")
|
(log/info "stopping scheduler")
|
||||||
(scheduler)))
|
(scheduler)))
|
||||||
|
|
Loading…
Reference in New Issue