|
13 | 13 | [clojure.string :as str]
|
14 | 14 | [taoensso.truss :as truss]
|
15 | 15 | [taoensso.encore :as enc]
|
16 |
| - [taoensso.encore.stats :as stats]) |
| 16 | + [taoensso.encore.stats :as stats] |
| 17 | + [taoensso.encore.signals :as sigs]) |
17 | 18 |
|
18 | 19 | #?(:cljs
|
19 | 20 | (:require-macros
|
|
638 | 639 | (map (fn [id] (str id sep (format-pstats (get m id) format-pstats-opts))))
|
639 | 640 | sorted-profiling-ids)))))
|
640 | 641 |
|
| 642 | +;;;; Profiling Signals |
| 643 | +;; - Filtering relevant for `profiled`, `profile` |
| 644 | +;; - Handlers relevant for `profiled` only |
| 645 | + |
| 646 | +(enc/defonce ^:dynamic *sig-handlers* "?[<wrapped-handler-fn>]" nil) |
| 647 | + |
| 648 | +(defrecord PSignal |
| 649 | + ;; Based on `taoensso.telemere.impl/Signal` |
| 650 | + [schema inst, ns coords, id level, #?@(:clj [host thread]), |
| 651 | + sample ctx data, body-val, pstats format-pstats-fn] |
| 652 | + |
| 653 | + Object (toString [this] (str "taoensso.tufte.PSignal" (enc/pr-edn* (into {} this))))) |
| 654 | + |
| 655 | +;; Verbose constructors for readability + to support extra keys |
| 656 | +(do (enc/def-print-impl [x PSignal] (str "#taoensso.tufte.PSignal" (enc/pr-edn* (into {} x))))) |
| 657 | +#?(:clj (enc/def-print-dup [x PSignal] (str "#taoensso.tufte.impl.PSignal" (enc/pr-edn* (into {} x))))) |
| 658 | + |
| 659 | +(defn psignal? #?(:cljs {:tag 'boolean}) [x] (instance? PSignal x)) |
| 660 | + |
| 661 | +(defrecord WrappedPSignal [ns id level signal-value_] |
| 662 | + sigs/ISignalHandling |
| 663 | + (allow-signal? [_ spec-filter] (spec-filter ns id level)) |
| 664 | + (signal-debug [_] {:ns ns, :id id, :level level}) |
| 665 | + (signal-value [_ handler-sample-rate] |
| 666 | + (sigs/signal-with-combined-sample-rate handler-sample-rate |
| 667 | + (force signal-value_)))) |
| 668 | + |
| 669 | +#?(:clj |
| 670 | + (let [base (enc/get-env {:as :edn} [:taoensso.tufte/ct-filters<.platform><.edn>]) |
| 671 | + ns-filter (enc/get-env {:as :edn} [:taoensso.tufte/ct-ns-filter<.platform><.edn> :taoensso.tufte/ns-pattern]) |
| 672 | + id-filter (enc/get-env {:as :edn} [:taoensso.tufte/ct-id-filter<.platform><.edn>]) |
| 673 | + min-level (enc/get-env {:as :edn} [:taoensso.tufte/ct-min-level<.platform><.edn> :taoensso.tufte/min-level])] |
| 674 | + |
| 675 | + (enc/defonce ct-call-filter |
| 676 | + "`SpecFilter` used for compile-time elision, or nil." |
| 677 | + (sigs/spec-filter |
| 678 | + {:ns-filter (or ns-filter (get base :ns-filter)) |
| 679 | + :id-filter (or id-filter (get base :id-filter)) |
| 680 | + :min-level (or min-level (get base :min-level))})))) |
| 681 | + |
| 682 | +(let [base (enc/get-env {:as :edn} [:taoensso.tufte/rt-filters<.platform><.edn>]) |
| 683 | + ns-filter (enc/get-env {:as :edn} [:taoensso.tufte/rt-ns-filter<.platform><.edn>]) |
| 684 | + id-filter (enc/get-env {:as :edn} [:taoensso.tufte/rt-id-filter<.platform><.edn>]) |
| 685 | + min-level (enc/get-env {:as :edn} [:taoensso.tufte/rt-min-level<.platform><.edn>])] |
| 686 | + |
| 687 | + (enc/defonce ^:dynamic *rt-call-filter* |
| 688 | + "`SpecFilter` used for runtime filtering, or nil." |
| 689 | + (sigs/spec-filter |
| 690 | + {:ns-filter (or ns-filter (get base :ns-filter)) |
| 691 | + :id-filter (or id-filter (get base :id-filter)) |
| 692 | + :min-level (or min-level (get base :min-level))}))) |
| 693 | + |
| 694 | +(comment (enc/get-env {:as :edn, :return :explain} :taoensso.tufte/rt-filters<.platform><.edn>)) |
| 695 | + |
641 | 696 | ;;;; Handlers
|
642 | 697 |
|
643 | 698 | (defrecord HandlerVal [ns-str level ?id ?data pstats pstats-str_ ?file ?line]
|
|
647 | 702 | (do (enc/def-print-impl [x HandlerVal] (str "#taoensso.tufte.HandlerVal" (enc/pr-edn* (into {} x)))))
|
648 | 703 | #?(:clj (enc/def-print-dup [x HandlerVal] (str "#taoensso.tufte.impl.HandlerVal" (enc/pr-edn* (into {} x)))))
|
649 | 704 |
|
650 |
| -(defn handler-val? #?(:cljs {:tag 'boolean}) [x] (instance? HandlerVal x)) |
651 |
| - |
652 | 705 | (enc/defonce handlers_ "{<hid> <handler-fn>}" (atom nil))
|
653 | 706 |
|
654 | 707 | #?(:clj
|
|
0 commit comments