barkdog 0.1.2 → 0.1.3.beta

Sign up to get free protection for your applications and to get access to all the features.
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.