sensu-cli 0.0.10 → 0.1.0
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 +8 -8
- data/README.md +23 -22
- data/bin/sensu-cli +8 -0
- data/lib/sensu-cli/cli.rb +28 -24
- data/lib/sensu-cli/editor.rb +33 -0
- data/lib/sensu-cli/sensu.rb +72 -37
- data/lib/sensu-cli/version.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZWUwZDFkN2IxNjBjNzJkMmRhMDM0NTYxMjcyMGExODg0M2U0Zjc3Mg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZGMyNDBjMjkwYmJlYzVhZmE5OWM2NmRjN2JmMThmM2YxZTZkMWI1Nw==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YmE4OThmNTNlNTU4Yjk0ODRmMDQ0NWI2M2IxMTYxYzBlZDM5MjVhYWYyYjVi
|
10
|
+
Y2ZlNTk5YmFjOTQxNTc4MWQzYzYwOWE0NjQ3YjM2Y2ZjZTI3YzUyNTIwZGJm
|
11
|
+
NjQ0OGUzMjNmOWI1MjA3NWI2MzNlMmRkZWQ1MmM0ZTkzZGFkNzQ=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MzAwZDI5NjFhNjczMDVhYzQyY2U5NDQ4ZWNjOTFkMjE4ZDNkOTBkZjk2ZGM4
|
14
|
+
ZWFjNTlmZmY2Nzk5YmNhOGYyYzNlM2Y2YTA1ZmVlYzA1ZDQ0ZjNhMjU3ZmI5
|
15
|
+
ZDZlZGJlM2RlMjRlZTcwZWQ4MjI5MWQ5ZTBlNWQ5MjlmNzg3NzY=
|
data/README.md
CHANGED
@@ -10,7 +10,7 @@ sensu-cli
|
|
10
10
|
# ------------------
|
11
11
|
# /\
|
12
12
|
# '--'
|
13
|
-
#
|
13
|
+
# SENSU-CLI
|
14
14
|
#
|
15
15
|
```
|
16
16
|
A sensu-cli for interacting with the sensu api.
|
@@ -51,7 +51,7 @@ password "some_secret_password"
|
|
51
51
|
|
52
52
|
Expire Silenced Hosts/Checks
|
53
53
|
----------------------------
|
54
|
-
I added an expires option to `sensu silence` to be used like `sensu silence HOST -e 30` where `-e` denotes the number of minutes from now a host/checks silence should expire. This won't work by itself. We add a key to the silence stash with a time in the future. If you run [check-stashes](https://github.com/agent462/sensu-check-stashes) on your sensu-server it will check for expired stashes and delete them.
|
54
|
+
I added an expires option to `sensu-cli silence` to be used like `sensu-cli silence HOST -e 30` where `-e` denotes the number of minutes from now a host/checks silence should expire. This won't work by itself. We add a key to the silence stash with a time in the future. If you run [check-stashes](https://github.com/agent462/sensu-check-stashes) on your sensu-server it will check for expired stashes and delete them.
|
55
55
|
|
56
56
|
There is also a reason option `-r` available. Be nice and use it so your colleagues know what you're doing.
|
57
57
|
|
@@ -61,42 +61,43 @@ Examples
|
|
61
61
|
Available subcommands: (for details, sensu SUB-COMMAND --help)
|
62
62
|
|
63
63
|
** Aggregate Commands **
|
64
|
-
sensu aggregate list (OPTIONS)
|
65
|
-
sensu aggregate show CHECK (OPTIONS)
|
66
|
-
sensu aggregate delete CHECK
|
64
|
+
sensu-cli aggregate list (OPTIONS)
|
65
|
+
sensu-cli aggregate show CHECK (OPTIONS)
|
66
|
+
sensu-cli aggregate delete CHECK
|
67
67
|
|
68
68
|
** Check Commands **
|
69
|
-
sensu check list
|
70
|
-
sensu check show CHECK
|
71
|
-
sensu check request CHECK SUB1,SUB2
|
69
|
+
sensu-cli check list
|
70
|
+
sensu-cli check show CHECK
|
71
|
+
sensu-cli check request CHECK SUB1,SUB2
|
72
72
|
|
73
73
|
** Client Commands **
|
74
|
-
sensu client list (OPTIONS)
|
75
|
-
sensu client show NODE
|
76
|
-
sensu client delete NODE
|
77
|
-
sensu client history NODE
|
74
|
+
sensu-cli client list (OPTIONS)
|
75
|
+
sensu-cli client show NODE
|
76
|
+
sensu-cli client delete NODE
|
77
|
+
sensu-cli client history NODE
|
78
78
|
|
79
79
|
** Event Commands **
|
80
|
-
sensu event list
|
81
|
-
sensu event show NODE (OPTIONS)
|
82
|
-
sensu event delete NODE CHECK
|
80
|
+
sensu-cli event list
|
81
|
+
sensu-cli event show NODE (OPTIONS)
|
82
|
+
sensu-cli event delete NODE CHECK
|
83
83
|
|
84
84
|
** Health Commands **
|
85
|
-
sensu health (OPTIONS)
|
85
|
+
sensu-cli health (OPTIONS)
|
86
86
|
|
87
87
|
** Info Commands **
|
88
|
-
sensu info
|
88
|
+
sensu-cli info
|
89
89
|
|
90
90
|
** Silence Commands **
|
91
|
-
sensu silence NODE (OPTIONS)
|
91
|
+
sensu-cli silence NODE (OPTIONS)
|
92
92
|
|
93
93
|
** Stash Commands **
|
94
|
-
sensu stash list (OPTIONS)
|
95
|
-
sensu stash show STASHPATH
|
96
|
-
sensu stash delete STASHPATH
|
94
|
+
sensu-cli stash list (OPTIONS)
|
95
|
+
sensu-cli stash show STASHPATH
|
96
|
+
sensu-cli stash delete STASHPATH
|
97
|
+
sensu-cli stash create PATH
|
97
98
|
|
98
99
|
** Resolve Commands **
|
99
|
-
sensu resolve NODE CHECK
|
100
|
+
sensu-cli resolve NODE CHECK
|
100
101
|
|
101
102
|
--version, -v: Print version and exit
|
102
103
|
--help, -h: Show this message
|
data/bin/sensu-cli
ADDED
data/lib/sensu-cli/cli.rb
CHANGED
@@ -7,7 +7,7 @@ module SensuCli
|
|
7
7
|
CLIENT_COMMANDS = %w(list show delete history)
|
8
8
|
CHECK_COMMANDS = %w(list show request)
|
9
9
|
EVENT_COMMANDS = %w(list show delete)
|
10
|
-
STASH_COMMANDS = %w(list show delete)
|
10
|
+
STASH_COMMANDS = %w(list show delete create)
|
11
11
|
AGG_COMMANDS = %w(list show delete)
|
12
12
|
SIL_COMMANDS = ""
|
13
13
|
RES_COMMANDS = ""
|
@@ -16,52 +16,52 @@ module SensuCli
|
|
16
16
|
|
17
17
|
CLIENT_BANNER = <<-EOS.gsub(/^ {10}/, '')
|
18
18
|
** Client Commands **
|
19
|
-
sensu client list (OPTIONS)
|
20
|
-
sensu client show NODE
|
21
|
-
sensu client delete NODE
|
22
|
-
sensu client history NODE\n\r
|
19
|
+
sensu-cli client list (OPTIONS)
|
20
|
+
sensu-cli client show NODE
|
21
|
+
sensu-cli client delete NODE
|
22
|
+
sensu-cli client history NODE\n\r
|
23
23
|
EOS
|
24
24
|
INFO_BANNER = <<-EOS.gsub(/^ {10}/, '')
|
25
25
|
** Info Commands **
|
26
|
-
sensu info\n\r
|
26
|
+
sensu-cli info\n\r
|
27
27
|
EOS
|
28
28
|
HEALTH_BANNER = <<-EOS.gsub(/^ {10}/, '')
|
29
29
|
** Health Commands **
|
30
|
-
sensu health (OPTIONS)\n\r
|
30
|
+
sensu-cli health (OPTIONS)\n\r
|
31
31
|
EOS
|
32
32
|
CHECK_BANNER = <<-EOS.gsub(/^ {10}/, '')
|
33
33
|
** Check Commands **
|
34
|
-
sensu check list
|
35
|
-
sensu check show CHECK
|
36
|
-
sensu check request CHECK SUB1,SUB2\n\r
|
34
|
+
sensu-cli check list
|
35
|
+
sensu-cli check show CHECK
|
36
|
+
sensu-cli check request CHECK SUB1,SUB2\n\r
|
37
37
|
EOS
|
38
38
|
EVENT_BANNER = <<-EOS.gsub(/^ {10}/, '')
|
39
39
|
** Event Commands **
|
40
|
-
sensu event list
|
41
|
-
sensu event show NODE (OPTIONS)
|
42
|
-
sensu event delete NODE CHECK\n\r
|
40
|
+
sensu-cli event list
|
41
|
+
sensu-cli event show NODE (OPTIONS)
|
42
|
+
sensu-cli event delete NODE CHECK\n\r
|
43
43
|
EOS
|
44
44
|
STASH_BANNER = <<-EOS.gsub(/^ {10}/, '')
|
45
45
|
** Stash Commands **
|
46
|
-
sensu stash list (OPTIONS)
|
47
|
-
sensu stash show STASHPATH
|
48
|
-
sensu stash delete STASHPATH
|
46
|
+
sensu-cli stash list (OPTIONS)
|
47
|
+
sensu-cli stash show STASHPATH
|
48
|
+
sensu-cli stash delete STASHPATH
|
49
|
+
sensu-cli stash create PATH\n\r
|
49
50
|
EOS
|
50
|
-
#sensu stash create
|
51
51
|
#apost '/stashes'
|
52
52
|
AGG_BANNER = <<-EOS.gsub(/^ {10}/, '')
|
53
53
|
** Aggregate Commands **
|
54
|
-
sensu aggregate list (OPTIONS)
|
55
|
-
sensu aggregate show CHECK (OPTIONS)
|
56
|
-
sensu aggregate delete CHECK\n\r
|
54
|
+
sensu-cli aggregate list (OPTIONS)
|
55
|
+
sensu-cli aggregate show CHECK (OPTIONS)
|
56
|
+
sensu-cli aggregate delete CHECK\n\r
|
57
57
|
EOS
|
58
58
|
SIL_BANNER = <<-EOS.gsub(/^ {10}/, '')
|
59
59
|
** Silence Commands **
|
60
|
-
sensu silence NODE (OPTIONS)\n\r
|
60
|
+
sensu-cli silence NODE (OPTIONS)\n\r
|
61
61
|
EOS
|
62
62
|
RES_BANNER = <<-EOS.gsub(/^ {10}/, '')
|
63
63
|
** Resolve Commands **
|
64
|
-
sensu resolve NODE CHECK\n\r
|
64
|
+
sensu-cli resolve NODE CHECK\n\r
|
65
65
|
EOS
|
66
66
|
|
67
67
|
def global
|
@@ -77,10 +77,10 @@ module SensuCli
|
|
77
77
|
# ------------------
|
78
78
|
# /\
|
79
79
|
# '--'
|
80
|
-
#
|
80
|
+
# SENSU-CLI
|
81
81
|
#
|
82
82
|
EOS
|
83
|
-
banner "\n\rAvailable subcommands: (for details, sensu SUB-COMMAND --help)\n\r"
|
83
|
+
banner "\n\rAvailable subcommands: (for details, sensu-cli SUB-COMMAND --help)\n\r"
|
84
84
|
banner AGG_BANNER
|
85
85
|
banner CHECK_BANNER
|
86
86
|
banner CLIENT_BANNER
|
@@ -235,6 +235,10 @@ module SensuCli
|
|
235
235
|
p = Trollop::options
|
236
236
|
item = next_argv
|
237
237
|
deep_merge({:command => 'stashes', :method => 'Delete', :fields => {:path => item}},{:fields => p})
|
238
|
+
when 'create'
|
239
|
+
p = Trollop::options
|
240
|
+
item = next_argv
|
241
|
+
deep_merge({:command => 'stashes', :method => 'Post', :fields => {:create => true, :create_path => item}},{:fields => p})
|
238
242
|
else
|
239
243
|
explode(opts)
|
240
244
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'tempfile'
|
3
|
+
|
4
|
+
module SensuCli
|
5
|
+
class Editor
|
6
|
+
|
7
|
+
def create_stash(create_path)
|
8
|
+
@create_path = create_path
|
9
|
+
file = create_file
|
10
|
+
open(file)
|
11
|
+
end
|
12
|
+
|
13
|
+
def open(file)
|
14
|
+
ENV['EDITOR'] ? editor = ENV['EDITOR'] : editor = 'vi'
|
15
|
+
system("#{editor} #{file}")
|
16
|
+
begin
|
17
|
+
JSON.parse(File.read(file))
|
18
|
+
rescue JSON::ParserError
|
19
|
+
puts "The stash you created has Invalid JSON."
|
20
|
+
exit
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def create_file
|
25
|
+
template = {:path => @create_path, :content => {:timestamp => Time.now.to_i }}
|
26
|
+
file = Tempfile.new('sensu')
|
27
|
+
file.write(JSON.pretty_generate(template))
|
28
|
+
file.close
|
29
|
+
file.path
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
data/lib/sensu-cli/sensu.rb
CHANGED
@@ -3,6 +3,7 @@ require 'net/https'
|
|
3
3
|
require 'json'
|
4
4
|
require 'sensu-cli/settings'
|
5
5
|
require 'sensu-cli/cli'
|
6
|
+
require 'sensu-cli/editor'
|
6
7
|
require 'rainbow'
|
7
8
|
|
8
9
|
module SensuCli
|
@@ -12,6 +13,7 @@ module SensuCli
|
|
12
13
|
clis = Cli.new
|
13
14
|
cli = clis.global
|
14
15
|
settings
|
16
|
+
@command = cli[:command]
|
15
17
|
api_path(cli)
|
16
18
|
make_call
|
17
19
|
end
|
@@ -31,44 +33,77 @@ module SensuCli
|
|
31
33
|
end
|
32
34
|
|
33
35
|
def api_path(cli)
|
34
|
-
@command = cli
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
payload =
|
57
|
-
path = "/event/resolve"
|
58
|
-
when 'silence'
|
59
|
-
payload = {:timestamp => Time.now.to_i}
|
60
|
-
payload.merge!({:reason => cli[:fields][:reason]}) if cli[:fields][:reason]
|
61
|
-
if cli[:fields][:expires]
|
62
|
-
expires = Time.now.to_i + (cli[:fields][:expires] * 60)
|
63
|
-
payload.merge!({:expires => expires})
|
64
|
-
end
|
65
|
-
payload = payload.to_json
|
66
|
-
path = "/stashes/silence" << (cli[:fields][:client] ? "/#{cli[:fields][:client]}" : "") << (cli[:fields][:check] ? "/#{cli[:fields][:check]}" : "")
|
67
|
-
when 'aggregates'
|
68
|
-
path = "/aggregates" << (cli[:fields][:check] ? "/#{cli[:fields][:check]}" : "") << (cli[:fields][:id] ? "/#{cli[:fields][:id]}" : "")
|
36
|
+
self.respond_to?(@command) ? path = send(@command, cli) : (puts "Something Bad Happened";exit)
|
37
|
+
@api = {:path => path, :method => cli[:method], :command => cli[:command], :payload => (@payload || false)}
|
38
|
+
end
|
39
|
+
|
40
|
+
def clients(cli)
|
41
|
+
path = "/clients"
|
42
|
+
path << "/#{cli[:fields][:name]}" if cli[:fields][:name]
|
43
|
+
path << "/history" if cli[:fields][:history]
|
44
|
+
path << pagination(cli)
|
45
|
+
end
|
46
|
+
|
47
|
+
def info(cli)
|
48
|
+
path = "/info"
|
49
|
+
end
|
50
|
+
|
51
|
+
def health(cli)
|
52
|
+
path = "/health?consumers=#{cli[:fields][:consumers]}&messages=#{cli[:fields][:messages]}"
|
53
|
+
end
|
54
|
+
|
55
|
+
def stashes(cli)
|
56
|
+
if cli[:fields][:create]
|
57
|
+
e = Editor.new
|
58
|
+
@payload = e.create_stash(cli[:fields][:create_path]).to_json
|
69
59
|
end
|
70
|
-
path
|
71
|
-
|
60
|
+
path = "/stashes"
|
61
|
+
path << "/#{cli[:fields][:path]}" if cli[:fields][:path]
|
62
|
+
path << pagination(cli)
|
63
|
+
end
|
64
|
+
|
65
|
+
def checks(cli)
|
66
|
+
if cli[:fields][:name]
|
67
|
+
path = "/check/#{cli[:fields][:name]}"
|
68
|
+
elsif cli[:fields][:subscribers]
|
69
|
+
@payload = {:check => cli[:fields][:check],:subscribers => cli[:fields][:subscribers]}.to_json
|
70
|
+
path = "/check/request"
|
71
|
+
else
|
72
|
+
path = "/checks"
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def events(cli)
|
77
|
+
path = "/events"
|
78
|
+
path << "/#{cli[:fields][:client]}" if cli[:fields][:client]
|
79
|
+
path << "/#{cli[:fields][:check]}" if cli[:fields][:check]
|
80
|
+
path
|
81
|
+
end
|
82
|
+
|
83
|
+
def resolve(cli)
|
84
|
+
@payload = {:client => cli[:fields][:client], :check => cli[:fields][:check]}.to_json
|
85
|
+
path = "/event/resolve"
|
86
|
+
end
|
87
|
+
|
88
|
+
def silence(cli)
|
89
|
+
payload = {:timestamp => Time.now.to_i}
|
90
|
+
payload.merge!({:reason => cli[:fields][:reason]}) if cli[:fields][:reason]
|
91
|
+
if cli[:fields][:expires]
|
92
|
+
expires = Time.now.to_i + (cli[:fields][:expires] * 60)
|
93
|
+
payload.merge!({:expires => expires})
|
94
|
+
end
|
95
|
+
@payload = payload.to_json
|
96
|
+
path = "/stashes/silence"
|
97
|
+
path << "/#{cli[:fields][:client]}" if cli[:fields][:client]
|
98
|
+
path << "/#{cli[:fields][:check]}" if cli[:fields][:check]
|
99
|
+
path
|
100
|
+
end
|
101
|
+
|
102
|
+
def aggregates(cli)
|
103
|
+
path = "/aggregates"
|
104
|
+
path << "/#{cli[:fields][:check]}" if cli[:fields][:check]
|
105
|
+
path << "/#{cli[:fields][:id]}" if cli[:fields][:id]
|
106
|
+
path << pagination(cli)
|
72
107
|
end
|
73
108
|
|
74
109
|
def pagination(cli)
|
data/lib/sensu-cli/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sensu-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bryan Brandau
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-05-
|
11
|
+
date: 2013-05-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rainbow
|
@@ -56,11 +56,14 @@ description: A command line utility for interacting with the Sensu api.
|
|
56
56
|
email: agent462@gmail.com
|
57
57
|
executables:
|
58
58
|
- sensu
|
59
|
+
- sensu-cli
|
59
60
|
extensions: []
|
60
61
|
extra_rdoc_files: []
|
61
62
|
files:
|
62
63
|
- bin/sensu
|
64
|
+
- bin/sensu-cli
|
63
65
|
- lib/sensu-cli/cli.rb
|
66
|
+
- lib/sensu-cli/editor.rb
|
64
67
|
- lib/sensu-cli/sensu.rb
|
65
68
|
- lib/sensu-cli/settings.rb
|
66
69
|
- lib/sensu-cli/version.rb
|