Skip to content

Commit 4d59372

Browse files
committed
OY-5025 Refaktoroitu virusskannauksen tulosten prosessoinnin ajastus
1 parent a423d1c commit 4d59372

File tree

1 file changed

+15
-19
lines changed

1 file changed

+15
-19
lines changed

src/liiteri/virus_scan.clj

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,14 @@
11
(ns liiteri.virus-scan
2-
(:require [chime :as c]
3-
[clojure.core.async :as a]
4-
[clojure.java.jdbc :as jdbc]
2+
(:require [clojure.java.jdbc :as jdbc]
53
[clojure.string :as string]
6-
[clj-time.core :as t]
7-
[clj-time.periodic :as p]
84
[com.stuartsierra.component :as component]
95
[liiteri.db.file-metadata-store :as metadata-store]
106
[liiteri.files.file-store :as file-store]
117
[liiteri.sqs-client :refer [get-sqs-client]]
128
[taoensso.timbre :as log]
139
[cheshire.core :as json])
14-
(:import [com.amazonaws.services.sqs.model ReceiveMessageRequest]))
10+
(:import [com.amazonaws.services.sqs.model ReceiveMessageRequest]
11+
[java.util.concurrent Executors TimeUnit ScheduledFuture]))
1512

1613
(defn- log-virus-scan-result [file-key filename content-type status elapsed-time]
1714
(let [status-str (string/upper-case (name status))]
@@ -28,6 +25,7 @@
2825
(let [messages (-> (.receiveMessage sqs-client (-> (ReceiveMessageRequest. result-queue-url)
2926
(.withWaitTimeSeconds (int 1)))) ; wait time of 1 second is to enable long polling which means we get answers from all sqs servers
3027
(.getMessages))]
28+
(log/info (str "Received " (.size messages) " virus scan results"))
3129
(doseq [message messages]
3230
(try
3331
(let [message (json/parse-string (.getBody message) true)
@@ -77,25 +75,23 @@
7775
result-queue-url (-> (.getQueueUrl sqs-poll-results-client result-queue-name)
7876
(.getQueueUrl))
7977
poll-interval (get-in config [:bucketav :poll-interval-seconds])
80-
times (c/chime-ch (p/periodic-seq (t/now) (t/seconds poll-interval))
81-
{:ch (a/chan (a/sliding-buffer 1))})
82-
s3-bucket (get-in config [:file-store :s3 :bucket])]
83-
(log/info "Starting virus scan results polling")
84-
(a/go-loop []
85-
(when-let [_ (a/<! times)]
86-
(log/info "Polling for virus scan results")
87-
(while (< 0 (poll-scan-results sqs-poll-results-client result-queue-url db storage-engine config)))
88-
(recur)))
89-
(assoc this :chan times
78+
s3-bucket (get-in config [:file-store :s3 :bucket])
79+
80+
scheduler (Executors/newScheduledThreadPool 1)
81+
virus-scan #(while (< 0 (poll-scan-results sqs-poll-results-client result-queue-url db storage-engine config)))
82+
time-unit TimeUnit/SECONDS
83+
virus-scan-future (.scheduleAtFixedRate scheduler virus-scan 0 poll-interval time-unit)]
84+
(log/info (str "Started virus scan results polling process, restarting at " poll-interval " " time-unit " intervals."))
85+
(assoc this :virus-scan-future virus-scan-future
9086
:request-queue-url request-queue-url
9187
:sqs-request-scan-client sqs-request-scan-client
9288
:s3-bucket s3-bucket)))
9389

9490
(stop [this]
95-
(when-let [chan (:chan this)]
96-
(a/close! chan))
91+
(when-let [^ScheduledFuture virus-scan-future (:virus-scan-future this)]
92+
(.cancel virus-scan-future true))
9793
(log/info "Stopped virus scan results polling")
98-
(assoc this :chan nil
94+
(assoc this :virus-scan-future nil
9995
:request-queue-url nil
10096
:sqs-request-scan-client nil
10197
:s3-bucket nil))

0 commit comments

Comments
 (0)