pulse-meter 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
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