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 +31 -65
- data/lib/pulse-meter/mixins/cmd.rb +66 -0
- data/lib/pulse-meter/mixins/dumper.rb +2 -0
- data/lib/pulse-meter/version.rb +1 -1
- data/lib/pulse-meter.rb +1 -0
- metadata +4 -3
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
|
-
|
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!
|
data/lib/pulse-meter/version.rb
CHANGED
data/lib/pulse-meter.rb
CHANGED
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.
|
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-
|
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:
|
427
|
+
hash: -872514711759576933
|
427
428
|
requirements: []
|
428
429
|
rubyforge_project:
|
429
430
|
rubygems_version: 1.8.24
|