kpigen 0.0.1

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.
data/.gitignore ADDED
@@ -0,0 +1,14 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ config/database.yml
6
+ .DS_Store
7
+ .rvmrc
8
+ log
9
+ doc
10
+ appstats_*
11
+ *_real_spec.rb
12
+ *.rdb
13
+ *.log
14
+ *.cmd
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source "http://gems.cenx.test"
2
+ source "http://rubygems.org"
3
+
4
+ # Specify your gem's dependencies in kpigen.gemspec
5
+ gemspec
data/Rakefile ADDED
@@ -0,0 +1,5 @@
1
+ require "bundler/gem_tasks"
2
+ require 'rspec/core/rake_task'
3
+
4
+ import 'lib/kpigen/ci.rake'
5
+ RSpec::Core::RakeTask.new
@@ -0,0 +1,2 @@
1
+ require 'autotest/fsevent'
2
+ Autotest.add_discovery { "rspec2" }
data/bin/kpigen ADDED
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env ruby
2
+ require 'rubygems'
3
+ require "bundler/setup"
4
+ require File.dirname(__FILE__) + "/../lib/kpigen"
5
+
6
+ eve = Eve::Application.new(:display => :stdio, :system_calls_display => { :filename => "./kpigen_system_calls.log" })
7
+ app = Kpigen::Application.new(eve)
8
+ Signal.trap("SIGINT") { app.cmd("exit") }
9
+ app.run(ARGV)
data/kpigen.gemspec ADDED
@@ -0,0 +1,40 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "kpigen/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "kpigen"
7
+ s.version = Kpigen::VERSION
8
+ s.authors = ["Andrew Forward"]
9
+ s.email = ["andrew.forward@cenx.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{A command line tool for generating kpigen data based on csv inputs}
12
+ s.description = %q{A command line tool for generating kpigen data based on csv inputs}
13
+
14
+ s.files = `git ls-files`.split("\n")
15
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
+ s.executables = [ 'kpigen' ]
18
+ s.require_paths = ["lib"]
19
+
20
+ s.add_dependency('evegem','>=0.1.2')
21
+ s.add_dependency('utest','>=0.0.3')
22
+ s.add_dependency('watchme','>=0.0.3')
23
+ s.add_dependency('awesome_print')
24
+ s.add_dependency('rake','0.9.2')
25
+ s.add_dependency('rails','>=3.2.1')
26
+ s.add_dependency('mysql2','0.3.11')
27
+ s.add_dependency('rack','1.4.1')
28
+ s.add_dependency('eventmachine','0.12.10')
29
+ s.add_dependency('net-ssh','2.3.0')
30
+ s.add_dependency('redis','2.2.0')
31
+
32
+ s.add_development_dependency('rspec')
33
+ s.add_development_dependency('autotest')
34
+ s.add_development_dependency('autotest-fsevent') if RUBY_PLATFORM =~ /darwin/i
35
+ s.add_development_dependency('ZenTest')
36
+ s.add_development_dependency('rb-fsevent') if RUBY_PLATFORM =~ /darwin/i
37
+ s.add_development_dependency('geminabox')
38
+ s.add_development_dependency('simplecov')
39
+
40
+ end
data/lib/kpigen.rb ADDED
@@ -0,0 +1,6 @@
1
+ require 'evegem'
2
+
3
+ dir = File.dirname(__FILE__)
4
+ require "#{dir}/kpigen/version"
5
+ require "#{dir}/kpigen/application"
6
+ require "#{dir}/kpigen/message"
@@ -0,0 +1,27 @@
1
+ module Kpigen
2
+
3
+ class Application
4
+
5
+ attr_accessor :eve
6
+
7
+ def initialize(eve)
8
+ @eve = eve
9
+ end
10
+
11
+ def redis
12
+ @eve.redis
13
+ end
14
+
15
+ def cmd(raw,display_messages = true,external_cmd = false)
16
+ @eve.cmd(raw,display_messages,external_cmd)
17
+ end
18
+
19
+ def run(args)
20
+ dir = File.dirname(__FILE__)
21
+ kpigen_args = ["--register", "Eve::BaseRegistry", "--register", "Kpigen::KpigenRegistry", p("#{dir}/../registry/kpigen_registry.rb") ]
22
+ @eve.run(args + kpigen_args)
23
+ end
24
+
25
+ end
26
+
27
+ end
@@ -0,0 +1,48 @@
1
+ namespace :ci do
2
+
3
+ desc "Build the project"
4
+ task :build do
5
+ begin
6
+ Rake::Task['ci:local'].invoke
7
+ Rake::Task['ci:success'].invoke
8
+ rescue Exception => e
9
+ Rake::Task['ci:failure'].invoke
10
+ raise e
11
+ end
12
+ end
13
+
14
+ desc "Run CI from your local machine (will not propagte the success / failure message, or load the config file)"
15
+ task :local do
16
+ Rake::Task['ci:rspec'].invoke
17
+ end
18
+
19
+ desc 'Run Rspec'
20
+ task :rspec do
21
+ system 'mkdir -p ../public' unless File.exists?("../public")
22
+ Rake::Task['ci:rspec_run'].invoke
23
+ end
24
+
25
+ RSpec::Core::RakeTask.new(:rspec_run) do |t|
26
+ t.rspec_opts = ["--format", "html", "--out", "../public/rspec.html"]
27
+ t.fail_on_error = true
28
+ end
29
+
30
+ desc "The Build Succeeded, so tell our monitoring service"
31
+ task :success do
32
+ if File.exists?("/home/deployer/monitor/log")
33
+ system 'echo "Kpigen succeeded, http://cc.cenx.localnet" > /home/deployer/monitor/log/Kpigen.cc'
34
+ else
35
+ print "BUILD SUCCEEDED, but log directory (/home/deployer/monitor/log) does not exist"
36
+ end
37
+ end
38
+
39
+ desc "The Build failed, so tell our monitoring service"
40
+ task :failure do
41
+ if File.exists?("/home/deployer/monitor/log")
42
+ system "curl http://cc.cenx.localnet/kpigen > /home/deployer/monitor/log/Kpigen.cc"
43
+ else
44
+ raise "BUILD FAILED, but log directory (/home/deployer/monitor/log) does not exist"
45
+ end
46
+ end
47
+
48
+ end
@@ -0,0 +1,240 @@
1
+ module Kpigen
2
+
3
+ class Message
4
+
5
+ attr_accessor :app, :message
6
+
7
+ def initialize(app)
8
+ @app = app
9
+ end
10
+
11
+ def print_error(msg,e = nil)
12
+ @app.message.print_error(msg,e)
13
+ end
14
+
15
+ def print_version
16
+ print "kpigen, version #{Kpigen::VERSION}\n"
17
+ end
18
+
19
+ def print_storage_files(storage,files)
20
+ if files.empty?
21
+ print "No files available at #{storage.storage_path}.\n"
22
+ else
23
+ msg = "The following files are available at #{storage.storage_path}:\n"
24
+ files.each { |f| msg += " -- #{f}\n" }
25
+ print msg
26
+ end
27
+ end
28
+
29
+ def print_new_source(source)
30
+ print "Added #{source.mode} source #{source.storage_path} to be checked every #{source.update_frequency}\n"
31
+ end
32
+
33
+ def print_unable_create_source(input)
34
+ print "Unable to add source [#{input}]\n"
35
+ end
36
+
37
+ def print_found_source(source,last_accessed,show_password)
38
+ msg = "The following source was found:\n"
39
+ msg += " -- #{source.storage_path(show_password)} (#{source.mode}, #{source.update_frequency})#{last_accessed_to_s(last_accessed)}"
40
+ msg += "\n"
41
+ print msg
42
+ end
43
+
44
+ def print_sources(sources,all_accesses,show_password)
45
+ if sources.empty?
46
+ print_no_sources
47
+ else
48
+ msg = sources.size == 1 ? "The following source is available:\n" : "The following #{sources.size} sources are available:\n"
49
+ msg += sources.each_with_index.collect { |s,i| " -- [#{i}] #{s.storage_path(show_password)} (#{s.mode}, #{s.update_frequency})#{last_accessed_to_s(all_accesses[i])}" }.join("\n")
50
+ msg += "\n"
51
+ print msg
52
+ end
53
+ end
54
+
55
+ def print_no_sources
56
+ print "No sources available. For example, 'source add ftp deployer:abc123@mysite.local:/a/b/c 5minutes'\n"
57
+ end
58
+
59
+ def print_no_targets_for_gather
60
+ print "No targets available -- nowhere to place collected files. For example, 'target add ftp deployer:abc123@mysite.local:/a/b/c'\n"
61
+ end
62
+
63
+ def print_unable_to_process_file(filename,e = nil)
64
+ msg = "Unable to process #{filename}"
65
+ e.nil? ? print("#{msg}\n") : print_error(msg,e)
66
+ end
67
+
68
+ def print_nothing_to_gather
69
+ print "No sources provided -- nothing to gather\nFor example, 'source add ftp deployer:abc123@mysite.local:/a/b/c 5minutes'\n"
70
+ end
71
+
72
+ def print_unable_to_access_data_storage(source,e = nil)
73
+ msg = "Unable to access #{source.storage_path}"
74
+ e.nil? ? print("#{msg}\n") : print_error(msg,e)
75
+ end
76
+
77
+ def print_unable_to_download_file(source, source_filename, dest_filename, e = nil)
78
+ msg = "Unable to download #{source_filename} on #{source.storage_server} to #{dest_filename}"
79
+ e.nil? ? print("#{msg}\n") : print_error(msg,e)
80
+ end
81
+
82
+ def print_file_not_downloaded(source, source_filename, dest_filename)
83
+ print "Cannot find downloaded file #{dest_filename} (from #{source_filename} on #{source.storage_server})\n"
84
+ end
85
+
86
+ def print_file_downloaded(source, source_filename, dest_filename)
87
+ print " -- downloaded #{source_filename} (#{source.storage_server}) => #{dest_filename}\n"
88
+ end
89
+
90
+ def print_no_files_to_download(next_check_time)
91
+ if next_check_time.nil?
92
+ print " -- Nothing found.\n"
93
+ else
94
+ print " -- Nothing found, will check again at #{next_check_time}.\n"
95
+ end
96
+ end
97
+
98
+ def print_unable_to_upload_file(target, source_filename, dest_filename, e = nil)
99
+ msg = "Unable to upload #{source_filename} on #{target.storage_server} to #{dest_filename}"
100
+ e.nil? ? print("#{msg}\n") : print_error(msg,e)
101
+ end
102
+
103
+ def print_unable_to_upload_text(target, source_text, dest_filename, e = nil)
104
+ msg = "Unable to upload '#{source_text}' on #{target.storage_server} to #{dest_filename}"
105
+ e.nil? ? print("#{msg}\n") : print_error(msg,e)
106
+ end
107
+
108
+ def print_file_not_uploaded(target, source_filename, dest_filename)
109
+ print "Cannot find uploaded file #{dest_filename} (from #{source_filename} on #{target.storage_server})\n"
110
+ end
111
+
112
+ def print_no_archives
113
+ print "No archives available. For example, 'archive add /a/b/c'\n"
114
+ end
115
+
116
+ def print_unable_to_clean_file(source,target,e = nil)
117
+ msg = "Unable to clean #{source} (to be stored at #{target})."
118
+ e.nil? ? print("#{msg}\n") : print_error(msg,e)
119
+ end
120
+
121
+ def print_no_archives_for_gather
122
+ print "No archive provided -- nowhere to put collected files\nFor example, 'archive add /a/b/c'\n"
123
+ end
124
+
125
+ def print_new_target(target)
126
+ print "Added #{target.mode} target #{target.storage_path}\n"
127
+ end
128
+
129
+ def print_unable_create_target(input)
130
+ print "Unable to add target [#{input}]\n"
131
+ end
132
+
133
+ def print_no_targets
134
+ print "No targets available. For example, 'target add ftp deployer:abc123@mysite.local:/a/b/c'\n"
135
+ end
136
+
137
+ def print_targets(targets,show_password)
138
+ if targets.empty?
139
+ print_no_targets
140
+ else
141
+ msg = targets.size == 1 ? "The following target is available:\n" : "The following #{targets.size} targets are available:\n"
142
+ msg += targets.each_with_index.collect { |s,i| " -- [#{i}] #{s.storage_path(show_password)} (#{s.mode})" }.join("\n")
143
+ msg += "\n"
144
+ print msg
145
+ end
146
+ end
147
+
148
+ def print_new_archive(archive)
149
+ print "Added #{archive.mode} archive #{archive.storage_path}\n"
150
+ end
151
+
152
+ def print_unable_create_archive(input)
153
+ print "Unable to add archive [#{input}]\n"
154
+ end
155
+
156
+ def print_archives(archives,show_password)
157
+ if archives.empty?
158
+ print_no_archives
159
+ else
160
+ msg = archives.size == 1 ? "The following archive is available:\n" : "The following #{archives.size} archives are available:\n"
161
+ msg += archives.each_with_index.collect { |s,i| " -- [#{i}] #{s.storage_path(show_password)} (#{s.mode})" }.join("\n")
162
+ msg += "\n"
163
+ print msg
164
+ end
165
+ end
166
+
167
+ def print_set_big_t(big_t)
168
+ print "Setting Big T to #{big_t}"
169
+ end
170
+
171
+ def print_get_big_t(big_t)
172
+ print "Big T is #{big_t}"
173
+ end
174
+
175
+ def print_about_to_fetch_source(source)
176
+ print "Looking for files in: #{source.storage_path}\n"
177
+ end
178
+
179
+ def print_unknown_storage_lookup(cmd, index)
180
+ print "Invalid index (#{index}), ignoring '#{cmd}' command.\n"
181
+ end
182
+
183
+ def print_source_deleted(source)
184
+ print "Removed source #{source.storage_path}.\n"
185
+ end
186
+
187
+ def print_target_deleted(target)
188
+ print "Removed target #{target.storage_path}.\n"
189
+ end
190
+
191
+ def print_archive_deleted(archive)
192
+ print "Removed archive #{archive.storage_path}.\n"
193
+ end
194
+
195
+ def print_source_touched(source,time)
196
+ print "Source #{source.storage_path} last checked at #{Eve::Message.friendly_now(time)}.\n"
197
+ end
198
+
199
+ def print_already_accessed_source(source,last_accessed,next_access)
200
+ print "Last checked #{source.storage_path} at #{last_accessed} will check again after #{next_access}.\n"
201
+ end
202
+
203
+ def print_unable_to_sort_file(filename, e = nil)
204
+ msg = "Unable to sort #{filename}"
205
+ e.nil? ? print("#{msg}\n") : print_error(msg,e)
206
+ end
207
+
208
+ def print_sorted_file(index,inputfilename, outputfilename, duration)
209
+ msg = "Sorted #{inputfilename} (column index #{index}) "
210
+ msg += "into #{outputfilename} " if inputfilename != outputfilename
211
+ msg += "in #{duration}\n"
212
+ print msg
213
+ end
214
+
215
+ def print_no_archive_format(archive,index)
216
+ print "No format associated with #{archive.storage_path}. To add a format, run 'archive format #{index} <path-to-format-csv>'\n"
217
+ end
218
+
219
+ def print_no_target_format(target,index)
220
+ print "No format associated with #{target.storage_path}. To add a format, run 'target format #{index} <path-to-format-csv>'\n"
221
+ end
222
+
223
+ def print_unknown_format_file(storage,filename)
224
+ print "Unable to set format #{filename} to #{storage}.\n"
225
+ end
226
+
227
+
228
+ private
229
+
230
+ def last_accessed_to_s(input)
231
+ @app.message.send("last_accessed_to_s",input)
232
+ end
233
+
234
+ def print(msg, raw_options = {}, messenger_name = "console")
235
+ @app.message.send("print",msg,raw_options,messenger_name)
236
+ end
237
+
238
+ end
239
+
240
+ end
@@ -0,0 +1,3 @@
1
+ module Kpigen
2
+ VERSION = "0.0.1" unless Kpigen.const_defined?("VERSION")
3
+ end
@@ -0,0 +1,32 @@
1
+ module Kpigen
2
+
3
+ class KpigenRegistry < Eve::Registry
4
+
5
+ @@message = nil
6
+
7
+ @@cmd_data = {
8
+ "version" => []
9
+ }
10
+
11
+ def self.available
12
+ @@cmd_data
13
+ end
14
+
15
+ #------------
16
+ # CALLER METHODS
17
+ #------------
18
+
19
+ def self.call_version(app,result,external_name,display_messages)
20
+ result[:data] = Kpigen::VERSION
21
+ message(app).print_version if display_messages
22
+ result
23
+ end
24
+
25
+
26
+ def self.message(app)
27
+ @@message ||= Message.new(app)
28
+ @@message
29
+ end
30
+
31
+ end
32
+ end
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+
3
+ module Kpigen
4
+
5
+ describe Application do
6
+
7
+ before(:each) do
8
+ @redis = Utest::InmemoryRedis.new
9
+ @eve = Eve::Application.new(:display => :string, :redis => @redis)
10
+ @app = Application.new(@eve)
11
+ end
12
+
13
+ it "should wrap the Eve::Application" do
14
+ @app.eve.should == @eve
15
+ end
16
+
17
+ describe "#wrapper" do
18
+
19
+ it "should expose the redis db" do
20
+ @app.redis.should == @redis
21
+ end
22
+
23
+ it "should expose the cmd" do
24
+ @eve.should_receive(:cmd).with("a",true,true)
25
+ @app.cmd("a",true,true)
26
+ end
27
+
28
+ end
29
+
30
+ describe "#run" do
31
+
32
+ it "should add extra args" do
33
+ @eve.should_receive(:run).with([ "a", "--register", "Eve::BaseRegistry", "--register", "Kpigen::KpigenRegistry", p("#{File.dirname(__FILE__)}/../lib/registry/kpigen_registry.rb") ])
34
+ @app.run(["a"])
35
+ end
36
+
37
+ end
38
+
39
+ end
40
+ end
@@ -0,0 +1,52 @@
1
+ require 'spec_helper'
2
+
3
+ module Kpigen
4
+
5
+ describe "KpigenRegistry" do
6
+
7
+ before(:each) do
8
+ @now = Time.parse('2010-09-21 23:15:20')
9
+ @now_plus_four = Time.parse('2010-09-21 23:19:20')
10
+ @now_plus_six = Time.parse('2010-09-21 23:21:20')
11
+ Time.stub!(:now).and_return(@now)
12
+
13
+ `mkdir -p ./kpigen_registry_test`
14
+
15
+ @redis = Utest::InmemoryRedis.new
16
+ @app = Eve::Application.new(:display => :string, :redis => @redis)
17
+ @app.cmd("appid mykpigen")
18
+ @app.cmd("register add-path #{File.dirname(__FILE__)}/../lib/registry")
19
+ @app.cmd("register add Eve::BaseRegistry")
20
+ @app.cmd("register add Kpigen::KpigenRegistry")
21
+ @app.reset
22
+ end
23
+
24
+ after(:each) do
25
+ `rm -rf ./kpigen_registry_test`
26
+ end
27
+
28
+ describe "#cmd" do
29
+
30
+ describe "version" do
31
+
32
+ it "should include both Eve and Kpigen" do
33
+ @app.cmd("version")
34
+ @app.history.should == [ "eve mykpigen (#{$$}), version 0.1.2\n", "kpigen, version 0.0.1\n" ]
35
+ end
36
+
37
+ end
38
+
39
+ describe "help" do
40
+
41
+ it "should know about the commands" do
42
+ @app.cmd("help Kpigen::KpigenRegistry")[:data].should == {
43
+ "version" => [],
44
+ }
45
+ end
46
+
47
+ end
48
+
49
+ end
50
+
51
+ end
52
+ end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ module Kpigen
4
+
5
+ describe Message do
6
+
7
+ before(:each) do
8
+ @app = Eve::Application.new(:display => :string, :redis => Utest::InmemoryRedis.new)
9
+ @msg = Message.new(@app)
10
+ @console = @app.console
11
+ @system_calls = @app.system_calls
12
+ end
13
+
14
+ describe "print_*" do
15
+
16
+ it "print_version" do
17
+ @msg.print_version
18
+ @console.history.should == [ "kpigen, version 0.0.1\n" ]
19
+ end
20
+
21
+ end
22
+
23
+ end
24
+
25
+ end
26
+
27
+
@@ -0,0 +1,17 @@
1
+ require 'rubygems'
2
+ require 'rspec'
3
+
4
+ if ENV['RUN_COVERAGE'] == "1"
5
+ require 'simplecov'
6
+ system "mkdir -p ../public/coverage" unless File.exists?("../public/coverage")
7
+ SimpleCov.configure do
8
+ coverage_dir '../public/coverage'
9
+ end
10
+ SimpleCov.start
11
+ end
12
+
13
+ require File.dirname(__FILE__) + '/../lib/kpigen'
14
+
15
+ RSpec.configure do |config|
16
+ config.mock_with :rspec
17
+ end
metadata ADDED
@@ -0,0 +1,264 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: kpigen
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Andrew Forward
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-05-07 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: evegem
16
+ requirement: &70102360911240 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 0.1.2
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70102360911240
25
+ - !ruby/object:Gem::Dependency
26
+ name: utest
27
+ requirement: &70102360985300 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: 0.0.3
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70102360985300
36
+ - !ruby/object:Gem::Dependency
37
+ name: watchme
38
+ requirement: &70102361058200 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: 0.0.3
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *70102361058200
47
+ - !ruby/object:Gem::Dependency
48
+ name: awesome_print
49
+ requirement: &70102361149380 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: *70102361149380
58
+ - !ruby/object:Gem::Dependency
59
+ name: rake
60
+ requirement: &70102361166440 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - =
64
+ - !ruby/object:Gem::Version
65
+ version: 0.9.2
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: *70102361166440
69
+ - !ruby/object:Gem::Dependency
70
+ name: rails
71
+ requirement: &70102361165920 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: 3.2.1
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: *70102361165920
80
+ - !ruby/object:Gem::Dependency
81
+ name: mysql2
82
+ requirement: &70102361165440 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - =
86
+ - !ruby/object:Gem::Version
87
+ version: 0.3.11
88
+ type: :runtime
89
+ prerelease: false
90
+ version_requirements: *70102361165440
91
+ - !ruby/object:Gem::Dependency
92
+ name: rack
93
+ requirement: &70102361164980 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - =
97
+ - !ruby/object:Gem::Version
98
+ version: 1.4.1
99
+ type: :runtime
100
+ prerelease: false
101
+ version_requirements: *70102361164980
102
+ - !ruby/object:Gem::Dependency
103
+ name: eventmachine
104
+ requirement: &70102361164500 !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - =
108
+ - !ruby/object:Gem::Version
109
+ version: 0.12.10
110
+ type: :runtime
111
+ prerelease: false
112
+ version_requirements: *70102361164500
113
+ - !ruby/object:Gem::Dependency
114
+ name: net-ssh
115
+ requirement: &70102361164000 !ruby/object:Gem::Requirement
116
+ none: false
117
+ requirements:
118
+ - - =
119
+ - !ruby/object:Gem::Version
120
+ version: 2.3.0
121
+ type: :runtime
122
+ prerelease: false
123
+ version_requirements: *70102361164000
124
+ - !ruby/object:Gem::Dependency
125
+ name: redis
126
+ requirement: &70102361163520 !ruby/object:Gem::Requirement
127
+ none: false
128
+ requirements:
129
+ - - =
130
+ - !ruby/object:Gem::Version
131
+ version: 2.2.0
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: *70102361163520
135
+ - !ruby/object:Gem::Dependency
136
+ name: rspec
137
+ requirement: &70102361163100 !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ! '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ type: :development
144
+ prerelease: false
145
+ version_requirements: *70102361163100
146
+ - !ruby/object:Gem::Dependency
147
+ name: autotest
148
+ requirement: &70102361162500 !ruby/object:Gem::Requirement
149
+ none: false
150
+ requirements:
151
+ - - ! '>='
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ type: :development
155
+ prerelease: false
156
+ version_requirements: *70102361162500
157
+ - !ruby/object:Gem::Dependency
158
+ name: autotest-fsevent
159
+ requirement: &70102361162000 !ruby/object:Gem::Requirement
160
+ none: false
161
+ requirements:
162
+ - - ! '>='
163
+ - !ruby/object:Gem::Version
164
+ version: '0'
165
+ type: :development
166
+ prerelease: false
167
+ version_requirements: *70102361162000
168
+ - !ruby/object:Gem::Dependency
169
+ name: ZenTest
170
+ requirement: &70102361161480 !ruby/object:Gem::Requirement
171
+ none: false
172
+ requirements:
173
+ - - ! '>='
174
+ - !ruby/object:Gem::Version
175
+ version: '0'
176
+ type: :development
177
+ prerelease: false
178
+ version_requirements: *70102361161480
179
+ - !ruby/object:Gem::Dependency
180
+ name: rb-fsevent
181
+ requirement: &70102361156060 !ruby/object:Gem::Requirement
182
+ none: false
183
+ requirements:
184
+ - - ! '>='
185
+ - !ruby/object:Gem::Version
186
+ version: '0'
187
+ type: :development
188
+ prerelease: false
189
+ version_requirements: *70102361156060
190
+ - !ruby/object:Gem::Dependency
191
+ name: geminabox
192
+ requirement: &70102361155580 !ruby/object:Gem::Requirement
193
+ none: false
194
+ requirements:
195
+ - - ! '>='
196
+ - !ruby/object:Gem::Version
197
+ version: '0'
198
+ type: :development
199
+ prerelease: false
200
+ version_requirements: *70102361155580
201
+ - !ruby/object:Gem::Dependency
202
+ name: simplecov
203
+ requirement: &70102361155120 !ruby/object:Gem::Requirement
204
+ none: false
205
+ requirements:
206
+ - - ! '>='
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
209
+ type: :development
210
+ prerelease: false
211
+ version_requirements: *70102361155120
212
+ description: A command line tool for generating kpigen data based on csv inputs
213
+ email:
214
+ - andrew.forward@cenx.com
215
+ executables:
216
+ - kpigen
217
+ extensions: []
218
+ extra_rdoc_files: []
219
+ files:
220
+ - .gitignore
221
+ - Gemfile
222
+ - Rakefile
223
+ - autotest/discover.rb
224
+ - bin/kpigen
225
+ - kpigen.gemspec
226
+ - lib/kpigen.rb
227
+ - lib/kpigen/application.rb
228
+ - lib/kpigen/ci.rake
229
+ - lib/kpigen/message.rb
230
+ - lib/kpigen/version.rb
231
+ - lib/registry/kpigen_registry.rb
232
+ - spec/application_spec.rb
233
+ - spec/kpi_registry_spec.rb
234
+ - spec/message_spec.rb
235
+ - spec/spec_helper.rb
236
+ homepage: ''
237
+ licenses: []
238
+ post_install_message:
239
+ rdoc_options: []
240
+ require_paths:
241
+ - lib
242
+ required_ruby_version: !ruby/object:Gem::Requirement
243
+ none: false
244
+ requirements:
245
+ - - ! '>='
246
+ - !ruby/object:Gem::Version
247
+ version: '0'
248
+ required_rubygems_version: !ruby/object:Gem::Requirement
249
+ none: false
250
+ requirements:
251
+ - - ! '>='
252
+ - !ruby/object:Gem::Version
253
+ version: '0'
254
+ requirements: []
255
+ rubyforge_project:
256
+ rubygems_version: 1.8.10
257
+ signing_key:
258
+ specification_version: 3
259
+ summary: A command line tool for generating kpigen data based on csv inputs
260
+ test_files:
261
+ - spec/application_spec.rb
262
+ - spec/kpi_registry_spec.rb
263
+ - spec/message_spec.rb
264
+ - spec/spec_helper.rb