bixby-client 0.2.2 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 342a2bdbd9cca476b783cf533eb5c6f3a3d8e73a
4
- data.tar.gz: d1e26d76f70f67c03843db52df19a4857f5ea6db
3
+ metadata.gz: 72daf8d74d021a0b3c397c5fa8ea3c01fe43e14d
4
+ data.tar.gz: a5cbd3599ca0c9e3f6dbec98cf8daf2f7f382f85
5
5
  SHA512:
6
- metadata.gz: f9b071a63eda0e7dfcbc7ec14adea9e0b281d9ab02d5b025c7ad6f186f2cbd464f6af87fa92a0253c67f831837b420f0b880f0a5824e0ec09a8a1f43aa63491d
7
- data.tar.gz: d3740d5b4bec3ac8cb91d9ec42df549c4a59cca201fd424f9ea5130798f9db3b258aa72421f5a6254e73f628d0ca985b975767a18c6a2fb842c32f49e0a91cb4
6
+ metadata.gz: ff267307702818c6a7b9f6969553d27b6b50e905eb8230ad5dd8c693ee90e6daaac975c71978fab0f9475430b4e9d320a32549bab74a53c895efc0ad5c679469
7
+ data.tar.gz: 09cff927b2e1e93dca72a0e3488873779c90fa192a5823a5023f512649fd09a07cb6630da52758b91be530aa73279cbc3c8ce68b3cfa894c9a5fabd672ecc06a
@@ -0,0 +1,13 @@
1
+ language: ruby
2
+ script: "bundle exec micron test/"
3
+ after_script:
4
+ - "rake coverage"
5
+ - "rake coveralls"
6
+
7
+ rvm:
8
+ - 2.0.0
9
+ - 1.9.3
10
+
11
+ branches:
12
+ only:
13
+ - master
data/Gemfile CHANGED
@@ -8,6 +8,7 @@ gem 'oj'
8
8
  gem 'httpi'
9
9
  gem 'curb'
10
10
  gem 'mixlib-shellout'
11
+ gem 'fuzzy_file_finder'
11
12
 
12
13
  gem "api-auth", :git => "https://github.com/chetan/api_auth.git", :branch => "bixby"
13
14
 
@@ -24,6 +25,7 @@ group :development do
24
25
 
25
26
  gem "simplecov", :platforms => [:mri_19, :mri_20, :rbx], :git => "https://github.com/chetan/simplecov.git", :branch => "inline_nocov"
26
27
  gem "micron", :github => "chetan/micron"
28
+ gem "coveralls", :require => false
27
29
 
28
30
  gem "webmock", :require => false
29
31
  gem "mocha", :require => false
@@ -1,6 +1,6 @@
1
1
  GIT
2
2
  remote: git://github.com/chetan/micron.git
3
- revision: e1a12a19e9d1f3f0e27bcec4cad4007e2a1c3d1a
3
+ revision: 95399129ce8908484ed92a0de3a7e0ce83d99d2b
4
4
  specs:
5
5
  micron (0.1.0)
6
6
  colorize
@@ -40,37 +40,44 @@ GIT
40
40
 
41
41
  GIT
42
42
  remote: https://github.com/chetan/test_guard.git
43
- revision: 72fade8f2fda1747ece442aee40be53d5cb293c9
43
+ revision: 6e184096f7713cefe6eab3d250b18d214e09a1ca
44
44
  specs:
45
45
  test_guard (0.2.1)
46
46
  awesome_print
47
+ easycov
47
48
  growl
48
49
  listen
49
50
  simplecov
50
51
  simplecov-console
51
- single_test
52
- turn
53
52
 
54
53
  GEM
55
54
  remote: https://rubygems.org/
56
55
  specs:
57
56
  addressable (2.3.5)
58
- ansi (1.4.3)
59
57
  awesome_print (1.2.0)
60
- bixby-common (0.4.5)
58
+ bixby-common (0.4.6)
61
59
  api-auth
62
60
  faye-websocket
63
61
  httpi
64
62
  logging
65
63
  multi_json
64
+ semver2
66
65
  builder (3.2.2)
66
+ celluloid (0.15.2)
67
+ timers (~> 1.1.0)
67
68
  coderay (1.0.9)
68
69
  colorize (0.6.0)
69
70
  columnize (0.3.6)
71
+ coveralls (0.7.0)
72
+ multi_json (~> 1.3)
73
+ rest-client
74
+ simplecov (>= 0.7)
75
+ term-ansicolor
76
+ thor
70
77
  crack (0.4.1)
71
78
  safe_yaml (~> 0.9.0)
72
- curb (0.8.4)
73
- debugger (1.6.1)
79
+ curb (0.8.5)
80
+ debugger (1.6.2)
74
81
  columnize (>= 0.3.1)
75
82
  debugger-linecache (~> 1.2.0)
76
83
  debugger-ruby_core_source (~> 1.2.3)
@@ -79,9 +86,11 @@ GEM
79
86
  debugger (~> 1)
80
87
  pry (>= 0.9.9)
81
88
  debugger-ruby_core_source (1.2.3)
82
- easycov (0.1.1)
89
+ easycov (0.3.1)
83
90
  multi_json
84
91
  simplecov
92
+ simplecov-console
93
+ simplecov-html
85
94
  eventmachine (1.0.3)
86
95
  faraday (0.8.8)
87
96
  multipart-post (~> 1.2.0)
@@ -89,6 +98,7 @@ GEM
89
98
  eventmachine (>= 0.12.0)
90
99
  websocket-driver (>= 0.3.0)
91
100
  ffi (1.9.0)
101
+ fuzzy_file_finder (1.0.4)
92
102
  git (1.2.6)
93
103
  github_api (0.10.1)
94
104
  addressable
@@ -109,20 +119,21 @@ GEM
109
119
  json (1.8.0)
110
120
  jwt (0.1.8)
111
121
  multi_json (>= 1.5)
112
- listen (1.3.1)
122
+ listen (2.0.0)
123
+ celluloid (>= 0.15.1)
113
124
  rb-fsevent (>= 0.9.3)
114
125
  rb-inotify (>= 0.9)
115
- rb-kqueue (>= 0.2)
116
126
  little-plugger (1.1.3)
117
127
  logging (1.8.1)
118
128
  little-plugger (>= 1.1.3)
119
129
  multi_json (>= 1.3.6)
120
130
  metaclass (0.0.1)
121
131
  method_source (0.8.2)
132
+ mime-types (1.25)
122
133
  mixlib-shellout (1.2.0)
123
134
  mocha (0.14.0)
124
135
  metaclass (~> 0.0.1)
125
- multi_json (1.8.0)
136
+ multi_json (1.8.1)
126
137
  multi_xml (0.5.5)
127
138
  multipart-post (1.2.0)
128
139
  nokogiri (1.5.10)
@@ -133,7 +144,7 @@ GEM
133
144
  multi_json (~> 1.0)
134
145
  multi_xml (~> 0.5)
135
146
  rack (~> 1.2)
136
- oj (2.1.4)
147
+ oj (2.1.6)
137
148
  pry (0.9.12.2)
138
149
  coderay (~> 1.0.5)
139
150
  method_source (~> 0.8)
@@ -145,28 +156,30 @@ GEM
145
156
  rb-fsevent (0.9.3)
146
157
  rb-inotify (0.9.2)
147
158
  ffi (>= 0.5.0)
148
- rb-kqueue (0.2.0)
149
- ffi (>= 0.5.0)
150
159
  rdoc (4.0.1)
151
160
  json (~> 1.4)
152
161
  redcarpet (3.0.0)
162
+ rest-client (1.6.7)
163
+ mime-types (>= 1.16)
153
164
  rubyntlm (0.3.4)
154
- safe_yaml (0.9.5)
155
- simplecov-console (0.1.1)
165
+ safe_yaml (0.9.7)
166
+ semver2 (3.3.2)
167
+ simplecov-console (0.1.3)
156
168
  colorize
157
169
  hirb
158
170
  simplecov
159
171
  simplecov-html (0.7.1)
160
- single_test (0.6.0)
161
- rake
162
172
  slop (3.4.6)
163
- turn (0.9.6)
164
- ansi
165
- webmock (1.13.0)
173
+ term-ansicolor (1.2.2)
174
+ tins (~> 0.8)
175
+ thor (0.18.1)
176
+ timers (1.1.0)
177
+ tins (0.11.0)
178
+ webmock (1.14.0)
166
179
  addressable (>= 2.2.7)
167
180
  crack (>= 0.3.2)
168
181
  websocket-driver (0.3.0)
169
- yard (0.8.7)
182
+ yard (0.8.7.2)
170
183
 
171
184
  PLATFORMS
172
185
  ruby
@@ -175,9 +188,11 @@ DEPENDENCIES
175
188
  api-auth!
176
189
  bixby-common
177
190
  bundler
191
+ coveralls
178
192
  curb
179
193
  debugger
180
194
  debugger-pry
195
+ fuzzy_file_finder
181
196
  httpi
182
197
  jeweler!
183
198
  micron!
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.2
1
+ 0.3.0
data/bin/bixby CHANGED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ ENV["BIXBY_HOME"] ||= "/opt/bixby"
4
+
5
+ $: << File.expand_path("../../lib", __FILE__)
6
+ require 'bixby-client/app'
@@ -2,15 +2,15 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: bixby-client 0.2.2 ruby lib
5
+ # stub: bixby-client 0.3.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "bixby-client"
9
- s.version = "0.2.2"
9
+ s.version = "0.3.0"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.authors = ["Chetan Sarva"]
13
- s.date = "2013-09-26"
13
+ s.date = "2013-10-30"
14
14
  s.description = "Bixby Client"
15
15
  s.email = "chetan@pixelcop.net"
16
16
  s.executables = ["bixby"]
@@ -20,6 +20,7 @@ Gem::Specification.new do |s|
20
20
  ]
21
21
  s.files = [
22
22
  ".document",
23
+ ".travis.yml",
23
24
  "Gemfile",
24
25
  "Gemfile.lock",
25
26
  "LICENSE",
@@ -29,8 +30,20 @@ Gem::Specification.new do |s|
29
30
  "bin/bixby",
30
31
  "bixby-client.gemspec",
31
32
  "lib/bixby-client.rb",
33
+ "lib/bixby-client/app.rb",
34
+ "lib/bixby-client/app/command.rb",
35
+ "lib/bixby-client/app/commands/run.rb",
36
+ "lib/bixby-client/app/file_finder.rb",
32
37
  "lib/bixby-client/client.rb",
38
+ "lib/bixby-client/client/version.rb",
33
39
  "lib/bixby-client/command.rb",
40
+ "lib/bixby-client/model.rb",
41
+ "lib/bixby-client/model/agent.rb",
42
+ "lib/bixby-client/model/base.rb",
43
+ "lib/bixby-client/model/check.rb",
44
+ "lib/bixby-client/model/command.rb",
45
+ "lib/bixby-client/model/host.rb",
46
+ "lib/bixby-client/model/metric.rb",
34
47
  "lib/bixby-client/modules.rb",
35
48
  "lib/bixby-client/modules/inventory.rb",
36
49
  "lib/bixby-client/modules/metrics.rb",
@@ -39,6 +52,8 @@ Gem::Specification.new do |s|
39
52
  "lib/bixby-client/platform_util.rb",
40
53
  "lib/bixby-client/script.rb",
41
54
  "lib/bixby-client/script_util.rb",
55
+ "tasks/coverage.rake",
56
+ "tasks/coveralls.rake",
42
57
  "tasks/jeweler.rake",
43
58
  "tasks/test.rake",
44
59
  "tasks/yard.rake",
@@ -62,7 +77,7 @@ Gem::Specification.new do |s|
62
77
  s.homepage = "http://github.com/chetan/bixby-client"
63
78
  s.licenses = ["MIT"]
64
79
  s.require_paths = ["lib"]
65
- s.rubygems_version = "2.1.0"
80
+ s.rubygems_version = "2.1.5"
66
81
  s.summary = "Bixby Client"
67
82
 
68
83
  if s.respond_to? :specification_version then
@@ -75,6 +90,7 @@ Gem::Specification.new do |s|
75
90
  s.add_runtime_dependency(%q<httpi>, [">= 0"])
76
91
  s.add_runtime_dependency(%q<curb>, [">= 0"])
77
92
  s.add_runtime_dependency(%q<mixlib-shellout>, [">= 0"])
93
+ s.add_runtime_dependency(%q<fuzzy_file_finder>, [">= 0"])
78
94
  s.add_runtime_dependency(%q<api-auth>, [">= 0"])
79
95
  s.add_development_dependency(%q<yard>, [">= 0"])
80
96
  s.add_development_dependency(%q<redcarpet>, [">= 0"])
@@ -85,6 +101,7 @@ Gem::Specification.new do |s|
85
101
  s.add_development_dependency(%q<debugger-pry>, [">= 0"])
86
102
  s.add_development_dependency(%q<simplecov>, [">= 0"])
87
103
  s.add_development_dependency(%q<micron>, [">= 0"])
104
+ s.add_development_dependency(%q<coveralls>, [">= 0"])
88
105
  s.add_development_dependency(%q<webmock>, [">= 0"])
89
106
  s.add_development_dependency(%q<mocha>, [">= 0"])
90
107
  s.add_development_dependency(%q<test_guard>, [">= 0"])
@@ -98,6 +115,7 @@ Gem::Specification.new do |s|
98
115
  s.add_dependency(%q<httpi>, [">= 0"])
99
116
  s.add_dependency(%q<curb>, [">= 0"])
100
117
  s.add_dependency(%q<mixlib-shellout>, [">= 0"])
118
+ s.add_dependency(%q<fuzzy_file_finder>, [">= 0"])
101
119
  s.add_dependency(%q<api-auth>, [">= 0"])
102
120
  s.add_dependency(%q<yard>, [">= 0"])
103
121
  s.add_dependency(%q<redcarpet>, [">= 0"])
@@ -108,6 +126,7 @@ Gem::Specification.new do |s|
108
126
  s.add_dependency(%q<debugger-pry>, [">= 0"])
109
127
  s.add_dependency(%q<simplecov>, [">= 0"])
110
128
  s.add_dependency(%q<micron>, [">= 0"])
129
+ s.add_dependency(%q<coveralls>, [">= 0"])
111
130
  s.add_dependency(%q<webmock>, [">= 0"])
112
131
  s.add_dependency(%q<mocha>, [">= 0"])
113
132
  s.add_dependency(%q<test_guard>, [">= 0"])
@@ -122,6 +141,7 @@ Gem::Specification.new do |s|
122
141
  s.add_dependency(%q<httpi>, [">= 0"])
123
142
  s.add_dependency(%q<curb>, [">= 0"])
124
143
  s.add_dependency(%q<mixlib-shellout>, [">= 0"])
144
+ s.add_dependency(%q<fuzzy_file_finder>, [">= 0"])
125
145
  s.add_dependency(%q<api-auth>, [">= 0"])
126
146
  s.add_dependency(%q<yard>, [">= 0"])
127
147
  s.add_dependency(%q<redcarpet>, [">= 0"])
@@ -132,6 +152,7 @@ Gem::Specification.new do |s|
132
152
  s.add_dependency(%q<debugger-pry>, [">= 0"])
133
153
  s.add_dependency(%q<simplecov>, [">= 0"])
134
154
  s.add_dependency(%q<micron>, [">= 0"])
155
+ s.add_dependency(%q<coveralls>, [">= 0"])
135
156
  s.add_dependency(%q<webmock>, [">= 0"])
136
157
  s.add_dependency(%q<mocha>, [">= 0"])
137
158
  s.add_dependency(%q<test_guard>, [">= 0"])
@@ -5,6 +5,7 @@ require "bixby-common"
5
5
 
6
6
  require "bixby-client/platform_util"
7
7
  require "bixby-client/script_util"
8
+ require "bixby-client/model"
8
9
  require "bixby-client/modules"
9
10
  require "bixby-client/command"
10
11
  require "bixby-client/client"
@@ -27,7 +28,7 @@ module Bixby
27
28
  private
28
29
 
29
30
  def create_client
30
- raise "#{root} not found" if not root
31
+ raise "BIXBY_HOME not set" if not root
31
32
 
32
33
  config_file = Bixby.path("etc", "bixby.yml")
33
34
  raise "#{config_file} not found" if not File.exists? config_file
@@ -0,0 +1,88 @@
1
+
2
+ require 'optparse'
3
+
4
+ require 'bixby-client'
5
+ require 'bixby-client/app/command'
6
+
7
+ module Bixby
8
+ class Client
9
+
10
+ class << self
11
+ attr_accessor :app
12
+ end
13
+
14
+ class App
15
+
16
+ attr_reader :global_options, :command, :commands
17
+
18
+ def initialize
19
+ @global_options = {}
20
+ @commands = []
21
+ end
22
+
23
+ def run
24
+
25
+ begin
26
+ options.order!(ARGV)
27
+
28
+ if global_options[:help] then
29
+ display_help()
30
+ end
31
+
32
+ rescue Exception => ex
33
+ exit if ex.kind_of? SystemExit
34
+ STDERR.puts "error: #{ex}"
35
+ STDERR.puts
36
+ STDERR.puts parser
37
+ exit 1
38
+ end
39
+
40
+ subcmd = ARGV.shift
41
+ commands.each do |c|
42
+ if c.match(subcmd) then
43
+ ret = c.new.run(global_options, ARGV)
44
+ exit (ret || 0)
45
+ end
46
+ end
47
+
48
+ # if we reached here, no cmd given, show help?
49
+ display_help()
50
+
51
+ end
52
+
53
+ def display_help
54
+ puts "Usage: bixby [global options] command [command options] [arguments...]"
55
+ puts
56
+ puts "GLOBAL OPTIONS"
57
+ puts options.summarize
58
+ puts
59
+
60
+ puts "COMMANDS"
61
+ commands.each do |c|
62
+ puts " " + c.command_name + " - " + c.desc
63
+ end
64
+
65
+ exit 0
66
+ end
67
+
68
+ def options
69
+ @options ||= OptionParser.new do |opts|
70
+ opts.banner = nil
71
+
72
+ opts.on_tail("-v", "--verbose", "Enable verbose output") {
73
+ global_options[:verbose] = true
74
+ }
75
+
76
+ opts.on_tail("-h", "--help", "Display this help") {
77
+ global_options[:help] = true
78
+ }
79
+ end
80
+ end
81
+
82
+ end
83
+ end
84
+ end
85
+
86
+ Bixby::Client.app = Bixby::Client::App.new
87
+ require 'bixby-client/app/commands/run'
88
+ Bixby::Client.app.run
@@ -0,0 +1,27 @@
1
+
2
+ module Bixby
3
+ module App
4
+ class Command
5
+
6
+ def self.command_name(str=nil)
7
+ @command_name = str if !str.nil?
8
+ @command_name ||= self.name.split(/::/).last.downcase
9
+ end
10
+
11
+ def self.desc(str=nil)
12
+ @desc = str if !str.nil?
13
+ @desc
14
+ end
15
+
16
+ def self.match(str)
17
+ command_name == str
18
+ end
19
+
20
+ def self.options
21
+ end
22
+
23
+ end
24
+ end
25
+ end
26
+
27
+
@@ -0,0 +1,53 @@
1
+
2
+ require 'bixby-client/app/file_finder'
3
+
4
+ module Bixby
5
+ module App
6
+ module Commands
7
+
8
+ class Run < Command
9
+
10
+ command_name "run"
11
+ desc "Run a command in the repository"
12
+
13
+ def run(global_options, argv)
14
+
15
+ str = argv.shift
16
+ scripts = FileFinder.new(Bixby.repo).find_script(str)
17
+
18
+ if scripts.kind_of?(Array)
19
+ if scripts.size > 1 then
20
+ $stderr.puts "Found #{scripts.size} scripts matching '#{str}'. Please be more explicit"
21
+ scripts.each do |s|
22
+ puts " * #{s}"
23
+ end
24
+ return 1
25
+ elsif scripts.empty? then
26
+ $stderr.puts "No scripts matched '#{str}'. Try again"
27
+ return 1
28
+ end
29
+ end
30
+
31
+ setup_env()
32
+ exec(scripts.shift, *argv)
33
+ end
34
+
35
+ # Setup the ENV for exec
36
+ def setup_env
37
+ # stick ourselves in RUBYLIB to speedup exec time
38
+ ENV["RUBYLIB"] = File.expand_path("../../../..", __FILE__)
39
+ ENV["RUBYOPT"] = '-rbixby-client/script'
40
+ end
41
+
42
+ def self.options
43
+ nil
44
+ end
45
+
46
+ end # Run
47
+ Bixby::Client.app.commands << Run
48
+
49
+ end
50
+ end
51
+ end
52
+
53
+
@@ -0,0 +1,85 @@
1
+
2
+ require "fuzzy_file_finder"
3
+
4
+ module Bixby
5
+ module App
6
+ class FileFinder
7
+
8
+ def initialize(root)
9
+ @root = root
10
+ end
11
+
12
+ def find_script(script)
13
+ # try to locate script
14
+ return script if File.exists? script
15
+
16
+ # try relative path
17
+ s = File.expand_path(File.join(@root, script))
18
+ return s if File.exists? s
19
+
20
+ # try searching
21
+ matches = find_all_files(@root).find_all{ |f| f.include? script }.sort { |a,b|
22
+ ld(script, File.basename(a)) <=> ld(script, File.basename(b))
23
+ }
24
+
25
+ return matches if matches.size == 1 # only one result, just return it
26
+
27
+ # fuzzy search
28
+ fuzzy_matches = FuzzyFileFinder.new(@root).find(script.dup).
29
+ sort_by { |m| -m[:score] }.
30
+ map{ |f| f[:path] }.
31
+ find_all{ |f| keep?(f, @root) }
32
+
33
+ # return the union of all unique matches
34
+ return fuzzy_matches + (matches - fuzzy_matches)
35
+ end
36
+
37
+ def find_all_files(path)
38
+ ret = []
39
+ ret += Dir.glob(File.join(path, "**/**")).find_all{ |f|
40
+ # select only actual script files to look at
41
+ if File.symlink? f then
42
+ ret << find_all_files(File.expand_path(f))
43
+ end
44
+
45
+ keep?(f, path)
46
+ }
47
+
48
+ return ret.flatten
49
+ end
50
+
51
+ def keep?(f, path)
52
+ !File.directory? f and
53
+ f !~ /\.(json|test.*)|\/digest$/ and
54
+ File.dirname(f) != path and
55
+ File.dirname(f) !~ /\/(test|lib)$/
56
+ end
57
+
58
+ # Calculate the levenshtein distance between two strings
59
+ #
60
+ # via https://github.com/akirahrkw/levenshtein-distance
61
+ # http://en.wikipedia.org/wiki/Levenshtein_distance
62
+ def levenshtein_distance(a, b)
63
+ a_len = a.length
64
+ b_len = b.length
65
+ d = Array.new(a_len + 1).map! {
66
+ Array.new(b_len + 1).map!{
67
+ 0
68
+ }
69
+ }
70
+ (a_len + 1).times { |i| d[i][0] = i }
71
+ (b_len + 1).times { |i| d[0][i] = i }
72
+
73
+ for i in 1..(a_len)
74
+ for j in 1..(b_len)
75
+ cost = (a[i - 1] == b[j - 1]) ? 0 : 1
76
+ d[i][j] = [ d[i-1][j] + 1 , d[i][j-1] + 1 ,d[i-1][j-1] + cost].min
77
+ end
78
+ end
79
+ d[-1][-1]
80
+ end
81
+ alias_method :ld, :levenshtein_distance
82
+
83
+ end
84
+ end
85
+ end
@@ -2,6 +2,8 @@
2
2
  require "api-auth"
3
3
  require "curb"
4
4
 
5
+ require "bixby-client/client/version"
6
+
5
7
  module Bixby
6
8
 
7
9
  # Implements the Bixby client API
@@ -68,6 +70,20 @@ module Bixby
68
70
  end
69
71
  end
70
72
 
73
+ # Sign the given request
74
+ #
75
+ # @param [HTTPI::Request] request
76
+ def sign_http_request(request)
77
+ ApiAuth.sign!(request, @access_key, @secret_key)
78
+ end
79
+
80
+ # Get the manager URI
81
+ #
82
+ # @return [String]
83
+ def manager_uri
84
+ Bixby.manager_uri
85
+ end
86
+
71
87
 
72
88
  private
73
89
 
@@ -0,0 +1,6 @@
1
+
2
+ module Bixby
3
+ class Client
4
+ VERSION = File.new(File.expand_path("../../../../VERSION", __FILE__)).read.strip
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+
2
+ require "bixby-client/model/base"
3
+
4
+ Dir.glob(File.expand_path("../model/*.rb", __FILE__)).each do |f|
5
+ require f
6
+ end
@@ -0,0 +1,17 @@
1
+
2
+ module Bixby
3
+ module Model
4
+
5
+ class Agent < Base
6
+
7
+ def self.list
8
+ get("/agents")
9
+ end
10
+
11
+ def self.find(id)
12
+ end
13
+
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,60 @@
1
+
2
+ module Bixby
3
+ module Model
4
+ class Base
5
+
6
+ class << self
7
+
8
+ def get(url)
9
+ req = HTTPI::Request.new(api_uri(url))
10
+ req.headers["Content-Type"] = "application/json"
11
+ req.headers["Accept"] = "application/json" # temp workaround, manager should always return JSON on REST urls
12
+ Bixby.client.sign_http_request(req)
13
+ res = HTTPI.get(req)
14
+ if res.error? then
15
+ raise "error" # TODO
16
+ end
17
+
18
+ data = MultiJson.load(res.body)
19
+ if data.kind_of? Array then
20
+ return data.map{ |d| self.new(d) }
21
+ else
22
+ return self.new(d)
23
+ end
24
+ end
25
+
26
+ def api_uri(*args)
27
+ if args.first !~ %r{^/rest/} then
28
+ args.unshift "/rest#{args.shift}"
29
+ end
30
+ URI.join(Bixby.client.manager_uri, *args).to_s
31
+ end
32
+
33
+ end # self
34
+
35
+ def initialize(hash=nil)
36
+ return if hash.nil?
37
+
38
+ hash.each do |k,v|
39
+ instance_variable_set("@#{k}", v)
40
+ next if self.respond_to?(k.to_sym)
41
+ code = <<-EOF
42
+ def #{k}()
43
+ @#{k}
44
+ end
45
+ EOF
46
+ eval(code)
47
+ end
48
+
49
+ def [](key)
50
+ if self.respond_to?(key.to_sym) then
51
+ return self.send(key.to_sym)
52
+ end
53
+ return nil
54
+ end
55
+
56
+ end
57
+
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,17 @@
1
+
2
+ module Bixby
3
+ module Model
4
+
5
+ class Check < Base
6
+
7
+ def self.list(host_id)
8
+ get("/hosts/#{host_id}/checks")
9
+ end
10
+
11
+ def self.find(id)
12
+ end
13
+
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+
2
+ module Bixby
3
+ module Model
4
+
5
+ class Command < Base
6
+
7
+ def self.list
8
+ get("/commands")
9
+ end
10
+
11
+ def self.find(id)
12
+ end
13
+
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+
2
+ module Bixby
3
+ module Model
4
+
5
+ class Host < Base
6
+
7
+ def self.list
8
+ get("/hosts")
9
+ end
10
+
11
+ def self.find(id)
12
+ end
13
+
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,21 @@
1
+
2
+ module Bixby
3
+ module Model
4
+
5
+ class Metric < Base
6
+
7
+ def self.list(host_id)
8
+ get("/hosts/#{host_id}/checks")
9
+ end
10
+
11
+ def self.list_for_check(host_id, check_id)
12
+ get("/hosts/#{host_id}/checks/#{check_id}/metrics")
13
+ end
14
+
15
+ def self.find(id)
16
+ end
17
+
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,2 @@
1
+
2
+ require "easycov/rake"
@@ -0,0 +1,10 @@
1
+
2
+ # for reporting to coveralls
3
+ require "coveralls"
4
+ desc "Report coverage to coveralls"
5
+ task :coveralls do
6
+ SimpleCov.formatter = Coveralls::SimpleCov::Formatter
7
+ if File.exists? File.join(EasyCov.path, ".resultset.json") then
8
+ SimpleCov::ResultMerger.merged_result.format!
9
+ end
10
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bixby-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chetan Sarva
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-09-26 00:00:00.000000000 Z
11
+ date: 2013-10-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bixby-common
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - '>='
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: fuzzy_file_finder
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: api-auth
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -234,6 +248,20 @@ dependencies:
234
248
  - - '>='
235
249
  - !ruby/object:Gem::Version
236
250
  version: '0'
251
+ - !ruby/object:Gem::Dependency
252
+ name: coveralls
253
+ requirement: !ruby/object:Gem::Requirement
254
+ requirements:
255
+ - - '>='
256
+ - !ruby/object:Gem::Version
257
+ version: '0'
258
+ type: :development
259
+ prerelease: false
260
+ version_requirements: !ruby/object:Gem::Requirement
261
+ requirements:
262
+ - - '>='
263
+ - !ruby/object:Gem::Version
264
+ version: '0'
237
265
  - !ruby/object:Gem::Dependency
238
266
  name: webmock
239
267
  requirement: !ruby/object:Gem::Requirement
@@ -328,6 +356,7 @@ extra_rdoc_files:
328
356
  - README.rdoc
329
357
  files:
330
358
  - .document
359
+ - .travis.yml
331
360
  - Gemfile
332
361
  - Gemfile.lock
333
362
  - LICENSE
@@ -337,8 +366,20 @@ files:
337
366
  - bin/bixby
338
367
  - bixby-client.gemspec
339
368
  - lib/bixby-client.rb
369
+ - lib/bixby-client/app.rb
370
+ - lib/bixby-client/app/command.rb
371
+ - lib/bixby-client/app/commands/run.rb
372
+ - lib/bixby-client/app/file_finder.rb
340
373
  - lib/bixby-client/client.rb
374
+ - lib/bixby-client/client/version.rb
341
375
  - lib/bixby-client/command.rb
376
+ - lib/bixby-client/model.rb
377
+ - lib/bixby-client/model/agent.rb
378
+ - lib/bixby-client/model/base.rb
379
+ - lib/bixby-client/model/check.rb
380
+ - lib/bixby-client/model/command.rb
381
+ - lib/bixby-client/model/host.rb
382
+ - lib/bixby-client/model/metric.rb
342
383
  - lib/bixby-client/modules.rb
343
384
  - lib/bixby-client/modules/inventory.rb
344
385
  - lib/bixby-client/modules/metrics.rb
@@ -347,6 +388,8 @@ files:
347
388
  - lib/bixby-client/platform_util.rb
348
389
  - lib/bixby-client/script.rb
349
390
  - lib/bixby-client/script_util.rb
391
+ - tasks/coverage.rake
392
+ - tasks/coveralls.rake
350
393
  - tasks/jeweler.rake
351
394
  - tasks/test.rake
352
395
  - tasks/yard.rake
@@ -386,7 +429,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
386
429
  version: '0'
387
430
  requirements: []
388
431
  rubyforge_project:
389
- rubygems_version: 2.1.0
432
+ rubygems_version: 2.1.5
390
433
  signing_key:
391
434
  specification_version: 4
392
435
  summary: Bixby Client