pulse-meter 0.2.0 → 0.2.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/lib/cmd.rb CHANGED
@@ -4,75 +4,28 @@ require 'time'
4
4
  require 'json'
5
5
  require 'csv'
6
6
 
7
- module Enumerable
8
- def convert_time
9
- map do |el|
10
- if el.is_a?(Time)
11
- el.to_i
12
- else
13
- el
14
- end
15
- end
16
- end
17
-
18
- def to_table(format = nil)
19
- if "csv" == format
20
- CSV.generate(:col_sep => ';') do |csv|
21
- self.each {|row| csv << row.convert_time}
22
- end
23
- else
24
- self.each_with_object(Terminal::Table.new) {|row, table| table << row}
25
- end
26
- end
27
- end
28
-
29
7
  module Cmd
30
8
  class All < Thor
31
9
  include PulseMeter::Mixins::Utils
10
+ include PulseMeter::Mixins::Cmd
32
11
  no_tasks do
33
- def with_redis
34
- PulseMeter.redis = Redis.new :host => options[:host], :port => options[:port], :db => options[:db]
35
- yield
36
- end
37
-
38
- def with_safe_restore_of(name, &block)
39
- with_redis do
40
- sensor = PulseMeter::Sensor::Base.restore(name)
41
- block.call(sensor)
42
- end
43
- rescue PulseMeter::RestoreError
44
- fail! "Sensor #{name} is unknown or cannot be restored"
45
- end
46
-
47
- def all_sensors
48
- PulseMeter::Sensor::Timeline.list_objects
49
- end
50
-
51
- def all_sensors_table(format = nil)
52
- data = [
53
- ["Name", "Class", "ttl", "raw data ttl", "interval", "reduce delay"],
54
- ]
55
- data << :separator unless format == 'csv'
56
- all_sensors.each do |s|
57
- if s.kind_of? PulseMeter::Sensor::Timeline
58
- data << [s.name, s.class, s.ttl, s.raw_data_ttl, s.interval, s.reduce_delay]
59
- else
60
- data << [s.name, s.class] + [''] * 4
61
- end
62
- end
63
- data.to_table(format)
64
- end
65
-
66
- def fail!(description = nil)
67
- puts description if description
68
- exit 1
69
- end
70
-
71
12
  def self.common_options
72
13
  method_option :host, :default => '127.0.0.1', :desc => "Redis host"
73
14
  method_option :port, :default => 6379, :desc => "Redis port"
74
15
  method_option :db, :default => 0, :desc => "Redis db"
75
16
  end
17
+
18
+ def self.sensor_options(required = [])
19
+ [
20
+ [:interval, :numeric, "Rotation interval"],
21
+ [:ttl, :numeric, "How long summarized data will be stored"],
22
+ [:raw_data_ttl, :numeric, "How long unsummarized raw data will be stored"],
23
+ [:reduce_delay, :numeric, "Delay between end of interval and summarization"],
24
+ [:annotation, :string, "Sensor annotation"]
25
+ ].each do |name, type, desc = data|
26
+ method_option name, :required => required.include?(name), :type => type, :desc => desc
27
+ end
28
+ end
76
29
  end
77
30
 
78
31
  desc "sensors", "List all sensors available"
@@ -136,11 +89,7 @@ module Cmd
136
89
 
137
90
  desc "create NAME TYPE", "Create sensor of given type"
138
91
  common_options
139
- method_option :interval, :required => true, :type => :numeric, :desc => "Rotation interval"
140
- method_option :ttl, :required => true, :type => :numeric, :desc => "How long summarized data will be stored"
141
- method_option :raw_data_ttl, :type => :numeric, :desc => "How long unsummarized raw data will be stored"
142
- method_option :reduce_delay, :type => :numeric, :desc => "Delay between end of interval and summarization"
143
- method_option :annotation, :type => :string, :desc => "Sensor annotation"
92
+ sensor_options([:ttl, :interval])
144
93
  def create(name, type)
145
94
  with_redis do
146
95
  klass = constantize("PulseMeter::Sensor::Timelined::#{type}")
@@ -152,6 +101,23 @@ module Cmd
152
101
  end
153
102
  end
154
103
 
104
+ desc "update NAME", "Update given sensor"
105
+ common_options
106
+ sensor_options
107
+ def update(name)
108
+ with_safe_restore_of(name) do |sensor|
109
+ opts = options.dup
110
+ [:ttl, :interval, :reduce_delay, :raw_data_ttl, :annotation].each do |attr|
111
+ opts[attr] ||= sensor.send(attr)
112
+ end
113
+ klass = sensor.class
114
+ new_sensor = klass.new(name, opts)
115
+ new_sensor.dump!(false)
116
+ puts "Sensor updated"
117
+ puts all_sensors_table
118
+ end
119
+ end
120
+
155
121
  desc "create_simple NAME TYPE", "Create simple non-timelined sensor of given type"
156
122
  common_options
157
123
  method_option :annotation, :type => :string, :desc => "Sensor annotation"
@@ -0,0 +1,66 @@
1
+ module Enumerable
2
+ def convert_time
3
+ map do |el|
4
+ if el.is_a?(Time)
5
+ el.to_i
6
+ else
7
+ el
8
+ end
9
+ end
10
+ end
11
+
12
+ def to_table(format = nil)
13
+ if "csv" == format
14
+ CSV.generate(:col_sep => ';') do |csv|
15
+ self.each {|row| csv << row.convert_time}
16
+ end
17
+ else
18
+ self.each_with_object(Terminal::Table.new) {|row, table| table << row}
19
+ end
20
+ end
21
+ end
22
+
23
+ module PulseMeter
24
+ module Mixins
25
+ # Mixin with command-line utilities
26
+ module Cmd
27
+ def with_redis
28
+ PulseMeter.redis = Redis.new :host => options[:host], :port => options[:port], :db => options[:db]
29
+ yield
30
+ end
31
+
32
+ def with_safe_restore_of(name, &block)
33
+ with_redis do
34
+ sensor = PulseMeter::Sensor::Base.restore(name)
35
+ block.call(sensor)
36
+ end
37
+ rescue PulseMeter::RestoreError
38
+ fail! "Sensor #{name} is unknown or cannot be restored"
39
+ end
40
+
41
+ def all_sensors
42
+ PulseMeter::Sensor::Timeline.list_objects
43
+ end
44
+
45
+ def all_sensors_table(format = nil)
46
+ data = [
47
+ ["Name", "Class", "ttl", "raw data ttl", "interval", "reduce delay"],
48
+ ]
49
+ data << :separator unless format == 'csv'
50
+ all_sensors.each do |s|
51
+ if s.kind_of? PulseMeter::Sensor::Timeline
52
+ data << [s.name, s.class, s.ttl, s.raw_data_ttl, s.interval, s.reduce_delay]
53
+ else
54
+ data << [s.name, s.class] + [''] * 4
55
+ end
56
+ end
57
+ data.to_table(format)
58
+ end
59
+
60
+ def fail!(description = nil)
61
+ puts description if description
62
+ exit 1
63
+ end
64
+ end
65
+ end
66
+ end
@@ -9,6 +9,8 @@ module PulseMeter
9
9
 
10
10
  module InstanceMethods
11
11
  # Serializes object and saves it to Redis
12
+ # @param safe [Boolean] forbids dump if sensor has already been dumped
13
+ # @raise [DumpConflictError] if object class conflicts with stored object class
12
14
  # @raise [DumpError] if dumping fails for any reason
13
15
  def dump!(safe = true)
14
16
  ensure_storability!
@@ -1,3 +1,3 @@
1
1
  module PulseMeter
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.1"
3
3
  end
data/lib/pulse-meter.rb CHANGED
@@ -3,6 +3,7 @@ require "logger"
3
3
  require "pulse-meter/version"
4
4
  require "pulse-meter/mixins/dumper"
5
5
  require "pulse-meter/mixins/utils"
6
+ require "pulse-meter/mixins/cmd"
6
7
  require "pulse-meter/sensor"
7
8
  require "pulse-meter/sensor/configuration"
8
9
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pulse-meter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-06-21 00:00:00.000000000 Z
13
+ date: 2012-06-22 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: gon-sinatra
@@ -317,6 +317,7 @@ files:
317
317
  - examples/server_config.yml
318
318
  - lib/cmd.rb
319
319
  - lib/pulse-meter.rb
320
+ - lib/pulse-meter/mixins/cmd.rb
320
321
  - lib/pulse-meter/mixins/dumper.rb
321
322
  - lib/pulse-meter/mixins/utils.rb
322
323
  - lib/pulse-meter/sensor.rb
@@ -423,7 +424,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
423
424
  version: '0'
424
425
  segments:
425
426
  - 0
426
- hash: 2820697990026524466
427
+ hash: -872514711759576933
427
428
  requirements: []
428
429
  rubyforge_project:
429
430
  rubygems_version: 1.8.24