Skip to content

Instantly share code, notes, and snippets.

View camsaul's full-sized avatar
💭
I am Cam

Cam Saul camsaul

💭
I am Cam
View GitHub Profile
@camsaul
camsaul / profile.clj
Last active July 2, 2025 18:04
Map normalization profiling
(ns metabase.lib.schema.profile
(:require
[clojure.pprint]
[clojure.set]
[criterium.core]
[metabase.util :as u]
[metabase.util.malli.registry :as mr]
[metabase.util.memoize :as u.memo]))
(defn normalize-map-no-kebab-case
@camsaul
camsaul / modules.graphviz
Created May 14, 2025 20:22
Backend Modules
digraph {
"actions" -> "analytics"
"actions" -> "api"
"actions" -> "collections"
"actions" -> "driver"
"actions" -> "legacy-mbql"
"actions" -> "lib"
"actions" -> "model-persistence"
"actions" -> "models"
"actions" -> "queries"
@camsaul
camsaul / x.mermaid
Created May 14, 2025 20:04
Module deps
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
@camsaul
camsaul / rewrite_defendpoint.clj
Created February 12, 2025 07:01
Rewrite defendpoint
(ns dev.rewrite-defendpoint-1
(:require
[clojure.string :as str]
[flatland.ordered.map :as ordered-map]
[metabase.util.malli :as mu]
[metabase.util.malli.registry :as mr]
[rewrite-clj.node :as n]
[rewrite-clj.parser :as r.parser]
[rewrite-clj.zip :as z]))
@camsaul
camsaul / smart_lazy_routes.clj
Created January 25, 2025 01:07
Smart Lazy REST API Ring routes
(def routes-map
{"/action" (+auth (api.macros/lazy-ns-handler 'metabase.api.action))
"/activity" (+auth (api.macros/lazy-ns-handler 'metabase.api.activity))
"/alert" (+auth (api.macros/lazy-ns-handler 'metabase.api.alert))
"/automagic-dashboards" (+auth (api.macros/lazy-ns-handler 'metabase.api.automagic-dashboards))
"/bookmark" (+auth (api.macros/lazy-ns-handler 'metabase.api.bookmark))
"/card" (+auth api.card/routes)
"/cards" (+auth (api.macros/lazy-ns-handler 'metabase.api.cards))
"/cloud-migration" (+auth api.cloud-migration/routes)
"/collection" (+auth api.collection/routes)
@camsaul
camsaul / defendpoint_2.clj
Created January 9, 2025 19:22
Metabase Defendpoint 1 -> Defendpoint 2
(ns metabase.api.defendpoint-2
(:require
[metabase.util :as u]))
(defn- parse-defendpoint-1-args
[form]
(let [[_defendpoint method route & args] form
[docstring & args] (if (string? (first args))
args
(cons nil args))
@camsaul
camsaul / algorithm.clj
Created December 4, 2024 00:13
Thermometers Solver [WIP]
(ns thermometers.algorithm
(:require
[clojure.string :as str]))
(def tags
'{○ #{:start :empty}
● #{:start :full}
⇑ #{:up :empty}
⬆ #{:up :full}
⇓ #{:down :empty}
@camsaul
camsaul / java-jar.txt
Last active October 17, 2024 18:36
ack java -jar in Metabase
$ ack 'java -jar'
src/metabase/db/setup.clj
137: (trs "You must run `java -jar metabase.jar migrate down` from version {0}." latest-applied)
src/metabase/db/liquibase.clj
236: (trs "You can force-release these locks by running `java -jar metabase.jar migrate release-locks`."))))))
src/metabase/core.clj
222: (run-cmd cmd init! args) ; run a command like `java -jar metabase.jar migrate release-locks` or `clojure -M:run migrate release-locks`
@camsaul
camsaul / dox.md
Created May 10, 2024 17:02
Metabase modules dox

metabase.logger

configuration

(configuration)
@camsaul
camsaul / deps_graph.clj
Last active May 8, 2024 02:35
Load Clojure namespace dependency graph into a Postgres database
(ns metabase.deps-graph
(:require
[clojure.tools.namespace.dependency :as ns.deps]
[clojure.tools.namespace.find :as ns.find]
[clojure.tools.namespace.parse :as ns.parse]
[clojure.java.io :as io]))
(set! *warn-on-reflection* true)
(defn- find-ns-decls []