overwatch-cli 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.
@@ -0,0 +1,2 @@
1
+ pkg
2
+ Gemfile.lock
data/.watchr ADDED
@@ -0,0 +1,18 @@
1
+ def run_spec(file)
2
+ unless File.exist?(file)
3
+ puts "#{file} does not exist"
4
+ return
5
+ end
6
+
7
+ puts "Running #{file}"
8
+ system "bundle exec rspec #{file}"
9
+ puts
10
+ end
11
+
12
+ watch("spec/.*/*_spec\.rb") do |match|
13
+ run_spec match[0]
14
+ end
15
+
16
+ watch("lib/(.*/.*)\.rb") do |match|
17
+ run_spec %{spec/#{match[1]}_spec.rb}
18
+ end
data/Gemfile ADDED
@@ -0,0 +1,14 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gemspec
4
+
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'
14
+ end
@@ -0,0 +1,6 @@
1
+ ## TODO
2
+
3
+ * dotfile for configuration of defaults
4
+ * expand command set as other overwatch pieces are implemented
5
+ * user authentication/authorization (done in the other apps, but we'll need support here)
6
+
@@ -0,0 +1,42 @@
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
+
4
+ require 'rake'
5
+
6
+ # require 'resque/tasks'
7
+ # require 'resque_scheduler/tasks'
8
+
9
+ require 'bundler/gem_tasks'
10
+
11
+ require 'rspec/core/rake_task'
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}
21
+ end
22
+
23
+ desc "Run spork"
24
+ task :spork do
25
+ sh %{bundle exec spork}
26
+ end
27
+
28
+
29
+ Bundler.require(:doc)
30
+ desc "Generate documentation"
31
+ YARD::Rake::YardocTask.new do |t|
32
+ t.files = [ 'lib/**/*.rb' ]
33
+ end
34
+
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
42
+ end
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $: << File.expand_path(File.dirname(__FILE__) + "/../lib")
4
+
5
+ require 'overwatch/cli'
6
+ require 'clamp'
7
+
8
+ Overwatch::CLI::Command.run
@@ -0,0 +1,6 @@
1
+ collection:
2
+ host: localhost
3
+ events:
4
+ host: localhost
5
+ checks:
6
+ host: localhost
@@ -0,0 +1,17 @@
1
+ require 'yajl'
2
+ require 'rest-client'
3
+ require 'clamp'
4
+ require 'formatador'
5
+ require 'hirb'
6
+
7
+ require 'overwatch/cli/command'
8
+ require 'overwatch/cli/helpers'
9
+ require 'overwatch/cli/version'
10
+
11
+
12
+ module Overwatch
13
+ module CLI
14
+
15
+
16
+ end
17
+ end
@@ -0,0 +1,71 @@
1
+ require 'rest-client'
2
+ require 'clamp'
3
+ require 'formatador'
4
+ require 'yajl/json_gem'
5
+ require 'overwatch/cli/helpers'
6
+ require 'hirb'
7
+
8
+ module Overwatch
9
+ module CLI
10
+ class Command < Clamp::Command
11
+ include Helpers
12
+
13
+ option ["-v", "--verbose"], :flag, "be verbose"
14
+ option "--version", :flag, "show version" do
15
+ puts "Overwatch v#{Overwatch::CLI::VERSION} (Codename: Snickelfritz)"
16
+ exit(0)
17
+ end
18
+ subcommand "resource", "Resources" do
19
+ option ["-h", "--host"], "HOST", "overwatch-collection server", :default => "localhost"
20
+ option ["-p", "--port"], "PORT", "overwatch-collection port", :default => "9001"
21
+ option ["-f", "--format"], "[FORMAT]", "format (choices: pretty, json, text)", :default => "pretty"
22
+
23
+ subcommand "list", "list all resources" do
24
+ def execute
25
+ options = { :fields => ['id','name', 'api_key'], :format => format }
26
+
27
+ get("http://#{host}:#{port}/resources", options)
28
+ end
29
+ end
30
+
31
+ subcommand "show", "show a specific resource" do
32
+ parameter "NAME", "resource name"
33
+
34
+ option ['-a', '--attributes'], :flag, "list all resource attributes"
35
+
36
+ def execute
37
+ options = { :fields => ['id','name', 'api_key'], :format => format }
38
+ get("http://#{host}:#{port}/resources/#{name}", options)
39
+ end
40
+ end
41
+
42
+ subcommand "create", "create a new resource" do
43
+ parameter "NAME", "resource name"
44
+
45
+ def execute
46
+ options = { :fields => ['id','name', 'api_key'], :format => format }
47
+ post("http://#{host}:#{port}/resources", JSON.generate({:name => name}), options)
48
+ end
49
+
50
+ end
51
+ subcommand "update", "update an existing resource"
52
+ subcommand "delete", "delete an existing resource" do
53
+ parameter "NAME", "resource name"
54
+
55
+ def execute
56
+ # resource = delete("http://#{host}:#{port}/resources/#{name}")
57
+ display_line "[yellow]Resource deleted![/]"
58
+ end
59
+ end
60
+ subcommand "regenerate", "regenerate a resource's API key"
61
+ end
62
+
63
+ subcommand "snapshot", "Snapshots" do
64
+ subcommand "show", "show an existing snapshot"
65
+ subcommand "create", "create a new snapshot"
66
+ subcommand "delete", "delete an existing snapshot"
67
+ end
68
+ end
69
+
70
+ end
71
+ end
@@ -0,0 +1,12 @@
1
+ require 'clamp'
2
+
3
+ module Overwatch
4
+ module CLI
5
+ module Command
6
+ class Base
7
+
8
+ end
9
+ end
10
+ end
11
+
12
+ require File.expand_path(File.join(File.dirname(__FILE__), "main"))
@@ -0,0 +1,14 @@
1
+
2
+ module Overwatch
3
+ module CLI
4
+ module Command
5
+
6
+ class Main < Base
7
+
8
+ end
9
+
10
+ end
11
+ end
12
+ end
13
+
14
+ # require 'overwatch/cli/command/resource'
@@ -0,0 +1,11 @@
1
+ module Overwatch
2
+ module CLI
3
+ module Command
4
+ class Resource < Main
5
+
6
+ end
7
+
8
+ end
9
+ end
10
+ end
11
+
@@ -0,0 +1,14 @@
1
+ module Overwatch
2
+ module CLI
3
+ module Command
4
+ class Create < Resource
5
+
6
+ option ['-n', '--name'], "NAME", "name of resource"
7
+
8
+ def execute
9
+ puts "CREATE"
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,11 @@
1
+ module Overwatch
2
+ module CLI
3
+ module Command
4
+
5
+ class Resource::Delete < Base
6
+
7
+ end
8
+
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,12 @@
1
+ module Overwatch
2
+ module CLI
3
+ module Command
4
+ module Resource
5
+ class List < Overwatch::CLI::Command::Base
6
+
7
+ end
8
+
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,11 @@
1
+ module Overwatch
2
+ module CLI
3
+ module Command
4
+
5
+ class Resource::Regenerate < Base
6
+
7
+ end
8
+
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module Overwatch
2
+ module CLI
3
+ module Command
4
+
5
+ class Resource::Show < Base
6
+
7
+ end
8
+
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module Overwatch
2
+ module CLI
3
+ module Command
4
+
5
+ class Resource::Update < Base
6
+
7
+ end
8
+
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,95 @@
1
+ module Overwatch
2
+ module CLI
3
+ module Helpers
4
+ def f
5
+ @f ||= Formatador.new
6
+ end
7
+
8
+ def display_line(string)
9
+ f.display_line(string)
10
+ end
11
+
12
+ def default_headers
13
+ { 'Content-Type' => 'application/json', 'Accept' => 'application/json' }
14
+ end
15
+
16
+ def get(url, options={}, headers={})
17
+ begin
18
+ response = JSON.parse(RestClient.get(url, headers.merge!(default_headers)))
19
+ format_output(response, options)
20
+ rescue RestClient::Exception => e
21
+ response = {:code => e.http_code.to_s, :errors => JSON.parse(e.http_body)}
22
+ options.merge!(:fields => [ :code, :errors ])
23
+ format_output(response, options)
24
+ exit 1
25
+ end
26
+ end
27
+
28
+ def post(url, payload={}, options={}, headers={})
29
+ begin
30
+ response = JSON.parse(RestClient.post(url, payload, headers.merge!(default_headers)))
31
+ format_output(response, options)
32
+ rescue RestClient::Exception => e
33
+ response = {:code => e.http_code.to_s, :errors => JSON.parse(e.http_body)}
34
+ options[:fields] = [ :code, :errors ]
35
+ format_output(response, options)
36
+ exit 1
37
+ end
38
+ end
39
+
40
+ def delete(url, headers={})
41
+ begin
42
+ res = RestClient.delete(url, headers.merge!(default_headers))
43
+ JSON.parse(res)
44
+ rescue RestClient::Exception => e
45
+ end
46
+ end
47
+
48
+ def format_output(rows, options)
49
+ data = rows.is_a?(Array) ? rows : [rows]
50
+
51
+ case options[:format]
52
+ when 'text'
53
+ puts Hirb::Helpers::TextTable.render(data, options)
54
+ when 'json'
55
+ pp JSON.generate(data)
56
+ else
57
+ puts Hirb::Helpers::Table.render(data, options)
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+
64
+
65
+ class Hirb::Helpers::TextTable < Hirb::Helpers::Table
66
+ CHARS = {
67
+ :top => {
68
+ :left => '', :center => '', :right => '', :horizontal => '', :vertical => {
69
+ :outside => '', :inside => ''
70
+ }
71
+ },
72
+ :middle => {
73
+ :left => '', :center => '', :right => '', :horizontal => ''
74
+ },
75
+ :bottom => {
76
+ :left => '', :center => '', :right => '', :horizontal => '', :vertical => {
77
+ :outside => '', :inside => ''
78
+ }
79
+ }
80
+ }
81
+
82
+ def self.render(rows, options={})
83
+ options.merge!(:headers => false, :description => false)
84
+ new(rows, options).render
85
+ end
86
+
87
+ def render
88
+ body = []
89
+ unless @rows.length == 0
90
+ setup_field_lengths
91
+ body += render_rows
92
+ end
93
+ body.join("\n")
94
+ end
95
+ end
@@ -0,0 +1,5 @@
1
+ module Overwatch
2
+ module CLI
3
+ VERSION = "0.1.0"
4
+ end
5
+ end
@@ -0,0 +1,32 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+
4
+ require 'overwatch/cli/version'
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = 'overwatch-cli'
8
+ s.version = Overwatch::CLI::VERSION
9
+ s.platform = Gem::Platform::RUBY
10
+ s.authors = [ "Dan Ryan" ]
11
+ s.email = [ "dan@appliedawesome.com" ]
12
+ s.homepage = "https://github.com/danryan/overwatch-cli"
13
+ s.summary = "Overwatch command-line interface for configuration and reporting"
14
+ s.description = "overwatch-cli is the command-line interface to the Overwatch monitoring suite"
15
+
16
+ s.rubyforge_project = "overwatch-cli"
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {spec}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+
22
+ s.add_dependency 'yajl-ruby', '>= 0.8.2'
23
+ s.add_dependency 'rest-client', '>= 1.6.3'
24
+ s.add_dependency 'clamp', '>= 0.2.2'
25
+ s.add_dependency 'formatador', '>= 0.2.0'
26
+ s.add_dependency 'hirb', '0.4.5'
27
+
28
+ s.add_development_dependency 'rspec', '>= 2.6.0'
29
+ s.add_development_dependency 'spork', '>= 0.9.0.rc8'
30
+ s.add_development_dependency 'watchr', '>= 0.7'
31
+ s.add_development_dependency 'json_spec', '>= 0.5.0'
32
+ end
File without changes
@@ -0,0 +1,25 @@
1
+ require 'rubygems'
2
+ require 'spork'
3
+
4
+ Spork.prefork do
5
+ ENV["RACK_ENV"] ||= 'test'
6
+ require 'rspec'
7
+
8
+ support_files = File.join(File.expand_path(File.dirname(__FILE__)), "spec/support/**/*.rb")
9
+ Dir[support_files].each {|f| require f}
10
+
11
+ ENV['REDIS_URL'] = 'redis://localhost:6379/3'
12
+
13
+ RSpec.configure do |config|
14
+ config.color_enabled = true
15
+ config.formatter = "documentation"
16
+ config.mock_with :rspec
17
+
18
+ config.before :suite do
19
+ $redis.flushdb
20
+ end
21
+ end
22
+ end
23
+
24
+ Spork.each_run do
25
+ end
metadata ADDED
@@ -0,0 +1,176 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: overwatch-cli
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Dan Ryan
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-07-22 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: yajl-ruby
16
+ requirement: &2165046360 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 0.8.2
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *2165046360
25
+ - !ruby/object:Gem::Dependency
26
+ name: rest-client
27
+ requirement: &2165045860 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: 1.6.3
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *2165045860
36
+ - !ruby/object:Gem::Dependency
37
+ name: clamp
38
+ requirement: &2165045400 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: 0.2.2
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *2165045400
47
+ - !ruby/object:Gem::Dependency
48
+ name: formatador
49
+ requirement: &2165044940 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: 0.2.0
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: *2165044940
58
+ - !ruby/object:Gem::Dependency
59
+ name: hirb
60
+ requirement: &2165044480 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - =
64
+ - !ruby/object:Gem::Version
65
+ version: 0.4.5
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: *2165044480
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: &2165066520 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: 2.6.0
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *2165066520
80
+ - !ruby/object:Gem::Dependency
81
+ name: spork
82
+ requirement: &2165066060 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: 0.9.0.rc8
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: *2165066060
91
+ - !ruby/object:Gem::Dependency
92
+ name: watchr
93
+ requirement: &2165065600 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '0.7'
99
+ type: :development
100
+ prerelease: false
101
+ version_requirements: *2165065600
102
+ - !ruby/object:Gem::Dependency
103
+ name: json_spec
104
+ requirement: &2165065140 !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: 0.5.0
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: *2165065140
113
+ description: overwatch-cli is the command-line interface to the Overwatch monitoring
114
+ suite
115
+ email:
116
+ - dan@appliedawesome.com
117
+ executables:
118
+ - overwatch
119
+ extensions: []
120
+ extra_rdoc_files: []
121
+ files:
122
+ - .gitignore
123
+ - .watchr
124
+ - Gemfile
125
+ - Gemfile.lock
126
+ - README.md
127
+ - Rakefile
128
+ - bin/overwatch
129
+ - config/overwatchrc
130
+ - lib/overwatch/cli.rb
131
+ - lib/overwatch/cli/command.rb
132
+ - lib/overwatch/cli/command/base.rb
133
+ - lib/overwatch/cli/command/main.rb
134
+ - lib/overwatch/cli/command/resource.rb
135
+ - lib/overwatch/cli/command/resource/create.rb
136
+ - lib/overwatch/cli/command/resource/delete.rb
137
+ - lib/overwatch/cli/command/resource/list.rb
138
+ - lib/overwatch/cli/command/resource/regenerate.rb
139
+ - lib/overwatch/cli/command/resource/show.rb
140
+ - lib/overwatch/cli/command/resource/update.rb
141
+ - lib/overwatch/cli/helpers.rb
142
+ - lib/overwatch/cli/version.rb
143
+ - overwatch-cli.gemspec
144
+ - spec/overwatch_spec.rb
145
+ - spec/spec_helper.rb
146
+ homepage: https://github.com/danryan/overwatch-cli
147
+ licenses: []
148
+ post_install_message:
149
+ rdoc_options: []
150
+ require_paths:
151
+ - lib
152
+ required_ruby_version: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ! '>='
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
158
+ segments:
159
+ - 0
160
+ hash: -974194128470217844
161
+ required_rubygems_version: !ruby/object:Gem::Requirement
162
+ none: false
163
+ requirements:
164
+ - - ! '>='
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ segments:
168
+ - 0
169
+ hash: -974194128470217844
170
+ requirements: []
171
+ rubyforge_project: overwatch-cli
172
+ rubygems_version: 1.8.5
173
+ signing_key:
174
+ specification_version: 3
175
+ summary: Overwatch command-line interface for configuration and reporting
176
+ test_files: []