From c3c384d03044bd05e5de14bb363a78b46f4b1ce5 Mon Sep 17 00:00:00 2001 From: John Wiseman Date: Mon, 28 Sep 2020 17:05:43 -0700 Subject: [PATCH] Added --stats which (for now) just prints the number of twitter followers. Refactored config handling a bit. --- src/main/lemondronor/advisorycircular.cljs | 58 ++++++++++++++++------ 1 file changed, 42 insertions(+), 16 deletions(-) diff --git a/src/main/lemondronor/advisorycircular.cljs b/src/main/lemondronor/advisorycircular.cljs index f3e2727..9e8ae43 100644 --- a/src/main/lemondronor/advisorycircular.cljs +++ b/src/main/lemondronor/advisorycircular.cljs @@ -779,6 +779,41 @@ (def default-config-path "config.yaml") +(defn get-config + ([commander] + (get-config commander {})) + ([commander options] + (p/let [base-config (if-let [config-path (.-config commander)] + (util/read-config config-path) + (if (fs/existsSync default-config-path) + (util/read-config default-config-path) + {})) + cli-config (build-config-from-commander commander) + secrets (if (:no-secrets? options) + {} + (util/read-config (.-secrets commander))) + config (build-config base-config cli-config secrets) + _ (if (:no-validate? options) + nil + (validate-config config))] + config))) + + +(defn get-stats [config] + (let [twit (twitter/twit (:twitter config))] + (p/let [followers (.get twit "followers/ids") + num-followers (-> followers + (js->clj :keywordize-keys true) + :data + :ids + count)] + {:num-followers num-followers}))) + + +(defn print-stats [stats] + (println (:num-followers stats) "Twitter followers")) + + (defn main [& args] (-> commander (.option "--lat " "Latitude of the circle of region of interest" parse-number) @@ -795,6 +830,7 @@ (.option "--log-prefix " "Log prefix to use") (.option "--airport-geojson" "Generate airport GEOJSON and exit") (.option "--create-aircraft-info-db-from-json " "Generate aircraft info DB and exit") + (.option "--stats" "Show bot stats and exit") (.parse (.-argv js/process))) (logging/set-log-prefix! (or (.-logPrefix commander) "")) (reset! log-prefix (or (.-logPrefix commander) "")) @@ -803,28 +839,18 @@ (.-createAircraftInfoDbFromJson commander) (create-aircraft-info-db (.-createAircraftInfoDbFromJson commander) (.-aircraftInfoDb commander)) (.-airportGeojson commander) - (p/let [base-config (if-let [config-path (.-config commander)] - (util/read-config config-path) - (if (fs/existsSync default-config-path) - (util/read-config default-config-path) - {})) - cli-config (build-config-from-commander commander) - config (build-config base-config cli-config {}) + (p/let [config (get-config commander {:no-secrets? true :no-validate? true}) geojson (airport-geojson config)] (println (.stringify js/JSON (clj->js geojson) nil " "))) + (.-stats commander) + (p/let [config (get-config commander) + stats (get-stats config)] + (print-stats stats)) :else (let [start-time (current-time)] ;; If --config-path is specified, definitely try to read that ;; file. Otherwise, only read config.yaml if it exists. - (p/let [base-config (if-let [config-path (.-config commander)] - (util/read-config config-path) - (if (fs/existsSync default-config-path) - (util/read-config default-config-path) - {})) - cli-config (build-config-from-commander commander) - secrets (util/read-config (.-secrets commander)) - config (build-config base-config cli-config secrets) - _ (validate-config config) + (p/let [config (get-config commander) history-db-path (:history-db-path config) _ (when (not (fs/existsSync history-db-path)) (log-info "%s does not exist; creating empty one." history-db-path)