dogwatch 1.0.3 → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +2 -1
- data/.rubocop_todo.yml +9 -2
- data/README.md +16 -2
- data/lib/dogwatch/model/monitor.rb +3 -2
- data/lib/dogwatch/model/options.rb +28 -1
- data/lib/dogwatch/model/response.rb +4 -5
- data/lib/dogwatch/version.rb +2 -1
- data/test/dogwatch/test_client.rb +2 -2
- data/test/dogwatch/test_options.rb +22 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f80269f35dd247c32ccb1374d0eaedce141a7cc8
|
|
4
|
+
data.tar.gz: ed05ffaa074d3e0601ccf05a45d0ae7964b290f9
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 34e1af8b2a7dec826c40e73da89758d9ede5e58c7f36fab4764a304067ad9e5934ba7f1f643f1c1b325139cdd8ed28a2af0212335f9cffec9582ff9fd0edf331
|
|
7
|
+
data.tar.gz: 9219b3221a629b8d60f4ed27893057db5cd105e681a80aa508f7d98df847b765e77cda98ee5f3a39929c57534aa62bb304bf4c3fc8d91278850086eb1e62022c
|
data/.rubocop.yml
CHANGED
|
@@ -11,6 +11,7 @@ AllCops:
|
|
|
11
11
|
Exclude:
|
|
12
12
|
- example/**/*
|
|
13
13
|
- test/data/*
|
|
14
|
+
TargetRubyVersion: 2.2
|
|
14
15
|
|
|
15
16
|
Encoding:
|
|
16
17
|
Enabled: false
|
|
@@ -21,4 +22,4 @@ HashSyntax:
|
|
|
21
22
|
SpaceInsideStringInterpolation:
|
|
22
23
|
Enabled: false
|
|
23
24
|
DoubleNegation:
|
|
24
|
-
Enabled: false
|
|
25
|
+
Enabled: false
|
data/.rubocop_todo.yml
CHANGED
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
# This configuration was generated by
|
|
2
2
|
# `rubocop --auto-gen-config`
|
|
3
|
-
# on
|
|
3
|
+
# on 2016-06-01 14:50:11 +0100 using RuboCop version 0.40.0.
|
|
4
4
|
# The point is for the user to remove these configuration records
|
|
5
5
|
# one by one as the offenses are removed from the code base.
|
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
|
7
7
|
# versions of RuboCop, may require this file to be generated again.
|
|
8
8
|
|
|
9
9
|
# Offense count: 4
|
|
10
|
-
# Configuration parameters: AllowURI, URISchemes.
|
|
10
|
+
# Configuration parameters: AllowHeredoc, AllowURI, URISchemes.
|
|
11
|
+
# URISchemes: http, https
|
|
11
12
|
Metrics/LineLength:
|
|
12
13
|
Max: 90
|
|
14
|
+
|
|
15
|
+
# Offense count: 1
|
|
16
|
+
# Cop supports --auto-correct.
|
|
17
|
+
Performance/RedundantBlockCall:
|
|
18
|
+
Exclude:
|
|
19
|
+
- 'lib/dogwatch/dogfile.rb'
|
data/README.md
CHANGED
|
@@ -26,6 +26,8 @@ $ gem install dogwatch
|
|
|
26
26
|
Generate both an api key and an app key and either place them in a file named `~/.dogwatch/credentials` or pass them via the command line.
|
|
27
27
|
|
|
28
28
|
A sample credentials file is provided in the `example` directory.
|
|
29
|
+
|
|
30
|
+
In order to generate these keys, log into your Datadog account. From there, click on 'Integrations->APIs'. Keep in mind, your org may be allowed only five API Keys.
|
|
29
31
|
## Usage
|
|
30
32
|
|
|
31
33
|
DogWatch is a thin DSL over the [DataDog ruby client](https://github.com/DataDog/dogapi-rb) that handles generating DataDog monitors.
|
|
@@ -36,7 +38,7 @@ DogWatch.monitor do
|
|
|
36
38
|
## Create a new monitor - monitor name is REQUIRED
|
|
37
39
|
monitor 'MONITOR NAME' do
|
|
38
40
|
type :metric_alert # REQUIRED: One of [:metric_alert | :service_check | :event_alert]
|
|
39
|
-
query '
|
|
41
|
+
query 'time_aggr(time_window):space_aggr:metric{tags} [by {key}] operator' # REQUIRED
|
|
40
42
|
message 'MESSAGE'
|
|
41
43
|
tags %w(A list of tags to associate with your monitor)
|
|
42
44
|
|
|
@@ -52,6 +54,18 @@ DogWatch.monitor do
|
|
|
52
54
|
end
|
|
53
55
|
end
|
|
54
56
|
```
|
|
57
|
+
Queries are the combination of several items including a time aggregator (over a window of time), space aggregator (avg, sum, min, or max), a set of tags and an optional order by, and an operator.
|
|
58
|
+
|
|
59
|
+
From the Datadog documentation:
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
time_aggr(time_window):space_aggr:metric{tags} [by {key}] operator
|
|
63
|
+
```
|
|
64
|
+
An example of a query:
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
avg(last_15m):avg:system.disk.used{region:us-east-1,some-tag:some-tag-value,device:/dev/xvdb} by {cluster} * 100 > 55
|
|
68
|
+
```
|
|
55
69
|
|
|
56
70
|
Monitors that already exist are matched by name and updated accordingly. If the name isn't matched exactly, DogWatch assumes you want a new monitor.
|
|
57
71
|
|
|
@@ -61,4 +75,4 @@ For a full list of options and a description of each parameter, see [DataDog's A
|
|
|
61
75
|
|
|
62
76
|
## TO DO
|
|
63
77
|
* More descriptive errors
|
|
64
|
-
* Better error handling if a monitor fails local validation
|
|
78
|
+
* Better error handling if a monitor fails local validation
|
|
@@ -11,7 +11,7 @@ module DogWatch
|
|
|
11
11
|
metric_alert: 'metric alert',
|
|
12
12
|
service_check: 'service check',
|
|
13
13
|
event_alert: 'event alert'
|
|
14
|
-
}
|
|
14
|
+
}.freeze
|
|
15
15
|
|
|
16
16
|
attr_reader :name
|
|
17
17
|
attr_reader :attributes
|
|
@@ -26,6 +26,7 @@ module DogWatch
|
|
|
26
26
|
# @param [Symbol] type
|
|
27
27
|
# @return [String]
|
|
28
28
|
def type(type)
|
|
29
|
+
@monitor_type = type
|
|
29
30
|
@attributes.type = TYPE_MAP[type]
|
|
30
31
|
end
|
|
31
32
|
|
|
@@ -50,7 +51,7 @@ module DogWatch
|
|
|
50
51
|
# @param [Proc] block
|
|
51
52
|
# @return [Hash]
|
|
52
53
|
def options(&block)
|
|
53
|
-
opts = DogWatch::Model::Options.new
|
|
54
|
+
opts = DogWatch::Model::Options.new(@monitor_type)
|
|
54
55
|
opts.instance_eval(&block)
|
|
55
56
|
@attributes.options = opts.render
|
|
56
57
|
end
|
|
@@ -6,10 +6,19 @@ module DogWatch
|
|
|
6
6
|
# Handles the options block methods
|
|
7
7
|
##
|
|
8
8
|
class Options
|
|
9
|
+
MONITOR_TYPE_OPTIONS_MAP = {
|
|
10
|
+
:metric_alert => [:thresholds].freeze,
|
|
11
|
+
:service_check => [:thresholds].freeze
|
|
12
|
+
}.freeze
|
|
13
|
+
|
|
9
14
|
attr_reader :attributes
|
|
10
15
|
|
|
11
|
-
|
|
16
|
+
# @param [Symbol] monitor_type the monitor type of monitor these
|
|
17
|
+
# options belong to. This is used to validate monitor type
|
|
18
|
+
# specific options such as thresholds.
|
|
19
|
+
def initialize(monitor_type = nil)
|
|
12
20
|
@attributes = OpenStruct.new
|
|
21
|
+
@monitor_type = monitor_type
|
|
13
22
|
end
|
|
14
23
|
|
|
15
24
|
def render
|
|
@@ -55,6 +64,24 @@ module DogWatch
|
|
|
55
64
|
def include_tags(include = true)
|
|
56
65
|
@attributes.include_tags = !!include
|
|
57
66
|
end
|
|
67
|
+
|
|
68
|
+
# @param [Hash{String=>Fixnum}] thresholds
|
|
69
|
+
def thresholds(thresholds)
|
|
70
|
+
validate_monitor_type_specific_option!(:thresholds)
|
|
71
|
+
@attributes.thresholds = thresholds
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
private
|
|
75
|
+
|
|
76
|
+
def validate_monitor_type_specific_option!(option)
|
|
77
|
+
options = Array(MONITOR_TYPE_OPTIONS_MAP[@monitor_type])
|
|
78
|
+
return true if options.include?(option)
|
|
79
|
+
|
|
80
|
+
# rubocop:disable Metrics/LineLength
|
|
81
|
+
message = "The #{@monitor_type.inspect} monitor type does not support #{option.inspect}."
|
|
82
|
+
message << " Did you mean one of #{options.join(', ')}?" if options.any?
|
|
83
|
+
raise NotImplementedError, message
|
|
84
|
+
end
|
|
58
85
|
end
|
|
59
86
|
end
|
|
60
87
|
end
|
|
@@ -8,14 +8,13 @@ module DogWatch
|
|
|
8
8
|
class Response
|
|
9
9
|
extend Mixin::Colorize
|
|
10
10
|
|
|
11
|
-
ERROR = '400'
|
|
12
|
-
CREATED = '200'
|
|
13
|
-
ACCEPTED = '202'
|
|
11
|
+
ERROR = '400'.freeze
|
|
12
|
+
CREATED = '200'.freeze
|
|
13
|
+
ACCEPTED = '202'.freeze
|
|
14
14
|
colorize(:action,
|
|
15
15
|
:green => [:created, :accepted, :updated],
|
|
16
16
|
:yellow => [],
|
|
17
|
-
:red => [:error]
|
|
18
|
-
)
|
|
17
|
+
:red => [:error])
|
|
19
18
|
|
|
20
19
|
attr_accessor :response
|
|
21
20
|
|
data/lib/dogwatch/version.rb
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# nodoc
|
|
2
2
|
module DogWatch
|
|
3
3
|
VERSION = IO.read(File.expand_path('../../../VERSION', __FILE__)) rescue '0.0.1'
|
|
4
|
-
SUMMARY = 'A DSL to create DataDog Monitors'
|
|
4
|
+
SUMMARY = 'A DSL to create DataDog Monitors'.freeze
|
|
5
5
|
DESCRIPTION = 'DogWatch provides a simple method for creating DataDog monitors in Ruby.'
|
|
6
|
+
.freeze
|
|
6
7
|
end
|
|
@@ -13,7 +13,7 @@ class TestClient < Minitest::Test
|
|
|
13
13
|
type: 'metric alert',
|
|
14
14
|
query: 'test query'
|
|
15
15
|
]
|
|
16
|
-
]
|
|
16
|
+
].freeze
|
|
17
17
|
|
|
18
18
|
UPDATED_RESPONSE = [
|
|
19
19
|
'200',
|
|
@@ -22,7 +22,7 @@ class TestClient < Minitest::Test
|
|
|
22
22
|
type: :metric_alert,
|
|
23
23
|
query: 'scheduled maintenance query'
|
|
24
24
|
]
|
|
25
|
-
]
|
|
25
|
+
].freeze
|
|
26
26
|
|
|
27
27
|
def setup
|
|
28
28
|
config = DogWatch::Model::Config.new('foo', 'bar')
|
|
@@ -11,7 +11,7 @@ class TestOptions < Minitest::Test
|
|
|
11
11
|
escalation_message: 'foobar',
|
|
12
12
|
notify_audit: true,
|
|
13
13
|
include_tags: false
|
|
14
|
-
}
|
|
14
|
+
}.freeze
|
|
15
15
|
|
|
16
16
|
# rubocop:disable Metrics/AbcSize
|
|
17
17
|
def setup
|
|
@@ -78,4 +78,25 @@ class TestOptions < Minitest::Test
|
|
|
78
78
|
assert_equal OPTS, @options.render
|
|
79
79
|
assert_kind_of Hash, @options.render
|
|
80
80
|
end
|
|
81
|
+
|
|
82
|
+
def test_invalid_monitor_type_specific_option
|
|
83
|
+
@options = DogWatch::Model::Options.new(:event_alert)
|
|
84
|
+
|
|
85
|
+
assert_raises NotImplementedError do
|
|
86
|
+
@options.thresholds('critical' => 90, 'warning' => 80)
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def test_valid_monitor_type_specific_option
|
|
91
|
+
@options = DogWatch::Model::Options.new(:metric_alert)
|
|
92
|
+
|
|
93
|
+
@options.thresholds('critical' => 90, 'warning' => 80)
|
|
94
|
+
|
|
95
|
+
actual = @options.attributes.thresholds
|
|
96
|
+
assert_includes actual, 'critical'
|
|
97
|
+
assert_equal actual['critical'], 90
|
|
98
|
+
|
|
99
|
+
assert_includes actual, 'warning'
|
|
100
|
+
assert_equal actual['warning'], 80
|
|
101
|
+
end
|
|
81
102
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: dogwatch
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.0.
|
|
4
|
+
version: 1.0.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- David Greene
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2016-06-07 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: dogapi
|