From c7deddba1e20c67cb8711f1f91c1bab6fdfc1b4e Mon Sep 17 00:00:00 2001 From: SerhiiRI Date: Mon, 10 Nov 2025 00:51:04 +0200 Subject: [PATCH 1/8] Fixing performance issues. Time measurement ADDED hooks keys to *execute-config* ADDED :stats key to status-map with detail measurements of every executing steps in microsecs. ADDED :uuid key to status-map ADDED `*execute-internals*` dynamic variable to keep infromation about the execution: uuid of execute invokaction and stack of parrent uuid if the execute are called inside the execute UPDATED added in-degre counting in topological sort. UPDATED build path-trie for reduce searching dependency time. --- CHANGELOG.md | 28 +++ README.md | 14 +- pom.xml | 4 +- src/commando/core.cljc | 212 ++++++++++-------- src/commando/impl/dependency.cljc | 97 ++++---- src/commando/impl/executing.cljc | 1 + src/commando/impl/finding_commands.cljc | 13 +- src/commando/impl/graph.cljc | 68 ++++-- src/commando/impl/status_map.cljc | 23 +- src/commando/impl/utils.cljc | 97 +++++++- test/unit/commando/impl/utils_test.cljc | 280 ++++++++++++++++++++++++ 11 files changed, 663 insertions(+), 174 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8f80d0b..aa08758 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,17 +1,45 @@ +# 1.0.5 +ADDED new keys to `commando.impl.utils/*execute-config*`. Added hooks keys + - `:hook-execute-start` if not nil, call procedure at the start of `commando.core/execute` function. + - `:hook-execute-end` if not nil, call procedure at the end of `commando.core/execute` function. + +ADDED microsecs time measurement. All steps inside the `commando.core/execute` measure time. Every measurement adding to _status-map_ structure under `:stats` key. + +UPDATED `status-map` structure. Was added two keys + - `:uuid` autogenerated unique invocation identifier gotted everytime the function `commando.core/execute` were invoked + - `:stats` contains vector of tuples like `["execute", 1085471, "1.085471ms"]` where `[, , ]`. Counts of steps depended from `*execute-config*` key `:debug-mode`. + +UPDATED sort-commands-by-deps. Straightforward sets joining in base Kahn's algorithm was rewrited with in-degree counting optimization. + +UPDATED build-deps-tree. Instead of searching dependency using the list of commandmaps by iterating across the list(O(n^2) in worst case), before starting to build a dependency graph, we quickly building a path-trie structure efficiently. This gave as fast way to resolve point/all-inside dependency only in O(n) time. + +FIXED find-commands. StackOverflowException in case of long lists of dependencies in the one level. + + # 1.0.4 ADDED commando.commands.builtin/commando-macro-spec. The new type of command that allow to group instructions by its functionality and use it as a single command. Added Readme information about the macro. + ADDED documentation for commando.commands.builtin commands. Now each built-in command have explanation of its behavior and examples of usage. + UPDATED upgrade commando.commands.query-dsl. Function `resolve-query` was removed and replaced by `resolve-fn`, `resolve-instruction`, `resolve-instruction-qe` function called a **resolvers**. Explanations about the resolvers added to _docs/query-dsl.md_ file. + UPDATED error serialization. `commando.impl.utils` contains new way to serialize errors for CLJ/CLJS. Now all errors are serialized to map with keys: `:type`, `:class`, `:message`, `:data` (if exists) and `:stacktrace` (if exists), `:cause` (if exists). See `commando.impl.utils/serialize-exception` for more information. You can expand the error handlers using `serialize-exception-fn` multimethod (but for CLJ only). + ADDED tests for macro-spec, errors and query-dsl changes. + UPDATED README.md 'Debugging section' was replaced on 'Configuring Execution Behavior' which contains more detailed information how to modify execution behavior. + UPDATED dynamic variable *debug-mode* replaced by the `*execute-config*` which is a map that can contain multiple configuration options. + FIXED Removed `detach-instruction-commands` call from `commando.core/build-compiler`. In `commando.core/build-compiler`, the line that detached instruction commands from the registry was removed. This means the compiled registry now includes internal commands (_map, _value, _vector). # 1.0.3 UPDATED behavior `:validate-params-fn`. If the function return anything except `true` it ment validation failure. If the function return data, they will be attached to returned error inside status map. Added tests. + FIXED align serialization of exeption for CLJ/CLJS + ADDED function normalization for :commando/fn, :commando/apply, :commando/from commands. In CLJ it will acept the symbols,vars,functions,keywords. In CLJS acceptable is only function and keywords. + FIXED QueryDSL. QueryExpression passing by :keys and :strs(for string Instruction keys) # 1.0.2 diff --git a/README.md b/README.md index e6727cd..b184660 100644 --- a/README.md +++ b/README.md @@ -33,10 +33,10 @@ ```clojure ;; deps.edn with git -{org.clojars.funkcjonariusze/commando {:mvn/version "1.0.4"}} +{org.clojars.funkcjonariusze/commando {:mvn/version "1.0.5"}} ;; leiningen -[org.clojars.funkcjonariusze/commando "1.0.4"] +[org.clojars.funkcjonariusze/commando "1.0.5"] ``` ## Quick Start @@ -413,6 +413,9 @@ On successful execution (`:ok`), you get: ;; RETURN => {:status :ok, :instruction {"1" 1, "2" 1, "3" 1} + :stats + [["execute-commands!" 95838 "95.838µs"] + ["execute" 1085471 "1.085471ms"]] :successes [{:message "Commando. parse-instruction-map. Entities was successfully collected"} @@ -500,6 +503,13 @@ Here's an example of how to use `:debug-result`: ;; RETURN => {:status :ok, :instruction {"1" 1, "2" 1, "3" 1} + :stats + [["use-registry" 111876 "111.876µs"] + ["find-commands" 303062 "303.062µs"] + ["build-deps-tree" 134049 "134.049µs"] + ["sort-commands-by-deps" 292206 "292.206µs"] + ["execute-commands!" 53762 "53.762µs"] + ["execute" 1074110 "1.07411ms"]] :registry [{:type :commando/from, :recognize-fn #function[commando.commands.builtin/fn], diff --git a/pom.xml b/pom.xml index f4acc17..307c683 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ jar org.clojars.funkcjonariusze commando - 1.0.4 + 1.0.5 commando @@ -42,6 +42,6 @@ https://github.com/funkcjonariusze/commando scm:git:git://github.com/funkcjonariusze/commando.git scm:git:ssh://git@github.com:funkcjonariusze/commando.git - 1.0.4 + 1.0.5 diff --git a/src/commando/core.cljc b/src/commando/core.cljc index 77e3351..8abf93f 100644 --- a/src/commando/core.cljc +++ b/src/commando/core.cljc @@ -48,17 +48,19 @@ (defn ^:private use-registry [status-map registry] - (case (:status status-map) - :failed (-> status-map - (smap/status-map-handle-warning {:message "Skip step with registry check"})) - :ok (try (-> status-map - (assoc :registry (if (registry/built? registry) registry (create-registry registry)))) - (catch #?(:clj Exception - :cljs :default) - e - (-> status-map - (smap/status-map-handle-error {:message "Invalid registry specification" - :error (utils/serialize-exception e)})))))) + (let [start-time (utils/now) + result (case (:status status-map) + :failed (-> status-map + (smap/status-map-handle-warning {:message "Skip step with registry check"})) + :ok (try (-> status-map + (assoc :registry (if (registry/built? registry) registry (create-registry registry)))) + (catch #?(:clj Exception + :cljs :default) + e + (-> status-map + (smap/status-map-handle-error {:message "Invalid registry specification" + :error (utils/serialize-exception e)})))))] + (smap/status-map-add-measurement result "use-registry" start-time (utils/now)))) (defn ^:private find-commands "Searches the instruction map for commands defined in the registry. @@ -70,20 +72,22 @@ - Commands are validated using their :validate-params-fn if present" [{:keys [instruction registry] :as status-map}] - (case (:status status-map) - :failed (-> status-map - (smap/status-map-handle-warning {:message "Skipping search for commands due to :failed status"})) - :ok (try (-> status-map - (assoc :internal/cm-list (finding-commands/find-commands instruction registry)) - (smap/status-map-handle-success {:message "Commands were successfully collected"})) - (catch #?(:clj Exception - :cljs :default) - e - (-> status-map - (smap/status-map-handle-error {:message - "Failed during commands search in instruction. See error for details." - :error (utils/serialize-exception e)})))) - (smap/status-map-undefined-status status-map))) + (let [start-time (utils/now) + result (case (:status status-map) + :failed (-> status-map + (smap/status-map-handle-warning {:message "Skipping search for commands due to :failed status"})) + :ok (try (-> status-map + (assoc :internal/cm-list (finding-commands/find-commands instruction registry)) + (smap/status-map-handle-success {:message "Commands were successfully collected"})) + (catch #?(:clj Exception + :cljs :default) + e + (-> status-map + (smap/status-map-handle-error {:message + "Failed during commands search in instruction. See error for details." + :error (utils/serialize-exception e)})))) + (smap/status-map-undefined-status status-map))] + (smap/status-map-add-measurement result "find-commands" start-time (utils/now)))) (defn ^:private build-deps-tree "Builds a dependency tree by resolving ':commando/from' references in commands. @@ -91,37 +95,42 @@ [{:keys [instruction] :internal/keys [cm-list] :as status-map}] - (case (:status status-map) - :failed (-> status-map - (smap/status-map-handle-warning {:message "Skipping dependency resolution due to :failed status"})) - :ok (try (-> status-map - (assoc :internal/cm-dependency (deps/build-dependency-graph instruction cm-list)) - (smap/status-map-handle-success {:message "Dependency map was successfully built"})) - (catch #?(:clj clojure.lang.ExceptionInfo - :cljs :default) - e - (-> status-map - (smap/status-map-handle-error (ex-data e))))) - (smap/status-map-undefined-status status-map))) + (let [start-time (utils/now) + result (case (:status status-map) + :failed (-> status-map + (smap/status-map-handle-warning {:message "Skipping dependency resolution due to :failed status"})) + :ok (try (-> status-map + (assoc :internal/cm-dependency (deps/build-dependency-graph instruction cm-list)) + (smap/status-map-handle-success {:message "Dependency map was successfully built"})) + (catch #?(:clj clojure.lang.ExceptionInfo + :cljs :default) + e + (-> status-map + (smap/status-map-handle-error (ex-data e))))) + (smap/status-map-undefined-status status-map))] + (smap/status-map-add-measurement result "build-deps-tree" start-time (utils/now)))) (defn ^:private sort-commands-by-deps [status-map] - (case (:status status-map) - :failed (-> status-map - (smap/status-map-handle-warning {:message (str utils/exception-message-header - "sort-entities-by-deps. Skipping mandatory step")})) - :ok (let [sort-result (graph/topological-sort (:internal/cm-dependency status-map)) - status-map (assoc status-map :internal/cm-running-order (vec (reverse (:sorted sort-result))))] - (if (not-empty (:cyclic sort-result)) - (smap/status-map-handle-error status-map - {:message (str utils/exception-message-header - "sort-entities-by-deps. Detected cyclic dependency") - :cyclic (:cyclic sort-result)}) - (smap/status-map-handle-success - status-map - {:message (str utils/exception-message-header - "sort-entities-by-deps. Entities was sorted and prepare for evaluating")}))) - (smap/status-map-undefined-status status-map))) + (let [start-time (utils/now) + result (case (:status status-map) + :failed (-> status-map + (smap/status-map-handle-warning {:message (str utils/exception-message-header + "sort-entities-by-deps. Skipping mandatory step")})) + :ok (let [sort-result (graph/topological-sort (:internal/cm-dependency status-map)) + status-map (assoc status-map :internal/cm-running-order (vec ;; (reverse (:sorted sort-result)) + (:sorted sort-result)))] + (if (not-empty (:cyclic sort-result)) + (smap/status-map-handle-error status-map + {:message (str utils/exception-message-header + "sort-entities-by-deps. Detected cyclic dependency") + :cyclic (:cyclic sort-result)}) + (smap/status-map-handle-success + status-map + {:message (str utils/exception-message-header + "sort-entities-by-deps. Entities was sorted and prepare for evaluating")}))) + (smap/status-map-undefined-status status-map))] + (smap/status-map-add-measurement result "sort-commands-by-deps" start-time (utils/now)))) (defn ^:private execute-commands! "Execute commands based on `:internal/cm-running-order`, transforming the instruction map. @@ -130,37 +139,46 @@ [{:keys [instruction registry] :internal/keys [cm-running-order] :as status-map}] - (binding [utils/*command-map-spec-registry* registry] - (cond - (smap/failed? status-map) - (smap/status-map-handle-warning status-map {:message "Skipping command evaluation due to failed status"}) - (empty? cm-running-order) (smap/status-map-handle-success status-map {:message "No commands to execute"}) - :else (let [[updated-instruction error-info] (executing/execute-commands instruction cm-running-order)] - (if error-info - (-> status-map - (assoc :instruction updated-instruction) - (smap/status-map-handle-error {:message "Command execution failed during evaluation" - :error (utils/serialize-exception (:original-error error-info)) - :command-path (:command-path error-info) - :command-type (:command-type error-info)})) - (-> status-map - (assoc :instruction updated-instruction) - (smap/status-map-handle-success {:message "All commands executed successfully"}))))))) + (let [start-time (utils/now) + result (binding [utils/*command-map-spec-registry* registry] + (cond + (smap/failed? status-map) + (smap/status-map-handle-warning status-map {:message "Skipping command evaluation due to failed status"}) + (empty? cm-running-order) (smap/status-map-handle-success status-map {:message "No commands to execute"}) + :else (let [[updated-instruction error-info] (executing/execute-commands instruction cm-running-order)] + (if error-info + (-> status-map + (assoc :instruction updated-instruction) + (smap/status-map-handle-error {:message "Command execution failed during evaluation" + :error (utils/serialize-exception (:original-error error-info)) + :command-path (:command-path error-info) + :command-type (:command-type error-info)})) + (-> status-map + (assoc :instruction updated-instruction) + (smap/status-map-handle-success {:message "All commands executed successfully"}))))))] + (smap/status-map-add-measurement result "execute-commands!" start-time (utils/now)))) (defn build-compiler [registry instruction] (let [status-map (-> (smap/status-map-pure {:instruction instruction}) - (use-registry registry) - (find-commands) - (build-deps-tree) - (sort-commands-by-deps))] + (utils/hook-process (:hook-execute-start (utils/execute-config))) + (use-registry registry) + (find-commands) + (build-deps-tree) + (sort-commands-by-deps))] (case (:status status-map) :failed (-> status-map - (smap/status-map-handle-warning {:message (str utils/exception-message-header - "build-compiler. Error building compiler")})) + (smap/status-map-handle-warning {:message (str utils/exception-message-header + "build-compiler. Error building compiler")})) :ok (cond-> status-map true (update-in [:internal/cm-running-order] registry/remove-instruction-commands-from-command-vector) - (false? (:debug-result (utils/execute-config))) (select-keys [:status :registry :internal/cm-running-order :successes :warnings]))))) + (false? (:debug-result (utils/execute-config))) + (select-keys [:uuid + :status + :registry + :internal/cm-running-order + :successes + :warnings]))))) (defn ^:private compiler->status-map "Cause compiler contains only two :registry and :internal/cm-running-order keys @@ -171,24 +189,40 @@ (contains? compiler :status)) (case (:status compiler) :ok (if (true? (:debug-result (utils/execute-config))) - (-> (smap/status-map-pure compiler)) - (-> (smap/status-map-pure (select-keys compiler [:registry :internal/cm-running-order :successes :warnings])))) + (-> + (smap/status-map-pure compiler)) + (-> + (smap/status-map-pure (select-keys compiler + [:uuid + :registry + :internal/cm-running-order + :successes + :warnings])))) :failed compiler) - (-> (smap/status-map-pure compiler) - (smap/status-map-handle-error {:message "Corrupted compiler structure"})))) + (-> + (smap/status-map-pure compiler) + (smap/status-map-handle-error {:message "Corrupted compiler structure"})))) (defn execute [registry-or-compiler instruction] {:pre [(or (map? registry-or-compiler) (sequential? registry-or-compiler))]} - (let [;; Under (build-compiler) we ment the unfinished status map - status-map-with-compiler (-> (cond - (map? registry-or-compiler) (-> (compiler->status-map registry-or-compiler)) - (sequential? registry-or-compiler) - (compiler->status-map (build-compiler registry-or-compiler instruction))) - (assoc :instruction instruction))] - (cond-> (execute-commands! status-map-with-compiler) - (false? (:debug-result (utils/execute-config))) (dissoc :internal/cm-running-order) - (false? (:debug-result (utils/execute-config))) (dissoc :registry)))) + (binding [utils/*execute-internals* (utils/-execute-internals-push (str (random-uuid)))] + (let [ ;; Under (build-compiler) we ment the unfinished status map + start-time (utils/now) + status-map-with-compiler (-> (cond + (map? registry-or-compiler) + (-> + (compiler->status-map registry-or-compiler)) + (sequential? registry-or-compiler) + (-> + (build-compiler registry-or-compiler instruction) + (compiler->status-map))) + (assoc :instruction instruction))] + (cond-> (execute-commands! status-map-with-compiler) + (false? (:debug-result (utils/execute-config))) (dissoc :internal/cm-running-order) + (false? (:debug-result (utils/execute-config))) (dissoc :registry) + :always (smap/status-map-add-measurement "execute" start-time (utils/now)) + :always (utils/hook-process (:hook-execute-end (utils/execute-config))))))) (defn failed? [status-map] (smap/failed? status-map)) (defn ok? [status-map] (smap/ok? status-map)) diff --git a/src/commando/impl/dependency.cljc b/src/commando/impl/dependency.cljc index ef46787..fc75fb2 100644 --- a/src/commando/impl/dependency.cljc +++ b/src/commando/impl/dependency.cljc @@ -3,13 +3,34 @@ [commando.impl.command-map :as cm] [commando.impl.utils :as utils])) +(defn- build-path-trie + "Builds a trie from a list of CommandMapPath objects for efficient path-based lookups." + [cm-list] + (reduce + (fn [trie cmd] + (assoc-in trie (conj (cm/command-path cmd) ::command) cmd)) + {} + cm-list)) + +(defn- get-all-nested-commands + "Recursively traverses a trie (or sub-trie) and returns a lazy sequence of all command objects found." + [trie] + (if-not (map? trie) + [] + (lazy-seq + (let [command (::command trie) + children (dissoc trie ::command)] + (if command + (cons command (mapcat get-all-nested-commands (vals children))) + (mapcat get-all-nested-commands (vals children))))))) + (defmulti find-command-dependencies "Finds command dependencies based on dependency-type. Returns a set of CommandMapPath objects that must execute before the given command. Modes: - - :all-inside - depends on all commands inside the Command: + - :all-inside - depends on all commands inside the Command: if it Map - the values, if it Vector - elements of vectors - :all-inside-recur - depends on all commands nested within this command's path - :point - depends on command(s) at a specific path, defined by :point-key @@ -20,28 +41,29 @@ walks up the path hierarchy to find parent commands that will create/modify the target path. - :none - no dependencies (not implemented, returns empty set by default)" - (fn [_command-path-obj _instruction _commands dependency-type] dependency-type)) + (fn [_command-path-obj _instruction _path-trie dependency-type] dependency-type)) (defmethod find-command-dependencies :default - [_command-path-obj _instruction _commands type] + [_command-path-obj _instruction _path-trie type] (throw (ex-info (str utils/exception-message-header "Undefined dependency mode: " type) {:message (str utils/exception-message-header "Undefined dependency mode: " type) :dependency-mode type}))) (defmethod find-command-dependencies :all-inside - [command-path-obj _instruction commands _type] - (let [command-path-obj-length (count (cm/command-path command-path-obj))] - (->> (disj commands command-path-obj) - (filter #(and - (= (dec (count (cm/command-path %))) command-path-obj-length) - (cm/start-with? % command-path-obj))) - (set)))) + [command-path-obj _instruction path-trie _type] + (let [command-path (cm/command-path command-path-obj) + sub-trie (get-in path-trie command-path)] + (->> (vals (dissoc sub-trie ::command)) + (keep ::command) + set))) (defmethod find-command-dependencies :all-inside-recur - [command-path-obj _instruction commands _type] - (->> (disj commands command-path-obj) - (filter #(cm/start-with? % command-path-obj)) - (set))) + [command-path-obj _instruction path-trie _type] + (let [command-path (cm/command-path command-path-obj) + sub-trie (get-in path-trie command-path)] + (->> (get-all-nested-commands sub-trie) + (remove #(= % command-path-obj)) + set))) (defn resolve-relative-path "Resolves path segments with relative navigation (../ and ./) against a base path." @@ -61,13 +83,6 @@ segments)] (if relative (concat relative path) path))) -(defn find-commands-at-target-path - "Finds all commands at or nested within the target path." - [commands target-path] - (->> commands - (filter #(cm/vector-starts-with? (cm/command-path %) target-path)) - set)) - (defn path-exists-in-instruction? "Checks if a path exists in the instruction map." [instruction path] @@ -97,46 +112,44 @@ vec))) (defmethod find-command-dependencies :point - [command-path-obj instruction commands _type] - (let [target-path (point-target-path instruction command-path-obj) - commands-at-target (cm/->CommandMapPath target-path {})] - (if-let [point-command (first (filter #(= % commands-at-target) commands))] + [command-path-obj instruction path-trie _type] + (let [target-path (point-target-path instruction command-path-obj)] + (if-let [point-command (get-in path-trie (conj target-path ::command))] #{point-command} (throw-point-error command-path-obj target-path instruction)))) -(defn point-find-parent-command - "Walks up the path hierarchy to find the first parent command that exists in commands." - [commands target-path] +(defn- point-find-parent-command + "Walks up the path hierarchy to find the first parent command that exists in the trie." + [path-trie target-path] (loop [current-path target-path] - (cond - (empty? current-path) nil - (contains? commands (cm/->CommandMapPath current-path {})) - (first (filter #(= (cm/command-path %) current-path) commands)) - :else (recur (butlast current-path))))) + (when (seq current-path) + (if-let [cmd (get-in path-trie (conj current-path ::command))] + cmd + (recur (butlast current-path)))))) (defmethod find-command-dependencies :point-and-all-inside-recur - [command-path-obj instruction commands _type] + [command-path-obj instruction path-trie _type] (let [target-path (point-target-path instruction command-path-obj) - commands-at-target (find-commands-at-target-path commands target-path) - parent-command (point-find-parent-command commands target-path)] + sub-trie (get-in path-trie target-path) + commands-at-target (set (get-all-nested-commands sub-trie)) + parent-command (point-find-parent-command path-trie target-path)] (cond (not-empty commands-at-target) commands-at-target parent-command #{parent-command} (path-exists-in-instruction? instruction target-path) #{} :else (throw-point-error command-path-obj target-path instruction)))) -(defmethod find-command-dependencies :none [_command-path-obj _instruction _commands _type] #{}) +(defmethod find-command-dependencies :none [_command-path-obj _instruction _path-trie _type] #{}) (defn build-dependency-graph "Builds the dependency map for all commands in `cm-list`. Returns a map from CommandMapPath objects to their dependency sets." [instruction cm-list] - (let [command-set (set cm-list)] + (let [path-trie (build-path-trie cm-list)] (reduce (fn [dependency-acc command-path-obj] (let [dependency-mode (get-in (cm/command-data command-path-obj) [:dependencies :mode])] - (assoc dependency-acc - command-path-obj - (find-command-dependencies command-path-obj instruction command-set dependency-mode) - ))) + (assoc dependency-acc + command-path-obj + (find-command-dependencies command-path-obj instruction path-trie dependency-mode)))) {} cm-list))) diff --git a/src/commando/impl/executing.cljc b/src/commando/impl/executing.cljc index 8f0a454..4823088 100644 --- a/src/commando/impl/executing.cljc +++ b/src/commando/impl/executing.cljc @@ -37,3 +37,4 @@ (if (:error execution-result) [current-instruction (:error execution-result)] (recur execution-result (rest remaining-commands))))))) + diff --git a/src/commando/impl/finding_commands.cljc b/src/commando/impl/finding_commands.cljc index fd15e67..a93557c 100644 --- a/src/commando/impl/finding_commands.cljc +++ b/src/commando/impl/finding_commands.cljc @@ -7,8 +7,8 @@ "Returns child paths for regular collections that should be traversed." [value current-path] (cond - (map? value) (for [[k _v] value] (conj current-path k)) - (coll? value) (for [[i _v] (map-indexed vector value)] (conj current-path i)) + (map? value) (doall (map (fn [[k _v]] (conj current-path k)) (seq value))) + (coll? value) (doall (map (fn [i] (conj current-path i)) (range (count value)))) :else [])) (defmulti ^:private command-child-paths @@ -74,13 +74,13 @@ (defn find-commands "Traverses the instruction tree (BFS algo) and collects all commands defined by the registry." [instruction command-registry] - (loop [queue [[]] + (loop [queue (vec [[]]) found-commands [] debug-stack-map {}] (if (empty? queue) found-commands (let [current-path (first queue) - remaining-paths (rest queue) + remaining-paths (subvec queue 1) current-value (get-in instruction current-path) debug-stack (if (:debug-result (utils/execute-config)) (get debug-stack-map current-path (list)) (list))] (if-let [command-spec (instruction-command-spec command-registry current-value current-path)] @@ -91,8 +91,9 @@ updated-debug-stack-map (if (:debug-result (utils/execute-config)) (reduce #(assoc %1 %2 (conj debug-stack command)) debug-stack-map child-paths) {})] - (recur (concat remaining-paths child-paths) (conj found-commands command) updated-debug-stack-map)) + (recur (into remaining-paths child-paths) (conj found-commands command) updated-debug-stack-map)) ;; No match - traverse children if coll, skip if leaf - (recur (concat remaining-paths (coll-child-paths current-value current-path)) + (recur (into remaining-paths (coll-child-paths current-value current-path)) found-commands debug-stack-map)))))) + diff --git a/src/commando/impl/graph.cljc b/src/commando/impl/graph.cljc index 68d1fb0..634fc6e 100644 --- a/src/commando/impl/graph.cljc +++ b/src/commando/impl/graph.cljc @@ -2,27 +2,51 @@ (:require [clojure.set :as set])) -(defn ^:private no-incoming - "Returns the set of nodes in graph g for which there are no incoming - edges, where g is a map of nodes to sets of nodes." +(defn topological-sort + "Efficiently sorts a directed acyclic graph using Kahn's algorithm with in-degree counting. + 'g' is a map of nodes to sequences of their dependencies. + Returns a map with :sorted containing the topologically sorted list of nodes, + and :cyclic containing the remaining nodes if a cycle is detected." [g] - (let [nodes (set (keys g)) have-incoming (apply set/union (vals g))] (set/difference nodes have-incoming))) + (let [;; Build the reverse graph to easily find dependents and collect all nodes. + rev-g (reduce-kv (fn [acc k vs] + (reduce (fn [a v] (update a v (fnil conj []) k)) acc vs)) + {} g) + all-nodes (set/union (set (keys g)) (set (keys rev-g))) + + ;; calculate in-degrees for all nodes. + in-degrees (reduce-kv (fn [acc node deps] + (assoc acc node (count deps))) + {} g) + + ;; Initialize the queue with nodes that have no incoming edges. + ;; Using a vector as a FIFO queue. + q (reduce (fn [queue node] + (if (zero? (get in-degrees node 0)) + (conj queue node) + queue)) + [] all-nodes)] + (loop [queue q + sorted-result [] + degrees in-degrees] + (if-let [node (first queue)] + (let [dependents (get rev-g node []) + ;; Reduce in-degree for all dependents + ;; and find new nodes with zero in-degree. + [next-degrees new-zero-nodes] + (reduce (fn [[degs zeros] dep] + (let [new-degree (dec (get degs dep))] + [(assoc degs dep new-degree) + (if (zero? new-degree) (conj zeros dep) zeros)])) + [degrees []] + dependents)] + (recur (into (subvec queue 1) new-zero-nodes) + (conj sorted-result node) + next-degrees)) + (if (= (count sorted-result) (count all-nodes)) + {:sorted sorted-result :cyclic {}} + (let [cyclic-nodes (->> degrees + (filter (fn [[_ v]] (pos? v))) + (into {}))] + {:sorted sorted-result :cyclic cyclic-nodes})))))) -(defn topological-sort - "Sort for acyclic directed graph g (using khan algo). - Where g is a map of nodes to sets of nodes. - If g contains cycles, it orders the acyclic parts and leaves cyclic parts as is. - Returns a map with :sorted containing result and :cyclic containing cycles if exists" - ([g] (topological-sort g [] (no-incoming g))) - ([g l s] - (if (empty? s) - (if (every? empty? (vals g)) - {:sorted l} - {:sorted l - :cyclic (filter (fn [[_ v]] (seq v)) g)}) - (let [[n s'] [(first s) (rest s)] - m (g n) - g' (assoc g n #{}) - new-nodes (set/intersection (no-incoming g') m) - s'' (set/union s' new-nodes)] - (recur g' (conj l n) s''))))) diff --git a/src/commando/impl/status_map.cljc b/src/commando/impl/status_map.cljc index 4c3c656..9270366 100644 --- a/src/commando/impl/status_map.cljc +++ b/src/commando/impl/status_map.cljc @@ -1,10 +1,25 @@ (ns commando.impl.status-map (:require + [commando.impl.utils :as utils] [malli.core :as malli])) (def ^:private status-map-message-schema [:map [:message [:string {:min 5}]]]) +;;;------ +;;; Stats +;;;------ + +(defn status-map-add-measurement + "Calculates the duration from `start-time-ns` and `end-time-ns` and appends it as a tuple + `[stat-key duration-ns formatted-duration]` to the `:stats` vector in the `status-map`." + [status-map stat-key start-time-ns end-time-ns] + (let [duration (- end-time-ns start-time-ns)] + (update status-map :stats (fnil conj []) + [stat-key + duration + (utils/format-time duration)]))) + (defn status-map-handle-warning [status-map m] (update status-map :warnings (fnil conj []) (malli/coerce status-map-message-schema m))) @@ -22,10 +37,12 @@ (defn status-map-pure ([] (status-map-pure nil)) ([m] - (merge {:status :ok + (merge {:uuid (:uuid utils/*execute-internals*) + :status :ok :errors [] :warnings [] - :successes []} + :successes [] + :stats []} m))) (defn status-map-undefined-status @@ -36,3 +53,5 @@ (defn failed? [status-map] (= (:status status-map) :failed)) (defn ok? [status-map] (= (:status status-map) :ok)) + + diff --git a/src/commando/impl/utils.cljc b/src/commando/impl/utils.cljc index d547c77..2169772 100644 --- a/src/commando/impl/utils.cljc +++ b/src/commando/impl/utils.cljc @@ -1,5 +1,6 @@ (ns commando.impl.utils - (:require [malli.core :as malli])) + (:require [malli.core :as malli] + [clojure.string :as str])) (def exception-message-header "Commando. ") @@ -9,7 +10,9 @@ (def ^:private -execute-config-default {:debug-result false - :error-data-string true}) + :error-data-string true + :hook-execute-end nil + :hook-execute-start nil}) (def ^:dynamic *execute-config* @@ -19,25 +22,82 @@ - `:error-data-string` (boolean): When true, the `:data` key in serialized `ExceptionInfo` (via `commando.impl.utils/serialize-exception`) will be a string representation of the data. When false, it will return - the original map structure." + the original map structure. + - `:hook-execute-start` (fn [status-map]): if not nil, can run procedure + passed in value. + - `:hook-execute-end` (fn [status-map]): if not nil, can run procedure + passed in value. + + Example + (binding [commando.impl.utils/*execute-config* + {:debug-result true + :error-data-string false + :hook-execute-start (fn [e] (println (:uuid e))) + :hook-execute-end (fn [e] (println (:uuid e) (:stats e)))}] + (commando.core/execute + [commando.commands.builtin/command-from-spec] + {\"1\" 1 + \"2\" {:commando/from [\"1\"]} + \"3\" {:commando/from [\"2\"]}}))" -execute-config-default) +(def ^:dynamic + *execute-internals* + "Dynamic variable to keep context information about the execution + setup. + - `:uuid` the unique name of execution, generated everytime the user + invoke `commando.core/execute` + - `:stack` in case of user use `commando.commands.builtin/command-macro-spec`, + or `commando.commands.query-dsl/command-resolve-json-spec` or any sort of + commands what invoking `commando.core/execute` inside of parent instruction + by simulation recursive call, the :stack key will store the invocation stack + in vector of :uuids" + {:uuid nil + :stack []}) + +(defn -execute-internals-push + "Update *execute-internals* structure" + [uuid-execute-identifier] + (-> *execute-internals* + (assoc :uuid uuid-execute-identifier) + (update :stack conj uuid-execute-identifier))) + (defn execute-config "Returns the effective configuration for `commando/execute`, getting data from dynamic variable `commando.impl.utils/*execute-config*`" [] (merge -execute-config-default *execute-config*)) -(def ^{:dynamic true - :private true - :doc "For debugging purposes and some mysterious reason of setting it dynamically during execution"} +(defn hook-process + "Function will handle a hooks passed from users. + Available hooks: + - `:hook-execute-start`, + - `:hook-execute-end`. + + Read more: + `commando.impl.utils/*execute-config*`" + [status-map hook] + (when hook + (try + (hook status-map) + (catch Exception e + nil))) + status-map) + +(def ^:dynamic *command-map-spec-registry* + "Dynamic variable what keep the state of processed + `:registry` value from `status-map`" nil) (defn command-map-spec-registry - "For debugging purposes and some mysterious reason of setting it dynamically during execution" - [] - (or *command-map-spec-registry* [])) + "Return `:registry` value in dynamic scoupe. + Required to run `commando.core/execute` inside + of parent execute invocation. + See + `commando.core/execute` + `commando.core/execute-commands!`(binding)" + [] (or *command-map-spec-registry* [])) ;; ------------------ ;; Function Resolvers @@ -86,6 +146,25 @@ (fn [x] (some? (resolve-fn x)))])) +;; ----------------- +;; Performance Tools +;; ----------------- + +(defn now + "Returns a high-resolution timestamp in nanoseconds." + [] + #?(:clj (System/nanoTime) + :cljs (* (.now js/performance) 1000000))) + +(defn format-time + "Formats a time `t` in nanoseconds to a string with units (ns, µs, ms, or s)." + [t] + (cond + (< t 1000) (str t "ns") + (< t 1000000) (str (float (/ t 1000)) "µs") + (< t 1000000000) (str (float (/ t 1000000)) "ms") + :else (str (float (/ t 1000000000)) "s"))) + ;; ----------- ;; Error Tools ;; ----------- diff --git a/test/unit/commando/impl/utils_test.cljc b/test/unit/commando/impl/utils_test.cljc index 11c7f45..984e451 100644 --- a/test/unit/commando/impl/utils_test.cljc +++ b/test/unit/commando/impl/utils_test.cljc @@ -202,3 +202,283 @@ (is (= false (malli/validate sut/ResolvableFn 'UNKOWN/UNKOWN))) ))) + +;; ----- +;; Stats +;; ----- + +(require '[clojure.string :as str]) + +(defn print-stats + "Prints a formatted summary of the execution stats from a status-map." + ([status-map] + (print-stats status-map nil)) + ([status-map title] + (when-let [stats (:stats status-map)] + (let [max-key-len (apply max 0 (map (comp count name first) stats))] + (println (str "\nExecution Stats" (when title (str "(" title ")")) ":")) + (doseq [[index [stat-key _ formatted]] (map-indexed vector stats)] + (let [key-str (name stat-key) + padding (str/join "" (repeat (- max-key-len (count key-str)) " "))] + (println (str + " " (if (= "execute" key-str) "=" (str (inc index)) ) + " " key-str " " padding formatted)))))))) + +(comment + (print-stats + (commando.core/execute + [commando.commands.builtin/command-fn-spec + commando.commands.builtin/command-from-spec + commando.commands.builtin/command-apply-spec] + {"1" 1 + "2" {:commando/from ["1"]} + "3" {:commando/from ["2"]}}))) + +;; AVG + +(defn calculate-average-stats + "Takes a collection of status-maps and calculates the average duration for each stat-key." + [status-maps] + {:pre [(not-empty status-maps)]} + (let [keys-order (map first (:stats (first status-maps))) + all-stats (mapcat :stats status-maps) + grouped-stats (group-by first all-stats) + averages-grouped + (reduce (fn [acc [stat-key measurements]] + (let [total-duration (reduce + (map second measurements)) + count-measurements (count measurements) + average-duration (long (/ total-duration count-measurements))] + (assoc acc stat-key [stat-key average-duration (sut/format-time average-duration)]))) + {} grouped-stats)] + {:stats (mapv #(get averages-grouped %) keys-order)})) + +(defmacro repeat-n-and-print-stats + "Repeats the execution of `body` `n` times, collects the status-maps," + [n & body] + `(let [results# (doall (for [_# (range ~n)] + ~@body)) + avg-stats# (calculate-average-stats results#)] + (print "Repeating instruction " ~n " times") + (print-stats avg-stats#))) + +(comment + (repeat-n-and-print-stats + 30 + (commando.core/execute + [commando.commands.builtin/command-fn-spec + commando.commands.builtin/command-from-spec + commando.commands.builtin/command-apply-spec] + { ;; -------------------------------------------------------------------------------- + ;; RAW DATA & CONFIGURATION + ;; -------------------------------------------------------------------------------- + :config + {:commission-rates {:standard 0.07 :senior 0.12} + :bonus-threshold 50000 + :performance-bonus 2500 + :tax-rate 0.21 + :department-op-cost {:sales 15000 :marketing 10000 :engineering 25000}} + + :products + {"prod-001" {:name "Alpha Widget" :price 250.0} + "prod-002" {:name "Beta Gadget" :price 475.0} + "prod-003" {:name "Gamma Gizmo" :price 1200.0}} + + :employees + {"emp-101" {:name "John Doe" :department :sales :level :senior} + "emp-102" {:name "Jane Smith" :department :sales :level :standard} + "emp-103" {:name "Peter Jones" :department :marketing :level :senior} + "emp-201" {:name "Mary Major" :department :engineering :level :standard}} + + :sales-records + [ ;; John's Sales + {:employee-id "emp-101" :product-id "prod-003" :units-sold 50} + {:employee-id "emp-101" :product-id "prod-001" :units-sold 120} + ;; Jane's Sales + {:employee-id "emp-102" :product-id "prod-001" :units-sold 80} + {:employee-id "emp-102" :product-id "prod-002" :units-sold 40} + ;; Peter's Sales (Marketing can also sell) + {:employee-id "emp-103" :product-id "prod-002" :units-sold 10}] + + ;; -------------------------------------------------------------------------------- + ;; INTERMEDIATE CALCULATIONS + ;; -------------------------------------------------------------------------------- + :calculations + { ;; Step 1: Calculate the total revenue for each individual sale record. + :sales-revenues + {:commando/fn (fn [sales products] + (mapv (fn [sale] + (let [product (get products (:product-id sale))] + (assoc sale :total-revenue (* (:units-sold sale) (:price product))))) + sales)) + :args [{:commando/from [:sales-records]} + {:commando/from [:products]}]} + + ;; Step 2: Group sales by employee and calculate total sales per employee. + :employee-sales-totals + {:commando/fn (fn [sales-revenues] + (reduce (fn [acc sale] + (update acc + (:employee-id sale) + (fnil + 0) + (:total-revenue sale))) + {} + sales-revenues)) + :args [{:commando/from [:calculations :sales-revenues]}]} + + ;; Step 3: Calculate commission for each employee based on their sales total and level. + :employee-commissions + {:commando/apply + {:sales-totals {:commando/from [:calculations :employee-sales-totals]} + :employees {:commando/from [:employees]} + :rates {:commando/from [:config :commission-rates]}} + := (fn [{:keys [sales-totals employees rates]}] + (into {} + (map (fn [[emp-id total-sales]] + (let [employee (get employees emp-id) + rate-key (:level employee) + commission-rate (get rates rate-key 0)] + [emp-id (* total-sales commission-rate)])) + sales-totals)))} + + ;; Step 4: Determine performance bonuses for employees exceeding the threshold. + :employee-bonuses + {:commando/apply + {:sales-totals {:commando/from [:calculations :employee-sales-totals]} + :threshold {:commando/from [:config :bonus-threshold]} + :bonus-amount {:commando/from [:config :performance-bonus]}} + := (fn [{:keys [sales-totals threshold bonus-amount]}] + (into {} + (map (fn [[emp-id total-sales]] + [emp-id (if (> total-sales threshold) bonus-amount 0)]) + sales-totals)))} + + ;; Step 5: Calculate total compensation (sales + commission + bonus) for each employee. + :employee-total-compensation + {:commando/fn (fn [commissions bonuses] + (merge-with + commissions bonuses)) + :args [{:commando/from [:calculations :employee-commissions]} + {:commando/from [:calculations :employee-bonuses]}]} + + ;; Step 6: Aggregate financial data by department. + :department-financials + {:commando/apply + {:employees {:commando/from [:employees]} + :sales-totals {:commando/from [:calculations :employee-sales-totals]} + :compensations {:commando/from [:calculations :employee-total-compensation]} + :op-costs {:commando/from [:config :department-op-cost]}} + := (fn [{:keys [employees sales-totals compensations op-costs]}] + (let [initial-agg {:sales {:total-revenue 0 :total-compensation 0} + :marketing {:total-revenue 0 :total-compensation 0} + :engineering {:total-revenue 0 :total-compensation 0}}] + (as-> (reduce-kv (fn [agg emp-id emp-data] + (let [dept (:department emp-data) + revenue (get sales-totals emp-id 0) + compensation (get compensations emp-id 0)] + (-> agg + (update-in [dept :total-revenue] + revenue) + (update-in [dept :total-compensation] + compensation)))) + initial-agg + employees) data + (merge-with + (fn [dept-data op-cost] + (let [profit (- (:total-revenue dept-data) + (+ (:total-compensation dept-data) op-cost))] + (assoc dept-data + :operating-cost op-cost + :net-profit profit))) + data + op-costs))))}} + + ;; -------------------------------------------------------------------------------- + ;; FINAL REPORT GENERATION + ;; -------------------------------------------------------------------------------- + :final-report + {:commando/apply + {:dept-financials {:commando/from [:calculations :department-financials]} + :total-sales-per-employee {:commando/from [:calculations :employee-sales-totals]} + :total-compensation-per-employee {:commando/from [:calculations :employee-total-compensation]} + :tax-rate {:commando/from [:config :tax-rate]}} + := (fn [{:keys [dept-financials total-sales-per-employee total-compensation-per-employee tax-rate]}] + (let [company-total-revenue (reduce + (map :total-revenue (vals dept-financials))) + company-total-compensation (reduce + (map :total-compensation (vals dept-financials))) + company-total-op-cost (reduce + (map :operating-cost (vals dept-financials))) + company-gross-profit (- company-total-revenue + (+ company-total-compensation company-total-op-cost)) + taxes-payable (* company-gross-profit tax-rate) + company-net-profit (- company-gross-profit taxes-payable)] + {:company-summary + {:total-revenue company-total-revenue + :total-compensation company-total-compensation + :total-operating-cost company-total-op-cost + :gross-profit company-gross-profit + :taxes-payable taxes-payable + :net-profit-after-tax company-net-profit} + :department-breakdown dept-financials + :employee-performance + {:top-earner (key (apply max-key val total-compensation-per-employee)) + :top-seller (key (apply max-key val total-sales-per-employee))}}))}}))) + +;; Flame + +(defn- flame-print-stats [stats indent] + (let [max-key-len (apply max 0 (map (comp count name first) stats))] + (doseq [[stat-key _ formatted] stats] + (let [key-str (name stat-key) + padding (clojure.string/join "" (repeat (- max-key-len (count key-str)) " "))] + (println (str indent + "" key-str " " padding formatted)))))) + +(defn flame-print [data & [indent]] + (let [indent (or indent "")] + (doseq [[k v] data] + (println (str indent "———" k)) + (when (:stats v) + (flame-print-stats (:stats v) (str indent " |"))) + ;; рекурсивно обходимо вкладені map-и, крім :stats + (doseq [[child-k child-v] v + :when (map? child-v)] + (when (not= child-k :stats) + (flame-print {child-k child-v} (str indent " :"))))))) + +(defn flamegraph [data] + (println "Execution Flamegraph") + (flame-print data)) + +(defn execute-flame [registry instruction] + (let [stats-state (atom {}) + result + (binding [commando.impl.utils/*execute-config* + {; :debug-result true + :hook-execute-end + (fn [e] + (swap! stats-state + (fn [s] + (update-in s (:stack commando.impl.utils/*execute-internals*) + #(merge % {:stats (:stats e)})))))}] + (commando.core/execute + registry instruction))] + (flamegraph @stats-state) + result)) + +(comment + (execute-flame + commando.commands.query-dsl-test/registry + {:commando/resolve :test-instruction-qe + :x 1 + :QueryExpression + [ + {:resolve-instruction-qe + [{:map [{:a + [:b]}]} + {:resolve-instruction + [{:a + [:b]}]} + {[:resolve-instruction-qe {:x 1000}] + [{:map [{:a + [:b]}]} + {:resolve-instruction + [{:a + [:b]}]} + {[:resolve-instruction-qe {:x 10000000}] + [{:map [{:a + [:b]}]}]}]}]}]})) From fa6667cc8600b6bf2d4ba3203daea63fa53aae93 Mon Sep 17 00:00:00 2001 From: SerhiiRI Date: Mon, 10 Nov 2025 01:02:20 +0200 Subject: [PATCH 2/8] add clj/cljs reader macro to exception --- src/commando/impl/utils.cljc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/commando/impl/utils.cljc b/src/commando/impl/utils.cljc index 2169772..35e8aa2 100644 --- a/src/commando/impl/utils.cljc +++ b/src/commando/impl/utils.cljc @@ -79,7 +79,8 @@ (when hook (try (hook status-map) - (catch Exception e + (catch #?(:clj Exception + :cljs :default) e nil))) status-map) From 80699dd5a1fe73d8add1e6c74a138e488f4e1a32 Mon Sep 17 00:00:00 2001 From: SerhiiRI Date: Mon, 10 Nov 2025 13:43:12 +0200 Subject: [PATCH 3/8] added :performance key to deps.edn what do perfomance print ADDED Dependency load testcases. Result ploted by JFreeChart in png files ADDED InDepth execution with flamechart for query. ADDED RealWorld average time example --- README.md | 43 ++ deps.edn | 7 +- .../commando/dependency_load_plots_test.clj | 526 ++++++++++++++++++ .../execute(normal) milisecs_x_deps.png | Bin 0 -> 20366 bytes ...te-steps(massive dep grow) secs_x_deps.png | Bin 0 -> 18310 bytes .../execute-steps(normal) milisecs_x_deps.png | Bin 0 -> 21889 bytes test/unit/commando/impl/utils_test.cljc | 279 ---------- 7 files changed, 574 insertions(+), 281 deletions(-) create mode 100644 test/perf/commando/dependency_load_plots_test.clj create mode 100644 test/perf/commando/execute(normal) milisecs_x_deps.png create mode 100644 test/perf/commando/execute-steps(massive dep grow) secs_x_deps.png create mode 100644 test/perf/commando/execute-steps(normal) milisecs_x_deps.png diff --git a/README.md b/README.md index b184660..a030f49 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,7 @@ - [Configuring Execution Behavior](#configuring-execution-behavior) - [`:debug-result`](#debug-result) - [`:error-data-string`](#error-data-string) + - [Performance](#performance) - [Integrations](#integrations) - [Versioning](#versioning) - [License](#license) @@ -587,6 +588,48 @@ When `:error-data-string` is `true`, the `:data` key within serialized `Exceptio ;; :value {:commando/from "BROKEN"}}} ``` + +### Performance + +Commando is designed for high performance, using efficient algorithms for dependency resolution and command execution to process complex instructions swiftly. + +All benchmarks were conducted on an **Intel Core i9-13980HX**. The primary metric for performance is the number of dependencies within an instruction. + +#### Total Execution Time (Typical Workloads) + +The graph below illustrates the total execution time for instructions with a typical number of dependencies, ranging from 1,250 to 80,000. As you can see, the execution time scales linearly and remains in the low millisecond range, demonstrating excellent performance for common use cases. + +
+ +
+ +#### Execution Step Analysis + +To provide deeper insight, we've broken down the execution into five distinct steps: +1. **use-registry**: Builds the command registry from the provided specs. +2. **find-commands**: Scans the instruction map to identify all command instances. +3. **build-deps-tree**: Constructs a Directed Acyclic Graph (DAG) of dependencies between commands. +4. **sort-commands-by-deps**: Sorts the commands based on the dependency graph to determine the correct execution order. +5. **execute-commands!**: Executes the commands in the resolved order. + +The following graphs show the performance of each step under both normal and extreme load conditions. + +**Normal Workloads (up to 80,000 dependencies)** + +Under normal conditions, each execution step completes in just a few milliseconds. The overhead of parsing, dependency resolution, and execution is minimal, ensuring a fast and responsive system. + +
+ +
+ +**Massive Workloads (up to 5,000,000 dependencies)** + +To test the limits of the library, we benchmarked it with instructions containing up to 5 million dependencies. The graph below shows that while the system scales, the `find-commands` (parsing) and `build-deps-tree` (dependency graph construction) phases become the primary bottlenecks. This demonstrates that the core execution remains fast, but performance at extreme scales is dominated by the initial analysis steps. + +
+ +
+ # Integrations - [Work with JSON](./doc/json.md) diff --git a/deps.edn b/deps.edn index 7f0fa80..c2f2f61 100644 --- a/deps.edn +++ b/deps.edn @@ -9,8 +9,11 @@ :main-opts ["-m" "cljs-test-runner.main" "-d" "test/unit"] :patterns [".*-test$"]} ;;For local performance regression tests - :dev {:extra-deps {criterium/criterium {:mvn/version "0.4.6"}} - :extra-paths ["test/perf"]} + :performance + {:extra-deps {criterium/criterium {:mvn/version "0.4.6"} + cljfreechart/cljfreechart {:mvn/version "0.2.0"}} + :main-opts ["-m" "commando.dependency-load-plots-test"] + :extra-paths ["test/perf"]} ;;Build jar :build {:deps {io.github.clojure/tools.build {:mvn/version "0.10.10"}} :ns-default build diff --git a/test/perf/commando/dependency_load_plots_test.clj b/test/perf/commando/dependency_load_plots_test.clj new file mode 100644 index 0000000..3b0198b --- /dev/null +++ b/test/perf/commando/dependency_load_plots_test.clj @@ -0,0 +1,526 @@ +(ns commando.dependency-load-plots-test + (:require + [commando.impl.utils] + [commando.commands.builtin] + [commando.commands.query-dsl] + [commando.core] + [clojure.string :as str] + [cljfreechart.core :as cljfreechart])) + +;; ===================================== +;; PRINT UTILS +;; ===================================== + +(defn print-stats + "Prints a formatted summary of the execution stats from a status-map." + ([status-map] + (print-stats status-map nil)) + ([status-map title] + (when-let [stats (:stats status-map)] + (let [max-key-len (apply max 0 (map (comp count name first) stats))] + (println (str "\nExecution Stats" (when title (str "(" title ")")) ":")) + (doseq [[index [stat-key _ formatted]] (map-indexed vector stats)] + (let [key-str (name stat-key) + padding (str/join "" (repeat (- max-key-len (count key-str)) " "))] + (println (str + " " (if (= "execute" key-str) "=" (str (inc index)) ) + " " key-str " " padding formatted)))))))) + +(comment + (print-stats + (commando.core/execute + [commando.commands.builtin/command-fn-spec + commando.commands.builtin/command-from-spec + commando.commands.builtin/command-apply-spec] + {"1" 1 + "2" {:commando/from ["1"]} + "3" {:commando/from ["2"]}}))) + +;; ======================================= +;; AVERAGE EXECUTION OF REAL WORLD EXAMPLE +;; ======================================= + +(defn ^:private calculate-average-stats + "Takes a collection of status-maps and calculates the average duration for each stat-key." + [status-maps] + {:pre [(not-empty status-maps)]} + (let [keys-order (map first (:stats (first status-maps))) + all-stats (mapcat :stats status-maps) + grouped-stats (group-by first all-stats) + averages-grouped + (reduce (fn [acc [stat-key measurements]] + (let [total-duration (reduce + (map second measurements)) + count-measurements (count measurements) + average-duration (long (/ total-duration count-measurements))] + (assoc acc stat-key [stat-key average-duration (commando.impl.utils/format-time average-duration)]))) + {} grouped-stats)] + {:stats (mapv #(get averages-grouped %) keys-order)})) + +(defmacro repeat-n-and-print-stats + "Repeats the execution of `body` `n` times, collects the status-maps," + [n & body] + `(let [results# (doall (for [_# (range ~n)] + ~@body)) + avg-stats# (calculate-average-stats results#)] + (print "Repeating instruction " ~n " times") + (print-stats avg-stats#))) + +(defn real-word-calculation-average-of-50 [] + (println "\n=====================Benchmark=====================") + (println "Real Word calculation. Show average of 50 execution") + (println "===================================================") + (repeat-n-and-print-stats 50 + (commando.core/execute + [commando.commands.builtin/command-fn-spec + commando.commands.builtin/command-from-spec + commando.commands.builtin/command-apply-spec] + { ;; -------------------------------------------------------------------------------- + ;; RAW DATA & CONFIGURATION + ;; -------------------------------------------------------------------------------- + :config + {:commission-rates {:standard 0.07 :senior 0.12} + :bonus-threshold 50000 + :performance-bonus 2500 + :tax-rate 0.21 + :department-op-cost {:sales 15000 :marketing 10000 :engineering 25000}} + + :products + {"prod-001" {:name "Alpha Widget" :price 250.0} + "prod-002" {:name "Beta Gadget" :price 475.0} + "prod-003" {:name "Gamma Gizmo" :price 1200.0}} + + :employees + {"emp-101" {:name "John Doe" :department :sales :level :senior} + "emp-102" {:name "Jane Smith" :department :sales :level :standard} + "emp-103" {:name "Peter Jones" :department :marketing :level :senior} + "emp-201" {:name "Mary Major" :department :engineering :level :standard}} + + :sales-records + [ ;; John's Sales + {:employee-id "emp-101" :product-id "prod-003" :units-sold 50} + {:employee-id "emp-101" :product-id "prod-001" :units-sold 120} + ;; Jane's Sales + {:employee-id "emp-102" :product-id "prod-001" :units-sold 80} + {:employee-id "emp-102" :product-id "prod-002" :units-sold 40} + ;; Peter's Sales (Marketing can also sell) + {:employee-id "emp-103" :product-id "prod-002" :units-sold 10}] + + :calculations + {:sales-revenues + {:commando/fn (fn [sales products] + (mapv (fn [sale] + (let [product (get products (:product-id sale))] + (assoc sale :total-revenue (* (:units-sold sale) (:price product))))) + sales)) + :args [{:commando/from [:sales-records]} + {:commando/from [:products]}]} + + :employee-sales-totals + {:commando/fn (fn [sales-revenues] + (reduce (fn [acc sale] + (update acc + (:employee-id sale) + (fnil + 0) + (:total-revenue sale))) + {} + sales-revenues)) + :args [{:commando/from [:calculations :sales-revenues]}]} + + :employee-commissions + {:commando/apply + {:sales-totals {:commando/from [:calculations :employee-sales-totals]} + :employees {:commando/from [:employees]} + :rates {:commando/from [:config :commission-rates]}} + := (fn [{:keys [sales-totals employees rates]}] + (into {} + (map (fn [[emp-id total-sales]] + (let [employee (get employees emp-id) + rate-key (:level employee) + commission-rate (get rates rate-key 0)] + [emp-id (* total-sales commission-rate)])) + sales-totals)))} + + :employee-bonuses + {:commando/apply + {:sales-totals {:commando/from [:calculations :employee-sales-totals]} + :threshold {:commando/from [:config :bonus-threshold]} + :bonus-amount {:commando/from [:config :performance-bonus]}} + := (fn [{:keys [sales-totals threshold bonus-amount]}] + (into {} + (map (fn [[emp-id total-sales]] + [emp-id (if (> total-sales threshold) bonus-amount 0)]) + sales-totals)))} + + :employee-total-compensation + {:commando/fn (fn [commissions bonuses] + (merge-with + commissions bonuses)) + :args [{:commando/from [:calculations :employee-commissions]} + {:commando/from [:calculations :employee-bonuses]}]} + + :department-financials + {:commando/apply + {:employees {:commando/from [:employees]} + :sales-totals {:commando/from [:calculations :employee-sales-totals]} + :compensations {:commando/from [:calculations :employee-total-compensation]} + :op-costs {:commando/from [:config :department-op-cost]}} + := (fn [{:keys [employees sales-totals compensations op-costs]}] + (let [initial-agg {:sales {:total-revenue 0 :total-compensation 0} + :marketing {:total-revenue 0 :total-compensation 0} + :engineering {:total-revenue 0 :total-compensation 0}}] + (as-> (reduce-kv (fn [agg emp-id emp-data] + (let [dept (:department emp-data) + revenue (get sales-totals emp-id 0) + compensation (get compensations emp-id 0)] + (-> agg + (update-in [dept :total-revenue] + revenue) + (update-in [dept :total-compensation] + compensation)))) + initial-agg + employees) data + (merge-with + (fn [dept-data op-cost] + (let [profit (- (:total-revenue dept-data) + (+ (:total-compensation dept-data) op-cost))] + (assoc dept-data + :operating-cost op-cost + :net-profit profit))) + data + op-costs))))}} + + :final-report + {:commando/apply + {:dept-financials {:commando/from [:calculations :department-financials]} + :total-sales-per-employee {:commando/from [:calculations :employee-sales-totals]} + :total-compensation-per-employee {:commando/from [:calculations :employee-total-compensation]} + :tax-rate {:commando/from [:config :tax-rate]}} + := (fn [{:keys [dept-financials total-sales-per-employee total-compensation-per-employee tax-rate]}] + (let [company-total-revenue (reduce + (map :total-revenue (vals dept-financials))) + company-total-compensation (reduce + (map :total-compensation (vals dept-financials))) + company-total-op-cost (reduce + (map :operating-cost (vals dept-financials))) + company-gross-profit (- company-total-revenue + (+ company-total-compensation company-total-op-cost)) + taxes-payable (* company-gross-profit tax-rate) + company-net-profit (- company-gross-profit taxes-payable)] + {:company-summary + {:total-revenue company-total-revenue + :total-compensation company-total-compensation + :total-operating-cost company-total-op-cost + :gross-profit company-gross-profit + :taxes-payable taxes-payable + :net-profit-after-tax company-net-profit} + :department-breakdown dept-financials + :employee-performance + {:top-earner (key (apply max-key val total-compensation-per-employee)) + :top-seller (key (apply max-key val total-sales-per-employee))}}))}}))) + + +;; ============================== +;; FLAME FOR RECURSIVE INVOCATION +;; ============================== + +(defn ^:private flame-print-stats [stats indent] + (let [max-key-len (apply max 0 (map (comp count name first) stats))] + (doseq [[stat-key _ formatted] stats] + (let [key-str (name stat-key) + padding (clojure.string/join "" (repeat (- max-key-len (count key-str)) " "))] + (println (str indent + "" key-str " " padding formatted)))))) + +(defn ^:private flame-print [data & [indent]] + (let [indent (or indent "")] + (doseq [[k v] data] + (println (str indent "———" k)) + (when (:stats v) + (flame-print-stats (:stats v) (str indent " |"))) + ;; рекурсивно обходимо вкладені map-и, крім :stats + (doseq [[child-k child-v] v + :when (map? child-v)] + (when (not= child-k :stats) + (flame-print {child-k child-v} (str indent " :"))))))) + +(defn ^:private flamegraph [data] + (println "Printing Flamegraph for executes:") + (flame-print data)) + +(defn ^:private execute-with-flame [registry instruction] + (let [stats-state (atom {}) + result + (binding [commando.impl.utils/*execute-config* + {; :debug-result true + :hook-execute-end + (fn [e] + (swap! stats-state + (fn [s] + (update-in s (:stack commando.impl.utils/*execute-internals*) + #(merge % {:stats (:stats e)})))))}] + (commando.core/execute + registry instruction))] + (flamegraph @stats-state) + result)) + +(defmethod commando.commands.query-dsl/command-resolve :query-B [_ {:keys [x QueryExpression]}] + (let [x (or x 10)] + (-> {:map {:a + {:b {:c x} + :d {:c (inc x) + :f (inc (inc x))}}} + :query-A (commando.commands.query-dsl/resolve-instruction-qe + "error" + {:commando/resolve :query-A + :x 1})} + (commando.commands.query-dsl/->query-run QueryExpression)))) + +(defmethod commando.commands.query-dsl/command-resolve :query-A [_ {:keys [x QueryExpression]}] + (let [x (or x 10)] + (-> {:map {:a + {:b {:c x} + :d {:c (inc x) + :f (inc (inc x))}}} + + :resolve-fn (commando.commands.query-dsl/resolve-fn + "error" + (fn [{:keys [x]}] + (let [y (or x 1) + range-y (if (< 10 y) 10 y)] + (for [z (range 0 range-y)] + {:a + {:b {:c (+ y z)} + :d {:c (inc (+ y z)) + :f (inc (inc (+ y z)))}}})))) + + + + :instruction-A (commando.commands.query-dsl/resolve-instruction + "error" + {:commando/fn (fn [& [y]] + {:a + {:b {:c y} + :d {:c (inc y) + :f (inc (inc y))}}}) + :args [x]}) + + + :query-A (commando.commands.query-dsl/resolve-instruction-qe + "error" + {:commando/resolve :query-A + :x 1}) + :query-B (commando.commands.query-dsl/resolve-instruction-qe + "error" + {:commando/resolve :query-B + :x 1})} + (commando.commands.query-dsl/->query-run QueryExpression)))) + +(defn run-execute-in-depth-with-using-queryDSL [] + (println "\n===================Benchmark=====================") + (println "Run commando/execute in depth with using queryDSL") + (println "=================================================") + (execute-with-flame + [commando.commands.query-dsl/command-resolve-spec + commando.commands.builtin/command-from-spec + commando.commands.builtin/command-fn-spec] + {:commando/resolve :query-A + :x 1 + :QueryExpression + [{:map + [{:a + [:b]}]} + {:instruction-A [:a]} + {:query-A + [{:map + [{:a + [:b]}]} + {:query-A + [{:map + [{:a + [:b]}]} + {:query-A + [{:map + [{:a + [:b]}]}]}]}]} + {:query-B + [{:map + [{:a + [:b]}]} + {:query-A + [{:map + [{:a + [:b]}]} + {:query-A + [{:instruction-A [:a]}]}]}]}]}) +) + + + + + + +;; ===================================== +;; BUILDING DEPENDECY COMPLEX TEST CASES +;; ===================================== + +(defn instruction-build-v+m [{:keys [wide-n long-n]}] + {:dependecy-token (* 2 wide-n long-n) + :source-maps + (mapv (fn [_n] + (into {} (mapv (fn [v] [(keyword (str "k" v)) v]) + (range 1 wide-n)))) + (range 1 long-n)) + :result-maps + (mapv (fn [n] + (into {} + (mapv + (fn [v] + (let [k (keyword (str "k" v))] + [k {:commando/from [:source-maps n k]}])) + (range 1 wide-n)))) + (range 1 long-n))}) + +(defn instruction-build-m [{:keys [wide-n long-n]}] + {:dependecy-token (* 2 wide-n long-n) + :source-maps + (reduce (fn [acc n] + (assoc acc (keyword (str "r" n)) + (into {} (mapv (fn [v] [(keyword (str "k" v)) v]) + (range 1 wide-n))))) + {} + (range 1 long-n)) + :result-maps + (reduce (fn [acc n] + (assoc acc (keyword (str "r" n)) + (into {} + (mapv + (fn [v] + (let [k (keyword (str "k" v))] + [k {:commando/from [:source-maps (keyword (str "r" n)) k]}])) + (range 1 wide-n))))) + {} + (range 1 long-n))}) + +(defn execute-complexity [{:keys [mode wide-n long-n]}] + (let [instruction-builder (case mode + :m (instruction-build-m {:wide-n wide-n :long-n long-n}) + :v+m (instruction-build-v+m {:wide-n wide-n :long-n long-n}))] + (binding [commando.impl.utils/*execute-config* + {:debug-result true}] + (let [result (commando.core/execute + [commando.commands.builtin/command-from-spec] + instruction-builder) + stats-grouped (reduce (fn [acc [k v label]] + (assoc acc k v)) + {} + (:stats result))] + {:dependecy-token (:dependecy-token instruction-builder) + :stats (:stats result) + :stats-grouped stats-grouped})))) + +;; ================================ +;; PLOT LOAD TEST CASES IN PNG FILE +;; WITH USING JFREECHART +;; ================================ + +(defn ^:private chat-custom-styles [chart] + (let [plotObject (.getPlot chart) + plotObjectRenderer (.getRenderer plotObject)] + (.setBackgroundPaint chart (java.awt.Color/new 255, 255, 255)) + (.setBackgroundPaint plotObject (java.awt.Color/new 255, 255, 255)) + (.setSeriesPaint plotObjectRenderer 0 (java.awt.Color/new 64, 115, 62)) + (.setSeriesPaint plotObjectRenderer 1 (java.awt.Color/new 62, 65, 115)) + (.setSeriesPaint plotObjectRenderer 2 (java.awt.Color/new 115, 94, 62)) + (.setSeriesPaint plotObjectRenderer 3 (java.awt.Color/new 115, 62, 62)) + (.setOutlineVisible plotObject false) + chart)) + +(defn execute-steps-grow_s_x_dep [] + (println "\n==================Benchmark====================") + (println "execute-steps(massive dep grow) secs_x_deps.png") + (println "===============================================") + (let [instruction-stats-result [(execute-complexity {:mode :v+m :wide-n 50 :long-n 50}) + (execute-complexity {:mode :v+m :wide-n 50 :long-n 500}) + (execute-complexity {:mode :v+m :wide-n 50 :long-n 5000}) + (execute-complexity {:mode :v+m :wide-n 50 :long-n 50000})] + chart-data (mapv (fn [e] (let [{:keys [dependecy-token stats-grouped]} e] + (-> stats-grouped + (dissoc "execute") + (update-vals (fn [nanosecs-t] + ;; (/ nanosecs-t 1000000) ;; miliseconds + (/ nanosecs-t 1000000000) ;; seconds + )) + (assoc "dependecy-token" dependecy-token)))) + instruction-stats-result)] + (doseq [{:keys [dependecy-token stats]} instruction-stats-result] + (print-stats {:stats stats} (str "Dependency Counts: " dependecy-token))) + (cljfreechart/save-chart-as-file + (-> chart-data + (cljfreechart/make-category-dataset {:group-key "dependecy-token"}) + (cljfreechart/make-bar-chart "commando.core/execute steps on massive count of dependencies" + {:category-title "Dependency Counts" + :value-title "Seconds"}) + (chat-custom-styles)) + "./test/perf/commando/execute-steps(massive dep grow) secs_x_deps.png" {:width 1200 :height 400}))) + +(defn execute-steps-normal_ms_x_dep [] + (println "\n================Benchmark================") + (println "execute-steps(normal) milisecs_x_deps.png") + (println "=========================================") + (let [instruction-stats-result + [(execute-complexity {:mode :m :wide-n 5 :long-n 10}) + (execute-complexity {:mode :m :wide-n 5 :long-n 14}) + (execute-complexity {:mode :m :wide-n 5 :long-n 15}) + (execute-complexity {:mode :m :wide-n 5 :long-n 20})] + chart-data (mapv (fn [e] (let [{:keys [dependecy-token stats-grouped]} e] + (-> stats-grouped + (dissoc "execute") + (update-vals (fn [nanosecs-t] + (/ nanosecs-t 1000000) ;; miliseconds + ;; (/ nanosecs-t 1000000000) ;; seconds + )) + (assoc "dependecy-token" dependecy-token)))) + instruction-stats-result)] + (doseq [{:keys [dependecy-token stats]} instruction-stats-result] + (print-stats {:stats stats} (str "Dependency Counts: " dependecy-token))) + (cljfreechart/save-chart-as-file + (-> chart-data + (cljfreechart/make-category-dataset {:group-key "dependecy-token"}) + (cljfreechart/make-bar-chart "commando.core/execute steps" + {:category-title "Dependency Counts" + :value-title "Miliseconds"}) + (chat-custom-styles)) + "./test/perf/commando/execute-steps(normal) milisecs_x_deps.png" {:width 1200 :height 400}))) + +(defn execute-normal_ms_x_dep [] + (println "\n=============Benchmark=============") + (println "execute(normal) milisecs_x_deps.png") + (println "===================================") + (let [instruction-stats-result + [(execute-complexity {:mode :v+m :wide-n 25 :long-n 25}) + (execute-complexity {:mode :v+m :wide-n 50 :long-n 50}) + (execute-complexity {:mode :v+m :wide-n 100 :long-n 100}) + (execute-complexity {:mode :v+m :wide-n 200 :long-n 200})] + chart-data (mapv (fn [e] (let [{:keys [dependecy-token stats-grouped]} e] + (-> stats-grouped + (select-keys ["execute"]) + (update-vals (fn [nanosecs-t] + (float (/ nanosecs-t 1000000)) ;; miliseconds + ;; (float (/ nanosecs-t 1000000000)) ;; seconds + )) + (assoc "dependecy-token" dependecy-token)))) + instruction-stats-result)] + (doseq [{:keys [dependecy-token stats]} instruction-stats-result] + (print-stats {:stats stats} (str "Dependency Counts: " dependecy-token))) + (cljfreechart/save-chart-as-file + (-> chart-data + (cljfreechart/make-category-dataset {:group-key "dependecy-token"}) + (cljfreechart/make-bar-chart "commando.core/execute times" + {:category-title "Dependency Counts" + :value-title "Miliseconds"}) + (chat-custom-styles)) + "./test/perf/commando/execute(normal) milisecs_x_deps.png" {:width 1200 :height 400}))) + +(defn -main [] + ;; Execution stats. + (real-word-calculation-average-of-50) + (run-execute-in-depth-with-using-queryDSL) + ;; Drow plot for special cases. + (execute-steps-normal_ms_x_dep) + (execute-normal_ms_x_dep) + (execute-steps-grow_s_x_dep)) + diff --git a/test/perf/commando/execute(normal) milisecs_x_deps.png b/test/perf/commando/execute(normal) milisecs_x_deps.png new file mode 100644 index 0000000000000000000000000000000000000000..5e9fc4c0ee41ca924f0b263b90af20c429dec839 GIT binary patch literal 20366 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 M(__WIJO1&109OO{&j0`b literal 0 HcmV?d00001 diff --git a/test/perf/commando/execute-steps(massive dep grow) secs_x_deps.png b/test/perf/commando/execute-steps(massive dep grow) secs_x_deps.png new file mode 100644 index 0000000000000000000000000000000000000000..7fe6b395eddc85aa29ee1ab4c2d4638ed0789497 GIT binary patch literal 18310 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 literal 0 HcmV?d00001 diff --git a/test/perf/commando/execute-steps(normal) milisecs_x_deps.png b/test/perf/commando/execute-steps(normal) milisecs_x_deps.png new file mode 100644 index 0000000000000000000000000000000000000000..907700c80e1a083330f7fc1072d24f8f919cb091 GIT binary patch literal 21889 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 total-sales threshold) bonus-amount 0)]) - sales-totals)))} - - ;; Step 5: Calculate total compensation (sales + commission + bonus) for each employee. - :employee-total-compensation - {:commando/fn (fn [commissions bonuses] - (merge-with + commissions bonuses)) - :args [{:commando/from [:calculations :employee-commissions]} - {:commando/from [:calculations :employee-bonuses]}]} - - ;; Step 6: Aggregate financial data by department. - :department-financials - {:commando/apply - {:employees {:commando/from [:employees]} - :sales-totals {:commando/from [:calculations :employee-sales-totals]} - :compensations {:commando/from [:calculations :employee-total-compensation]} - :op-costs {:commando/from [:config :department-op-cost]}} - := (fn [{:keys [employees sales-totals compensations op-costs]}] - (let [initial-agg {:sales {:total-revenue 0 :total-compensation 0} - :marketing {:total-revenue 0 :total-compensation 0} - :engineering {:total-revenue 0 :total-compensation 0}}] - (as-> (reduce-kv (fn [agg emp-id emp-data] - (let [dept (:department emp-data) - revenue (get sales-totals emp-id 0) - compensation (get compensations emp-id 0)] - (-> agg - (update-in [dept :total-revenue] + revenue) - (update-in [dept :total-compensation] + compensation)))) - initial-agg - employees) data - (merge-with - (fn [dept-data op-cost] - (let [profit (- (:total-revenue dept-data) - (+ (:total-compensation dept-data) op-cost))] - (assoc dept-data - :operating-cost op-cost - :net-profit profit))) - data - op-costs))))}} - - ;; -------------------------------------------------------------------------------- - ;; FINAL REPORT GENERATION - ;; -------------------------------------------------------------------------------- - :final-report - {:commando/apply - {:dept-financials {:commando/from [:calculations :department-financials]} - :total-sales-per-employee {:commando/from [:calculations :employee-sales-totals]} - :total-compensation-per-employee {:commando/from [:calculations :employee-total-compensation]} - :tax-rate {:commando/from [:config :tax-rate]}} - := (fn [{:keys [dept-financials total-sales-per-employee total-compensation-per-employee tax-rate]}] - (let [company-total-revenue (reduce + (map :total-revenue (vals dept-financials))) - company-total-compensation (reduce + (map :total-compensation (vals dept-financials))) - company-total-op-cost (reduce + (map :operating-cost (vals dept-financials))) - company-gross-profit (- company-total-revenue - (+ company-total-compensation company-total-op-cost)) - taxes-payable (* company-gross-profit tax-rate) - company-net-profit (- company-gross-profit taxes-payable)] - {:company-summary - {:total-revenue company-total-revenue - :total-compensation company-total-compensation - :total-operating-cost company-total-op-cost - :gross-profit company-gross-profit - :taxes-payable taxes-payable - :net-profit-after-tax company-net-profit} - :department-breakdown dept-financials - :employee-performance - {:top-earner (key (apply max-key val total-compensation-per-employee)) - :top-seller (key (apply max-key val total-sales-per-employee))}}))}}))) - -;; Flame - -(defn- flame-print-stats [stats indent] - (let [max-key-len (apply max 0 (map (comp count name first) stats))] - (doseq [[stat-key _ formatted] stats] - (let [key-str (name stat-key) - padding (clojure.string/join "" (repeat (- max-key-len (count key-str)) " "))] - (println (str indent - "" key-str " " padding formatted)))))) - -(defn flame-print [data & [indent]] - (let [indent (or indent "")] - (doseq [[k v] data] - (println (str indent "———" k)) - (when (:stats v) - (flame-print-stats (:stats v) (str indent " |"))) - ;; рекурсивно обходимо вкладені map-и, крім :stats - (doseq [[child-k child-v] v - :when (map? child-v)] - (when (not= child-k :stats) - (flame-print {child-k child-v} (str indent " :"))))))) - -(defn flamegraph [data] - (println "Execution Flamegraph") - (flame-print data)) - -(defn execute-flame [registry instruction] - (let [stats-state (atom {}) - result - (binding [commando.impl.utils/*execute-config* - {; :debug-result true - :hook-execute-end - (fn [e] - (swap! stats-state - (fn [s] - (update-in s (:stack commando.impl.utils/*execute-internals*) - #(merge % {:stats (:stats e)})))))}] - (commando.core/execute - registry instruction))] - (flamegraph @stats-state) - result)) - -(comment - (execute-flame - commando.commands.query-dsl-test/registry - {:commando/resolve :test-instruction-qe - :x 1 - :QueryExpression - [ - {:resolve-instruction-qe - [{:map [{:a - [:b]}]} - {:resolve-instruction - [{:a - [:b]}]} - {[:resolve-instruction-qe {:x 1000}] - [{:map [{:a - [:b]}]} - {:resolve-instruction - [{:a - [:b]}]} - {[:resolve-instruction-qe {:x 10000000}] - [{:map [{:a - [:b]}]}]}]}]}]})) From 842d343dc5d6a4d456f5360b4717c4c699a933b3 Mon Sep 17 00:00:00 2001 From: SerhiiRI Date: Wed, 12 Nov 2025 12:36:42 +0200 Subject: [PATCH 4/8] added git-lfs, and track *.png files --- .gitattributes | 1 + logo/Commando(bottom outlined).png | Bin 35501 -> 130 bytes logo/Commando(bottom).png | Bin 34015 -> 130 bytes logo/Commando(outlined).png | Bin 107428 -> 131 bytes logo/Commando(top outlined).png | Bin 65393 -> 130 bytes logo/Commando.png | Bin 89560 -> 130 bytes .../commando/dependency_load_plots_test.clj | 6 ------ .../execute(normal) milisecs_x_deps.png | Bin 20366 -> 130 bytes ...te-steps(massive dep grow) secs_x_deps.png | Bin 18310 -> 130 bytes .../execute-steps(normal) milisecs_x_deps.png | Bin 21889 -> 130 bytes 10 files changed, 1 insertion(+), 6 deletions(-) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..24a8e87 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.png filter=lfs diff=lfs merge=lfs -text diff --git a/logo/Commando(bottom outlined).png b/logo/Commando(bottom outlined).png index 9b830c249674954278455713c005f4a44291b4eb..31bb05e1efff62cd90451800c135de5945a0d9df 100644 GIT binary patch literal 130 zcmWN?OA^8$3;@u5Pr(H&gqQ%m4WA&)sO<>t!qe;9yh}c#?{C%SJjSN=qtDy3j`e># z)0+2}9*1Oo!Ls+FMvIns6O6$`8zI>{C!2CcL=hrE?^7v`lW`2*vGZ69Fx9{z5P^YM NDK4XbMIn)aT5gXRNnqIz&c6mxPXBn4gTi? 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 VhMrIO)HNXic4sf0DY5a0`7aTccpv}( diff --git a/logo/Commando(bottom).png b/logo/Commando(bottom).png index 9d0cb487ab7920c997ad8b3c17408569ce79c33f..e2a476ea3c60b378e72862e012f73a3b5eee2e78 100644 GIT binary patch literal 130 zcmWN?Q4+%t5CG7Br*MG=%M!VbU6h%&$&}=yr*A&qysLai-#@a=d5le|XP=K(9m{0oCd#B04axatIcHgI!b1 NNsRt0(mHKW`~l>eCr$tW literal 34015 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 !P2q-9z$cwHlNxUar<4DuE>=H}7JWr^xM02CG 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

S4Wbb=ZpPC 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 Nc%$_v0|&P_^9REyCQtwX literal 65393 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 NikSV&5_bq%`~dExC!qiU literal 89560 zcmeFZg;$i{7dQGK0v0GG(n?6DA~2)^(%p^H(lB%kehmbqyOkKEW#~rf7Dl>bfT0_P zn){5u``-WIuJyVWGqYGe`<%1S-k)8cAyh+6p7;*U9RL7`6%}N)0N^J0@g{JK5PXBt zbA15cZo4WNdH?`P8}0|M%jJg^_)BW2oB>qZ#RlsA#@!n5_V(trcXsfweB)}(>*8*k zwj)jh0FMDh*_S##>07hj=_dMtr~C7D-sdN!v!jJ2^{iAqh@YsZDmN!O3Ez^1aXeue ziu)+702?9qIkDK4dkEmMZb`nP&4Vz9!ci!nwUmW=l9fk-@yhc>__ot*> z__mk@P0lrW4Cy1p{dc_wCFJc(s=(a=KybEA3dz4u03zzf|32LR_P_U5eD?o+*aL6} z2mgr&|KI-t0RLAn|JN9R|NlEl78-Yr-Hi6atjwWrs3Y%p8@TJp%Eqd_idEB+m8Hvg zXpCW5;v+Sl)FNY#>(!{z`Sh+`uexU)2oC>-dvq__?%gZz2=5=IAv5s@pX!|WMDm|{H4d6$!_@3L18@y)&bV?fM3EGGaUzgLb;L2m&- zG&a^=pRkK;M2akFI5hX`Yi&UWWyR+)iFV>V3T0|z^jxAtbI$gjYujcN*M3qc+3_LlbQzOwmQ3#51w`)SQ1$T#%iE&Dj}mr% zB}0$Z6;3Tw{61%oJfpbiP=!6WhOBmQ%uYA1HosR;okp14mlzf+YqFg$abu$#oS=6W zStoB9ibec1cico}x7r$OksT@WTPXi=QB>^at1ii9B6~2cCn%m7FJt?8#bE7Ad)(kB zwe9%7)lL~z8}Ee@Gf1pCcdhzM>=J7FVIjp?7hVOo^ib}0z@9j6Z{pbwk2!7qI`f)N zt6&*uYFG|!$E)}s?`BW5wwDGr-31KXi%ZKKhMY_b_BZ<61?46!qg>GO*5kr~rhkvYS^CX>QB*F6(v6t+`%RErpEwG0bfd5P2_UqC&Z z_F|?^OI?Tq4os62>?dIRRCoY90t{8bH(v15Bwgi)tVmBs(}_s16HR^2g|Rq8^duD% z|7J~@wY*)vWA54rVP;GJL9;GayZE$G5L=)#ToNAX63(0HohPips;Ona+_m_JgfiGg`{c%a5zt zUxUeD_(JRIfNfJI!Inz(xMONx%+gdjk|fJ8P2sDq`BNsnhk~mFeT-rgKbPE0A)6Cn zjuGGKTRdzIUFcNgxOfAvPJ^~P2@b{?YhPV9XJ7FU0+zVg+^wBc5F{#EZ>$!%omjnp zwNrDwTp~6Sx?qH?yOZfY^qI?VS}B#}Cevs}#f_LnLhJk+Ws>cRpDl+MS0m3_(--aL z1I*uMzcUmFoRXq$mWIMce>;VSB{u1^_oYlG-Ykp7sb%7P@s04dOVb|#hs3`(6l? z6sm5&pHVbyZZFU<9J0u5=6O&cAta_TH~)?IXibkRG^!sWJmPEEWw#bqm#urHLufpr z^<*A%c&x?n#!VXNzKOGacRP_u=C0S?-7$;X?vBt95x)(tLl>A&o6KxJ)lB9mpVq(j z89I`u=|fbsn(uu;z!aci^>;#$LB=wpXt=0v7Op*M->GKN

KDKf8-5T0?T6V^B+}`N~$fJC)TFo&!j~ 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 M(__WIJO1&109OO{&j0`b diff --git a/test/perf/commando/execute-steps(massive dep grow) secs_x_deps.png b/test/perf/commando/execute-steps(massive dep grow) secs_x_deps.png index 7fe6b395eddc85aa29ee1ab4c2d4638ed0789497..df05d8566fe301e0a1fafc8a0ceaa4a8a21513ed 100644 GIT binary patch literal 130 zcmWN_OAf*y5CG6Ur{DsX4g=G%w_*4QiAp2bg{QZxm%KB7M(b}~=RC%4%%jcQvyA1k zer1XMWyX=CIYIT7^r*pl+6llVyRt=}2v`J}w+$kp&mrHrl$=PwqPrf6#5+P{D=}~Z NNourT*1!m>`UAB=CawSg literal 18310 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 diff --git a/test/perf/commando/execute-steps(normal) milisecs_x_deps.png b/test/perf/commando/execute-steps(normal) milisecs_x_deps.png index 907700c80e1a083330f7fc1072d24f8f919cb091..097983035e0f25201b9b0a660bc6071c2244bd73 100644 GIT binary patch literal 130 zcmWN?OA^8$3;@u5Pr(H&Nd!`Q8$LmpQRxWn!qe;9yh}c#^|z{X9%I+~(dO-0#`?dW zaZUZD$012yxb&9QsDZ58Z9vN8z_R3oC4vD5hKm7agN{W4cyeR`jRZCY@5vJqhlmV? Mm(jkW2)E5IKe5avG5`Po literal 21889 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 Date: Wed, 12 Nov 2025 22:31:34 +0200 Subject: [PATCH 5/8] FIXED duplicated registry name :commando/macro and macro-json --- src/commando/commands/builtin.cljc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/commando/commands/builtin.cljc b/src/commando/commands/builtin.cljc index 9279ab6..b7296c8 100644 --- a/src/commando/commands/builtin.cljc +++ b/src/commando/commands/builtin.cljc @@ -438,7 +438,7 @@ `commando.commands.builtin/command-macro` `commando.commands.builtin/command-macro-spec`"} command-macro-json-spec - {:type :commando/macro + {:type :commando/macro-json :recognize-fn #(and (map? %) (contains? % "commando-macro")) From b8e4ba65947937f4a266de13c2caee42f58bedc3 Mon Sep 17 00:00:00 2001 From: Serhii Riznychuk Date: Thu, 13 Nov 2025 16:44:29 +0200 Subject: [PATCH 6/8] UPDATE CHANGELOG.md Co-authored-by: Mateusz Mazurczak --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index aa08758..206aa70 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ ADDED new keys to `commando.impl.utils/*execute-config*`. Added hooks keys ADDED microsecs time measurement. All steps inside the `commando.core/execute` measure time. Every measurement adding to _status-map_ structure under `:stats` key. UPDATED `status-map` structure. Was added two keys - - `:uuid` autogenerated unique invocation identifier gotted everytime the function `commando.core/execute` were invoked + - `:uuid` autogenerated unique invocation identifier gotted for each `commando.core/execute` call - `:stats` contains vector of tuples like `["execute", 1085471, "1.085471ms"]` where `[, , ]`. Counts of steps depended from `*execute-config*` key `:debug-mode`. UPDATED sort-commands-by-deps. Straightforward sets joining in base Kahn's algorithm was rewrited with in-degree counting optimization. From 00753062a42ed7251dfffbe952aa59b02f764ca5 Mon Sep 17 00:00:00 2001 From: Serhii Riznychuk Date: Thu, 13 Nov 2025 16:45:33 +0200 Subject: [PATCH 7/8] Update src/commando/impl/dependency.cljc Co-authored-by: Mateusz Mazurczak --- src/commando/impl/dependency.cljc | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/commando/impl/dependency.cljc b/src/commando/impl/dependency.cljc index fc75fb2..50f753a 100644 --- a/src/commando/impl/dependency.cljc +++ b/src/commando/impl/dependency.cljc @@ -13,16 +13,11 @@ cm-list)) (defn- get-all-nested-commands - "Recursively traverses a trie (or sub-trie) and returns a lazy sequence of all command objects found." + "Lazily traverses a trie. + Returns a lazy sequence of all command objects found." [trie] - (if-not (map? trie) - [] - (lazy-seq - (let [command (::command trie) - children (dissoc trie ::command)] - (if command - (cons command (mapcat get-all-nested-commands (vals children))) - (mapcat get-all-nested-commands (vals children))))))) + (->> (tree-seq map? (fn [node] (vals (dissoc node ::command))) trie) + (keep ::command))) (defmulti find-command-dependencies "Finds command dependencies based on dependency-type. From 4c8f88bdb57a2c656dc5e2f878c5cd6c2fbdf758 Mon Sep 17 00:00:00 2001 From: SerhiiRI Date: Thu, 13 Nov 2025 17:33:53 +0200 Subject: [PATCH 8/8] REMOVED core_perf_test with criteria measurement --- deps.edn | 5 +- test/perf/commando/core_perf_test.clj | 898 ++++++++++-------- .../commando/dependency_load_plots_test.clj | 520 ---------- 3 files changed, 512 insertions(+), 911 deletions(-) delete mode 100644 test/perf/commando/dependency_load_plots_test.clj diff --git a/deps.edn b/deps.edn index c2f2f61..dd4b66b 100644 --- a/deps.edn +++ b/deps.edn @@ -10,9 +10,8 @@ :patterns [".*-test$"]} ;;For local performance regression tests :performance - {:extra-deps {criterium/criterium {:mvn/version "0.4.6"} - cljfreechart/cljfreechart {:mvn/version "0.2.0"}} - :main-opts ["-m" "commando.dependency-load-plots-test"] + {:extra-deps {cljfreechart/cljfreechart {:mvn/version "0.2.0"}} + :main-opts ["-m" "commando.core-perf-test"] :extra-paths ["test/perf"]} ;;Build jar :build {:deps {io.github.clojure/tools.build {:mvn/version "0.10.10"}} diff --git a/test/perf/commando/core_perf_test.clj b/test/perf/commando/core_perf_test.clj index 76146aa..13c0d01 100644 --- a/test/perf/commando/core_perf_test.clj +++ b/test/perf/commando/core_perf_test.clj @@ -1,398 +1,520 @@ (ns commando.core-perf-test - "Performance tests for Commando execute function. + (:require + [commando.impl.utils] + [commando.commands.builtin] + [commando.commands.query-dsl] + [commando.core] + [clojure.string :as str] + [cljfreechart.core :as cljfreechart])) - Run these tests individually in the REPL for detailed performance analysis. +;; ===================================== +;; PRINT UTILS +;; ===================================== - Performance tests were run with following setup: - Model Name: MacBook Pro - Model Identifier: Mac14,10 - Processor Name: Apple M2 Pro - Number of Processors: 1 - Total Number of Cores: 12 (8 performance and 4 efficiency) - L2 Cache (per Core): 4 MB - Memory: 16 GB +(defn print-stats + "Prints a formatted summary of the execution stats from a status-map." + ([status-map] + (print-stats status-map nil)) + ([status-map title] + (when-let [stats (:stats status-map)] + (let [max-key-len (apply max 0 (map (comp count name first) stats))] + (println (str "\nExecution Stats" (when title (str "(" title ")")) ":")) + (doseq [[index [stat-key _ formatted]] (map-indexed vector stats)] + (let [key-str (name stat-key) + padding (str/join "" (repeat (- max-key-len (count key-str)) " "))] + (println (str + " " (if (= "execute" key-str) "=" (str (inc index)) ) + " " key-str " " padding formatted)))))))) +(comment + (print-stats + (commando.core/execute + [commando.commands.builtin/command-fn-spec + commando.commands.builtin/command-from-spec + commando.commands.builtin/command-apply-spec] + {"1" 1 + "2" {:commando/from ["1"]} + "3" {:commando/from ["2"]}}))) - Basic performance tests: - (perf-simple-command) ; Single command execution - (perf-dependency-chain) ; 5-step dependency chain - (perf-medium-parallel) ; 50 independent commands - (perf-large-parallel) ; 200 independent commands +;; ======================================= +;; AVERAGE EXECUTION OF REAL WORLD EXAMPLE +;; ======================================= - Complex scenarios: - (perf-mixed-workflow) ; Multi-command workflow with dependencies - (perf-dependent-chain) ; 25-level dependency chain - (perf-wide-fanout) ; 1->100 fan-out pattern - (perf-deep-nested-instruction) ; 7 levels deep with 50+ cross-level references +(defn ^:private calculate-average-stats + "Takes a collection of status-maps and calculates the average duration for each stat-key." + [status-maps] + {:pre [(not-empty status-maps)]} + (let [keys-order (map first (:stats (first status-maps))) + all-stats (mapcat :stats status-maps) + grouped-stats (group-by first all-stats) + averages-grouped + (reduce (fn [acc [stat-key measurements]] + (let [total-duration (reduce + (map second measurements)) + count-measurements (count measurements) + average-duration (long (/ total-duration count-measurements))] + (assoc acc stat-key [stat-key average-duration (commando.impl.utils/format-time average-duration)]))) + {} grouped-stats)] + {:stats (mapv #(get averages-grouped %) keys-order)})) - Edge cases: - (perf-empty-instruction) ; Empty instruction overhead +(defmacro repeat-n-and-print-stats + "Repeats the execution of `body` `n` times, collects the status-maps," + [n & body] + `(let [results# (doall (for [_# (range ~n)] + ~@body)) + avg-stats# (calculate-average-stats results#)] + (print "Repeating instruction " ~n " times") + (print-stats avg-stats#))) - Comparative tests: - (perf-registry-vs-compiled) ; Direct vs pre-compiled performance +(defn real-word-calculation-average-of-50 [] + (println "\n=====================Benchmark=====================") + (println "Real Word calculation. Show average of 50 execution") + (println "===================================================") + (repeat-n-and-print-stats 50 + (commando.core/execute + [commando.commands.builtin/command-fn-spec + commando.commands.builtin/command-from-spec + commando.commands.builtin/command-apply-spec] + { ;; -------------------------------------------------------------------------------- + ;; RAW DATA & CONFIGURATION + ;; -------------------------------------------------------------------------------- + :config + {:commission-rates {:standard 0.07 :senior 0.12} + :bonus-threshold 50000 + :performance-bonus 2500 + :tax-rate 0.21 + :department-op-cost {:sales 15000 :marketing 10000 :engineering 25000}} - Run all benchmarks: - (run-all-benchmarks) ; Execute complete performance suite" - (:require - [commando.commands.builtin :as cmds-builtin] - [commando.core :as commando] - [criterium.core :as cc])) - -;;TODO include test with a really big registry, so like there are 50 command specs - -;; Test command definitions -(def test-add-id-command - {:type :test/add-id - :recognize-fn #(and (map? %) (contains? % :test/add-id)) - :apply (fn [_instruction _command-path-obj command-map] (assoc command-map :id :test-id)) - :dependencies {:mode :all-inside}}) - -;; Performance test functions -(defn perf-simple-command - [] - ;; === Simple single command execution === - ;; Evaluation count : 34368 in 6 samples of 5728 calls. - ;; Execution time mean : 18.710971 µs - ;; Execution time std-deviation : 317.972351 ns - ;; Execution time lower quantile : 18.283290 µs ( 2.5%) - ;; Execution time upper quantile : 19.018313 µs (97.5%) - ;; Overhead used : 1.648411 ns - (let [registry [cmds-builtin/command-from-spec test-add-id-command] - instruction {"cmd" {:test/add-id "test"}}] - ;; Verify correctness first - (assert (= :ok (:status (commando/execute registry instruction)))) - (assert (contains? (get-in (commando/execute registry instruction) [:instruction "cmd"]) :id)) - (println "\n=== Simple single command execution ===") - (cc/quick-bench (commando/execute registry instruction)))) - -(defn perf-dependency-chain - "Benchmark 5-step dependency chain." - [] - ;; === 5-step dependency chain === - ;; Evaluation count : 10368 in 6 samples of 1728 calls. - ;; Execution time mean : 62.820517 µs - ;; Execution time std-deviation : 1.072545 µs - ;; Execution time lower quantile : 61.709531 µs ( 2.5%) - ;; Execution time upper quantile : 63.890134 µs (97.5%) - ;; Overhead used : 1.648411 ns - (let [registry [cmds-builtin/command-from-spec test-add-id-command] - instruction {"step1" {:test/add-id "first"} - "step2" {:commando/from ["step1"]} - "step3" {:commando/from ["step2"]} - "step4" {:commando/from ["step3"]} - "step5" {:commando/from ["step4"]}}] - (let [result (commando/execute registry instruction)] - (assert (= :ok (:status result))) - (assert (every? #(contains? (get-in result [:instruction %]) :id) ["step1" "step2" "step3" "step4" "step5"]))) - (println "\n=== 5-step dependency chain ===") - (cc/quick-bench (commando/execute registry instruction)))) - -(defn perf-medium-parallel - "Benchmark 50 independent commands." - [] - ;; === 50 independent commands === - ;; Evaluation count : 132 in 6 samples of 22 calls. - ;; Execution time mean : 5.021323 ms - ;; Execution time std-deviation : 201.747532 µs - ;; Execution time lower quantile : 4.761436 ms ( 2.5%) - ;; Execution time upper quantile : 5.239934 ms (97.5%) - ;; Overhead used : 1.648411 ns - (let [registry [cmds-builtin/command-from-spec test-add-id-command] - instruction (into {} - (for [i (range 50)] - [i {:test/add-id (str "value-" i)}]))] - (let [result (commando/execute registry instruction)] - (assert (= :ok (:status result))) - (assert (= 50 (count (filter #(contains? % :id) (vals (:instruction result))))))) - (println "\n=== 50 independent commands ===") - (cc/quick-bench (commando/execute registry instruction)))) - -(defn perf-large-parallel - "Benchmark 200 independent commands." - [] - ;; === 200 independent commands === - ;; Evaluation count : 12 in 6 samples of 2 calls. - ;; Execution time mean : 81.060446 ms - ;; Execution time std-deviation : 3.257158 ms - ;; Execution time lower quantile : 77.974832 ms ( 2.5%) - ;; Execution time upper quantile : 86.378269 ms (97.5%) - ;; Overhead used : 1.648411 ns - (let [registry [cmds-builtin/command-from-spec test-add-id-command] - instruction (into {} - (for [i (range 200)] - [i {:test/add-id (str "value-" i)}]))] - (let [result (commando/execute registry instruction)] - (assert (= :ok (:status result))) - (assert (= 200 (count (filter #(contains? % :id) (vals (:instruction result))))))) - (println "\n=== 200 independent commands ===") - (cc/quick-bench (commando/execute registry instruction)))) - -(defn perf-mixed-workflow - "Benchmark complex mixed workflow with different command types" - [] - ;; === Complex mixed workflow === - ;; Evaluation count : 2472 in 6 samples of 412 calls. - ;; Execution time mean : 274.588157 µs - ;; Execution time std-deviation : 32.080465 µs - ;; Execution time lower quantile : 246.402883 µs ( 2.5%) - ;; Execution time upper quantile : 323.434512 µs (97.5%) - ;; Overhead used : 1.648411 ns - (let [registry [cmds-builtin/command-from-spec test-add-id-command cmds-builtin/command-fn-spec] - instruction {"source" 100 - "doubled" {:commando/fn * - :args [{:commando/from ["source"]} 2]} - "tripled" {:commando/fn * - :args [{:commando/from ["source"]} 3]} - "sum" {:commando/fn + - :args [{:commando/from ["doubled"]} {:commando/from ["tripled"]}]} - "metadata" {:test/add-id "workflow"} - "result" {:commando/from ["sum"]}}] - (let [result (commando/execute registry instruction)] - (assert (= :ok (:status result))) - (assert (= 500 (get-in result [:instruction "sum"]))) - (assert (= 500 (get-in result [:instruction "result"]))) - (assert (contains? (get-in result [:instruction "metadata"]) :id))) - (println "\n=== Complex mixed workflow ===") - (cc/quick-bench (commando/execute registry instruction)))) - -(defn perf-dependent-chain - "Benchmark 25 dependent commands chain" - [] - ;; === 25 dependency chain === - ;; Evaluation count : 1278 in 6 samples of 213 calls. - ;; Execution time mean : 509.752558 µs - ;; Execution time std-deviation : 14.089436 µs - ;; Execution time lower quantile : 489.605357 µs ( 2.5%) - ;; Execution time upper quantile : 524.969061 µs (97.5%) - ;; Overhead used : 1.648411 ns - (let [registry [cmds-builtin/command-from-spec test-add-id-command] - instruction - (reduce (fn [inst i] - (if (= i 0) (assoc inst i {:test/add-id (str "base-" i)}) (assoc inst i {:commando/from [(dec i)]}))) - {} - (range 25))] - (let [result (commando/execute registry instruction)] - (assert (= :ok (:status result))) - (assert (every? #(contains? (get-in result [:instruction %]) :id) (range 25)))) - (println "\n=== 25 dependency chain ===") - (cc/quick-bench (commando/execute registry instruction)))) - -(defn perf-wide-fanout - "Benchmark wide fan-out (1->100 dependencies)" - [] - ;; === Wide fan-out (1->100) === - ;; Evaluation count : 120 in 6 samples of 20 calls. - ;; Execution time mean : 5.575331 ms - ;; Execution time std-deviation : 307.267615 µs - ;; Execution time lower quantile : 5.198288 ms ( 2.5%) - ;; Execution time upper quantile : 6.052582 ms (97.5%) - ;; Overhead used : 1.648411 ns - (let [registry [cmds-builtin/command-from-spec test-add-id-command] - base-instruction {"base" {:test/add-id "shared"}} - instruction (into base-instruction - (for [i (range 100)] - [i {:commando/from ["base"]}]))] - (let [result (commando/execute registry instruction)] - (assert (= :ok (:status result))) - (assert (contains? (get-in result [:instruction "base"]) :id)) - (assert (every? #(contains? (get-in result [:instruction %]) :id) (range 100)))) - (println "\n=== Wide fan-out (1->100) ===") - (cc/quick-bench (commando/execute registry instruction)))) - - -(defn perf-empty-instruction - "Benchmark empty instruction overhead" - [] - ;; === Empty instruction === - ;; Evaluation count : 59592 in 6 samples of 9932 calls. - ;; Execution time mean : 10.729503 µs - ;; Execution time std-deviation : 418.557691 ns - ;; Execution time lower quantile : 10.167363 µs ( 2.5%) - ;; Execution time upper quantile : 11.199093 µs (97.5%) - ;; Overhead used : 1.648411 ns - (let [registry [cmds-builtin/command-from-spec test-add-id-command]] - (assert (= :ok (:status (commando/execute registry {})))) - (assert (= {} (:instruction (commando/execute registry {})))) - (println "\n=== Empty instruction ===") - (cc/quick-bench (commando/execute registry {})))) - -(defn perf-deep-nested-instruction - "Benchmark deeply nested instruction map with 50+ command references across multiple levels" - [] - ;; === Deep nested instruction (7 levels, 50+ commands) === - ;; Evaluation count : 234 in 6 samples of 39 calls. - ;; Execution time mean : 2.613528 ms - ;; Execution time std-deviation : 74.361807 µs - ;; Execution time lower quantile : 2.510160 ms ( 2.5%) - ;; Execution time upper quantile : 2.699545 ms (97.5%) - ;; Overhead used : 1.648411 ns - (let [registry [cmds-builtin/command-from-spec test-add-id-command] - instruction {"root1" {:test/add-id "root-cmd-1"} - "root2" {:test/add-id "root-cmd-2"} - "root3" {:commando/from ["root1"]} - "level1" - {"l1-cmd1" {:test/add-id "level1-base"} - "l1-cmd2" {:commando/from ["root1"]} - "l1-cmd3" {:commando/from ["root2"]} - "l1-cmd4" {:commando/from ["level1" "l1-cmd1"]} - "level2" - {"l2-cmd1" {:test/add-id "level2-base"} - "l2-cmd2" {:commando/from ["level1" "l1-cmd1"]} - "l2-cmd3" {:commando/from ["root1"]} - "l2-cmd4" {:commando/from ["level1" "l1-cmd2"]} - "l2-cmd5" {:commando/from ["level1" "level2" "l2-cmd1"]} - "level3" - {"l3-cmd1" {:test/add-id "level3-base"} - "l3-cmd2" {:commando/from ["level1" "level2" "l2-cmd1"]} - "l3-cmd3" {:commando/from ["root2"]} - "l3-cmd4" {:commando/from ["level1" "l1-cmd1"]} - "l3-cmd5" {:commando/from ["level1" "level2" "l2-cmd2"]} - "l3-cmd6" {:commando/from ["level1" "level2" "level3" "l3-cmd1"]} - "level4" - {"l4-cmd1" {:test/add-id "level4-base"} - "l4-cmd2" {:commando/from ["level1" "level2" "level3" "l3-cmd1"]} - "l4-cmd3" {:commando/from ["level1" "l1-cmd1"]} - "l4-cmd4" {:commando/from ["root1"]} - "l4-cmd5" {:commando/from ["level1" "level2" "l2-cmd1"]} - "l4-cmd6" {:commando/from ["level1" "level2" "level3" "l3-cmd2"]} - "l4-cmd7" {:commando/from ["level1" "level2" "level3" "level4" "l4-cmd1"]} - "level5" - {"l5-cmd1" {:test/add-id "level5-base"} - "l5-cmd2" {:commando/from ["level1" "level2" "level3" "level4" "l4-cmd1"]} - "l5-cmd3" {:commando/from ["root2"]} - "l5-cmd4" {:commando/from ["level1" "level2" "l2-cmd1"]} - "l5-cmd5" {:commando/from ["level1" "level2" "level3" "l3-cmd1"]} - "l5-cmd6" {:commando/from ["level1" "level2" "level3" "level4" "l4-cmd2"]} - "l5-cmd7" {:commando/from ["level1" "level2" "level3" "level4" "level5" "l5-cmd1"]} - "l5-cmd8" {:commando/from ["level1" "l1-cmd3"]} - "level6" - {"l6-cmd1" {:test/add-id "level6-base"} - "l6-cmd2" {:commando/from ["level1" "level2" "level3" "level4" "level5" "l5-cmd1"]} - "l6-cmd3" {:commando/from ["root1"]} - "l6-cmd4" {:commando/from ["level1" "level2" "level3" "l3-cmd1"]} - "l6-cmd5" {:commando/from ["level1" "level2" "level3" "level4" "l4-cmd1"]} - "l6-cmd6" {:commando/from ["level1" "level2" "level3" "level4" "level5" "l5-cmd2"]} - "l6-cmd7" {:commando/from ["level1" "level2" "level3" "level4" "level5" "level6" "l6-cmd1"]} - "l6-cmd8" {:commando/from ["level1" "l1-cmd2"]} - "l6-cmd9" {:commando/from ["level1" "level2" "l2-cmd3"]} - "level7" - {"l7-cmd1" {:test/add-id "level7-base"} - "l7-cmd2" {:commando/from ["level1" "level2" "level3" "level4" "level5" "level6" "l6-cmd1"]} - "l7-cmd3" {:commando/from ["root2"]} - "l7-cmd4" {:commando/from ["level1" "level2" "level3" "level4" "l4-cmd1"]} - "l7-cmd5" {:commando/from ["level1" "level2" "level3" "level4" "level5" "l5-cmd1"]} - "l7-cmd6" {:commando/from ["level1" "level2" "level3" "level4" "level5" "level6" "l6-cmd2"]} - "l7-cmd7" {:commando/from - ["level1" "level2" "level3" "level4" "level5" "level6" "level7" "l7-cmd1"]} - "l7-cmd8" {:commando/from ["level1" "level2" "l2-cmd4"]} - "l7-cmd9" {:commando/from ["level1" "level2" "level3" "l3-cmd3"]} - "l7-cmd10" {:commando/from ["level1" "level2" "level3" "level4" "level5" "l5-cmd3"]}}}}}}}}} - result (commando/execute registry instruction)] - (assert (= :ok (:status result))) - ;; Verify commands at various levels have been processed - (assert (contains? (get-in result [:instruction "root1"]) :id)) - (assert (contains? (get-in result [:instruction "level1" "l1-cmd1"]) :id)) - (assert (contains? (get-in result [:instruction "level1" "level2" "l2-cmd1"]) :id)) - (assert (contains? (get-in result [:instruction "level1" "level2" "level3" "l3-cmd1"]) :id)) - (assert (contains? (get-in result [:instruction "level1" "level2" "level3" "level4" "l4-cmd1"]) :id)) - (assert (contains? (get-in result [:instruction "level1" "level2" "level3" "level4" "level5" "l5-cmd1"]) :id)) - (assert (contains? (get-in result [:instruction "level1" "level2" "level3" "level4" "level5" "level6" "l6-cmd1"]) - :id)) - (assert (contains? (get-in result - [:instruction "level1" "level2" "level3" "level4" "level5" "level6" "level7" "l7-cmd1"]) - :id)) - ;; Verify cross-level dependencies work - (assert (contains? (get-in result - [:instruction "level1" "level2" "level3" "level4" "level5" "level6" "level7" "l7-cmd2"]) - :id)) - (assert (contains? (get-in result - [:instruction "level1" "level2" "level3" "level4" "level5" "level6" "level7" "l7-cmd10"]) - :id)) - (println "\n=== Deep nested instruction (7 levels, 50+ commands) ===") - (cc/quick-bench (commando/execute registry instruction)))) - -(defn perf-registry-vs-compiled - "Compare direct registry vs pre-compiled performance" - [] - ;; === Direct registry execution === - ;; Baseline performance using registry directly - ;; Evaluation count : 16590 in 6 samples of 2765 calls. - ;; Execution time mean : 41.007615 µs - ;; Execution time std-deviation : 2.673693 µs - ;; Execution time lower quantile : 39.111703 µs ( 2.5%) - ;; Execution time upper quantile : 45.405028 µs (97.5%) - ;; Overhead used : 1.648411 ns - ;; - ;; === Pre-compiled execution === - ;; Performance using pre-compiled version - ;; Evaluation count : 173178 in 6 samples of 28863 calls. - ;; Execution time mean : 3.671263 µs - ;; Execution time std-deviation : 121.707808 ns - ;; Execution time lower quantile : 3.486865 µs ( 2.5%) - ;; Execution time upper quantile : 3.806872 µs (97.5%) - ;; Overhead used : 1.648411 ns - (let [registry [cmds-builtin/command-from-spec test-add-id-command] - instruction {"step1" {:test/add-id "first"} - "step2" {:commando/from ["step1"]} - "step3" {:commando/from ["step2"]}} - compiler (commando/build-compiler registry instruction)] - (assert (= (:instruction (commando/execute registry instruction)) - (:instruction (commando/execute compiler instruction)))) - (println "\n=== Direct registry execution ===") - (println "Baseline performance using registry directly") - (cc/quick-bench (commando/execute registry instruction)) - (println "\n=== Pre-compiled execution ===") - (println "Performance using pre-compiled version") - (cc/quick-bench (commando/execute compiler instruction)))) - -(defn run-all-benchmarks - "Run complete performance benchmark suite" - [] - (println "=================================================================") - (println "COMMANDO PERFORMANCE BENCHMARK SUITE") - (println "=================================================================") - (println "Hardware specs will affect absolute timings.") - (println "Focus on relative performance and regression detection.") - (println "=================================================================") - (perf-simple-command) - (perf-dependency-chain) - (perf-medium-parallel) - (perf-large-parallel) - (perf-mixed-workflow) - (perf-empty-instruction) - (perf-wide-fanout) - (perf-dependent-chain) - (perf-deep-nested-instruction) - (perf-registry-vs-compiled) - (println "\n=================================================================") - (println "PERFORMANCE BENCHMARK SUITE COMPLETE") - (println "=================================================================")) - -(defn run-quick-benchmarks - "Run essential benchmarks for quick performance check" - [] - (println "=== QUICK PERFORMANCE CHECK ===") - (perf-simple-command) - (perf-dependency-chain) - (perf-medium-parallel) - (perf-mixed-workflow) - (perf-deep-nested-instruction) - (println "=== QUICK CHECK COMPLETE ===")) + :products + {"prod-001" {:name "Alpha Widget" :price 250.0} + "prod-002" {:name "Beta Gadget" :price 475.0} + "prod-003" {:name "Gamma Gizmo" :price 1200.0}} + + :employees + {"emp-101" {:name "John Doe" :department :sales :level :senior} + "emp-102" {:name "Jane Smith" :department :sales :level :standard} + "emp-103" {:name "Peter Jones" :department :marketing :level :senior} + "emp-201" {:name "Mary Major" :department :engineering :level :standard}} + + :sales-records + [ ;; John's Sales + {:employee-id "emp-101" :product-id "prod-003" :units-sold 50} + {:employee-id "emp-101" :product-id "prod-001" :units-sold 120} + ;; Jane's Sales + {:employee-id "emp-102" :product-id "prod-001" :units-sold 80} + {:employee-id "emp-102" :product-id "prod-002" :units-sold 40} + ;; Peter's Sales (Marketing can also sell) + {:employee-id "emp-103" :product-id "prod-002" :units-sold 10}] + + :calculations + {:sales-revenues + {:commando/fn (fn [sales products] + (mapv (fn [sale] + (let [product (get products (:product-id sale))] + (assoc sale :total-revenue (* (:units-sold sale) (:price product))))) + sales)) + :args [{:commando/from [:sales-records]} + {:commando/from [:products]}]} + + :employee-sales-totals + {:commando/fn (fn [sales-revenues] + (reduce (fn [acc sale] + (update acc + (:employee-id sale) + (fnil + 0) + (:total-revenue sale))) + {} + sales-revenues)) + :args [{:commando/from [:calculations :sales-revenues]}]} + + :employee-commissions + {:commando/apply + {:sales-totals {:commando/from [:calculations :employee-sales-totals]} + :employees {:commando/from [:employees]} + :rates {:commando/from [:config :commission-rates]}} + := (fn [{:keys [sales-totals employees rates]}] + (into {} + (map (fn [[emp-id total-sales]] + (let [employee (get employees emp-id) + rate-key (:level employee) + commission-rate (get rates rate-key 0)] + [emp-id (* total-sales commission-rate)])) + sales-totals)))} + + :employee-bonuses + {:commando/apply + {:sales-totals {:commando/from [:calculations :employee-sales-totals]} + :threshold {:commando/from [:config :bonus-threshold]} + :bonus-amount {:commando/from [:config :performance-bonus]}} + := (fn [{:keys [sales-totals threshold bonus-amount]}] + (into {} + (map (fn [[emp-id total-sales]] + [emp-id (if (> total-sales threshold) bonus-amount 0)]) + sales-totals)))} + + :employee-total-compensation + {:commando/fn (fn [commissions bonuses] + (merge-with + commissions bonuses)) + :args [{:commando/from [:calculations :employee-commissions]} + {:commando/from [:calculations :employee-bonuses]}]} + + :department-financials + {:commando/apply + {:employees {:commando/from [:employees]} + :sales-totals {:commando/from [:calculations :employee-sales-totals]} + :compensations {:commando/from [:calculations :employee-total-compensation]} + :op-costs {:commando/from [:config :department-op-cost]}} + := (fn [{:keys [employees sales-totals compensations op-costs]}] + (let [initial-agg {:sales {:total-revenue 0 :total-compensation 0} + :marketing {:total-revenue 0 :total-compensation 0} + :engineering {:total-revenue 0 :total-compensation 0}}] + (as-> (reduce-kv (fn [agg emp-id emp-data] + (let [dept (:department emp-data) + revenue (get sales-totals emp-id 0) + compensation (get compensations emp-id 0)] + (-> agg + (update-in [dept :total-revenue] + revenue) + (update-in [dept :total-compensation] + compensation)))) + initial-agg + employees) data + (merge-with + (fn [dept-data op-cost] + (let [profit (- (:total-revenue dept-data) + (+ (:total-compensation dept-data) op-cost))] + (assoc dept-data + :operating-cost op-cost + :net-profit profit))) + data + op-costs))))}} + + :final-report + {:commando/apply + {:dept-financials {:commando/from [:calculations :department-financials]} + :total-sales-per-employee {:commando/from [:calculations :employee-sales-totals]} + :total-compensation-per-employee {:commando/from [:calculations :employee-total-compensation]} + :tax-rate {:commando/from [:config :tax-rate]}} + := (fn [{:keys [dept-financials total-sales-per-employee total-compensation-per-employee tax-rate]}] + (let [company-total-revenue (reduce + (map :total-revenue (vals dept-financials))) + company-total-compensation (reduce + (map :total-compensation (vals dept-financials))) + company-total-op-cost (reduce + (map :operating-cost (vals dept-financials))) + company-gross-profit (- company-total-revenue + (+ company-total-compensation company-total-op-cost)) + taxes-payable (* company-gross-profit tax-rate) + company-net-profit (- company-gross-profit taxes-payable)] + {:company-summary + {:total-revenue company-total-revenue + :total-compensation company-total-compensation + :total-operating-cost company-total-op-cost + :gross-profit company-gross-profit + :taxes-payable taxes-payable + :net-profit-after-tax company-net-profit} + :department-breakdown dept-financials + :employee-performance + {:top-earner (key (apply max-key val total-compensation-per-employee)) + :top-seller (key (apply max-key val total-sales-per-employee))}}))}}))) + + +;; ============================== +;; FLAME FOR RECURSIVE INVOCATION +;; ============================== + +(defn ^:private flame-print-stats [stats indent] + (let [max-key-len (apply max 0 (map (comp count name first) stats))] + (doseq [[stat-key _ formatted] stats] + (let [key-str (name stat-key) + padding (clojure.string/join "" (repeat (- max-key-len (count key-str)) " "))] + (println (str indent + "" key-str " " padding formatted)))))) + +(defn ^:private flame-print [data & [indent]] + (let [indent (or indent "")] + (doseq [[k v] data] + (println (str indent "———" k)) + (when (:stats v) + (flame-print-stats (:stats v) (str indent " |"))) + (doseq [[child-k child-v] v + :when (map? child-v)] + (when (not= child-k :stats) + (flame-print {child-k child-v} (str indent " :"))))))) + +(defn ^:private flamegraph [data] + (println "Printing Flamegraph for executes:") + (flame-print data)) + +(defn ^:private execute-with-flame [registry instruction] + (let [stats-state (atom {}) + result + (binding [commando.impl.utils/*execute-config* + {; :debug-result true + :hook-execute-end + (fn [e] + (swap! stats-state + (fn [s] + (update-in s (:stack commando.impl.utils/*execute-internals*) + #(merge % {:stats (:stats e)})))))}] + (commando.core/execute + registry instruction))] + (flamegraph @stats-state) + result)) + +(defmethod commando.commands.query-dsl/command-resolve :query-B [_ {:keys [x QueryExpression]}] + (let [x (or x 10)] + (-> {:map {:a + {:b {:c x} + :d {:c (inc x) + :f (inc (inc x))}}} + :query-A (commando.commands.query-dsl/resolve-instruction-qe + "error" + {:commando/resolve :query-A + :x 1})} + (commando.commands.query-dsl/->query-run QueryExpression)))) + +(defmethod commando.commands.query-dsl/command-resolve :query-A [_ {:keys [x QueryExpression]}] + (let [x (or x 10)] + (-> {:map {:a + {:b {:c x} + :d {:c (inc x) + :f (inc (inc x))}}} + + :resolve-fn (commando.commands.query-dsl/resolve-fn + "error" + (fn [{:keys [x]}] + (let [y (or x 1) + range-y (if (< 10 y) 10 y)] + (for [z (range 0 range-y)] + {:a + {:b {:c (+ y z)} + :d {:c (inc (+ y z)) + :f (inc (inc (+ y z)))}}})))) + + + + :instruction-A (commando.commands.query-dsl/resolve-instruction + "error" + {:commando/fn (fn [& [y]] + {:a + {:b {:c y} + :d {:c (inc y) + :f (inc (inc y))}}}) + :args [x]}) + + + :query-A (commando.commands.query-dsl/resolve-instruction-qe + "error" + {:commando/resolve :query-A + :x 1}) + :query-B (commando.commands.query-dsl/resolve-instruction-qe + "error" + {:commando/resolve :query-B + :x 1})} + (commando.commands.query-dsl/->query-run QueryExpression)))) + +(defn run-execute-in-depth-with-using-queryDSL [] + (println "\n===================Benchmark=====================") + (println "Run commando/execute in depth with using queryDSL") + (println "=================================================") + (execute-with-flame + [commando.commands.query-dsl/command-resolve-spec + commando.commands.builtin/command-from-spec + commando.commands.builtin/command-fn-spec] + {:commando/resolve :query-A + :x 1 + :QueryExpression + [{:map + [{:a + [:b]}]} + {:instruction-A [:a]} + {:query-A + [{:map + [{:a + [:b]}]} + {:query-A + [{:map + [{:a + [:b]}]} + {:query-A + [{:map + [{:a + [:b]}]}]}]}]} + {:query-B + [{:map + [{:a + [:b]}]} + {:query-A + [{:map + [{:a + [:b]}]} + {:query-A + [{:instruction-A [:a]}]}]}]}]}) +) + +;; ===================================== +;; BUILDING DEPENDECY COMPLEX TEST CASES +;; ===================================== + +(defn instruction-build-v+m [{:keys [wide-n long-n]}] + {:dependecy-token (* 2 wide-n long-n) + :source-maps + (mapv (fn [_n] + (into {} (mapv (fn [v] [(keyword (str "k" v)) v]) + (range 1 wide-n)))) + (range 1 long-n)) + :result-maps + (mapv (fn [n] + (into {} + (mapv + (fn [v] + (let [k (keyword (str "k" v))] + [k {:commando/from [:source-maps n k]}])) + (range 1 wide-n)))) + (range 1 long-n))}) + +(defn instruction-build-m [{:keys [wide-n long-n]}] + {:dependecy-token (* 2 wide-n long-n) + :source-maps + (reduce (fn [acc n] + (assoc acc (keyword (str "r" n)) + (into {} (mapv (fn [v] [(keyword (str "k" v)) v]) + (range 1 wide-n))))) + {} + (range 1 long-n)) + :result-maps + (reduce (fn [acc n] + (assoc acc (keyword (str "r" n)) + (into {} + (mapv + (fn [v] + (let [k (keyword (str "k" v))] + [k {:commando/from [:source-maps (keyword (str "r" n)) k]}])) + (range 1 wide-n))))) + {} + (range 1 long-n))}) + +(defn execute-complexity [{:keys [mode wide-n long-n]}] + (let [instruction-builder (case mode + :m (instruction-build-m {:wide-n wide-n :long-n long-n}) + :v+m (instruction-build-v+m {:wide-n wide-n :long-n long-n}))] + (binding [commando.impl.utils/*execute-config* + {:debug-result true}] + (let [result (commando.core/execute + [commando.commands.builtin/command-from-spec] + instruction-builder) + stats-grouped (reduce (fn [acc [k v label]] + (assoc acc k v)) + {} + (:stats result))] + {:dependecy-token (:dependecy-token instruction-builder) + :stats (:stats result) + :stats-grouped stats-grouped})))) + +;; ================================ +;; PLOT LOAD TEST CASES IN PNG FILE +;; WITH USING JFREECHART +;; ================================ + +(defn ^:private chat-custom-styles [chart] + (let [plotObject (.getPlot chart) + plotObjectRenderer (.getRenderer plotObject)] + (.setBackgroundPaint chart (java.awt.Color/new 255, 255, 255)) + (.setBackgroundPaint plotObject (java.awt.Color/new 255, 255, 255)) + (.setSeriesPaint plotObjectRenderer 0 (java.awt.Color/new 64, 115, 62)) + (.setSeriesPaint plotObjectRenderer 1 (java.awt.Color/new 62, 65, 115)) + (.setSeriesPaint plotObjectRenderer 2 (java.awt.Color/new 115, 94, 62)) + (.setSeriesPaint plotObjectRenderer 3 (java.awt.Color/new 115, 62, 62)) + (.setOutlineVisible plotObject false) + chart)) + +(defn execute-steps-grow_s_x_dep [] + (println "\n==================Benchmark====================") + (println "execute-steps(massive dep grow) secs_x_deps.png") + (println "===============================================") + (let [instruction-stats-result [(execute-complexity {:mode :v+m :wide-n 50 :long-n 50}) + (execute-complexity {:mode :v+m :wide-n 50 :long-n 500}) + (execute-complexity {:mode :v+m :wide-n 50 :long-n 5000}) + (execute-complexity {:mode :v+m :wide-n 50 :long-n 50000})] + chart-data (mapv (fn [e] (let [{:keys [dependecy-token stats-grouped]} e] + (-> stats-grouped + (dissoc "execute") + (update-vals (fn [nanosecs-t] + ;; (/ nanosecs-t 1000000) ;; miliseconds + (/ nanosecs-t 1000000000) ;; seconds + )) + (assoc "dependecy-token" dependecy-token)))) + instruction-stats-result)] + (doseq [{:keys [dependecy-token stats]} instruction-stats-result] + (print-stats {:stats stats} (str "Dependency Counts: " dependecy-token))) + (cljfreechart/save-chart-as-file + (-> chart-data + (cljfreechart/make-category-dataset {:group-key "dependecy-token"}) + (cljfreechart/make-bar-chart "commando.core/execute steps on massive count of dependencies" + {:category-title "Dependency Counts" + :value-title "Seconds"}) + (chat-custom-styles)) + "./test/perf/commando/execute-steps(massive dep grow) secs_x_deps.png" {:width 1200 :height 400}))) + +(defn execute-steps-normal_ms_x_dep [] + (println "\n================Benchmark================") + (println "execute-steps(normal) milisecs_x_deps.png") + (println "=========================================") + (let [instruction-stats-result + [(execute-complexity {:mode :m :wide-n 5 :long-n 10}) + (execute-complexity {:mode :m :wide-n 5 :long-n 14}) + (execute-complexity {:mode :m :wide-n 5 :long-n 15}) + (execute-complexity {:mode :m :wide-n 5 :long-n 20})] + chart-data (mapv (fn [e] (let [{:keys [dependecy-token stats-grouped]} e] + (-> stats-grouped + (dissoc "execute") + (update-vals (fn [nanosecs-t] + (/ nanosecs-t 1000000) ;; miliseconds + ;; (/ nanosecs-t 1000000000) ;; seconds + )) + (assoc "dependecy-token" dependecy-token)))) + instruction-stats-result)] + (doseq [{:keys [dependecy-token stats]} instruction-stats-result] + (print-stats {:stats stats} (str "Dependency Counts: " dependecy-token))) + (cljfreechart/save-chart-as-file + (-> chart-data + (cljfreechart/make-category-dataset {:group-key "dependecy-token"}) + (cljfreechart/make-bar-chart "commando.core/execute steps" + {:category-title "Dependency Counts" + :value-title "Miliseconds"}) + (chat-custom-styles)) + "./test/perf/commando/execute-steps(normal) milisecs_x_deps.png" {:width 1200 :height 400}))) + +(defn execute-normal_ms_x_dep [] + (println "\n=============Benchmark=============") + (println "execute(normal) milisecs_x_deps.png") + (println "===================================") + (let [instruction-stats-result + [(execute-complexity {:mode :v+m :wide-n 25 :long-n 25}) + (execute-complexity {:mode :v+m :wide-n 50 :long-n 50}) + (execute-complexity {:mode :v+m :wide-n 100 :long-n 100}) + (execute-complexity {:mode :v+m :wide-n 200 :long-n 200})] + chart-data (mapv (fn [e] (let [{:keys [dependecy-token stats-grouped]} e] + (-> stats-grouped + (select-keys ["execute"]) + (update-vals (fn [nanosecs-t] + (float (/ nanosecs-t 1000000)) ;; miliseconds + ;; (float (/ nanosecs-t 1000000000)) ;; seconds + )) + (assoc "dependecy-token" dependecy-token)))) + instruction-stats-result)] + (doseq [{:keys [dependecy-token stats]} instruction-stats-result] + (print-stats {:stats stats} (str "Dependency Counts: " dependecy-token))) + (cljfreechart/save-chart-as-file + (-> chart-data + (cljfreechart/make-category-dataset {:group-key "dependecy-token"}) + (cljfreechart/make-bar-chart "commando.core/execute times" + {:category-title "Dependency Counts" + :value-title "Miliseconds"}) + (chat-custom-styles)) + "./test/perf/commando/execute(normal) milisecs_x_deps.png" {:width 1200 :height 400}))) + +(defn -main [] + ;; Execution stats. + (real-word-calculation-average-of-50) + (run-execute-in-depth-with-using-queryDSL) + ;; Drow plot for special cases. + (execute-steps-normal_ms_x_dep) + (execute-normal_ms_x_dep) + (execute-steps-grow_s_x_dep)) -(comment - ;; REPL usage examples: - ;; Run individual benchmarks - (perf-simple-command) - (perf-dependency-chain) - (perf-medium-parallel) - ;; Run quick performance check - (run-quick-benchmarks) - ;; Run complete benchmark suite (takes longer) - (run-all-benchmarks) - ;; Compare specific scenarios - (perf-registry-vs-compiled) - ;; Test edge cases - (perf-empty-instruction) - (perf-dependent-chain) - (perf-wide-fanout) - (perf-deep-nested-instruction)) diff --git a/test/perf/commando/dependency_load_plots_test.clj b/test/perf/commando/dependency_load_plots_test.clj deleted file mode 100644 index 1122581..0000000 --- a/test/perf/commando/dependency_load_plots_test.clj +++ /dev/null @@ -1,520 +0,0 @@ -(ns commando.dependency-load-plots-test - (:require - [commando.impl.utils] - [commando.commands.builtin] - [commando.commands.query-dsl] - [commando.core] - [clojure.string :as str] - [cljfreechart.core :as cljfreechart])) - -;; ===================================== -;; PRINT UTILS -;; ===================================== - -(defn print-stats - "Prints a formatted summary of the execution stats from a status-map." - ([status-map] - (print-stats status-map nil)) - ([status-map title] - (when-let [stats (:stats status-map)] - (let [max-key-len (apply max 0 (map (comp count name first) stats))] - (println (str "\nExecution Stats" (when title (str "(" title ")")) ":")) - (doseq [[index [stat-key _ formatted]] (map-indexed vector stats)] - (let [key-str (name stat-key) - padding (str/join "" (repeat (- max-key-len (count key-str)) " "))] - (println (str - " " (if (= "execute" key-str) "=" (str (inc index)) ) - " " key-str " " padding formatted)))))))) - -(comment - (print-stats - (commando.core/execute - [commando.commands.builtin/command-fn-spec - commando.commands.builtin/command-from-spec - commando.commands.builtin/command-apply-spec] - {"1" 1 - "2" {:commando/from ["1"]} - "3" {:commando/from ["2"]}}))) - -;; ======================================= -;; AVERAGE EXECUTION OF REAL WORLD EXAMPLE -;; ======================================= - -(defn ^:private calculate-average-stats - "Takes a collection of status-maps and calculates the average duration for each stat-key." - [status-maps] - {:pre [(not-empty status-maps)]} - (let [keys-order (map first (:stats (first status-maps))) - all-stats (mapcat :stats status-maps) - grouped-stats (group-by first all-stats) - averages-grouped - (reduce (fn [acc [stat-key measurements]] - (let [total-duration (reduce + (map second measurements)) - count-measurements (count measurements) - average-duration (long (/ total-duration count-measurements))] - (assoc acc stat-key [stat-key average-duration (commando.impl.utils/format-time average-duration)]))) - {} grouped-stats)] - {:stats (mapv #(get averages-grouped %) keys-order)})) - -(defmacro repeat-n-and-print-stats - "Repeats the execution of `body` `n` times, collects the status-maps," - [n & body] - `(let [results# (doall (for [_# (range ~n)] - ~@body)) - avg-stats# (calculate-average-stats results#)] - (print "Repeating instruction " ~n " times") - (print-stats avg-stats#))) - -(defn real-word-calculation-average-of-50 [] - (println "\n=====================Benchmark=====================") - (println "Real Word calculation. Show average of 50 execution") - (println "===================================================") - (repeat-n-and-print-stats 50 - (commando.core/execute - [commando.commands.builtin/command-fn-spec - commando.commands.builtin/command-from-spec - commando.commands.builtin/command-apply-spec] - { ;; -------------------------------------------------------------------------------- - ;; RAW DATA & CONFIGURATION - ;; -------------------------------------------------------------------------------- - :config - {:commission-rates {:standard 0.07 :senior 0.12} - :bonus-threshold 50000 - :performance-bonus 2500 - :tax-rate 0.21 - :department-op-cost {:sales 15000 :marketing 10000 :engineering 25000}} - - :products - {"prod-001" {:name "Alpha Widget" :price 250.0} - "prod-002" {:name "Beta Gadget" :price 475.0} - "prod-003" {:name "Gamma Gizmo" :price 1200.0}} - - :employees - {"emp-101" {:name "John Doe" :department :sales :level :senior} - "emp-102" {:name "Jane Smith" :department :sales :level :standard} - "emp-103" {:name "Peter Jones" :department :marketing :level :senior} - "emp-201" {:name "Mary Major" :department :engineering :level :standard}} - - :sales-records - [ ;; John's Sales - {:employee-id "emp-101" :product-id "prod-003" :units-sold 50} - {:employee-id "emp-101" :product-id "prod-001" :units-sold 120} - ;; Jane's Sales - {:employee-id "emp-102" :product-id "prod-001" :units-sold 80} - {:employee-id "emp-102" :product-id "prod-002" :units-sold 40} - ;; Peter's Sales (Marketing can also sell) - {:employee-id "emp-103" :product-id "prod-002" :units-sold 10}] - - :calculations - {:sales-revenues - {:commando/fn (fn [sales products] - (mapv (fn [sale] - (let [product (get products (:product-id sale))] - (assoc sale :total-revenue (* (:units-sold sale) (:price product))))) - sales)) - :args [{:commando/from [:sales-records]} - {:commando/from [:products]}]} - - :employee-sales-totals - {:commando/fn (fn [sales-revenues] - (reduce (fn [acc sale] - (update acc - (:employee-id sale) - (fnil + 0) - (:total-revenue sale))) - {} - sales-revenues)) - :args [{:commando/from [:calculations :sales-revenues]}]} - - :employee-commissions - {:commando/apply - {:sales-totals {:commando/from [:calculations :employee-sales-totals]} - :employees {:commando/from [:employees]} - :rates {:commando/from [:config :commission-rates]}} - := (fn [{:keys [sales-totals employees rates]}] - (into {} - (map (fn [[emp-id total-sales]] - (let [employee (get employees emp-id) - rate-key (:level employee) - commission-rate (get rates rate-key 0)] - [emp-id (* total-sales commission-rate)])) - sales-totals)))} - - :employee-bonuses - {:commando/apply - {:sales-totals {:commando/from [:calculations :employee-sales-totals]} - :threshold {:commando/from [:config :bonus-threshold]} - :bonus-amount {:commando/from [:config :performance-bonus]}} - := (fn [{:keys [sales-totals threshold bonus-amount]}] - (into {} - (map (fn [[emp-id total-sales]] - [emp-id (if (> total-sales threshold) bonus-amount 0)]) - sales-totals)))} - - :employee-total-compensation - {:commando/fn (fn [commissions bonuses] - (merge-with + commissions bonuses)) - :args [{:commando/from [:calculations :employee-commissions]} - {:commando/from [:calculations :employee-bonuses]}]} - - :department-financials - {:commando/apply - {:employees {:commando/from [:employees]} - :sales-totals {:commando/from [:calculations :employee-sales-totals]} - :compensations {:commando/from [:calculations :employee-total-compensation]} - :op-costs {:commando/from [:config :department-op-cost]}} - := (fn [{:keys [employees sales-totals compensations op-costs]}] - (let [initial-agg {:sales {:total-revenue 0 :total-compensation 0} - :marketing {:total-revenue 0 :total-compensation 0} - :engineering {:total-revenue 0 :total-compensation 0}}] - (as-> (reduce-kv (fn [agg emp-id emp-data] - (let [dept (:department emp-data) - revenue (get sales-totals emp-id 0) - compensation (get compensations emp-id 0)] - (-> agg - (update-in [dept :total-revenue] + revenue) - (update-in [dept :total-compensation] + compensation)))) - initial-agg - employees) data - (merge-with - (fn [dept-data op-cost] - (let [profit (- (:total-revenue dept-data) - (+ (:total-compensation dept-data) op-cost))] - (assoc dept-data - :operating-cost op-cost - :net-profit profit))) - data - op-costs))))}} - - :final-report - {:commando/apply - {:dept-financials {:commando/from [:calculations :department-financials]} - :total-sales-per-employee {:commando/from [:calculations :employee-sales-totals]} - :total-compensation-per-employee {:commando/from [:calculations :employee-total-compensation]} - :tax-rate {:commando/from [:config :tax-rate]}} - := (fn [{:keys [dept-financials total-sales-per-employee total-compensation-per-employee tax-rate]}] - (let [company-total-revenue (reduce + (map :total-revenue (vals dept-financials))) - company-total-compensation (reduce + (map :total-compensation (vals dept-financials))) - company-total-op-cost (reduce + (map :operating-cost (vals dept-financials))) - company-gross-profit (- company-total-revenue - (+ company-total-compensation company-total-op-cost)) - taxes-payable (* company-gross-profit tax-rate) - company-net-profit (- company-gross-profit taxes-payable)] - {:company-summary - {:total-revenue company-total-revenue - :total-compensation company-total-compensation - :total-operating-cost company-total-op-cost - :gross-profit company-gross-profit - :taxes-payable taxes-payable - :net-profit-after-tax company-net-profit} - :department-breakdown dept-financials - :employee-performance - {:top-earner (key (apply max-key val total-compensation-per-employee)) - :top-seller (key (apply max-key val total-sales-per-employee))}}))}}))) - - -;; ============================== -;; FLAME FOR RECURSIVE INVOCATION -;; ============================== - -(defn ^:private flame-print-stats [stats indent] - (let [max-key-len (apply max 0 (map (comp count name first) stats))] - (doseq [[stat-key _ formatted] stats] - (let [key-str (name stat-key) - padding (clojure.string/join "" (repeat (- max-key-len (count key-str)) " "))] - (println (str indent - "" key-str " " padding formatted)))))) - -(defn ^:private flame-print [data & [indent]] - (let [indent (or indent "")] - (doseq [[k v] data] - (println (str indent "———" k)) - (when (:stats v) - (flame-print-stats (:stats v) (str indent " |"))) - (doseq [[child-k child-v] v - :when (map? child-v)] - (when (not= child-k :stats) - (flame-print {child-k child-v} (str indent " :"))))))) - -(defn ^:private flamegraph [data] - (println "Printing Flamegraph for executes:") - (flame-print data)) - -(defn ^:private execute-with-flame [registry instruction] - (let [stats-state (atom {}) - result - (binding [commando.impl.utils/*execute-config* - {; :debug-result true - :hook-execute-end - (fn [e] - (swap! stats-state - (fn [s] - (update-in s (:stack commando.impl.utils/*execute-internals*) - #(merge % {:stats (:stats e)})))))}] - (commando.core/execute - registry instruction))] - (flamegraph @stats-state) - result)) - -(defmethod commando.commands.query-dsl/command-resolve :query-B [_ {:keys [x QueryExpression]}] - (let [x (or x 10)] - (-> {:map {:a - {:b {:c x} - :d {:c (inc x) - :f (inc (inc x))}}} - :query-A (commando.commands.query-dsl/resolve-instruction-qe - "error" - {:commando/resolve :query-A - :x 1})} - (commando.commands.query-dsl/->query-run QueryExpression)))) - -(defmethod commando.commands.query-dsl/command-resolve :query-A [_ {:keys [x QueryExpression]}] - (let [x (or x 10)] - (-> {:map {:a - {:b {:c x} - :d {:c (inc x) - :f (inc (inc x))}}} - - :resolve-fn (commando.commands.query-dsl/resolve-fn - "error" - (fn [{:keys [x]}] - (let [y (or x 1) - range-y (if (< 10 y) 10 y)] - (for [z (range 0 range-y)] - {:a - {:b {:c (+ y z)} - :d {:c (inc (+ y z)) - :f (inc (inc (+ y z)))}}})))) - - - - :instruction-A (commando.commands.query-dsl/resolve-instruction - "error" - {:commando/fn (fn [& [y]] - {:a - {:b {:c y} - :d {:c (inc y) - :f (inc (inc y))}}}) - :args [x]}) - - - :query-A (commando.commands.query-dsl/resolve-instruction-qe - "error" - {:commando/resolve :query-A - :x 1}) - :query-B (commando.commands.query-dsl/resolve-instruction-qe - "error" - {:commando/resolve :query-B - :x 1})} - (commando.commands.query-dsl/->query-run QueryExpression)))) - -(defn run-execute-in-depth-with-using-queryDSL [] - (println "\n===================Benchmark=====================") - (println "Run commando/execute in depth with using queryDSL") - (println "=================================================") - (execute-with-flame - [commando.commands.query-dsl/command-resolve-spec - commando.commands.builtin/command-from-spec - commando.commands.builtin/command-fn-spec] - {:commando/resolve :query-A - :x 1 - :QueryExpression - [{:map - [{:a - [:b]}]} - {:instruction-A [:a]} - {:query-A - [{:map - [{:a - [:b]}]} - {:query-A - [{:map - [{:a - [:b]}]} - {:query-A - [{:map - [{:a - [:b]}]}]}]}]} - {:query-B - [{:map - [{:a - [:b]}]} - {:query-A - [{:map - [{:a - [:b]}]} - {:query-A - [{:instruction-A [:a]}]}]}]}]}) -) - -;; ===================================== -;; BUILDING DEPENDECY COMPLEX TEST CASES -;; ===================================== - -(defn instruction-build-v+m [{:keys [wide-n long-n]}] - {:dependecy-token (* 2 wide-n long-n) - :source-maps - (mapv (fn [_n] - (into {} (mapv (fn [v] [(keyword (str "k" v)) v]) - (range 1 wide-n)))) - (range 1 long-n)) - :result-maps - (mapv (fn [n] - (into {} - (mapv - (fn [v] - (let [k (keyword (str "k" v))] - [k {:commando/from [:source-maps n k]}])) - (range 1 wide-n)))) - (range 1 long-n))}) - -(defn instruction-build-m [{:keys [wide-n long-n]}] - {:dependecy-token (* 2 wide-n long-n) - :source-maps - (reduce (fn [acc n] - (assoc acc (keyword (str "r" n)) - (into {} (mapv (fn [v] [(keyword (str "k" v)) v]) - (range 1 wide-n))))) - {} - (range 1 long-n)) - :result-maps - (reduce (fn [acc n] - (assoc acc (keyword (str "r" n)) - (into {} - (mapv - (fn [v] - (let [k (keyword (str "k" v))] - [k {:commando/from [:source-maps (keyword (str "r" n)) k]}])) - (range 1 wide-n))))) - {} - (range 1 long-n))}) - -(defn execute-complexity [{:keys [mode wide-n long-n]}] - (let [instruction-builder (case mode - :m (instruction-build-m {:wide-n wide-n :long-n long-n}) - :v+m (instruction-build-v+m {:wide-n wide-n :long-n long-n}))] - (binding [commando.impl.utils/*execute-config* - {:debug-result true}] - (let [result (commando.core/execute - [commando.commands.builtin/command-from-spec] - instruction-builder) - stats-grouped (reduce (fn [acc [k v label]] - (assoc acc k v)) - {} - (:stats result))] - {:dependecy-token (:dependecy-token instruction-builder) - :stats (:stats result) - :stats-grouped stats-grouped})))) - -;; ================================ -;; PLOT LOAD TEST CASES IN PNG FILE -;; WITH USING JFREECHART -;; ================================ - -(defn ^:private chat-custom-styles [chart] - (let [plotObject (.getPlot chart) - plotObjectRenderer (.getRenderer plotObject)] - (.setBackgroundPaint chart (java.awt.Color/new 255, 255, 255)) - (.setBackgroundPaint plotObject (java.awt.Color/new 255, 255, 255)) - (.setSeriesPaint plotObjectRenderer 0 (java.awt.Color/new 64, 115, 62)) - (.setSeriesPaint plotObjectRenderer 1 (java.awt.Color/new 62, 65, 115)) - (.setSeriesPaint plotObjectRenderer 2 (java.awt.Color/new 115, 94, 62)) - (.setSeriesPaint plotObjectRenderer 3 (java.awt.Color/new 115, 62, 62)) - (.setOutlineVisible plotObject false) - chart)) - -(defn execute-steps-grow_s_x_dep [] - (println "\n==================Benchmark====================") - (println "execute-steps(massive dep grow) secs_x_deps.png") - (println "===============================================") - (let [instruction-stats-result [(execute-complexity {:mode :v+m :wide-n 50 :long-n 50}) - (execute-complexity {:mode :v+m :wide-n 50 :long-n 500}) - (execute-complexity {:mode :v+m :wide-n 50 :long-n 5000}) - (execute-complexity {:mode :v+m :wide-n 50 :long-n 50000})] - chart-data (mapv (fn [e] (let [{:keys [dependecy-token stats-grouped]} e] - (-> stats-grouped - (dissoc "execute") - (update-vals (fn [nanosecs-t] - ;; (/ nanosecs-t 1000000) ;; miliseconds - (/ nanosecs-t 1000000000) ;; seconds - )) - (assoc "dependecy-token" dependecy-token)))) - instruction-stats-result)] - (doseq [{:keys [dependecy-token stats]} instruction-stats-result] - (print-stats {:stats stats} (str "Dependency Counts: " dependecy-token))) - (cljfreechart/save-chart-as-file - (-> chart-data - (cljfreechart/make-category-dataset {:group-key "dependecy-token"}) - (cljfreechart/make-bar-chart "commando.core/execute steps on massive count of dependencies" - {:category-title "Dependency Counts" - :value-title "Seconds"}) - (chat-custom-styles)) - "./test/perf/commando/execute-steps(massive dep grow) secs_x_deps.png" {:width 1200 :height 400}))) - -(defn execute-steps-normal_ms_x_dep [] - (println "\n================Benchmark================") - (println "execute-steps(normal) milisecs_x_deps.png") - (println "=========================================") - (let [instruction-stats-result - [(execute-complexity {:mode :m :wide-n 5 :long-n 10}) - (execute-complexity {:mode :m :wide-n 5 :long-n 14}) - (execute-complexity {:mode :m :wide-n 5 :long-n 15}) - (execute-complexity {:mode :m :wide-n 5 :long-n 20})] - chart-data (mapv (fn [e] (let [{:keys [dependecy-token stats-grouped]} e] - (-> stats-grouped - (dissoc "execute") - (update-vals (fn [nanosecs-t] - (/ nanosecs-t 1000000) ;; miliseconds - ;; (/ nanosecs-t 1000000000) ;; seconds - )) - (assoc "dependecy-token" dependecy-token)))) - instruction-stats-result)] - (doseq [{:keys [dependecy-token stats]} instruction-stats-result] - (print-stats {:stats stats} (str "Dependency Counts: " dependecy-token))) - (cljfreechart/save-chart-as-file - (-> chart-data - (cljfreechart/make-category-dataset {:group-key "dependecy-token"}) - (cljfreechart/make-bar-chart "commando.core/execute steps" - {:category-title "Dependency Counts" - :value-title "Miliseconds"}) - (chat-custom-styles)) - "./test/perf/commando/execute-steps(normal) milisecs_x_deps.png" {:width 1200 :height 400}))) - -(defn execute-normal_ms_x_dep [] - (println "\n=============Benchmark=============") - (println "execute(normal) milisecs_x_deps.png") - (println "===================================") - (let [instruction-stats-result - [(execute-complexity {:mode :v+m :wide-n 25 :long-n 25}) - (execute-complexity {:mode :v+m :wide-n 50 :long-n 50}) - (execute-complexity {:mode :v+m :wide-n 100 :long-n 100}) - (execute-complexity {:mode :v+m :wide-n 200 :long-n 200})] - chart-data (mapv (fn [e] (let [{:keys [dependecy-token stats-grouped]} e] - (-> stats-grouped - (select-keys ["execute"]) - (update-vals (fn [nanosecs-t] - (float (/ nanosecs-t 1000000)) ;; miliseconds - ;; (float (/ nanosecs-t 1000000000)) ;; seconds - )) - (assoc "dependecy-token" dependecy-token)))) - instruction-stats-result)] - (doseq [{:keys [dependecy-token stats]} instruction-stats-result] - (print-stats {:stats stats} (str "Dependency Counts: " dependecy-token))) - (cljfreechart/save-chart-as-file - (-> chart-data - (cljfreechart/make-category-dataset {:group-key "dependecy-token"}) - (cljfreechart/make-bar-chart "commando.core/execute times" - {:category-title "Dependency Counts" - :value-title "Miliseconds"}) - (chat-custom-styles)) - "./test/perf/commando/execute(normal) milisecs_x_deps.png" {:width 1200 :height 400}))) - -(defn -main [] - ;; Execution stats. - (real-word-calculation-average-of-50) - (run-execute-in-depth-with-using-queryDSL) - ;; Drow plot for special cases. - (execute-steps-normal_ms_x_dep) - (execute-normal_ms_x_dep) - (execute-steps-grow_s_x_dep)) -