diff --git a/.gitignore b/.gitignore index fc3739969df9cd81b75e6aa9d0f116c1abacf304..21db16fd5eeb30cef1541527c9e29107172c3227 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,4 @@ profiles.clj /node_modules/ /.babel_cache /coverage +/resources/sample-dataset-* diff --git a/project.clj b/project.clj index 3c01fd9fa35b24ef73fd31444db7b190a77bddcf..18146339b7b635d321ea7f2c915f9882e24a99b2 100644 --- a/project.clj +++ b/project.clj @@ -5,7 +5,8 @@ :description "Metabase Community Edition" :url "http://metabase.com/" :min-lein-version "2.5.0" - :aliases {"test" ["with-profile" "+expectations" "expectations"]} + :aliases {"test" ["with-profile" "+expectations" "expectations"] + "generate-sample-dataset" ["with-profile" "+generate-sample-dataset" "run"]} :dependencies [[org.clojure/clojure "1.7.0"] [org.clojure/core.logic "0.8.10"] [org.clojure/core.match "0.3.0-alpha4"] ; optimized pattern matching library for Clojure @@ -30,9 +31,7 @@ [com.novemberain/monger "3.0.0"] ; MongoDB Driver [compojure "1.4.0"] ; HTTP Routing library built on Ring [environ "1.0.0"] ; easy environment management - [faker "0.2.2"] ; Fake data generator -- port of Perl/Ruby [hiccup "1.0.5"] ; HTML templating - [incanter/incanter-core "1.5.6"] ; Satistical functions like normal distibutions [korma "0.4.2"] ; SQL lib [log4j/log4j "1.2.17" :exclusions [javax.mail/mail @@ -92,4 +91,9 @@ "-Dmb.api.key=test-api-key" "-Xverify:none"]} ; disable bytecode verification when running tests so they start slightly faster :uberjar {:aot :all - :prep-tasks ^:replace ["npm" "webpack" "javac" "compile"]}}) + :prep-tasks ^:replace ["npm" "webpack" "generate-sample-dataset" "javac" "compile"]} + :generate-sample-dataset {:dependencies [[faker "0.2.2"] ; Fake data generator -- port of Perl/Ruby + [incanter/incanter-core "1.5.6"]] ; Satistical functions like normal distibutions}}) + :source-paths ["sample_dataset"] + :global-vars {*warn-on-reflection* false} + :main ^:skip-aot metabase.sample-dataset.generate}}) diff --git a/src/metabase/sample_data/generate.clj b/sample_dataset/metabase/sample_dataset/generate.clj similarity index 96% rename from src/metabase/sample_data/generate.clj rename to sample_dataset/metabase/sample_dataset/generate.clj index 506130295956b5065e472c7f4d9512a5bfaaebce..5c1711e86eb352d169d9ecaeeb162d5dec581c10 100644 --- a/src/metabase/sample_data/generate.clj +++ b/sample_dataset/metabase/sample_dataset/generate.clj @@ -1,4 +1,4 @@ -(ns metabase.sample-data.generate +(ns metabase.sample-dataset.generate (:require [clojure.math.numeric-tower :as math] [clojure.string :as s] (faker [address :as address] @@ -11,6 +11,11 @@ [db :as kdb])) (:import java.util.Date)) +(def ^:private ^:const sample-dataset-version "1.0.0") + +(def ^:private ^:const sample-dataset-filename + (str (System/getProperty "user.dir") (format "/resources/sample-dataset-%s.db" sample-dataset-version))) + (defn- normal-distribution-rand [mean median] (dist/draw (dist/normal-distribution mean median))) @@ -345,7 +350,7 @@ ;; Insert the data (println "Inserting data...") - (metabase.util/pdoseq [[table rows] (seq data)] + (doseq [[table rows] (seq data)] (assert (keyword? table)) (assert (sequential? rows)) (let [entity (-> (k/create-entity (s/upper-case (name table))) @@ -362,3 +367,8 @@ (k/exec-raw db (format "GRANT SELECT ON %s TO GUEST;" (s/upper-case (name table))))) (println "Done.")))) + +(defn -main [& [filename]] + (let [filename (or filename sample-dataset-filename)] + (println (format "Writing sample dataset to %s..." filename)) + (create-h2-db filename)))