circonus 3.1.5 → 3.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/circonus-add-composite +58 -0
- data/lib/circonus.rb +1 -1
- data/lib/circonusutil.rb +50 -0
- metadata +6 -2
@@ -0,0 +1,58 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# Add a composite metric given a set of tags to filter on
|
3
|
+
|
4
|
+
require 'circonusutil'
|
5
|
+
cu = CirconusUtil.new() { |opts,options|
|
6
|
+
options[:tags] = ['application:composite']
|
7
|
+
options[:filter] = []
|
8
|
+
options[:stats] = 'mean'
|
9
|
+
options[:metric] = 'average'
|
10
|
+
options[:name] = nil
|
11
|
+
opts.on( '--tags TAGLIST',"Apply comma separated list of tags (default: empty list)" ) { |t| options[:tags] += t.split(/,/) }
|
12
|
+
opts.on( '--filter TAGLIST',"Apply comma separated list of tags to filter on" ) { |t| options[:filter] += t.split(/,/) }
|
13
|
+
opts.on( '--stats TYPE',"Take the sum/mean/min/etc.. of the group of stats (default: mean)" ) { |t| options[:stats] = t }
|
14
|
+
opts.on( '--metric TYPE',"The type (counter/average/etc..) of the datapoint (default: average)" ) { |t| options[:metric] = t }
|
15
|
+
opts.on( '--name NAME',"The name of the metric to use." ) { |t| options[:name] = t }
|
16
|
+
}
|
17
|
+
if cu.options[:filter].empty?
|
18
|
+
puts "Missing filter"
|
19
|
+
exit -1
|
20
|
+
end
|
21
|
+
if cu.options[:metric].to_s.empty?
|
22
|
+
puts "Missing metric"
|
23
|
+
exit -1
|
24
|
+
end
|
25
|
+
|
26
|
+
brokers = cu.circonus.list_broker({'_name'=>'composite'})
|
27
|
+
bid = brokers.first['_cid']
|
28
|
+
|
29
|
+
formula = "stats:#{cu.options[:stats]}(metric:#{cu.options[:metric]}(#{cu.options[:filter].sort.map {|m|'tag:'+m}.join(' and ')}, \"#{cu.options[:name]}\", 60000))"
|
30
|
+
display_name = cu.options[:filter].sort.join(' ') + ' ' + cu.options[:name] + ' composite'
|
31
|
+
bundle = {
|
32
|
+
"target"=>"composite",
|
33
|
+
"timeout"=>10,
|
34
|
+
"metrics"=> [ {"status"=>"active", "name"=>cu.options[:name], "type"=>"numeric"} ],
|
35
|
+
"brokers"=>[bid],
|
36
|
+
"period"=>60,
|
37
|
+
"display_name"=>display_name,
|
38
|
+
"tags"=> cu.options[:tags],
|
39
|
+
"notes"=>nil,
|
40
|
+
"config"=> {
|
41
|
+
"formula" => formula,
|
42
|
+
"composite_metric_name" => cu.options[:name]
|
43
|
+
},
|
44
|
+
"type"=>"composite"
|
45
|
+
}
|
46
|
+
puts "Bundle=#{bundle.inspect}"
|
47
|
+
bundles = cu.circonus.list_check_bundle({'type'=>'composite','display_name'=>display_name})
|
48
|
+
r = nil
|
49
|
+
if bundles.any?
|
50
|
+
print "Updating cid=#{bundles.first['_cid']}\n"
|
51
|
+
r = cu.circonus.update_check_bundle(bundles.first['_cid'],bundle)
|
52
|
+
else
|
53
|
+
print "Adding bundle\n"
|
54
|
+
r = cu.circonus.add_check_bundle(bundle)
|
55
|
+
end
|
56
|
+
if not r.nil? then
|
57
|
+
print "Success\n"
|
58
|
+
end
|
data/lib/circonus.rb
CHANGED
@@ -116,7 +116,7 @@ class Circonus
|
|
116
116
|
end
|
117
117
|
|
118
118
|
# Not all these are available:
|
119
|
-
%w{ account annotation broker check_bundle contact_group graph rule_set template user worksheet check }.each do |m|
|
119
|
+
%w{ account annotation broker check_bundle contact_group graph metric_cluster rule_set template user worksheet check }.each do |m|
|
120
120
|
define_method("list_#{m}".to_sym) do |*filter|
|
121
121
|
return list(m,filter.first)
|
122
122
|
end
|
data/lib/circonusutil.rb
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'circonus'
|
3
|
+
require 'optparse'
|
4
|
+
class CirconusUtil
|
5
|
+
attr_accessor :options
|
6
|
+
attr_accessor :circonus
|
7
|
+
def add_opts(&optblock)
|
8
|
+
@addl_opts = optblock
|
9
|
+
end
|
10
|
+
def parse_opts()
|
11
|
+
OptionParser.new { |opts|
|
12
|
+
opts.banner = "Usage: #{File.basename($0)}\n"
|
13
|
+
opts.on( '-h', '--help', "This usage menu") do
|
14
|
+
puts opts
|
15
|
+
exit
|
16
|
+
end
|
17
|
+
opts.on( '-a','--appname APPNAME',"Name of application to report to Circonus (default: curl)" ) do |t|
|
18
|
+
@options[:appname] = t
|
19
|
+
end
|
20
|
+
opts.on( '-s','--server APISERVER',"API server to use (default: api.circonus.com)" ) do |t|
|
21
|
+
@options[:apiserver] = t
|
22
|
+
end
|
23
|
+
opts.on( '-t','--token APITOKEN',"API token to use (required in either .circonus.rb or in args" ) do |t|
|
24
|
+
@options[:apitoken] = t
|
25
|
+
end
|
26
|
+
unless @additional_opts.nil?
|
27
|
+
@additional_opts.call(opts,@options)
|
28
|
+
end
|
29
|
+
}.parse!
|
30
|
+
if options[:apitoken].to_s.empty?
|
31
|
+
puts "Missing apitoken!"
|
32
|
+
exit -1
|
33
|
+
end
|
34
|
+
end
|
35
|
+
def connect
|
36
|
+
@circonus = Circonus.new(@options[:apitoken],@options[:appname])
|
37
|
+
@circonus.set_server(@options[:apiserver])
|
38
|
+
end
|
39
|
+
def initialize(&addl_opts)
|
40
|
+
rbfile = "#{ENV['HOME']}/.circonus.rb"
|
41
|
+
require rbfile if File.exist? rbfile
|
42
|
+
@options = {}
|
43
|
+
@options[:apiserver] = @apiserver || "api.circonus.com" # can be something else for Circonus inside product...
|
44
|
+
@options[:appname] = @appname || "curl"
|
45
|
+
@options[:apitoken] = @apitoken
|
46
|
+
@additional_opts = addl_opts
|
47
|
+
self.parse_opts
|
48
|
+
self.connect
|
49
|
+
end
|
50
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: circonus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-06-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rest-client
|
@@ -62,17 +62,20 @@ dependencies:
|
|
62
62
|
description: Wrapper and CLI for Circonus API
|
63
63
|
email: david-vv@nicklay.com
|
64
64
|
executables:
|
65
|
+
- circonus-add-composite
|
65
66
|
- circonus-cli
|
66
67
|
- circonus-data-cli
|
67
68
|
- circonus-delete-host
|
68
69
|
extensions: []
|
69
70
|
extra_rdoc_files: []
|
70
71
|
files:
|
72
|
+
- lib/circonusutil.rb
|
71
73
|
- lib/circonus.rb
|
72
74
|
- bin/circonus-delete-host
|
73
75
|
- bin/update_all_composites.rb
|
74
76
|
- bin/circonus_list_checkbundle
|
75
77
|
- bin/circonus-data-cli
|
78
|
+
- bin/circonus-add-composite
|
76
79
|
- bin/circonus_list_tags
|
77
80
|
- bin/composite_builder.rb
|
78
81
|
- bin/circonus-cli
|
@@ -113,3 +116,4 @@ signing_key:
|
|
113
116
|
specification_version: 3
|
114
117
|
summary: Circonus API wrapper and CLI
|
115
118
|
test_files: []
|
119
|
+
has_rdoc:
|