Commit 37b7de8 1 parent 0dfb4b0 commit 37b7de8 Copy full SHA for 37b7de8
File tree 3 files changed +85
-0
lines changed
src/crucible/aws/cloudwatch
test/crucible/aws/cloudwatch
test-resources/aws/cloudwatch
3 files changed +85
-0
lines changed Original file line number Diff line number Diff line change
1
+ (ns crucible.aws.cloudwatch.anomaly-detector
2
+ (:require [clojure.spec.alpha :as s]
3
+ [crucible.aws.cloudwatch :as cloudwatch]
4
+ [crucible.encoding.keys :refer [->key]]
5
+ [crucible.resources :refer [defresource spec-or-ref]]))
6
+
7
+ (s/def ::value (spec-or-ref string?))
8
+
9
+ (s/def ::name (spec-or-ref string?))
10
+
11
+ (s/def ::dimension (s/keys :req [::name ::value ]))
12
+
13
+ (s/def ::dimensions (s/coll-of ::dimension ))
14
+
15
+ (s/def ::stat ::cloudwatch/statistic )
16
+
17
+ (def date-time-regex
18
+ #"(19|20)[0-9][0-9]-(0[0-9]|1[0-2])-(0[1-9]|([12][0-9]|3[01]))T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]" )
19
+
20
+ (s/def ::date-time (spec-or-ref (s/and string? #(re-matches date-time-regex %))))
21
+
22
+ (s/def ::end-time ::date-time )
23
+
24
+ (s/def ::start-time ::date-time )
25
+
26
+ (s/def ::range (s/keys :req [::start-time ::end-time ]))
27
+
28
+ (s/def ::ranges (s/coll-of ::range ))
29
+
30
+ (s/def ::namespace (spec-or-ref string?))
31
+
32
+ (s/def ::metric-name (spec-or-ref string?))
33
+
34
+ (s/def ::excluded-time-ranges (spec-or-ref ::ranges ))
35
+
36
+ (s/def ::metric-time-zone (spec-or-ref string?))
37
+
38
+ (s/def ::configuration (s/keys :opt [::excluded-time-ranges ::metric-time-zone ]))
39
+
40
+ (s/def ::anomaly-detector (s/keys :req [::metric-name
41
+ ::namespace
42
+ ::stat ]))
43
+
44
+ (defresource anomaly-detector " AWS::CloudWatch::AnomalyDetector" ::anomaly-detector )
Original file line number Diff line number Diff line change
1
+ {
2
+ "Type" : " AWS::CloudWatch::AnomalyDetector" ,
3
+ "Properties" : {
4
+ "Configuration" : {
5
+ "ExcludedTimeRanges" : [{
6
+ "EndTime" : " 2019-07-01T23:59:59" ,
7
+ "StartTime" : " 2019-07-01T23:59:59"
8
+ }],
9
+ "MetricTimeZone" : " America/New_York"
10
+ },
11
+ "Dimensions" : [{
12
+ "Name" : " Memory" ,
13
+ "Value" : " UsedMemory"
14
+ }],
15
+ "MetricName" : " JvmMetric" ,
16
+ "Namespace" : " AWSSDK/Java" ,
17
+ "Stat" : " Average"
18
+ }
19
+ }
Original file line number Diff line number Diff line change
1
+ (ns crucible.aws.cloudwatch.anomaly-detector-test
2
+ (:require [cheshire.core :as json]
3
+ [clojure.java.io :as io]
4
+ [clojure.test :as t :refer :all ]
5
+ [crucible.assertion :refer [resource=]]
6
+ [crucible.aws.cloudwatch.anomaly-detector :as ad]))
7
+
8
+ (deftest anomaly-detection-test
9
+ (testing " encode"
10
+ (is (resource=
11
+ (json/decode (slurp (io/resource " aws/cloudwatch/anomaly_detector.json" )))
12
+ (ad/anomaly-detector
13
+ {::ad/namespace " AWSSDK/Java"
14
+ ::ad/stat " Average"
15
+ ::ad/metric-name " JvmMetric"
16
+ ::ad/configuration
17
+ {::ad/excluded-time-ranges
18
+ [{::ad/end-time " 2019-07-01T23:59:59"
19
+ ::ad/start-time " 2019-07-01T23:59:59" }]
20
+ ::ad/metric-time-zone " America/New_York" }
21
+ ::ad/dimensions [{::ad/name " Memory"
22
+ ::ad/value " UsedMemory" }]})))))
You can’t perform that action at this time.
0 commit comments