Skip to content

Instantly share code, notes, and snippets.

@xeago
Last active August 29, 2015 13:57
Show Gist options
  • Save xeago/9881610 to your computer and use it in GitHub Desktop.
Save xeago/9881610 to your computer and use it in GitHub Desktop.
diff --git a/src/spotify/rules/cia.clj b/src/spotify/rules/cia.clj
index 896c1b2..529a5c1 100644
--- a/src/spotify/rules/cia.clj
+++ b/src/spotify/rules/cia.clj
@@ -76,20 +76,14 @@
((split
(trigger-predicate events)
(smap peek #(prn "crit: " %) (with :state "critical" s))
(and (not @state-ok) (cancel-predicate events))
(smap peek #(prn "trig: " %) (with :state "critical" s))
(smap peek #(prn "reso: " %) (with :state "ok" s))) events)))))
-(defmacro fraction-predicate
- [fraction, state]
- (fn [events]
- (let [f (/ (count (filter #(= (:state %) state) events)) (count events))]
- (>= f fraction))))
-
(defn ratio-calc
[events]
(let [ratio
(/ (count (filter #(= "critical" (:state %)) events))
(count events))]
(assoc (last events) :metric ratio)))
@@ -130,10 +124,14 @@
(where (service #"^git-clone-status/.*")
;; Raise an alarm if during the last 300s,
;; greater than 75/100 has state "critical"
;; Will not split by host,
;; still splits by pod (out of our control)
(by [:service]
(moving-trigger-fraction-trigger 300
- (fraction-predicate 75/100 "critical")
- (fraction-predicate 75/100 "ok")
+ (fn [events]
+ (let [fraction (/ (count (filter #(= (:state %) "critical") events)) (count events))]
+ (>= fraction 75/100)))
+ (fn [events]
+ (let [fraction (/ (count (filter #(= (:state %) "ok") events)) (count events))]
+ (>= fraction 75/100)))
alert-stream)))))
Exception in thread "main" java.lang.ExceptionInInitializerError
at spotify.rules.cia$rules.invoke(cia.clj:122)
at clojure.lang.Var.invoke(Var.java:415)
at lyceum.core$rules_for_ns.invoke(core.clj:57)
at spotify.rules.cia_test$eval225$fn__226.invoke(cia_test.clj:6)
at clojure.test$compose_fixtures$fn__7139$fn__7140.invoke(test.clj:678)
at clojure.test$default_fixture.invoke(test.clj:671)
at clojure.test$compose_fixtures$fn__7139.invoke(test.clj:678)
at clojure.test$test_all_vars$fn__7149.invoke(test.clj:717)
at clojure.test$default_fixture.invoke(test.clj:671)
at clojure.test$test_all_vars.invoke(test.clj:713)
at clojure.test$test_ns.invoke(test.clj:736)
at clojure.core$map$fn__4207.invoke(core.clj:2487)
at clojure.lang.LazySeq.sval(LazySeq.java:42)
at clojure.lang.LazySeq.seq(LazySeq.java:60)
at clojure.lang.Cons.next(Cons.java:39)
at clojure.lang.RT.boundedLength(RT.java:1654)
at clojure.lang.RestFn.applyTo(RestFn.java:130)
at clojure.core$apply.invoke(core.clj:619)
at clojure.test$run_tests.doInvoke(test.clj:751)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invoke(core.clj:617)
at user$eval94$fn__149$fn__180.invoke(NO_SOURCE_FILE)
at user$eval94$fn__149$fn__150.invoke(NO_SOURCE_FILE:0)
at user$eval94$fn__149.invoke(NO_SOURCE_FILE:0)
at user$eval94.invoke(NO_SOURCE_FILE:0)
at clojure.lang.Compiler.eval(Compiler.java:6619)
at clojure.lang.Compiler.eval(Compiler.java:6609)
at clojure.lang.Compiler.eval(Compiler.java:6582)
at clojure.core$eval.invoke(core.clj:2852)
at leiningen.core.eval$fn__1437.invoke(eval.clj:284)
at clojure.lang.MultiFn.invoke(MultiFn.java:231)
at leiningen.core.eval$eval_in_project.invoke(eval.clj:306)
at leiningen.test$test.doInvoke(test.clj:196)
at clojure.lang.RestFn.invoke(RestFn.java:423)
at clojure.lang.Var.invoke(Var.java:419)
at clojure.lang.AFn.applyToHelper(AFn.java:163)
at clojure.lang.Var.applyTo(Var.java:532)
at clojure.core$apply.invoke(core.clj:619)
at leiningen.core.main$resolve_task$fn__1269.doInvoke(main.clj:151)
at clojure.lang.RestFn.applyTo(RestFn.java:139)
at clojure.lang.AFunction$1.doInvoke(AFunction.java:29)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invoke(core.clj:619)
at leiningen.core.main$apply_task.invoke(main.clj:192)
at leiningen.core.main$resolve_and_apply.invoke(main.clj:196)
at leiningen.core.main$_main$fn__1332.invoke(main.clj:265)
at leiningen.core.main$_main.doInvoke(main.clj:252)
at clojure.lang.RestFn.invoke(RestFn.java:421)
at clojure.lang.Var.invoke(Var.java:419)
at clojure.lang.AFn.applyToHelper(AFn.java:163)
at clojure.lang.Var.applyTo(Var.java:532)
at clojure.core$apply.invoke(core.clj:617)
at clojure.main$main_opt.invoke(main.clj:335)
at clojure.main$main.doInvoke(main.clj:440)
at clojure.lang.RestFn.invoke(RestFn.java:457)
at clojure.lang.Var.invoke(Var.java:427)
at clojure.lang.AFn.applyToHelper(AFn.java:172)
at clojure.lang.Var.applyTo(Var.java:532)
at clojure.main.main(main.java:37)
Caused by: java.lang.IllegalArgumentException: No matching ctor found for class spotify.rules.cia$fraction_predicate$fn__1750
at clojure.lang.Reflector.invokeConstructor(Reflector.java:163)
at clojure.lang.LispReader$EvalReader.invoke(LispReader.java:1053)
at clojure.lang.LispReader$DispatchReader.invoke(LispReader.java:626)
at clojure.lang.LispReader.read(LispReader.java:185)
at clojure.lang.RT.readString(RT.java:1738)
at spotify.rules.cia$rules$new_fork__9885__auto____2006.<clinit>(cia.clj:135)
... 59 more
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment