ropian 0.1.1 → 0.1.2.pre
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +8 -0
- data/.yardopts +4 -0
- data/Gemfile +4 -0
- data/README.rdoc +9 -2
- data/Rakefile +6 -54
- data/lib/ropian/control/apc.rb +13 -6
- data/lib/ropian/control/generic.rb +56 -2
- data/lib/ropian/control/raritan.rb +13 -6
- data/lib/ropian/meter/apc.rb +12 -14
- data/lib/ropian/meter/generic.rb +78 -1
- data/lib/ropian/meter/raritan.rb +16 -19
- data/lib/ropian.rb +32 -19
- data/ropian.gemspec +14 -48
- metadata +59 -57
- data/.document +0 -5
- data/VERSION.yml +0 -4
data/.gitignore
ADDED
data/.yardopts
ADDED
data/Gemfile
ADDED
data/README.rdoc
CHANGED
@@ -1,6 +1,13 @@
|
|
1
|
-
=
|
1
|
+
= Ropian
|
2
2
|
|
3
|
-
|
3
|
+
Ropian is a library of Networked Power Distribution Unit management utilities. The library currently provides
|
4
|
+
support for collecting power usage stats and setting the power state of power sockets.
|
5
|
+
|
6
|
+
== Supported Hardware
|
7
|
+
This library currently supports the following vendors
|
8
|
+
|
9
|
+
* APC
|
10
|
+
* Raritan
|
4
11
|
|
5
12
|
== Copyright
|
6
13
|
|
data/Rakefile
CHANGED
@@ -1,60 +1,12 @@
|
|
1
|
-
require '
|
2
|
-
require 'rake'
|
3
|
-
require 'yaml'
|
1
|
+
require 'bundler/gem_helper'
|
4
2
|
|
5
|
-
|
6
|
-
require 'jeweler'
|
7
|
-
Jeweler::Tasks.new do |gem|
|
8
|
-
gem.name = "ropian"
|
9
|
-
gem.summary = %Q{Suite of tools for working with network power units}
|
10
|
-
gem.email = "geoff@geoffgarside.co.uk"
|
11
|
-
gem.homepage = "http://github.com/geoffgarside/ropian"
|
12
|
-
gem.authors = ["Geoff Garside"]
|
13
|
-
gem.add_dependency('snmp', '>= 1.0.2')
|
14
|
-
|
15
|
-
gem.files.exclude 'doc/*.mib'
|
16
|
-
|
17
|
-
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
18
|
-
end
|
19
|
-
rescue LoadError
|
20
|
-
puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
|
21
|
-
end
|
22
|
-
|
23
|
-
require 'rake/testtask'
|
24
|
-
Rake::TestTask.new(:test) do |test|
|
25
|
-
test.libs << 'lib' << 'test'
|
26
|
-
test.pattern = 'test/**/*_test.rb'
|
27
|
-
test.verbose = true
|
28
|
-
end
|
3
|
+
Bundler::GemHelper.install_tasks
|
29
4
|
|
30
5
|
begin
|
31
|
-
require '
|
32
|
-
|
33
|
-
test.libs << 'test'
|
34
|
-
test.pattern = 'test/**/*_test.rb'
|
35
|
-
test.verbose = true
|
36
|
-
end
|
6
|
+
require 'yard'
|
7
|
+
YARD::Rake::YardocTask.new
|
37
8
|
rescue LoadError
|
38
|
-
task :
|
39
|
-
abort "
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
|
44
|
-
task :default => :test
|
45
|
-
|
46
|
-
require 'rake/rdoctask'
|
47
|
-
Rake::RDocTask.new do |rdoc|
|
48
|
-
if File.exist?('VERSION.yml')
|
49
|
-
config = YAML.load(File.read('VERSION.yml'))
|
50
|
-
version = "#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
|
51
|
-
else
|
52
|
-
version = ""
|
9
|
+
task :yardoc do
|
10
|
+
abort "YARD is not available. In order to run yardoc you must: sudo gem install yard"
|
53
11
|
end
|
54
|
-
|
55
|
-
rdoc.rdoc_dir = 'rdoc'
|
56
|
-
rdoc.title = "ropian #{version}"
|
57
|
-
rdoc.rdoc_files.include('README*')
|
58
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
59
12
|
end
|
60
|
-
|
data/lib/ropian/control/apc.rb
CHANGED
@@ -1,12 +1,19 @@
|
|
1
1
|
module Ropian
|
2
2
|
module Control
|
3
|
+
# This class provides support for APC brand power devices.
|
3
4
|
class APC < Generic
|
4
|
-
|
5
|
-
@
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
5
|
+
protected
|
6
|
+
# @return [SNMP::ObjectId] the SNMP base OID for power control
|
7
|
+
def base_oid
|
8
|
+
@base_oid ||= SNMP::ObjectId.new('1.3.6.1.4.1.318.1.1.12.3.3.1.1.4')
|
9
|
+
end
|
10
|
+
|
11
|
+
# APC power devices map the on, off and reboot states to 1, 2, and 3.
|
12
|
+
#
|
13
|
+
# @return [Array] array to map the states to the SNMP integer values.
|
14
|
+
def state_order
|
15
|
+
@state_order ||= [nil, :on, :off, :reboot]
|
16
|
+
end
|
10
17
|
end
|
11
18
|
end
|
12
19
|
end
|
@@ -1,32 +1,86 @@
|
|
1
1
|
module Ropian
|
2
2
|
module Control
|
3
|
+
# Generic base class for vendor specific subclasses.
|
4
|
+
#
|
5
|
+
# Provides the common API which subclasses will adhere to.
|
3
6
|
class Generic
|
7
|
+
|
8
|
+
# Symbols for the types of supported power states which can
|
9
|
+
# be set on power device sockets.
|
4
10
|
States = [:on, :off, :reboot]
|
11
|
+
|
12
|
+
# Provides inspection details for the current receiver.
|
13
|
+
#
|
14
|
+
# @return [String] inspection string
|
15
|
+
# @private
|
5
16
|
def inspect
|
6
17
|
"#<#{self.class} #{@manager.host}@#{@manager.community}>"
|
7
18
|
end
|
19
|
+
|
20
|
+
# Creates and returns a new instance of a Ropian::Control::Generic class.
|
21
|
+
#
|
22
|
+
# @param [String] ip_addr The IP address of the power device.
|
23
|
+
# @param [String] community The SNMP write community string to
|
24
|
+
# be used when communicating with the device.
|
25
|
+
# @param [Symbol] version The SNMP version symbol specifying the
|
26
|
+
# version of SNMP to use when communicating with the device.
|
8
27
|
def initialize(ip_addr, community, version = :SNMPv2c)
|
9
28
|
@manager = SNMP::Manager.new(:Host => ip_addr,
|
10
29
|
:Community => community, :Version => version)
|
11
30
|
end
|
31
|
+
|
32
|
+
# Sets the power state of the specified port(s) to ON
|
33
|
+
#
|
34
|
+
# @param [#to_i, Array] port_index Port index or array of indexes to turn ON.
|
35
|
+
# @return [Boolean] success or failure of setting the ports to on.
|
12
36
|
def turn_on(port_index)
|
13
37
|
set_state(:on, port_index)
|
14
38
|
end
|
39
|
+
|
40
|
+
# Sets the power state of the specified port(s) to OFF
|
41
|
+
#
|
42
|
+
# @param [#to_i, Array] port_index Port index or array of indexes to turn OFF
|
43
|
+
# @return [Boolean] success or failure of setting the ports to off.
|
15
44
|
def turn_off(port_index)
|
16
45
|
set_state(:off, port_index)
|
17
46
|
end
|
47
|
+
|
48
|
+
# Power cycles the specified port(s) turning them OFF then ON.
|
49
|
+
#
|
50
|
+
# The delay between the OFF and the ON is usually configured on the
|
51
|
+
# device itself, it is usually in the region of 10 seconds.
|
52
|
+
#
|
53
|
+
# @param [#to_i, Array] port_index Port index or array of indexes to power cycle.
|
54
|
+
# @return [Boolean] success or failure of setting the ports to reboot.
|
18
55
|
def reboot(port_index)
|
19
56
|
set_state(:reboot, port_index)
|
20
57
|
end
|
58
|
+
|
59
|
+
# Sets the given +state+ on the specified port(s).
|
60
|
+
#
|
61
|
+
# @param [Symbol] state The state to set the ports to.
|
62
|
+
# @param [#to_i, Array] port_index Port index or array of indexes to set the state on.
|
63
|
+
# @return [Boolean] success or failure of setting the specified +state+.
|
64
|
+
# @raise [ArgumentError] if the provided +state+ is not a member of States.
|
65
|
+
# @see States
|
21
66
|
def set_state(state, port_index)
|
22
67
|
raise ArgumentError, "invalid state" unless States.include?(state)
|
23
|
-
|
24
|
-
|
68
|
+
|
69
|
+
varbindings = Array(port_index).map do |index|
|
70
|
+
SNMP::VarBind.new(base_oid + index,
|
71
|
+
SNMP::Integer.new(state_order.index(state)))
|
72
|
+
end
|
73
|
+
|
74
|
+
response = @manager.set(varbindings)
|
75
|
+
response.error_index == 0 # no error
|
25
76
|
end
|
77
|
+
|
26
78
|
protected
|
79
|
+
# @return [SNMP::ObjectId] SNMP Base OID for power control
|
27
80
|
def base_oid
|
28
81
|
raise NotImplementedError, "method must be overridden"
|
29
82
|
end
|
83
|
+
# @return [Array] Array mapping the States to the corresponding SNMP integer value to set.
|
30
84
|
def state_order
|
31
85
|
States
|
32
86
|
end
|
@@ -1,12 +1,19 @@
|
|
1
1
|
module Ropian
|
2
2
|
module Control
|
3
|
+
# This class provides support for Raritan brand power devices.
|
3
4
|
class Raritan < Generic
|
4
|
-
|
5
|
-
@
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
5
|
+
protected
|
6
|
+
# @return [SNMP::ObjectId] the SNMP base OID for power control
|
7
|
+
def base_oid
|
8
|
+
@base_oid ||= SNMP::ObjectId.new('1.3.6.1.4.1.13742.4.1.2.2.1.3')
|
9
|
+
end
|
10
|
+
|
11
|
+
# Raritan power devices map the on, off and reboot states to 1, 0, and 2.
|
12
|
+
#
|
13
|
+
# @return [Array] array to map the states to the SNMP integer values.
|
14
|
+
def state_order
|
15
|
+
@state_order ||= [:off, :on, :reboot]
|
16
|
+
end
|
10
17
|
end
|
11
18
|
end
|
12
19
|
end
|
data/lib/ropian/meter/apc.rb
CHANGED
@@ -1,21 +1,19 @@
|
|
1
1
|
module Ropian
|
2
2
|
module Meter
|
3
|
+
# This class provides support for APC brand power devices.
|
3
4
|
class APC < Generic
|
4
|
-
UnitCurrent = SNMP::ObjectId.new('1.3.6.1.4.1.318.1.1.12.2.3.1.1.2.1')
|
5
|
-
|
6
|
-
def collect # :yields: total_amps, hash_of_outlet_amps
|
7
|
-
yield total_amps, {}
|
8
|
-
end
|
9
|
-
# Amps in total on whole bar
|
10
|
-
def total_amps
|
11
|
-
amps_for_oid(UnitCurrent)
|
12
|
-
end
|
13
|
-
def outlet_amps(outlet_index)
|
14
|
-
raise NotImplementedError, "APC Power Bars do not support per outlet power stats"
|
15
|
-
end
|
16
5
|
protected
|
17
|
-
|
18
|
-
|
6
|
+
# If the vendor returns current in values in milli-amps for example
|
7
|
+
# this method can be overridden to return 1000.
|
8
|
+
#
|
9
|
+
# @return [Numeric] Amps scaling factor.
|
10
|
+
def amps_scale_factor
|
11
|
+
10
|
12
|
+
end
|
13
|
+
|
14
|
+
# @return [SNMP::ObjectId] SNMP OID where the unit current can be retrieved
|
15
|
+
def unit_current_oid
|
16
|
+
@unit_current_oid ||= SNMP::ObjectId.new('1.3.6.1.4.1.318.1.1.12.2.3.1.1.2.1')
|
19
17
|
end
|
20
18
|
end
|
21
19
|
end
|
data/lib/ropian/meter/generic.rb
CHANGED
@@ -1,16 +1,93 @@
|
|
1
1
|
module Ropian
|
2
2
|
module Meter
|
3
|
+
# Generic base class for vendor specific subclasses.
|
4
|
+
#
|
5
|
+
# Provides the common API which subclasses will adhere to.
|
3
6
|
class Generic
|
7
|
+
# Provides inspection details for the current receiver.
|
8
|
+
#
|
9
|
+
# @return [String] inspection string
|
10
|
+
# @private
|
4
11
|
def inspect
|
5
12
|
"#<#{self.class} #{@manager.host}@#{@manager.community}>"
|
6
13
|
end
|
14
|
+
|
15
|
+
# Creates and returns a new instance of Ropian::Meter::Generic.
|
16
|
+
#
|
17
|
+
# @param [String] ip_addr The IP address of the power device.
|
18
|
+
# @param [String] community The SNMP write community string to
|
19
|
+
# be used when communicating with the device.
|
20
|
+
# @param [Symbol] version The SNMP version symbol specifying the
|
21
|
+
# version of SNMP to use when communicating with the device.
|
7
22
|
def initialize(ip_addr, community, version = :SNMPv2c)
|
8
23
|
@manager = SNMP::Manager.new(:Host => ip_addr,
|
9
24
|
:Community => community, :Version => version)
|
10
25
|
end
|
26
|
+
|
27
|
+
# Collects and yields the unit current and outlet currents to the given block
|
28
|
+
#
|
29
|
+
# @yield [total_amps, outlet_amps]
|
30
|
+
# @yieldparam [Float] total_amps Total unit current in Amps
|
31
|
+
# @yieldparam [Hash<Integer,Float>] outlet_amps Hash of the power outlet Amps, may be empty if unsupported
|
32
|
+
def collect
|
33
|
+
yield total_amps, all_outlet_amps
|
34
|
+
end
|
35
|
+
|
36
|
+
# Returns the total number of amps for the receiver
|
37
|
+
# @return [Float] total current usage of the receiver in amps
|
38
|
+
def total_amps
|
39
|
+
amps_for_oid(unit_current_oid)
|
40
|
+
end
|
41
|
+
|
42
|
+
# Returns the current of the given +outlet+ in amps.
|
43
|
+
# @param [#to_i] outlet Outlet number
|
44
|
+
# @return [Float] outlet current usage in amps.
|
45
|
+
def outlet_amps(outlet)
|
46
|
+
amps_for_oid(outlet_current_base_oid + outlet.to_i)
|
47
|
+
end
|
48
|
+
|
11
49
|
protected
|
50
|
+
# If the vendor returns current in values in milli-amps for example
|
51
|
+
# this method can be overridden to return 1000.
|
52
|
+
#
|
53
|
+
# @return [Numeric] Amps scaling factor.
|
54
|
+
def amps_scale_factor
|
55
|
+
1
|
56
|
+
end
|
57
|
+
|
58
|
+
# @param [SNMP::ObjectId] oid
|
59
|
+
# @return [Float] number of Amps for specified +oid+.
|
12
60
|
def amps_for_oid(oid)
|
13
|
-
@manager.get(oid).varbind_list.first.value.to_f /
|
61
|
+
@manager.get(oid).varbind_list.first.value.to_f / amps_scale_factor
|
62
|
+
end
|
63
|
+
|
64
|
+
# @return [SNMP::ObjectId] SNMP OID where the unit current can be retrieved
|
65
|
+
def unit_current_oid
|
66
|
+
raise NotImplementedError, "must be overridden by subclasses"
|
67
|
+
end
|
68
|
+
|
69
|
+
# @return [SNMP::ObjectId] Base SNMP OID where the outlet current can be retrieved
|
70
|
+
def outlet_current_base_oid
|
71
|
+
raise NotImplementedError, "must be overridden by subclasses"
|
72
|
+
end
|
73
|
+
|
74
|
+
# Returns a hash of the current for each outlet in amps.
|
75
|
+
# @return [Hash<Integer,Float>] Hash of the outlet numbers and their current in amps.
|
76
|
+
def all_outlet_amps
|
77
|
+
results = {}
|
78
|
+
|
79
|
+
begin
|
80
|
+
@manager.walk(outlet_current_base_oid) do |r|
|
81
|
+
r.each do |varbind|
|
82
|
+
results[varbind.name.index(outlet_current_base_oid)] = varbind.value.to_f / amps_scale_factor
|
83
|
+
end
|
84
|
+
end
|
85
|
+
rescue NotImplementedError
|
86
|
+
# catch from outlet_current_base_oid if not supported in subclass
|
87
|
+
# we don't interfere with the results and return the empty hash.
|
88
|
+
end
|
89
|
+
|
90
|
+
results
|
14
91
|
end
|
15
92
|
end
|
16
93
|
end
|
data/lib/ropian/meter/raritan.rb
CHANGED
@@ -1,28 +1,25 @@
|
|
1
1
|
module Ropian
|
2
2
|
module Meter
|
3
|
+
# This class provides support for Raritan brand power devices.
|
3
4
|
class Raritan < Generic
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
5
|
+
protected
|
6
|
+
# If the vendor returns current in values in milli-amps for example
|
7
|
+
# this method can be overridden to return 1000.
|
8
|
+
#
|
9
|
+
# @return [Numeric] Amps scaling factor.
|
10
|
+
def amps_scale_factor
|
11
|
+
1000
|
12
|
+
end
|
9
13
|
|
10
|
-
@
|
11
|
-
|
12
|
-
|
13
|
-
end
|
14
|
+
# @return [SNMP::ObjectId] SNMP OID where the unit current can be retrieved
|
15
|
+
def unit_current_oid
|
16
|
+
@unit_current_oid ||= SNMP::ObjectId.new("1.3.6.1.4.1.13742.4.1.4.2.1.3.1")
|
14
17
|
end
|
15
18
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
amps_for_oid(UnitCurrent)
|
21
|
-
end
|
22
|
-
# Amps per outlet
|
23
|
-
def outlet_amps(outlet_index)
|
24
|
-
amps_for_oid(OutletCurrent + outlet_index)
|
25
|
-
end
|
19
|
+
# @return [SNMP::ObjectId] Base SNMP OID where the outlet current can be retrieved
|
20
|
+
def outlet_current_base_oid
|
21
|
+
@outlet_current_base_oid ||= SNMP::ObjectId.new("1.3.6.1.4.1.13742.4.1.2.2.1.4")
|
22
|
+
end
|
26
23
|
end
|
27
24
|
end
|
28
25
|
end
|
data/lib/ropian.rb
CHANGED
@@ -1,33 +1,46 @@
|
|
1
1
|
require 'snmp'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
require 'ropian/meter/apc'
|
10
|
-
|
11
|
-
# :stopdoc:
|
3
|
+
# Extension to provides read access to :host, :community and :version
|
4
|
+
# instance variables.
|
5
|
+
#
|
6
|
+
# We've done this primarily for #inspect cases.
|
7
|
+
#
|
8
|
+
# @private
|
12
9
|
class SNMP::Manager
|
13
10
|
attr_reader :host, :community, :version
|
14
11
|
end
|
12
|
+
|
13
|
+
# Extension to provides additive properties to SNMP::ObjectId instances.
|
14
|
+
#
|
15
|
+
# @private
|
15
16
|
class SNMP::ObjectId
|
17
|
+
# Adds the provided suboid or array of suboids to the
|
18
|
+
# receiver an returns a new instance.
|
19
|
+
#
|
20
|
+
# @param [#to_i,Array] suboid or array of suboids to append to the receiver.
|
21
|
+
# @return [SNMP::ObjectId] new OID with the +val+ appended to the receivers suboids.
|
16
22
|
def +(val)
|
17
23
|
current = self.to_a
|
18
|
-
unless val.kind_of?(Array)
|
19
|
-
|
20
|
-
return self.class.new(current)
|
21
|
-
else
|
22
|
-
return self.class.new(current + val.to_a)
|
23
|
-
end
|
24
|
+
val = [val.to_i] unless val.kind_of?(Array)
|
25
|
+
return self.class.new(current + val)
|
24
26
|
end
|
25
27
|
end
|
26
|
-
# :startdoc:
|
27
28
|
|
28
|
-
|
29
|
-
|
29
|
+
# Ropian is a collection of modules and classes for working with SNMP power devices.
|
30
|
+
module Ropian
|
31
|
+
# The control module classes provide functionality for managing the power state of
|
32
|
+
# sockets on the power devices. Turning sockets on, off or rebooting for example.
|
33
|
+
module Control
|
34
|
+
autoload :Generic, File.expand_path('../ropian/control/generic', __FILE__)
|
35
|
+
autoload :APC, File.expand_path('../ropian/control/apc', __FILE__)
|
36
|
+
autoload :Raritan, File.expand_path('../ropian/control/raritan', __FILE__)
|
30
37
|
end
|
31
|
-
|
38
|
+
|
39
|
+
# The meter module classes provide functionality for collecting power usage information
|
40
|
+
# from power devices. They support per socket power usage stats where hardware support is present.
|
41
|
+
module Meter
|
42
|
+
autoload :Generic, File.expand_path('../ropian/meter/generic', __FILE__)
|
43
|
+
autoload :APC, File.expand_path('../ropian/meter/apc', __FILE__)
|
44
|
+
autoload :Raritan, File.expand_path('../ropian/meter/raritan', __FILE__)
|
32
45
|
end
|
33
46
|
end
|
data/ropian.gemspec
CHANGED
@@ -1,55 +1,21 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
2
3
|
|
3
4
|
Gem::Specification.new do |s|
|
4
|
-
s.name =
|
5
|
-
s.version = "0.1.
|
6
|
-
|
7
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
5
|
+
s.name = "ropian"
|
6
|
+
s.version = "0.1.2.pre"
|
8
7
|
s.authors = ["Geoff Garside"]
|
9
|
-
s.
|
10
|
-
s.
|
11
|
-
s.
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
s.files = [
|
16
|
-
".document",
|
17
|
-
".gitignore",
|
18
|
-
"LICENSE",
|
19
|
-
"README.rdoc",
|
20
|
-
"Rakefile",
|
21
|
-
"VERSION.yml",
|
22
|
-
"lib/ropian.rb",
|
23
|
-
"lib/ropian/control/apc.rb",
|
24
|
-
"lib/ropian/control/generic.rb",
|
25
|
-
"lib/ropian/control/raritan.rb",
|
26
|
-
"lib/ropian/meter/apc.rb",
|
27
|
-
"lib/ropian/meter/generic.rb",
|
28
|
-
"lib/ropian/meter/raritan.rb",
|
29
|
-
"ropian.gemspec",
|
30
|
-
"test/ropian_test.rb",
|
31
|
-
"test/test_helper.rb"
|
32
|
-
]
|
33
|
-
s.homepage = %q{http://github.com/geoffgarside/ropian}
|
34
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
35
|
-
s.require_paths = ["lib"]
|
36
|
-
s.rubygems_version = %q{1.3.4}
|
37
|
-
s.summary = %q{Suite of tools for working with network power units}
|
38
|
-
s.test_files = [
|
39
|
-
"test/ropian_test.rb",
|
40
|
-
"test/test_helper.rb"
|
41
|
-
]
|
8
|
+
s.email = ["geoff@geoffgarside.co.uk"]
|
9
|
+
s.homepage = "http://github.com/geoffgarside/ropian"
|
10
|
+
s.summary = "Suite of tools for working with network power distribution units"
|
11
|
+
s.description = "Provides metering and control of network power distribution units"
|
12
|
+
|
13
|
+
s.required_rubygems_version = ">= 1.3.6"
|
42
14
|
|
43
|
-
|
44
|
-
|
45
|
-
|
15
|
+
s.add_dependency "snmp", ">= 1.0.2"
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n") - %w(doc/apc.mib doc/raritan.mib)
|
18
|
+
s.require_paths = ["lib"]
|
46
19
|
|
47
|
-
|
48
|
-
s.add_runtime_dependency(%q<snmp>, [">= 1.0.2"])
|
49
|
-
else
|
50
|
-
s.add_dependency(%q<snmp>, [">= 1.0.2"])
|
51
|
-
end
|
52
|
-
else
|
53
|
-
s.add_dependency(%q<snmp>, [">= 1.0.2"])
|
54
|
-
end
|
20
|
+
s.add_development_dependency "yard"
|
55
21
|
end
|
metadata
CHANGED
@@ -1,53 +1,61 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: ropian
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 1
|
9
|
-
- 1
|
10
|
-
version: 0.1.1
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.2.pre
|
5
|
+
prerelease: 6
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Geoff Garside
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-04-30 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: snmp
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
hash: 19
|
29
|
-
segments:
|
30
|
-
- 1
|
31
|
-
- 0
|
32
|
-
- 2
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
33
21
|
version: 1.0.2
|
34
22
|
type: :runtime
|
35
|
-
|
36
|
-
|
37
|
-
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.0.2
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: yard
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
description: Provides metering and control of network power distribution units
|
47
|
+
email:
|
48
|
+
- geoff@geoffgarside.co.uk
|
38
49
|
executables: []
|
39
|
-
|
40
50
|
extensions: []
|
41
|
-
|
42
|
-
|
43
|
-
-
|
44
|
-
-
|
45
|
-
|
46
|
-
- .document
|
51
|
+
extra_rdoc_files: []
|
52
|
+
files:
|
53
|
+
- .gitignore
|
54
|
+
- .yardopts
|
55
|
+
- Gemfile
|
47
56
|
- LICENSE
|
48
57
|
- README.rdoc
|
49
58
|
- Rakefile
|
50
|
-
- VERSION.yml
|
51
59
|
- lib/ropian.rb
|
52
60
|
- lib/ropian/control/apc.rb
|
53
61
|
- lib/ropian/control/generic.rb
|
@@ -60,36 +68,30 @@ files:
|
|
60
68
|
- test/test_helper.rb
|
61
69
|
homepage: http://github.com/geoffgarside/ropian
|
62
70
|
licenses: []
|
63
|
-
|
64
71
|
post_install_message:
|
65
72
|
rdoc_options: []
|
66
|
-
|
67
|
-
require_paths:
|
73
|
+
require_paths:
|
68
74
|
- lib
|
69
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
75
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
70
76
|
none: false
|
71
|
-
requirements:
|
72
|
-
- -
|
73
|
-
- !ruby/object:Gem::Version
|
74
|
-
|
75
|
-
segments:
|
77
|
+
requirements:
|
78
|
+
- - ! '>='
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '0'
|
81
|
+
segments:
|
76
82
|
- 0
|
77
|
-
|
78
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
83
|
+
hash: 2435443475953317457
|
84
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
79
85
|
none: false
|
80
|
-
requirements:
|
81
|
-
- -
|
82
|
-
- !ruby/object:Gem::Version
|
83
|
-
|
84
|
-
segments:
|
85
|
-
- 0
|
86
|
-
version: "0"
|
86
|
+
requirements:
|
87
|
+
- - ! '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 1.3.6
|
87
90
|
requirements: []
|
88
|
-
|
89
91
|
rubyforge_project:
|
90
|
-
rubygems_version: 1.8.
|
92
|
+
rubygems_version: 1.8.23
|
91
93
|
signing_key:
|
92
94
|
specification_version: 3
|
93
|
-
summary: Suite of tools for working with network power units
|
95
|
+
summary: Suite of tools for working with network power distribution units
|
94
96
|
test_files: []
|
95
|
-
|
97
|
+
has_rdoc:
|
data/.document
DELETED
data/VERSION.yml
DELETED