overwatch 0.0.3.pre → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -0
- data/.watchr +0 -4
- data/Gemfile +11 -15
- data/README.md +158 -16
- data/Rakefile +31 -39
- data/bin/overwatch +3 -13
- data/config/overwatchrc +6 -0
- data/lib/overwatch.rb +6 -100
- data/lib/overwatch/command.rb +95 -0
- data/lib/overwatch/helpers.rb +102 -0
- data/lib/overwatch/version.rb +3 -0
- data/overwatch.gemspec +27 -94
- data/{plugins/nginx.rb → spec/overwatch_spec.rb} +0 -0
- data/spec/spec_helper.rb +14 -26
- metadata +113 -163
- data/.document +0 -5
- data/.rspec +0 -1
- data/Gemfile.lock +0 -70
- data/LICENSE.txt +0 -20
- data/VERSION +0 -1
- data/lib/overwatch/client.rb +0 -38
- data/plugins/load_average.rb +0 -8
- data/plugins/mongodb.rb +0 -113
- data/plugins/mysql.rb +0 -152
- data/plugins/redis.rb +0 -52
- data/spec/monitaur/client_spec.rb +0 -57
- data/spec/monitaur_spec.rb +0 -68
- data/spec/support/bar_plugin.rb +0 -8
- data/spec/support/client_requests.rb +0 -65
- data/spec/support/foo_plugin.rb +0 -8
- data/spec/support/test.rb +0 -3
data/.gitignore
ADDED
data/.watchr
CHANGED
data/Gemfile
CHANGED
@@ -1,18 +1,14 @@
|
|
1
|
-
source
|
1
|
+
source 'http://rubygems.org'
|
2
2
|
|
3
|
-
|
4
|
-
gem 'json', '>= 1.5.1'
|
5
|
-
gem 'ohai', '>= 0.6.4'
|
6
|
-
# gem 'SystemTimer', :require => 'system_timer'
|
3
|
+
gemspec
|
7
4
|
|
8
|
-
group :development do
|
9
|
-
gem
|
10
|
-
gem
|
11
|
-
gem
|
12
|
-
gem
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
gem '
|
17
|
-
gem 'webmock'
|
5
|
+
group :development, :test do
|
6
|
+
gem 'rspec', '>= 2.6.0'
|
7
|
+
gem 'spork', '>= 0.9.0.rc8'
|
8
|
+
gem 'watchr', '>= 0.7'
|
9
|
+
gem 'json_spec', '>= 0.5.0'
|
10
|
+
end
|
11
|
+
|
12
|
+
group :doc do
|
13
|
+
gem 'yard'
|
18
14
|
end
|
data/README.md
CHANGED
@@ -1,29 +1,171 @@
|
|
1
|
-
#
|
1
|
+
# Installation
|
2
2
|
|
3
|
-
|
3
|
+
gem install overwatch-cli
|
4
4
|
|
5
|
-
|
5
|
+
|
6
|
+
# Usage
|
6
7
|
|
7
|
-
|
8
|
+
I'm going to assume you've got overwatch-collection running somewhere on your local machine for the purpose of this documention.
|
8
9
|
|
9
|
-
|
10
|
+
## Help!
|
11
|
+
|
12
|
+
All commands provide a contextual help menu. Apped `--selp` to the end of any command or subcommand to bring up its specific help menu.
|
13
|
+
|
14
|
+
## Main command
|
15
|
+
|
16
|
+
When you install `overwatch-cli` via RubyGems, an executable, `overwatch`, is installed somewhere in your $PATH (the exact location is entirely dependent upon your Ruby/Gems setup).
|
17
|
+
|
18
|
+
#### Usage:
|
19
|
+
overwatch [OPTIONS] SUBCOMMAND [ARGS] ...
|
20
|
+
|
21
|
+
#### Parameters
|
22
|
+
|
23
|
+
SUBCOMMAND subcommand name
|
24
|
+
[ARGS] ... subcommand arguments
|
25
|
+
|
26
|
+
#### Subcommands
|
27
|
+
|
28
|
+
run Compile and send a new snapshot to the server
|
29
|
+
resource Resources
|
30
|
+
snapshot Snapshots
|
31
|
+
|
32
|
+
|
33
|
+
## Subcommands
|
34
|
+
|
35
|
+
### overwatch run
|
36
|
+
|
37
|
+
#### Usage
|
38
|
+
|
39
|
+
overwatch run [OPTIONS] [ARGS] ...
|
40
|
+
|
41
|
+
#### Parameters
|
42
|
+
|
43
|
+
SUBCOMMAND subcommand name
|
44
|
+
[ARGS] ... subcommand arguments
|
45
|
+
|
46
|
+
#### Options
|
47
|
+
|
48
|
+
-k, --key KEY API key (default: nil)
|
49
|
+
-s, --server SERVER collection server (default: "localhost")
|
50
|
+
-p, --port PORT collection port (default: "9001")
|
51
|
+
-f, --format [FORMAT] format (choices: pretty, json, text) (default: "pretty")
|
52
|
+
|
53
|
+
|
54
|
+
### overwatch resource
|
55
|
+
|
56
|
+
#### Usage
|
57
|
+
|
58
|
+
overwatch resource [OPTIONS] SUBCOMMAND [ARGS] ...
|
59
|
+
|
60
|
+
#### Parameters
|
61
|
+
|
62
|
+
SUBCOMMAND subcommand name
|
63
|
+
[ARGS] ... subcommand arguments
|
64
|
+
|
65
|
+
#### Subcommands
|
66
|
+
|
67
|
+
list list all resources
|
68
|
+
show show a specific resource
|
69
|
+
create create a new resource
|
70
|
+
update update an existing resource
|
71
|
+
delete delete an existing resource
|
72
|
+
regenerate regenerate a resource's API key
|
73
|
+
|
74
|
+
#### Options
|
75
|
+
|
76
|
+
-s, --server SERVER overwatch-collection server (default: "localhost")
|
77
|
+
-p, --port PORT overwatch-collection port (default: "9001")
|
78
|
+
-f, --format [FORMAT] format (choices: pretty, json, text) (default: "pretty")
|
79
|
+
|
80
|
+
### overwatch resource list
|
81
|
+
|
82
|
+
#### Usage
|
83
|
+
|
84
|
+
overwatch resource list [OPTIONS]
|
85
|
+
|
86
|
+
#### Options
|
87
|
+
|
88
|
+
-s, --server SERVER overwatch-collection server (default: "localhost")
|
89
|
+
-p, --port PORT overwatch-collection port (default: "9001")
|
90
|
+
-f, --format [FORMAT] format (choices: pretty, json, text) (default: "pretty")
|
91
|
+
|
92
|
+
#### Examples:
|
93
|
+
|
94
|
+
Pretty format:
|
95
|
+
|
96
|
+
$ overwatch resource list --format pretty
|
97
|
+
+----+------+--------------------------------+
|
98
|
+
| id | name | api_key |
|
99
|
+
+----+------+--------------------------------+
|
100
|
+
| 1 | foo | 3ec97eb0d2870db4b061533812d8a1 |
|
101
|
+
| 2 | bar | e0a5f1baf553f27115cb45ea1ef51a |
|
102
|
+
| 3 | baz | 5273d592d9a7465ed1b3ae820d06a1 |
|
103
|
+
+----+------+--------------------------------+
|
104
|
+
3 rows in set
|
105
|
+
|
106
|
+
Plaintext format for easy piping/grepping/awking:
|
107
|
+
|
108
|
+
$ overwatch resource list --format text
|
109
|
+
1 foo 3ec97eb0d2870db4b061533812d8a1
|
110
|
+
2 bar e0a5f1baf553f27115cb45ea1ef51a
|
111
|
+
3 baz 5273d592d9a7465ed1b3ae820d06a1
|
112
|
+
|
113
|
+
|
114
|
+
### overwatch resource show
|
115
|
+
|
116
|
+
#### Usage
|
10
117
|
|
11
|
-
|
118
|
+
overwatch resource show [OPTIONS] NAME_OR_ID
|
119
|
+
|
120
|
+
#### Parameters
|
12
121
|
|
13
|
-
|
122
|
+
NAME_OR_ID resource name or id
|
123
|
+
|
124
|
+
#### Options
|
125
|
+
|
126
|
+
-a, --attributes list all resource attributes
|
127
|
+
-s, --server SERVER overwatch-collection server (default: "localhost")
|
128
|
+
-p, --port PORT overwatch-collection port (default: "9001")
|
129
|
+
-f, --format [FORMAT] format (choices: pretty, json, text) (default: "pretty")
|
130
|
+
|
131
|
+
#### Example
|
132
|
+
|
133
|
+
Find a resource by _name_ and display it
|
134
|
+
|
135
|
+
$ overwatch resource show foo
|
136
|
+
+----+------+--------------------------------+
|
137
|
+
| id | name | api_key |
|
138
|
+
+----+------+--------------------------------+
|
139
|
+
| 1 | foo | 3ec97eb0d2870db4b061533812d8a1 |
|
140
|
+
+----+------+--------------------------------+
|
141
|
+
1 row in set
|
142
|
+
|
143
|
+
Find a resource by _id_ and display it in plain text:
|
144
|
+
|
145
|
+
$ overwatch resource show --format text 2
|
146
|
+
2 bar e0a5f1baf553f27115cb45ea1ef51a
|
147
|
+
|
148
|
+
### overwatch resource delete
|
149
|
+
|
150
|
+
raise NotImplementedError, "This will be available in a future release."
|
151
|
+
|
152
|
+
### overwatch resource update
|
153
|
+
|
154
|
+
raise NotImplementedError, "This will be available in a future release."
|
14
155
|
|
15
|
-
|
156
|
+
### overwatch resource regenerate
|
157
|
+
|
158
|
+
raise NotImplementedError, "This will be available in a future release."
|
159
|
+
|
160
|
+
### overwatch snapshot
|
16
161
|
|
17
|
-
|
162
|
+
raise NotImplementedError, "This will be available in a future release."
|
18
163
|
|
19
|
-
## Client run
|
20
164
|
|
21
|
-
* Client compiles the plugins and executes each, storing the result of each into a hash
|
22
|
-
* Client sends the resultant hash to the server for processing.
|
23
|
-
* That's it!
|
24
165
|
|
25
|
-
##
|
166
|
+
## TODO
|
26
167
|
|
27
|
-
|
28
|
-
|
168
|
+
* dotfile for configuration of defaults
|
169
|
+
* expand command set as other overwatch pieces are implemented
|
170
|
+
* user authentication/authorization (done in the other apps, but we'll need support here)
|
29
171
|
|
data/Rakefile
CHANGED
@@ -1,50 +1,42 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
Bundler.setup(:default, :development)
|
5
|
-
rescue Bundler::BundlerError => e
|
6
|
-
$stderr.puts e.message
|
7
|
-
$stderr.puts "Run `bundle install` to install missing gems"
|
8
|
-
exit e.status_code
|
9
|
-
end
|
1
|
+
# Add your own tasks in files placed in lib/tasks ending in .rake,
|
2
|
+
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
|
3
|
+
|
10
4
|
require 'rake'
|
11
5
|
|
12
|
-
require '
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
gem.homepage = "http://github.com/danryan/overwatch-client"
|
17
|
-
gem.license = "MIT"
|
18
|
-
gem.summary = %Q{Client for Overwatch monitoring service}
|
19
|
-
gem.description = %Q{The client to communicate with the Overwatch monitoring service}
|
20
|
-
gem.email = "hi@iamdanryan.com"
|
21
|
-
gem.authors = ["Dan Ryan"]
|
22
|
-
gem.executables = ["overwatch"]
|
23
|
-
|
24
|
-
# Include your dependencies below. Runtime dependencies are required when using your gem,
|
25
|
-
# and development dependencies are only needed for development (ie running rake tasks, tests, etc)
|
26
|
-
# gem.add_runtime_dependency 'jabber4r', '> 0.1'
|
27
|
-
# gem.add_development_dependency 'rspec', '> 1.2.3'
|
28
|
-
end
|
29
|
-
Jeweler::RubygemsDotOrgTasks.new
|
6
|
+
# require 'resque/tasks'
|
7
|
+
# require 'resque_scheduler/tasks'
|
8
|
+
|
9
|
+
require 'bundler/gem_tasks'
|
30
10
|
|
31
|
-
require 'rspec/core'
|
32
11
|
require 'rspec/core/rake_task'
|
33
|
-
|
34
|
-
|
12
|
+
|
13
|
+
desc "Run specs"
|
14
|
+
RSpec::Core::RakeTask.new do |task|
|
15
|
+
task.pattern = "spec/**/*_spec.rb"
|
16
|
+
end
|
17
|
+
|
18
|
+
desc "Run watchr"
|
19
|
+
task :watchr do
|
20
|
+
sh %{bundle exec watchr .watchr}
|
35
21
|
end
|
36
22
|
|
37
|
-
|
38
|
-
|
39
|
-
|
23
|
+
desc "Run spork"
|
24
|
+
task :spork do
|
25
|
+
sh %{bundle exec spork}
|
40
26
|
end
|
41
27
|
|
42
|
-
task :default => :spec
|
43
28
|
|
44
|
-
require
|
45
|
-
|
29
|
+
Bundler.require(:doc)
|
30
|
+
desc "Generate documentation"
|
31
|
+
YARD::Rake::YardocTask.new do |t|
|
32
|
+
t.files = [ 'lib/**/*.rb' ]
|
33
|
+
end
|
46
34
|
|
47
|
-
|
48
|
-
|
49
|
-
|
35
|
+
namespace :overwatch do
|
36
|
+
namespace :test do
|
37
|
+
task :snapshot => :environment do
|
38
|
+
a = Resource.first
|
39
|
+
a.snapshots.create(:data => {:one => rand(10), :two => { :three => rand(10) }})
|
40
|
+
end
|
41
|
+
end
|
50
42
|
end
|
data/bin/overwatch
CHANGED
@@ -1,18 +1,8 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
# encoding: utf-8
|
3
2
|
|
4
|
-
|
5
|
-
|
6
|
-
$LOAD_PATH << File.join(File.dirname(__FILE__), *%w[.. lib])
|
3
|
+
$: << File.expand_path(File.dirname(__FILE__) + "/../lib")
|
7
4
|
|
8
5
|
require 'overwatch'
|
9
|
-
require '
|
10
|
-
|
11
|
-
raise "You must supply an agent key as the first argument" unless ARGV[0]
|
12
|
-
api_key = ARGV[0]
|
6
|
+
require 'clamp'
|
13
7
|
|
14
|
-
|
15
|
-
Overwatch.run api_key
|
16
|
-
rescue => e
|
17
|
-
puts e
|
18
|
-
end
|
8
|
+
Overwatch::Command.run
|
data/config/overwatchrc
ADDED
data/lib/overwatch.rb
CHANGED
@@ -1,106 +1,12 @@
|
|
1
|
-
require 'logger'
|
2
|
-
require 'fileutils'
|
3
|
-
require 'rest-client'
|
4
|
-
require 'yajl'
|
5
|
-
|
6
|
-
require 'overwatch/client'
|
7
|
-
|
8
1
|
module Overwatch
|
9
|
-
|
10
|
-
|
11
|
-
class << self
|
12
|
-
attr_accessor :log_file_path, :config_dir, :raw_config,
|
13
|
-
:config_file_path, :env, :cache_dir
|
14
|
-
|
15
|
-
def run(api_key)
|
16
|
-
# Overwatch.install
|
17
|
-
Overwatch::Client.new(api_key).run
|
18
|
-
end
|
19
|
-
|
20
|
-
# def install
|
21
|
-
# create_base_dir
|
22
|
-
# create_log_file
|
23
|
-
# create_cache_dir
|
24
|
-
# create_plugin_dir
|
25
|
-
# create_config_dir
|
26
|
-
# generate_client_config unless File.exist?(config_file_path)
|
27
|
-
# end
|
28
|
-
#
|
29
|
-
# def env=(environment)
|
30
|
-
# @env = environment
|
31
|
-
# end
|
32
|
-
#
|
33
|
-
# def env
|
34
|
-
# @env ||= "production"
|
35
|
-
# end
|
36
|
-
#
|
37
|
-
# def base_dir
|
38
|
-
# @base_dir ||= "#{ENV['HOME']}/.overwatch"
|
39
|
-
# end
|
40
|
-
#
|
41
|
-
# def log
|
42
|
-
# @log ||= Logger.new(log_file_path)
|
43
|
-
# end
|
44
|
-
#
|
45
|
-
# def log_file_path
|
46
|
-
# @log_file_path ||= File.join(base_dir, "client.log")
|
47
|
-
# end
|
48
|
-
#
|
49
|
-
# def config_dir
|
50
|
-
# @config_dir ||= File.join(base_dir, "")
|
51
|
-
# end
|
52
|
-
#
|
53
|
-
# def cache_dir
|
54
|
-
# @cache_dir ||= File.join(base_dir, "cache")
|
55
|
-
# end
|
56
|
-
#
|
57
|
-
# def plugin_dir
|
58
|
-
# @plugin_dir ||= File.join(cache_dir, "plugins")
|
59
|
-
# end
|
60
|
-
#
|
61
|
-
|
2
|
+
class << self
|
62
3
|
def plugin_path
|
63
4
|
@plugin_path ||= File.expand_path(File.join(File.dirname(__FILE__), "../plugins"))
|
64
5
|
end
|
65
|
-
|
66
|
-
#
|
67
|
-
# def config_file_path
|
68
|
-
# @config_file_path ||= File.join(base_dir, "config.yml")
|
69
|
-
# end
|
70
|
-
#
|
71
|
-
# def raw_config
|
72
|
-
# @raw_config ||= IO.read(config_file_path)
|
73
|
-
# end
|
74
|
-
#
|
75
|
-
# def create_log_file
|
76
|
-
# FileUtils.touch(log_file_path)
|
77
|
-
# end
|
78
|
-
#
|
79
|
-
# def create_base_dir
|
80
|
-
# FileUtils.mkdir_p(base_dir)
|
81
|
-
# end
|
82
|
-
#
|
83
|
-
# def create_config_dir
|
84
|
-
# FileUtils.mkdir_p(config_dir)
|
85
|
-
# end
|
86
|
-
#
|
87
|
-
# def create_cache_dir
|
88
|
-
# FileUtils.mkdir_p(cache_dir)
|
89
|
-
# end
|
90
|
-
#
|
91
|
-
# def create_plugin_dir
|
92
|
-
# FileUtils.mkdir_p(plugin_dir)
|
93
|
-
# end
|
94
|
-
#
|
95
|
-
# def generate_client_config
|
96
|
-
# File.open(config_file_path, "w") do |file|
|
97
|
-
# file.puts(%q{server_url: http://api.overwatchapp.com})
|
98
|
-
# file.puts(%q{client_key: CHANGEME})
|
99
|
-
# end
|
100
|
-
# end
|
101
|
-
#
|
102
|
-
# def raw_config
|
103
|
-
# @raw_config ||= IO.read(config_file_path)
|
104
|
-
# end
|
105
6
|
end
|
106
7
|
end
|
8
|
+
|
9
|
+
require 'overwatch/command'
|
10
|
+
require 'overwatch/helpers'
|
11
|
+
require 'overwatch/version'
|
12
|
+
|