apc4r 0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,29 @@
1
+ #apc4r - A simple library for accessing power information from an APC UPS device
2
+
3
+ ##Installation
4
+
5
+ gem install apc4r -s http://gemcutter.org
6
+
7
+ ## Examples
8
+
9
+ #create a new status class with a cache ttl of 60 seconds
10
+ status = Apc4r::Status.new 60
11
+
12
+ #print the load percentage
13
+ puts status.loadpct
14
+
15
+ #print the estimated load in watts
16
+ puts status.estimated_load
17
+
18
+ #print all available fields of the APC device
19
+ status.status.each_pair do |field, value|
20
+ puts "#{field} -> #{value}"
21
+ end
22
+
23
+ ##Requirements
24
+
25
+ * An APC UPS Battery backup device connected to a ruby-enabled host
26
+ * apcupsd installed and running
27
+
28
+ ##Dependencies
29
+ - Just apcupsd
@@ -0,0 +1,8 @@
1
+ require 'rake'
2
+ require 'spec/rake/spectask'
3
+
4
+ desc "Run All Specs"
5
+ Spec::Rake::SpecTask.new("spec") do |t|
6
+ t.spec_files = FileList["spec/**/*_spec.rb"]
7
+ end
8
+
@@ -0,0 +1,23 @@
1
+ spec = Gem::Specification.new do |s|
2
+ s.name = 'apc4r'
3
+ s.version = '0.1'
4
+ s.date = '2010-08-29'
5
+ s.summary = 'A simple library for accessing power information from an APC UPS device'
6
+ s.email = 'dan.simpson@gmail.com'
7
+ s.homepage = 'http://github.com/dansimpson/apc4r'
8
+ s.description = 'A simple library for accessing power information from an APC UPS device. Requires apcupsd.'
9
+ s.has_rdoc = true
10
+
11
+ s.authors = ['Dan Simpson']
12
+
13
+ s.files = [
14
+ 'README.markdown',
15
+ 'apc4r.gemspec',
16
+ 'Rakefile',
17
+ 'spec/helper.rb',
18
+ 'spec/apc4r_spec.rb',
19
+ 'spec/apc4r_status_spec.rb',
20
+ 'lib/apc4r.rb',
21
+ 'lib/apc4r/status.rb'
22
+ ]
23
+ end
@@ -0,0 +1,13 @@
1
+ module Apc4r
2
+
3
+ VERSION = 0.1
4
+
5
+ ##
6
+ # print the status of the UPS device
7
+ def self.print_status
8
+ puts Status.new
9
+ end
10
+
11
+ end
12
+
13
+ require "apc4r/status"
@@ -0,0 +1,87 @@
1
+ module Apc4r
2
+
3
+ ##
4
+ # Apc4r::Status is simple class for accessing power information from an APC UPS device
5
+ #
6
+ # The running machine must have apcupsd installed and running for
7
+ # this library to function
8
+ #
9
+ # = Example
10
+ #
11
+ # status = Apc4r::Status.new 60
12
+ # puts status.to_s
13
+ class Status
14
+
15
+ ##
16
+ # Creates a Status object, which gives access to information
17
+ # related to the connected UPS device
18
+ #
19
+ # +cache_ttl+ is the number of seconds to cache status on an object
20
+ # leave blank to fetch information from the ups device on every call
21
+ def initialize cache_ttl=0
22
+ @cache_ttl = cache_ttl
23
+ end
24
+
25
+ ##
26
+ # fetches a hash of status information from the UPS device
27
+ def status
28
+ if @cache_ttl > 0
29
+ if @cached_at == nil || @cached_at < (Time.now - @cache_ttl)
30
+ @status = fetch_status
31
+ end
32
+ else
33
+ @status = fetch_status
34
+ end
35
+ @status
36
+ end
37
+
38
+ ##
39
+ # estimates the load, in watts, based on loadpct and nompower
40
+ # This may not be even close to accurate
41
+ def estimated_load
42
+ (loadpct / 100) * nompower
43
+ end
44
+
45
+ ##
46
+ # fetches a string represention of the UPS status
47
+ def to_s
48
+ result = ""
49
+ status.each_pair do |k,v|
50
+ result << "#{k} = #{v}\n"
51
+ end
52
+ result
53
+ end
54
+
55
+ def method_missing sym, *args
56
+ if status.has_key?(sym)
57
+ status[sym]
58
+ else
59
+ super
60
+ end
61
+ end
62
+
63
+ private
64
+
65
+ def fetch_status
66
+
67
+ dump = `apcaccess`
68
+ if dump =~ /Error/i
69
+ raise "apcupsd is not running. Please start apcupsd."
70
+ end
71
+
72
+ result = {}
73
+ lines = dump.split("\n")
74
+ lines.each do |line|
75
+ key, value = line.split(":").collect(&:strip)
76
+
77
+ if value =~ /^([0-9]*[\.]?[0-9]+)\s/
78
+ value = $1.to_f
79
+ end
80
+
81
+ result[key.gsub(" ","_").downcase.to_sym] = value
82
+ end
83
+ result
84
+ end
85
+
86
+ end
87
+ end
@@ -0,0 +1,14 @@
1
+ require "helper"
2
+
3
+ describe Apc4r do
4
+
5
+ it "should have a version" do
6
+ Apc4r.const_defined?("VERSION").should == true
7
+ end
8
+
9
+ it "should respond to print_status" do
10
+ Apc4r.should respond_to :print_status
11
+ end
12
+
13
+ end
14
+
@@ -0,0 +1,13 @@
1
+ require "helper"
2
+
3
+ describe Apc4r::Status do
4
+
5
+ before do
6
+ @status = Apc4r::Status.new 60
7
+ end
8
+
9
+ it "should have a load percentage" do
10
+ @status.loadpct.should be_a_kind_of Float
11
+ end
12
+
13
+ end
@@ -0,0 +1,4 @@
1
+ $:.unshift(File.dirname(__FILE__) + "/../lib/")
2
+
3
+ require "apc4r"
4
+
metadata ADDED
@@ -0,0 +1,70 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: apc4r
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ version: "0.1"
9
+ platform: ruby
10
+ authors:
11
+ - Dan Simpson
12
+ autorequire:
13
+ bindir: bin
14
+ cert_chain: []
15
+
16
+ date: 2010-08-29 00:00:00 -07:00
17
+ default_executable:
18
+ dependencies: []
19
+
20
+ description: A simple library for accessing power information from an APC UPS device. Requires apcupsd.
21
+ email: dan.simpson@gmail.com
22
+ executables: []
23
+
24
+ extensions: []
25
+
26
+ extra_rdoc_files: []
27
+
28
+ files:
29
+ - README.markdown
30
+ - apc4r.gemspec
31
+ - Rakefile
32
+ - spec/helper.rb
33
+ - spec/apc4r_spec.rb
34
+ - spec/apc4r_status_spec.rb
35
+ - lib/apc4r.rb
36
+ - lib/apc4r/status.rb
37
+ has_rdoc: true
38
+ homepage: http://github.com/dansimpson/apc4r
39
+ licenses: []
40
+
41
+ post_install_message:
42
+ rdoc_options: []
43
+
44
+ require_paths:
45
+ - lib
46
+ required_ruby_version: !ruby/object:Gem::Requirement
47
+ none: false
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ segments:
52
+ - 0
53
+ version: "0"
54
+ required_rubygems_version: !ruby/object:Gem::Requirement
55
+ none: false
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ segments:
60
+ - 0
61
+ version: "0"
62
+ requirements: []
63
+
64
+ rubyforge_project:
65
+ rubygems_version: 1.3.7
66
+ signing_key:
67
+ specification_version: 3
68
+ summary: A simple library for accessing power information from an APC UPS device
69
+ test_files: []
70
+