Periodically read in all profiles from relays. Uses user-configuration :import-metadata group.

This commit is contained in:
Robert C. Martin 2022-07-31 08:24:18 -05:00
parent 95188fadd8
commit 2f1a539920
4 changed files with 104 additions and 30 deletions

View File

@ -19,9 +19,9 @@
:last-time-exported lte}}
event-context (atom {:user-configuration uc})]
(reset! ui-context {:event-context event-context})
(should (should-export? (* 12 86400)))
(should (should-export? (* 13 86400)))
(should-not (should-export? (* 11 86400))))))
(should (should-export-profile? (* 12 86400)))
(should (should-export-profile? (* 13 86400)))
(should-not (should-export-profile? (* 11 86400))))))
(it "will export if keys file has changed"
(with-redefs [keys-last-modified (fn [] (* 3 86400))]
@ -30,9 +30,9 @@
:last-time-exported lte}}
event-context (atom {:user-configuration uc})]
(reset! ui-context {:event-context event-context})
(should (should-export? (* 12 86400)))
(should (should-export? (* 13 86400)))
(should (should-export? (* 11 86400))))))
(should (should-export-profile? (* 12 86400)))
(should (should-export-profile? (* 13 86400)))
(should (should-export-profile? (* 11 86400))))))
(it "won't export if :export-after-days is :never"
(let [lte (* 2 86400)
@ -40,9 +40,9 @@
:last-time-exported lte}}
event-context (atom {:user-configuration uc})]
(reset! ui-context {:event-context event-context})
(should-not (should-export? (* 12 86400)))
(should-not (should-export? (* 13 86400)))
(should-not (should-export? (* 11 86400))))))
(should-not (should-export-profile? (* 12 86400)))
(should-not (should-export-profile? (* 13 86400)))
(should-not (should-export-profile? (* 11 86400)))))
(it "sets the last exported time"
(let [lte (* 2 86400)
@ -50,10 +50,41 @@
:last-time-exported lte}}
event-context (atom {:user-configuration uc})]
(reset! ui-context {:event-context event-context}))
(set-last-time-exported 99)
(set-last-time-profile-exported 99)
(let [event-context (:event-context @ui-context)]
(should= 99 (get-in @event-context
[:user-configuration :export-user-profile :last-time-exported])))
)
)
(context "gather historical metadata"
(it "creates the configuration parameters if not present."
(let [uc (validate {})]
(should (contains? uc :import-metadata))
(should= 30 (get-in uc [:import-metadata :import-after-days]))
(should= 0 (get-in uc [:import-metadata :last-time-imported]))))
(it "decides if it is time to import"
(let [lti (* 2 86400)
uc {:import-metadata {:import-after-days 10
:last-time-imported lti}}
event-context (atom {:user-configuration uc})]
(reset! ui-context {:event-context event-context})
(should (should-import-metadata? (* 12 86400)))
(should (should-import-metadata? (* 13 86400)))
(should-not (should-import-metadata? (* 11 86400)))))
(it "sets the last imported time"
(let [lti (* 2 86400)
uc {:import-metadata {:import-after-days 10
:last-time-imported lti}}
event-context (atom {:user-configuration uc})]
(reset! ui-context {:event-context event-context}))
(set-last-time-metadata-imported 99)
(let [event-context (:event-context @ui-context)]
(should= 99 (get-in @event-context
[:user-configuration :import-metadata :last-time-imported])))
)
)
)

View File

@ -9,7 +9,7 @@
(def days-to-read 10) ;how many daily message files to read in.
(def migration-level 8)
(def version "202207301434")
(def version "202207310819")
(def test-run? false)
;---configuration files

View File

@ -25,6 +25,11 @@
(.format (SimpleDateFormat. "MM/dd/yyyy kk:mm:ss z") date))
)
(defn request-metadata [^WebSocket conn id]
(send-to conn ["REQ" id {"kinds" [0] "since" 0}])
(.request conn 1))
(defn subscribe
([conn id]
(subscribe conn id (int (- (quot (System/currentTimeMillis) 1000) 86400))))
@ -134,6 +139,16 @@
(swap! relays assoc-in [url :connection] connection))))
(prn 'relay-connection-attempts-complete))
(defn request-metadata-from-relays [id]
(prn 'requesting-metadata)
(doseq [url (keys @relays)]
(let [conn (get-in @relays [url :connection])
read? (get-in @relays [url :read])]
(when (and read? (some? conn))
(unsubscribe conn id)
(request-metadata conn id)))))
(defn subscribe-to-relays [id subscription-time]
(let [date (- subscription-time 100)]
(prn 'subscription-date date (format-time date))
@ -168,19 +183,23 @@
(close-connection conn id)))))
(defn get-events [event-context subscription-time]
(let [id "more-speech"
(let [subscription-id "more-speech"
metadata-request-id "more-speech-metadata"
event-handler (:event-handler @event-context)
now-in-seconds (quot (System/currentTimeMillis) 1000)]
(connect-to-relays event-context)
(subscribe-to-relays id subscription-time)
(when (user-configuration/should-import-metadata? now-in-seconds)
(request-metadata-from-relays metadata-request-id)
(user-configuration/set-last-time-metadata-imported now-in-seconds))
(subscribe-to-relays subscription-id subscription-time)
(events/update-relay-panel event-handler)
(if (user-configuration/should-export? now-in-seconds)
(if (user-configuration/should-export-profile? now-in-seconds)
(do
(user-configuration/set-last-time-exported now-in-seconds)
(user-configuration/set-last-time-profile-exported now-in-seconds)
(future (events/compose-and-send-metadata-event @event-context)))
(println "Not time to export profile yet."))
(let [exit-condition (process-send-channel event-context)]
(unsubscribe-from-relays id)
(unsubscribe-from-relays subscription-id)
(Thread/sleep 100)
(prn 'done)
exit-condition))

View File

@ -11,15 +11,25 @@
(assoc user-configuration :export-user-profile xup))
)
(defn validate-import-metadata [uc]
(let [im (get uc :import-metadata {})
iad (get im :import-after-days 30)
lti (get im :last-time-imported 0)
im (assoc im :import-after-days iad
:last-time-imported lti)]
(assoc uc :import-metadata im)))
(defn validate [user-configuration]
(let [valid-config (validate-export-user-profile user-configuration)]
valid-config))
(-> user-configuration
validate-export-user-profile
validate-import-metadata)
)
(defn keys-last-modified []
(let [keys-file (clojure.java.io/file @config/keys-filename)]
(quot (.lastModified keys-file) 1000)))
(defn should-export? [now-in-seconds]
(defn should-export-profile? [now-in-seconds]
(let [user-configuration (:user-configuration @(:event-context @ui-context))
xad (get-in user-configuration [:export-user-profile :export-after-days])
lte (get-in user-configuration [:export-user-profile :last-time-exported])]
@ -28,9 +38,23 @@
(>= (keys-last-modified) lte))))
)
(defn set-last-time-exported [export-time]
(defn set-last-time-profile-exported [export-time]
(let [event-context (:event-context @ui-context)]
(swap! event-context
assoc-in
[:user-configuration :export-user-profile :last-time-exported]
export-time)))
(defn should-import-metadata? [now-in-seconds]
(let [user-configuration (:user-configuration @(:event-context @ui-context))
iad (get-in user-configuration [:import-metadata :import-after-days])
lti (get-in user-configuration [:import-metadata :last-time-imported])]
(and (number? iad)
(>= now-in-seconds (+ lti (* 86400 iad))))))
(defn set-last-time-metadata-imported [import-time]
(let [event-context (:event-context @ui-context)]
(swap! event-context
assoc-in
[:user-configuration :import-metadata :last-time-imported]
import-time)))