diff --git a/src/clj/auto_ap/graphql/jobs.clj b/src/clj/auto_ap/graphql/jobs.clj index d5d2919b..2090e2bd 100644 --- a/src/clj/auto_ap/graphql/jobs.clj +++ b/src/clj/auto_ap/graphql/jobs.clj @@ -8,7 +8,8 @@ [clojure.string :as str] [config.core :refer [env]] [clojure.tools.logging :as log] - [com.walmartlabs.lacinia.util :refer [attach-resolvers]]) + [com.walmartlabs.lacinia.util :refer [attach-resolvers]] + [clojure.edn :as edn]) (:import (com.amazonaws.services.ecs.model AssignPublicIp))) @@ -80,21 +81,23 @@ (map :name) set)) -(defn run-task [task] +(defn run-task [task args] (log/info "running job" task) - (ecs/run-task :capacity-provider-strategy [{:base 1 :weight 1 :capacity-provider "FARGATE_SPOT"}] - :count 1 - :cluster "default" - :enable-ecs-managed-tags true - :task-definition task - :network-configuration {:aws-vpc-configuration {:subnets ["subnet-5e675761" "subnet-8519fde2" "subnet-89bab8d4"] - :security-groups ["sg-004e5855310c453a3" "sg-02d167406b1082698"] - :assign-public-ip AssignPublicIp/ENABLED}})) + (ecs/run-task (cond-> {:capacity-provider-strategy [{:base 1 :weight 1 :capacity-provider "FARGATE_SPOT"}] + :count 1 + :cluster "default" + :enable-ecs-managed-tags true + :task-definition task + :network-configuration {:aws-vpc-configuration {:subnets ["subnet-5e675761" "subnet-8519fde2" "subnet-89bab8d4"] + :security-groups ["sg-004e5855310c453a3" "sg-02d167406b1082698"] + :assign-public-ip AssignPublicIp/ENABLED}}} + args (assoc-in [:overrides :container-overrides ] [{:name "integreat-app" :environment [{:name "args" :value (pr-str task)}]}])))) (defn request-job [context value _] (assert-admin (:id context)) (if (not (get (currently-running-jobs) (:which value))) - (let [new-job (run-task (str (str/replace (:which value) #"-" "_") "_" (:dd-env env)))] + (let [new-job (run-task (str (str/replace (:which value) #"-" "_") "_" (:dd-env env)) + (some-> (:args value) edn/read-string))] {:message (str "task " (str new-job) " started.")}) (assert-failure "This job is already running"))) diff --git a/src/clj/auto_ap/jobs/bulk_journal_import.clj b/src/clj/auto_ap/jobs/bulk_journal_import.clj new file mode 100644 index 00000000..5a1edd5e --- /dev/null +++ b/src/clj/auto_ap/jobs/bulk_journal_import.clj @@ -0,0 +1,13 @@ +(ns auto-ap.jobs.bulk-journal-import + (:gen-class) + (:require + [auto-ap.jobs.core :refer [execute]] + [clojure.tools.logging :as log] + [config.core :refer [env]])) + +(defn bulk-journal-import [] + (log/info "importing ledger from" (:args env))) + +(defn -main [& _] + (execute "bulk-journal-import" bulk-journal-import)) + diff --git a/src/clj/auto_ap/server.clj b/src/clj/auto_ap/server.clj index 7c239ec6..8d7c030d 100644 --- a/src/clj/auto_ap/server.clj +++ b/src/clj/auto_ap/server.clj @@ -1,7 +1,6 @@ (ns auto-ap.server (:gen-class) (:require - [auto-ap.datomic.migrate :as migrate] [auto-ap.handler :refer [app]] [auto-ap.jobs.close-auto-invoices :as job-close-auto-invoices] [auto-ap.jobs.current-balance-cache :as job-current-balance-cache] @@ -11,6 +10,7 @@ [auto-ap.jobs.plaid :as job-plaid] [auto-ap.jobs.square :as job-square] [auto-ap.jobs.square2 :as job-square2] + [auto-ap.jobs.bulk-journal-import :as job-bulk-journal-import] [auto-ap.jobs.sysco :as job-sysco] [auto-ap.jobs.vendor-usages :as job-vendor-usages] [auto-ap.jobs.yodlee2 :as job-yodlee2] @@ -121,6 +121,9 @@ (= job "close-auto-invoices") (job-close-auto-invoices/-main) + (= job "bulk-journal-import") + (job-bulk-journal-import/-main) + :else (do diff --git a/src/cljs/auto_ap/views/pages/admin/jobs.cljs b/src/cljs/auto_ap/views/pages/admin/jobs.cljs index 9ffeb225..da55ad1a 100644 --- a/src/cljs/auto_ap/views/pages/admin/jobs.cljs +++ b/src/cljs/auto_ap/views/pages/admin/jobs.cljs @@ -61,25 +61,20 @@ :query-obj {:venia/operation {:operation/type :mutation :operation/name "RequestJob"} - :venia/variables [{:variable/name "args" - :variable/type :String - :variable/default (when (= which :bulk-journal-import) - (str/replace (pr-str (:data form)) - "\"" "\\\""))}] :venia/queries [{:query/data [:request-job {:which (name which) - :args :$args} + :args (when (= which :bulk-journal-import) + (str/escape (pr-str (:data form)) {\" "\\\""}))} [:message]]}]} :on-success [::success]}})) - (re-frame/reg-event-fx ::mounted (fn [_] - {::track/register {:id ::params + {::track/register {:id ::params :subscription [::data-page/params ::page] - :event-fn (fn [params] + :event-fn (fn [params] [::params-change params])}})) (re-frame/reg-event-fx diff --git a/terraform/deploy.tf b/terraform/deploy.tf index 1d938f0e..0591a2ac 100644 --- a/terraform/deploy.tf +++ b/terraform/deploy.tf @@ -388,7 +388,7 @@ module "sysco_job" { ecs_cluster = var.ecs_cluster task_role_arn = var.task_role_arn stage = var.stage - schedule = "rate(1 hour)" + schedule = "rate(3 hours)" job_name = "sysco" execution_role_arn = var.execution_role_arn memory = 2048 @@ -417,4 +417,17 @@ module "yodlee2_accounts_job" { use_schedule = false memory = 2048 cpu = 512 +} + + +module "bulk_journal_import_job" { + source = "./background-job/" + ecs_cluster = var.ecs_cluster + task_role_arn = var.task_role_arn + stage = var.stage + job_name = "bulk-journal-import" + execution_role_arn = var.execution_role_arn + use_schedule = false + memory = 4096 + cpu = 1024 } \ No newline at end of file