barkdog 0.1.2 → 0.1.3.beta

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 11f3c7e8736406d04f6da5e71f45232c4500bd4b
4
- data.tar.gz: b6d7a7c5c62508db1229601493f0cb229c57ba17
3
+ metadata.gz: dc077f2b8f5cfeab22bd61716f4e5d8c190807df
4
+ data.tar.gz: e28e0d51e3b0ef5c189fdbd86821aa3dd230ad3b
5
5
  SHA512:
6
- metadata.gz: 38afc5f64030c17118c9c09bce2341d4021527f309223eecb6cfb68539b1944b3501ad40e5b956c781ba47f05ee6dcefb1197ce265b7a4d08b94c8486b451889
7
- data.tar.gz: ab2beb61c67ba74b7cf1678b11dda5b2b8eba48146f691e110a476eba8431b98717659649efd3b7d8cad5d91a2a6f03fe9942e3b61dca7c082c8079f094bc800
6
+ metadata.gz: 57764456db101f7d17803181905527515f31063fc49fbf9527ab7f2e1d807c1cbf29f02f3b7085b1f6c6a7893157fec6a5a75c5ca5aa4a7d84d6ec93de5251be
7
+ data.tar.gz: 52f0766f525a6dc04d5821b36de2a945c594b079b2418b65f57ab79f6d3a50736b468b1d569c19c57253aa6ab9e5898d1ff3ac96f1d8f773e0fb5ff1155b5dc3
data/README.md CHANGED
@@ -65,3 +65,23 @@ monitor "Check load avg", :type=>"metric alert" do
65
65
  end
66
66
  end
67
67
  ```
68
+
69
+ ### Use template
70
+
71
+ ```ruby
72
+ template "cpu template" do
73
+ query "avg(last_5m):avg:#{context.target}.load_avg.1m{host:i-XXXXXXXX} > 1"
74
+ message context.message
75
+ options do
76
+ notify_no_data true
77
+ no_data_timeframe 2
78
+ notify_audit true
79
+ silenced({})
80
+ end
81
+ end
82
+
83
+ monitor "Check load avg", :type=>"metric alert" do
84
+ context.message = "@winebarrel@example.net"
85
+ include_template "cpu template", :target => "ddstat"
86
+ end
87
+ ```
@@ -21,6 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.add_dependency 'dogapi'
22
22
  spec.add_dependency 'term-ansicolor'
23
23
  spec.add_dependency 'diffy'
24
+ spec.add_dependency 'hashie'
24
25
 
25
26
  spec.add_development_dependency 'bundler'
26
27
  spec.add_development_dependency 'rake'
@@ -3,12 +3,14 @@ require 'logger'
3
3
  require 'singleton'
4
4
  require 'term/ansicolor'
5
5
  require 'diffy'
6
+ require 'hashie'
6
7
 
7
8
  module Barkdog; end
8
9
 
9
10
  require 'barkdog/ext/string_ext'
10
11
  require 'barkdog/constants'
11
12
  require 'barkdog/logger'
13
+ require 'barkdog/template_helper'
12
14
  require 'barkdog/client'
13
15
  require 'barkdog/driver'
14
16
  require 'barkdog/dsl'
@@ -1,4 +1,6 @@
1
1
  class Barkdog::DSL::Context
2
+ include Barkdog::TemplateHelper
3
+
2
4
  def self.eval(dsl, path, options = {})
3
5
  self.new(path, options) {
4
6
  eval(dsl, binding, path)
@@ -11,11 +13,22 @@ class Barkdog::DSL::Context
11
13
  @path = path
12
14
  @options = options
13
15
  @result = {}
16
+
17
+ @context = Hashie::Mash.new(
18
+ :path => path,
19
+ :options => options,
20
+ :templates => {}
21
+ )
22
+
14
23
  instance_eval(&block)
15
24
  end
16
25
 
17
26
  private
18
27
 
28
+ def template(name, &block)
29
+ @context.templates[name.to_s] = block
30
+ end
31
+
19
32
  def require(file)
20
33
  barkfile = (file =~ %r|\A/|) ? file : File.expand_path(File.join(File.dirname(@path), file))
21
34
 
@@ -42,7 +55,7 @@ class Barkdog::DSL::Context
42
55
  end
43
56
 
44
57
  fixed_options = Hash[fixed_options.map {|k, v| [k.to_s, v] }]
45
- attrs = Barkdog::DSL::Context::Monitor.new(name, &block).result
58
+ attrs = Barkdog::DSL::Context::Monitor.new(@context, name, &block).result
46
59
  @result[name] = fixed_options.merge(attrs)
47
60
  end
48
61
  end
@@ -1,6 +1,9 @@
1
1
  class Barkdog::DSL::Context::Monitor
2
- def initialize(name, &block)
2
+ include Barkdog::TemplateHelper
3
+
4
+ def initialize(context, name, &block)
3
5
  @monitor_name = name
6
+ @context = context.merge(:monitor_name => name)
4
7
  @result = {}
5
8
  instance_eval(&block)
6
9
  end
@@ -18,6 +21,6 @@ class Barkdog::DSL::Context::Monitor
18
21
  end
19
22
 
20
23
  def options(&block)
21
- @result['options'] = Barkdog::DSL::Context::Monitor::Options.new(&block).result
24
+ @result['options'] = Barkdog::DSL::Context::Monitor::Options.new(@context, &block).result
22
25
  end
23
26
  end
@@ -1,5 +1,8 @@
1
1
  class Barkdog::DSL::Context::Monitor::Options
2
- def initialize(&block)
2
+ include Barkdog::TemplateHelper
3
+
4
+ def initialize(context, &block)
5
+ @context = context.dup
3
6
  @result = {}
4
7
  instance_eval(&block)
5
8
  end
@@ -0,0 +1,18 @@
1
+ module Barkdog::TemplateHelper
2
+ def include_template(template_name, context = {})
3
+ tmplt = @context.templates[template_name.to_s]
4
+
5
+ unless tmplt
6
+ raise "Template `#{template_name}` is not defined"
7
+ end
8
+
9
+ context_orig = @context
10
+ @context = @context.merge(context)
11
+ instance_eval(&tmplt)
12
+ @context = context_orig
13
+ end
14
+
15
+ def context
16
+ @context
17
+ end
18
+ end
@@ -1,3 +1,3 @@
1
1
  module Barkdog
2
- VERSION = '0.1.2'
2
+ VERSION = '0.1.3.beta'
3
3
  end
@@ -1,7 +1,7 @@
1
1
  describe Barkdog::Client do
2
2
  subject { barkdog_client.export }
3
3
 
4
- let(:actual_dsl) do
4
+ let(:dsl) do
5
5
  <<-'RUBY'
6
6
  monitor "my metric check", :type=>"metric alert" do
7
7
  query "avg(last_5m):avg:datadog.dogstatsd.packet.count{*} > 1"
@@ -31,10 +31,56 @@ end
31
31
  RUBY
32
32
  end
33
33
 
34
+ let(:actual_dsl) { dsl }
35
+ let(:expected_dsl) { dsl }
36
+
34
37
  before { barkdog { actual_dsl } }
35
38
 
36
39
  context 'when create monitors' do
37
- it { is_expected.to eq actual_dsl }
40
+ it { is_expected.to eq expected_dsl }
41
+ end
42
+
43
+ context 'when use template monitors' do
44
+ let(:actual_dsl) do
45
+ <<-'RUBY'
46
+ template 'my metric check' do
47
+ query "avg(last_5m):avg:datadog.dogstatsd.packet.count{*} > 1"
48
+ message "metric check message"
49
+ options do
50
+ no_data_timeframe context.no_data_timeframe
51
+ notify_audit false
52
+ notify_no_data false
53
+ silenced({})
54
+ end
55
+ end
56
+
57
+ template "my service check options" do
58
+ no_data_timeframe 2
59
+ notify_audit false
60
+ notify_no_data true
61
+ period context.period
62
+ renotify_interval 0
63
+ silenced({})
64
+ thresholds "critical"=>1, "ok"=>1, "warning"=>1
65
+ timeout_h 0
66
+ end
67
+
68
+ monitor "my metric check", :type=>"metric alert" do
69
+ include_template "my metric check", :no_data_timeframe=>2
70
+ end
71
+
72
+ monitor "my service check", :type=>"service check" do
73
+ query "\"datadog.agent.up\".over(\"*\").last(2).count_by_status()"
74
+ message "service check message"
75
+ options do
76
+ context.period = 15
77
+ include_template "my service check options"
78
+ end
79
+ end
80
+ RUBY
81
+ end
82
+
83
+ it { is_expected.to eq expected_dsl }
38
84
  end
39
85
 
40
86
  context 'when delete monitors' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: barkdog
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3.beta
5
5
  platform: ruby
6
6
  authors:
7
7
  - Genki Sugawara
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-17 00:00:00.000000000 Z
11
+ date: 2015-10-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dogapi
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - '>='
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: hashie
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: bundler
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -123,6 +137,7 @@ files:
123
137
  - lib/barkdog/exporter.rb
124
138
  - lib/barkdog/ext/string_ext.rb
125
139
  - lib/barkdog/logger.rb
140
+ - lib/barkdog/template_helper.rb
126
141
  - lib/barkdog/version.rb
127
142
  - spec/barkdog_spec.rb
128
143
  - spec/spec_helper.rb
@@ -141,12 +156,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
141
156
  version: '0'
142
157
  required_rubygems_version: !ruby/object:Gem::Requirement
143
158
  requirements:
144
- - - '>='
159
+ - - '>'
145
160
  - !ruby/object:Gem::Version
146
- version: '0'
161
+ version: 1.3.1
147
162
  requirements: []
148
163
  rubyforge_project:
149
- rubygems_version: 2.0.14
164
+ rubygems_version: 2.4.8
150
165
  signing_key:
151
166
  specification_version: 4
152
167
  summary: Barkdog is a tool to manage Datadog monitors.