<commit_before>(ns dragon.data.sources.redis
  (:require [clojure.java.shell :as shell]
            [dragon.config :as config]
            [dragon.data.sources.core :as db-core]
            [taoensso.carmine :as car :refer [wcar]]
            [taoensso.timbre :as log]))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;   Constants & Utility Functions   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(def redis-schemas
  ;; Keys  & val types:
  ;; * path-segment:content / string
  ;; * path-segment:metadata / hash (binary)
  ;; * path-segment:stats / hash (binary)
  ;; * all-posts:metadata / hash (binary)
  ;; * all-posts:stats / hash (binary)
  )

(defn cmd
  "With this function we can do things like the following in the REPL (for
  querying Redis):

  ```clj
  => (redis/cmd 'ping)
  => (redis/cmd 'get \"testkey\")
  => (redis/cmd 'set \"foo\" \"bar\")
  ```

  (Note that the escaped strings are for the docstring, and not what you'd
  actually type in the REPL.)"
  [component-or-system cmd & args]
  (car/wcar (:conn (config/db-config component-or-system))
            (apply (resolve (symbol (str "car/" cmd))) args)))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;   Dragon DB API   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defn start-db!
  [component]
  (db-core/execute-db-command! component))

(defn setup-schemas
  [component]
  )

(defn setup-subscribers
  [component]
  )

(defn add-connection
  [component]
  (assoc component :conn (config/db-conn component)))

(defn stop-db!
  [component]
  (let [id-file (:container-id-file (config/db-config component))]
    (->> (slurp id-file)
         (shell/sh "docker" "stop" :in)
         vec)
    (shell/sh "rm" id-file)))<commit_msg>Fixed redis stop function.<commit_after>(ns dragon.data.sources.redis
  (:require [clojure.java.io :as io]
            [dragon.config :as config]
            [dragon.data.sources.core :as db-core]
            [dragon.util :as util]
            [taoensso.carmine :as car :refer [wcar]]
            [taoensso.timbre :as log]
            [trifl.fs :as fs]))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;   Constants & Utility Functions   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(def redis-schemas
  ;; Keys  & val types:
  ;; * path-segment:content / string
  ;; * path-segment:metadata / hash (binary)
  ;; * path-segment:stats / hash (binary)
  ;; * all-posts:metadata / hash (binary)
  ;; * all-posts:stats / hash (binary)
  )

(defn cmd
  "With this function we can do things like the following in the REPL (for
  querying Redis):

  ```clj
  => (redis/cmd 'ping)
  => (redis/cmd 'get \"testkey\")
  => (redis/cmd 'set \"foo\" \"bar\")
  ```

  (Note that the escaped strings are for the docstring, and not what you'd
  actually type in the REPL.)"
  [component-or-system cmd & args]
  (car/wcar (:conn (config/db-config component-or-system))
            (apply (resolve (symbol (str "car/" cmd))) args)))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;   Dragon DB API   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defn start-db!
  [component]
  (db-core/execute-db-command! component))

(defn setup-schemas
  [component]
  )

(defn setup-subscribers
  [component]
  )

(defn add-connection
  [component]
  (assoc component :conn (config/db-conn component)))

(defn stop-db!
  [component]
  (let [id-file (:container-id-file (config/db-config component))]
    (->> (slurp id-file)
         (util/shell! "docker" "stop")
         vec)
    (when (fs/exists? (io/as-file id-file))
      (util/shell! "rm" id-file))))
{'fraction_non_alphanumeric': 0.3281602002503129, 'fraction_numerical': 0.0, 'mean_word_length': 3.6791569086651053, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 13, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5266176', 'n_tokens_mistral': 1574, 'n_tokens_neox': 1343, 'n_words': 295}