fnordmetric 0.7.1 → 0.7.3
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +1 -1
- data/doc/full_example.rb +39 -39
- data/lib/fnordmetric/api.rb +1 -2
- data/lib/fnordmetric/app.rb +3 -3
- data/lib/fnordmetric/ext.rb +3 -0
- data/lib/fnordmetric/inbound_datagram.rb +35 -0
- data/lib/fnordmetric/inbound_stream.rb +8 -8
- data/lib/fnordmetric/session.rb +3 -3
- data/lib/fnordmetric/standalone.rb +12 -3
- data/lib/fnordmetric/udp_client.rb +22 -0
- data/lib/fnordmetric/version.rb +1 -1
- data/lib/fnordmetric.rb +10 -3
- data/spec/api_spec.rb +3 -3
- data/spec/ext_spec.rb +14 -0
- data/spec/gauge_spec.rb +13 -13
- data/spec/inbound_datagram_spec.rb +34 -0
- data/spec/inbound_stream_spec.rb +1 -1
- data/spec/session_spec.rb +17 -17
- data/spec/spec_helper.rb +4 -0
- metadata +153 -153
data/Gemfile
CHANGED
data/doc/full_example.rb
CHANGED
@@ -15,14 +15,14 @@ FnordMetric.namespace :ulm do
|
|
15
15
|
gauge :messages_read, :tick => 1.day.to_i, :title => "Messages (read)"
|
16
16
|
gauge :winks_sent, :tick => 1.day.to_i, :title => "Winks sent"
|
17
17
|
|
18
|
-
gauge :pageviews_per_url_daily,
|
19
|
-
:tick => 1.day.to_i,
|
20
|
-
:title => "Daily Pageviews per URL",
|
18
|
+
gauge :pageviews_per_url_daily,
|
19
|
+
:tick => 1.day.to_i,
|
20
|
+
:title => "Daily Pageviews per URL",
|
21
21
|
:three_dimensional => true
|
22
22
|
|
23
|
-
gauge :pageviews_per_url_monthly,
|
24
|
-
:tick => 30.days.to_i,
|
25
|
-
:title => "Monthly Pageviews per URL",
|
23
|
+
gauge :pageviews_per_url_monthly,
|
24
|
+
:tick => 30.days.to_i,
|
25
|
+
:title => "Monthly Pageviews per URL",
|
26
26
|
:three_dimensional => true
|
27
27
|
|
28
28
|
event :_pageview do
|
@@ -124,8 +124,8 @@ FnordMetric.namespace :ulm do
|
|
124
124
|
:width => 67,
|
125
125
|
:autoupdate => 30,
|
126
126
|
:gauges => [
|
127
|
-
:skip_votes, :yes_votes,
|
128
|
-
:maybe_votes, :winks_sent, :messages_sent, :messages_read,
|
127
|
+
:skip_votes, :yes_votes,
|
128
|
+
:maybe_votes, :winks_sent, :messages_sent, :messages_read,
|
129
129
|
]
|
130
130
|
}
|
131
131
|
|
@@ -235,7 +235,7 @@ FnordMetric.namespace :ulm do
|
|
235
235
|
if %w(ry201112a ry201112b ry201112_ref).include?(data[:campaign_key])
|
236
236
|
incr :rockyou1_requests
|
237
237
|
end
|
238
|
-
end
|
238
|
+
end
|
239
239
|
|
240
240
|
widget 'Campaigns', {
|
241
241
|
:title => "RockYou (1) - PPI vs. Requests vs. Refs",
|
@@ -263,38 +263,38 @@ FnordMetric.namespace :ulm do
|
|
263
263
|
|
264
264
|
|
265
265
|
|
266
|
-
gauge :abtest_sidebar_btn_totals,
|
267
|
-
:tick => 36000.days.to_i,
|
268
|
-
:title => "(A/B) sidebar_btn: Totals",
|
266
|
+
gauge :abtest_sidebar_btn_totals,
|
267
|
+
:tick => 36000.days.to_i,
|
268
|
+
:title => "(A/B) sidebar_btn: Totals",
|
269
269
|
:three_dimensional => true
|
270
270
|
|
271
|
-
gauge :abtest_sidebar_btn_daily,
|
272
|
-
:tick => 1.day.to_i,
|
273
|
-
:title => "(A/B) sidebar_btn: Daily",
|
271
|
+
gauge :abtest_sidebar_btn_daily,
|
272
|
+
:tick => 1.day.to_i,
|
273
|
+
:title => "(A/B) sidebar_btn: Daily",
|
274
274
|
:three_dimensional => true
|
275
275
|
|
276
|
-
gauge :abtest_sidebar_btn_leute_treffen,
|
277
|
-
:tick => 1.day.to_i,
|
276
|
+
gauge :abtest_sidebar_btn_leute_treffen,
|
277
|
+
:tick => 1.day.to_i,
|
278
278
|
:title => "leute_treffen"
|
279
279
|
|
280
|
-
gauge :abtest_sidebar_btn_jetzt_losflirten,
|
281
|
-
:tick => 1.day.to_i,
|
280
|
+
gauge :abtest_sidebar_btn_jetzt_losflirten,
|
281
|
+
:tick => 1.day.to_i,
|
282
282
|
:title => "jetzt_losflirten"
|
283
283
|
|
284
|
-
gauge :abtest_sidebar_btn_dates_finden,
|
285
|
-
:tick => 1.day.to_i,
|
284
|
+
gauge :abtest_sidebar_btn_dates_finden,
|
285
|
+
:tick => 1.day.to_i,
|
286
286
|
:title => "dates_finden"
|
287
287
|
|
288
|
-
gauge :abtest_sidebar_btn_leute_treffen_monthly,
|
289
|
-
:tick => 1.month.to_i,
|
288
|
+
gauge :abtest_sidebar_btn_leute_treffen_monthly,
|
289
|
+
:tick => 1.month.to_i,
|
290
290
|
:title => "leute_treffen"
|
291
291
|
|
292
|
-
gauge :abtest_sidebar_btn_jetzt_losflirten_monthly,
|
293
|
-
:tick => 1.month.to_i,
|
292
|
+
gauge :abtest_sidebar_btn_jetzt_losflirten_monthly,
|
293
|
+
:tick => 1.month.to_i,
|
294
294
|
:title => "jetzt_losflirten"
|
295
295
|
|
296
|
-
gauge :abtest_sidebar_btn_dates_finden_monthly,
|
297
|
-
:tick => 1.month.to_i,
|
296
|
+
gauge :abtest_sidebar_btn_dates_finden_monthly,
|
297
|
+
:tick => 1.month.to_i,
|
298
298
|
:title => "dates_finden"
|
299
299
|
|
300
300
|
|
@@ -428,46 +428,46 @@ FnordMetric.namespace :ulm do
|
|
428
428
|
end
|
429
429
|
|
430
430
|
|
431
|
-
gauge :competitors_badoo_mau,
|
431
|
+
gauge :competitors_badoo_mau,
|
432
432
|
:tick => 1.day.to_i,
|
433
433
|
:title => "Badoo (MAU)"
|
434
434
|
|
435
|
-
gauge :competitors_badoo_dau,
|
435
|
+
gauge :competitors_badoo_dau,
|
436
436
|
:tick => 1.day.to_i,
|
437
437
|
:title => "Badoo (DAU)"
|
438
438
|
|
439
|
-
gauge :competitors_zoosk_mau,
|
439
|
+
gauge :competitors_zoosk_mau,
|
440
440
|
:tick => 1.day.to_i,
|
441
441
|
:title => "zoosk (MAU)"
|
442
442
|
|
443
|
-
gauge :competitors_zoosk_dau,
|
443
|
+
gauge :competitors_zoosk_dau,
|
444
444
|
:tick => 1.day.to_i,
|
445
445
|
:title => "zoosk (DAU)"
|
446
446
|
|
447
|
-
gauge :competitors_areyouinterested_mau,
|
447
|
+
gauge :competitors_areyouinterested_mau,
|
448
448
|
:tick => 1.day.to_i,
|
449
449
|
:title => "areyouinterested (MAU)"
|
450
450
|
|
451
|
-
gauge :competitors_areyouinterested_dau,
|
451
|
+
gauge :competitors_areyouinterested_dau,
|
452
452
|
:tick => 1.day.to_i,
|
453
453
|
:title => "areyouinterested (DAU)"
|
454
454
|
|
455
|
-
gauge :competitors_onetwolike_mau,
|
455
|
+
gauge :competitors_onetwolike_mau,
|
456
456
|
:tick => 1.day.to_i,
|
457
457
|
:title => "onetwolike (MAU)"
|
458
458
|
|
459
|
-
gauge :competitors_onetwolike_dau,
|
459
|
+
gauge :competitors_onetwolike_dau,
|
460
460
|
:tick => 1.day.to_i,
|
461
461
|
:title => "onetwolike (DAU)"
|
462
462
|
|
463
|
-
gauge :competitors_kizzle_mau,
|
463
|
+
gauge :competitors_kizzle_mau,
|
464
464
|
:tick => 1.day.to_i,
|
465
465
|
:title => "kizzle (MAU)"
|
466
466
|
|
467
|
-
gauge :competitors_kizzle_dau,
|
467
|
+
gauge :competitors_kizzle_dau,
|
468
468
|
:tick => 1.day.to_i,
|
469
469
|
:title => "kizzle (DAU)"
|
470
|
-
|
470
|
+
|
471
471
|
event :competition_data do
|
472
472
|
set_value(:competitors_badoo_mau, data[:badoo_mau]) if data[:badoo_mau]
|
473
473
|
set_value(:competitors_badoo_dau, data[:badoo_dau]) if data[:badoo_dau]
|
@@ -557,7 +557,7 @@ FnordMetric.namespace :ulm do
|
|
557
557
|
gauge :events_per_hour, :tick => 1.hour.to_i
|
558
558
|
gauge :events_per_second, :tick => 1
|
559
559
|
gauge :votes_per_second, :tick => 1
|
560
|
-
|
560
|
+
|
561
561
|
event :"*" do
|
562
562
|
incr :events_per_minute
|
563
563
|
incr :events_per_hour
|
data/lib/fnordmetric/api.rb
CHANGED
data/lib/fnordmetric/app.rb
CHANGED
@@ -10,9 +10,9 @@ class FnordMetric::App < Sinatra::Base
|
|
10
10
|
"vendor/highcharts.js" => "application/x-javascript"
|
11
11
|
}
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
if RUBY_VERSION =~ /1.9.\d/
|
14
|
+
Encoding.default_external = Encoding::UTF_8
|
15
|
+
end
|
16
16
|
|
17
17
|
enable :session
|
18
18
|
|
@@ -0,0 +1,35 @@
|
|
1
|
+
class FnordMetric::InboundDatagram < EventMachine::Connection
|
2
|
+
|
3
|
+
class << self
|
4
|
+
attr_accessor :opts
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.start(opts)
|
8
|
+
self.opts = opts
|
9
|
+
EM.open_datagram_socket(*opts[:inbound_stream], self, opts)
|
10
|
+
end
|
11
|
+
|
12
|
+
def receive_data(event)
|
13
|
+
events << event
|
14
|
+
push_next_event
|
15
|
+
end
|
16
|
+
|
17
|
+
def push_next_event
|
18
|
+
return true if events.empty?
|
19
|
+
api.event(@events.pop)
|
20
|
+
EM.next_tick(&method(:push_next_event))
|
21
|
+
end
|
22
|
+
|
23
|
+
def unbind
|
24
|
+
api.disconnect
|
25
|
+
end
|
26
|
+
|
27
|
+
def api
|
28
|
+
@api ||= FnordMetric::API.new(self.class.opts)
|
29
|
+
end
|
30
|
+
|
31
|
+
def events
|
32
|
+
@events ||= []
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
@@ -1,17 +1,17 @@
|
|
1
|
-
class FnordMetric::InboundStream < EventMachine::Connection
|
1
|
+
class FnordMetric::InboundStream < EventMachine::Connection
|
2
2
|
@@opts = nil
|
3
3
|
|
4
4
|
def self.start(opts)
|
5
5
|
@@opts = opts
|
6
|
-
EM.start_server(*opts[:inbound_stream]
|
6
|
+
EM.start_server(*(opts[:inbound_stream] << self))
|
7
7
|
end
|
8
8
|
|
9
9
|
def self.options(opts)
|
10
10
|
@@opts = opts
|
11
11
|
end
|
12
12
|
|
13
|
-
def receive_data(chunk)
|
14
|
-
@buffer << chunk
|
13
|
+
def receive_data(chunk)
|
14
|
+
@buffer << chunk
|
15
15
|
next_event
|
16
16
|
end
|
17
17
|
|
@@ -19,12 +19,12 @@ class FnordMetric::InboundStream < EventMachine::Connection
|
|
19
19
|
read_next_event
|
20
20
|
push_next_event
|
21
21
|
end
|
22
|
-
|
22
|
+
|
23
23
|
def read_next_event
|
24
24
|
while (event = @buffer.slice!(/^(.*)\n/))
|
25
25
|
@events_buffered += 1
|
26
26
|
@events << event
|
27
|
-
end
|
27
|
+
end
|
28
28
|
end
|
29
29
|
|
30
30
|
def push_next_event
|
@@ -32,11 +32,11 @@ class FnordMetric::InboundStream < EventMachine::Connection
|
|
32
32
|
@events_buffered -= 1
|
33
33
|
@api.event(@events.pop)
|
34
34
|
close_connection?
|
35
|
-
EM.next_tick(&method(:push_next_event))
|
35
|
+
EM.next_tick(&method(:push_next_event))
|
36
36
|
end
|
37
37
|
|
38
38
|
def close_connection?
|
39
|
-
@api.disconnect unless @streaming || (@events_buffered!=0)
|
39
|
+
@api.disconnect unless @streaming || (@events_buffered!=0)
|
40
40
|
end
|
41
41
|
|
42
42
|
def post_init
|
data/lib/fnordmetric/session.rb
CHANGED
@@ -97,8 +97,8 @@ class FnordMetric::Session
|
|
97
97
|
end
|
98
98
|
|
99
99
|
def add_event_data(event)
|
100
|
-
event.each do |key,value|
|
101
|
-
add_data(key, value) unless key
|
100
|
+
event.each do |key, value|
|
101
|
+
add_data(key, value) unless key.to_s.starts_with?("_")
|
102
102
|
end
|
103
103
|
end
|
104
104
|
|
@@ -109,7 +109,7 @@ class FnordMetric::Session
|
|
109
109
|
def fetch_data!
|
110
110
|
@data = Hash.new
|
111
111
|
@redis.hgetall(redis_key(:data)).each do |key, value|
|
112
|
-
if key
|
112
|
+
if key.to_s.starts_with?("_")
|
113
113
|
fetch_meta_key(key, value)
|
114
114
|
else
|
115
115
|
@data[key.intern] = value
|
@@ -5,6 +5,15 @@ task :run do
|
|
5
5
|
FnordMetric.run
|
6
6
|
end
|
7
7
|
|
8
|
+
task :worker do
|
9
|
+
FnordMetric.server_configuration = {
|
10
|
+
:web_interface => false,
|
11
|
+
:inbound_stream => false,
|
12
|
+
:start_worker => true
|
13
|
+
}
|
14
|
+
FnordMetric.run
|
15
|
+
end
|
16
|
+
|
8
17
|
task :log do
|
9
18
|
FnordMetric::Logger.start(dump_file_path)
|
10
19
|
end
|
@@ -14,16 +23,16 @@ task :import do
|
|
14
23
|
end
|
15
24
|
|
16
25
|
task :help do
|
17
|
-
puts "usage: #{$0} {run|log|import} [DUMP_FILE=fm_dump.json]"
|
26
|
+
puts "usage: #{$0} {run|worker|log|import} [DUMP_FILE=fm_dump.json]"
|
18
27
|
end
|
19
28
|
|
20
29
|
task :default => :help
|
21
30
|
|
22
31
|
def dump_file_path
|
23
32
|
if ENV["DUMP_FILE"].blank?
|
24
|
-
|
33
|
+
Rake::Task[:help].execute; exit!
|
25
34
|
else
|
26
|
-
|
35
|
+
::File.expand_path(ENV["DUMP_FILE"], ::File.dirname($0))
|
27
36
|
end
|
28
37
|
end
|
29
38
|
|
@@ -0,0 +1,22 @@
|
|
1
|
+
class FnordMetric::UDPClient
|
2
|
+
|
3
|
+
def initialize(host, port)
|
4
|
+
@sock = UDPSocket.new
|
5
|
+
@sock.connect(host, port)
|
6
|
+
end
|
7
|
+
|
8
|
+
def event(event_data)
|
9
|
+
begin
|
10
|
+
if event_data.is_a?(Hash)
|
11
|
+
event_data = event_data.to_json
|
12
|
+
else
|
13
|
+
JSON.parse(event_data) # void ;)
|
14
|
+
end
|
15
|
+
rescue JSON::ParserError
|
16
|
+
FnordMetric.log("event_lost: can't parse json")
|
17
|
+
else
|
18
|
+
@sock.send(event_data, 0)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
data/lib/fnordmetric/version.rb
CHANGED
data/lib/fnordmetric.rb
CHANGED
@@ -7,11 +7,13 @@ require 'sinatra/base'
|
|
7
7
|
require 'haml'
|
8
8
|
require 'rack/server'
|
9
9
|
|
10
|
+
require "fnordmetric/ext"
|
10
11
|
require "fnordmetric/version"
|
11
12
|
|
12
13
|
module FnordMetric
|
13
14
|
|
14
15
|
@@namespaces = {}
|
16
|
+
@@server_configuration = nil
|
15
17
|
|
16
18
|
def self.namespace(key=nil, &block)
|
17
19
|
@@namespaces[key] = block
|
@@ -26,6 +28,7 @@ module FnordMetric
|
|
26
28
|
:redis_url => "redis://localhost:6379",
|
27
29
|
:redis_prefix => "fnordmetric",
|
28
30
|
:inbound_stream => ["0.0.0.0", "1337"],
|
31
|
+
:inbound_protocol => :tcp,
|
29
32
|
:web_interface => ["0.0.0.0", "4242"],
|
30
33
|
:web_interface_server => "thin",
|
31
34
|
:start_worker => true,
|
@@ -75,6 +78,7 @@ module FnordMetric
|
|
75
78
|
def self.run
|
76
79
|
start_em
|
77
80
|
rescue Exception => e
|
81
|
+
raise e
|
78
82
|
log "!!! eventmachine died, restarting... #{e.message}"
|
79
83
|
sleep(1); run
|
80
84
|
end
|
@@ -122,11 +126,12 @@ module FnordMetric
|
|
122
126
|
end
|
123
127
|
|
124
128
|
if opts[:inbound_stream]
|
129
|
+
inbound_class = opts[:inbound_protocol] == :udp ? InboundDatagram : InboundStream
|
125
130
|
begin
|
126
|
-
inbound_stream =
|
127
|
-
log "listening on
|
131
|
+
inbound_stream = inbound_class.start(opts)
|
132
|
+
log "listening on #{opts[:inbound_protocol]}##{opts[:inbound_stream].join(":")}"
|
128
133
|
rescue
|
129
|
-
log "cant start
|
134
|
+
log "cant start #{inbound_class.name}. port in use?"
|
130
135
|
end
|
131
136
|
end
|
132
137
|
|
@@ -144,7 +149,9 @@ module FnordMetric
|
|
144
149
|
end
|
145
150
|
|
146
151
|
require "fnordmetric/api"
|
152
|
+
require "fnordmetric/udp_client"
|
147
153
|
require "fnordmetric/inbound_stream"
|
154
|
+
require "fnordmetric/inbound_datagram"
|
148
155
|
require "fnordmetric/worker"
|
149
156
|
require "fnordmetric/widget"
|
150
157
|
require "fnordmetric/timeline_widget"
|
data/spec/api_spec.rb
CHANGED
@@ -17,7 +17,7 @@ describe FnordMetric::Event do
|
|
17
17
|
:redis_prefix => "fnordmetric-test",
|
18
18
|
:redis => @redis
|
19
19
|
}
|
20
|
-
@api = API.new @opts
|
20
|
+
@api = FnordMetric::API.new @opts
|
21
21
|
end
|
22
22
|
|
23
23
|
describe "creating events using API" do
|
@@ -32,7 +32,7 @@ describe FnordMetric::Event do
|
|
32
32
|
:_time => @now
|
33
33
|
}.to_json
|
34
34
|
event_id = @api.event(json_string)
|
35
|
-
event = Event.find(event_id, @opts)
|
35
|
+
event = FnordMetric::Event.find(event_id, @opts)
|
36
36
|
event.type.should == "Fn0rd123"
|
37
37
|
end
|
38
38
|
|
@@ -41,7 +41,7 @@ describe FnordMetric::Event do
|
|
41
41
|
:_type => "Fn0rd234",
|
42
42
|
:_time => @now
|
43
43
|
)
|
44
|
-
event = Event.find(event_id, @opts)
|
44
|
+
event = FnordMetric::Event.find(event_id, @opts)
|
45
45
|
event.type.should == "Fn0rd234"
|
46
46
|
end
|
47
47
|
|
data/spec/ext_spec.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require ::File.expand_path('../spec_helper.rb', __FILE__)
|
2
|
+
|
3
|
+
describe "core extensions" do
|
4
|
+
|
5
|
+
include FnordMetric
|
6
|
+
|
7
|
+
describe Symbol do
|
8
|
+
it "should return self when intern was called" do
|
9
|
+
sym = :fnord
|
10
|
+
sym.intern.should == sym
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
data/spec/gauge_spec.rb
CHANGED
@@ -28,25 +28,25 @@ describe FnordMetric::Gauge do
|
|
28
28
|
end
|
29
29
|
|
30
30
|
it "should raise an error when initialize without key" do
|
31
|
-
|
32
|
-
|
33
|
-
|
31
|
+
lambda{
|
32
|
+
FnordMetric::Gauge.new({:key_prefix => "foo"})
|
33
|
+
}.should raise_error(key_error_klass)
|
34
34
|
end
|
35
35
|
|
36
36
|
it "should raise an error when initialize without key_prefix" do
|
37
|
-
|
38
|
-
|
39
|
-
|
37
|
+
lambda{
|
38
|
+
FnordMetric::Gauge.new({:key => "foo"})
|
39
|
+
}.should raise_error(key_error_klass)
|
40
40
|
end
|
41
41
|
|
42
42
|
it "should generate the correct key without append" do
|
43
|
-
|
44
|
-
|
43
|
+
gauge = FnordMetric::Gauge.new({:key_prefix => "fnordmetrics-myns", :key => "mygauge", :tick => 23})
|
44
|
+
gauge.key.should == "fnordmetrics-myns-gauge-mygauge-23"
|
45
45
|
end
|
46
46
|
|
47
47
|
it "should generate the correct key with append" do
|
48
|
-
|
49
|
-
|
48
|
+
gauge = FnordMetric::Gauge.new({:key_prefix => "fnordmetrics-myns", :key => "mygauge", :tick => 23})
|
49
|
+
gauge.key(:fnord).should == "fnordmetrics-myns-gauge-mygauge-23-fnord"
|
50
50
|
end
|
51
51
|
|
52
52
|
describe "ticks" do
|
@@ -93,7 +93,7 @@ describe FnordMetric::Gauge do
|
|
93
93
|
it "should retrieve a gauge value at the current tick"
|
94
94
|
|
95
95
|
it "should call the value calculation block and return the result" do
|
96
|
-
@gauge.value_at(@now){ |v| v.to_i + 123 }.should == 177
|
96
|
+
@gauge.value_at(@now){ |v, t| v.to_i + 123 }.should == 177
|
97
97
|
end
|
98
98
|
|
99
99
|
it "should return the correct value_at per session" do
|
@@ -166,7 +166,7 @@ describe FnordMetric::Gauge do
|
|
166
166
|
end
|
167
167
|
|
168
168
|
it "should receive gauge values with custom calculation for multiple ticks" do
|
169
|
-
@gauge.values_at([@now, @now+8]){ |val|
|
169
|
+
@gauge.values_at([@now, @now+8]){ |val, time|
|
170
170
|
val.to_i + 30
|
171
171
|
}.should == {
|
172
172
|
695280200 => 84,
|
@@ -230,7 +230,7 @@ describe FnordMetric::Gauge do
|
|
230
230
|
end
|
231
231
|
|
232
232
|
it "should call the value calculation block and return the result" do
|
233
|
-
vals = @gauge.field_values_at(1323691200){ |v| v.to_i + 123 }
|
233
|
+
vals = @gauge.field_values_at(1323691200){ |v, t| v.to_i + 123 }
|
234
234
|
vals.should be_a(Array)
|
235
235
|
vals.length.should == 2
|
236
236
|
vals[0].should == ["uberfoo", 146]
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require ::File.expand_path('../spec_helper.rb', __FILE__)
|
2
|
+
|
3
|
+
describe FnordMetric::InboundDatagram do
|
4
|
+
|
5
|
+
let(:inbound_datagram) { FnordMetric::InboundDatagram.new(nil) }
|
6
|
+
|
7
|
+
before(:all) do
|
8
|
+
@redis = Redis.new
|
9
|
+
@redis_wrap = RedisWrap.new(@redis)
|
10
|
+
FnordMetric::InboundDatagram.opts = {
|
11
|
+
:redis_url => "redis://localhost:6379",
|
12
|
+
:redis_prefix => "fnordmetric-test",
|
13
|
+
:event_queue_ttl => 120
|
14
|
+
}
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "pushing new events" do
|
18
|
+
it "should add parsable event to the queue" do
|
19
|
+
data = %Q{{"_type": "started"}}
|
20
|
+
|
21
|
+
lambda {
|
22
|
+
inbound_datagram.receive_data data
|
23
|
+
}.should change { @redis.llen("fnordmetric-test-queue") }.by +1
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should reject non parsable events" do
|
27
|
+
broken_data = %Q{{"_type" => "started"}}
|
28
|
+
|
29
|
+
lambda {
|
30
|
+
inbound_datagram.receive_data broken_data
|
31
|
+
}.should_not change { @redis.llen("fnordmetric-test-queue") }
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/spec/inbound_stream_spec.rb
CHANGED
data/spec/session_spec.rb
CHANGED
@@ -25,7 +25,7 @@ describe FnordMetric::Session do
|
|
25
25
|
end
|
26
26
|
|
27
27
|
it "should add a new session on intialize" do
|
28
|
-
Session.create(
|
28
|
+
FnordMetric::Session.create(
|
29
29
|
:namespace_prefix => @namespace,
|
30
30
|
:event => @event,
|
31
31
|
:session_data_ttl => 10,
|
@@ -35,7 +35,7 @@ describe FnordMetric::Session do
|
|
35
35
|
end
|
36
36
|
|
37
37
|
it "should add a new session on intialize and hash the session token" do
|
38
|
-
Session.create(
|
38
|
+
FnordMetric::Session.create(
|
39
39
|
:namespace_prefix => @namespace,
|
40
40
|
:event => @event,
|
41
41
|
:session_data_ttl => 10,
|
@@ -45,7 +45,7 @@ describe FnordMetric::Session do
|
|
45
45
|
end
|
46
46
|
|
47
47
|
it "should add a new session on intialize and set the timestamp as score" do
|
48
|
-
Session.create(
|
48
|
+
FnordMetric::Session.create(
|
49
49
|
:namespace_prefix => @namespace,
|
50
50
|
:event => @event,
|
51
51
|
:session_data_ttl => 10,
|
@@ -57,7 +57,7 @@ describe FnordMetric::Session do
|
|
57
57
|
it "should update the timestamp on a existing session" do
|
58
58
|
@redis.zadd(@sessions, @now-10, @md5_key)
|
59
59
|
@redis.zscore(@sessions, @md5_key).to_i.should == @now-10
|
60
|
-
Session.create(
|
60
|
+
FnordMetric::Session.create(
|
61
61
|
:namespace_prefix => @namespace,
|
62
62
|
:event => @event,
|
63
63
|
:session_data_ttl => 10,
|
@@ -67,7 +67,7 @@ describe FnordMetric::Session do
|
|
67
67
|
end
|
68
68
|
|
69
69
|
it "should add the event_id to the session-event set on a new session" do
|
70
|
-
Session.create(
|
70
|
+
FnordMetric::Session.create(
|
71
71
|
:namespace_prefix => @namespace,
|
72
72
|
:event => @event,
|
73
73
|
:session_data_ttl => 10,
|
@@ -82,7 +82,7 @@ describe FnordMetric::Session do
|
|
82
82
|
:_type => "_set_name",
|
83
83
|
:name => "Horst Mayer"
|
84
84
|
)
|
85
|
-
Session.create(
|
85
|
+
FnordMetric::Session.create(
|
86
86
|
:namespace_prefix => @namespace,
|
87
87
|
:event => event_data,
|
88
88
|
:session_data_ttl => 10,
|
@@ -97,7 +97,7 @@ describe FnordMetric::Session do
|
|
97
97
|
:_type => "_set_picture",
|
98
98
|
:url => "http://myhost/mypic.jpg"
|
99
99
|
)
|
100
|
-
Session.create(
|
100
|
+
FnordMetric::Session.create(
|
101
101
|
:namespace_prefix => @namespace,
|
102
102
|
:event => event_data,
|
103
103
|
:session_data_ttl => 10,
|
@@ -113,7 +113,7 @@ describe FnordMetric::Session do
|
|
113
113
|
:fnord => "blubb",
|
114
114
|
:foobar => "123"
|
115
115
|
)
|
116
|
-
Session.create(
|
116
|
+
FnordMetric::Session.create(
|
117
117
|
:namespace_prefix => @namespace,
|
118
118
|
:event => event_data,
|
119
119
|
:session_data_ttl => 10,
|
@@ -130,7 +130,7 @@ describe FnordMetric::Session do
|
|
130
130
|
:fnord => "blubb",
|
131
131
|
:foobar => "123"
|
132
132
|
)
|
133
|
-
Session.create(
|
133
|
+
FnordMetric::Session.create(
|
134
134
|
:namespace_prefix => @namespace,
|
135
135
|
:event => event_data,
|
136
136
|
:session_data_ttl => 10,
|
@@ -159,24 +159,24 @@ describe FnordMetric::Session do
|
|
159
159
|
it "should find all sessions" do
|
160
160
|
create_session("sess533", @now, {})
|
161
161
|
create_session("sess343", @now, {})
|
162
|
-
Session.all(@opts).length.should == 2
|
162
|
+
FnordMetric::Session.all(@opts).length.should == 2
|
163
163
|
end
|
164
164
|
|
165
165
|
it "should find all sessions and return session objects" do
|
166
166
|
create_session("sess523", @now, {})
|
167
|
-
Session.all(@opts).first.should be_a(FnordMetric::Session)
|
167
|
+
FnordMetric::Session.all(@opts).first.should be_a(FnordMetric::Session)
|
168
168
|
end
|
169
169
|
|
170
170
|
it "should find a session and return a session object" do
|
171
171
|
create_session("sess223", @now, {})
|
172
|
-
sess = Session.find(Digest::MD5.hexdigest("sess223"), @opts)
|
172
|
+
sess = FnordMetric::Session.find(Digest::MD5.hexdigest("sess223"), @opts)
|
173
173
|
sess.should be_a(FnordMetric::Session)
|
174
174
|
sess.session_key.should == Digest::MD5.hexdigest("sess223")
|
175
175
|
end
|
176
176
|
|
177
177
|
it "should find a sessions and return a session object with data" do
|
178
178
|
create_session("sess123", @now, { :fnord => "blubb" })
|
179
|
-
sess = Session.find(Digest::MD5.hexdigest("sess123"), @opts)
|
179
|
+
sess = FnordMetric::Session.find(Digest::MD5.hexdigest("sess123"), @opts)
|
180
180
|
sess.fetch_data!
|
181
181
|
sess.data(:fnord).should == "blubb"
|
182
182
|
end
|
@@ -184,7 +184,7 @@ describe FnordMetric::Session do
|
|
184
184
|
it "should not include special attributes in data" do
|
185
185
|
event_data = { :_name => "Horst Mayer", :_picture => "http://myhost/mypic.jpg" }
|
186
186
|
create_session("sess173", @now, event_data)
|
187
|
-
sess = Session.find(Digest::MD5.hexdigest("sess173"), @opts)
|
187
|
+
sess = FnordMetric::Session.find(Digest::MD5.hexdigest("sess173"), @opts)
|
188
188
|
sess.fetch_data!
|
189
189
|
sess.data(:_name).should == nil
|
190
190
|
sess.data(:_picture).should == nil
|
@@ -193,7 +193,7 @@ describe FnordMetric::Session do
|
|
193
193
|
it "should find a session and return a session object with picture" do
|
194
194
|
event_data = { :_name => "Horst Mayer", :_picture => "http://myhost/mypic.jpg" }
|
195
195
|
create_session("sess163", @now, event_data)
|
196
|
-
sess = Session.find(Digest::MD5.hexdigest("sess163"), @opts)
|
196
|
+
sess = FnordMetric::Session.find(Digest::MD5.hexdigest("sess163"), @opts)
|
197
197
|
sess.fetch_data!
|
198
198
|
sess.picture.should == "http://myhost/mypic.jpg"
|
199
199
|
end
|
@@ -201,7 +201,7 @@ describe FnordMetric::Session do
|
|
201
201
|
it "should find a session and return a session object with name" do
|
202
202
|
event_data = { :_name => "Horst Mayer", :_picture => "http://myhost/mypic.jpg" }
|
203
203
|
create_session("sess143", @now, event_data)
|
204
|
-
sess = Session.find(Digest::MD5.hexdigest("sess143"), @opts)
|
204
|
+
sess = FnordMetric::Session.find(Digest::MD5.hexdigest("sess143"), @opts)
|
205
205
|
sess.fetch_data!
|
206
206
|
sess.name.should == "Horst Mayer"
|
207
207
|
end
|
@@ -210,7 +210,7 @@ describe FnordMetric::Session do
|
|
210
210
|
sesshash = create_session("sess923", @now, {})
|
211
211
|
@redis_wrap.zadd("#{@namespace}-session-#{sesshash}-events", @now, "shmoo")
|
212
212
|
@redis_wrap.zadd("#{@namespace}-session-#{sesshash}-events", @now, "fnord")
|
213
|
-
sess = Session.find(sesshash, @opts)
|
213
|
+
sess = FnordMetric::Session.find(sesshash, @opts)
|
214
214
|
sess.fetch_event_ids!
|
215
215
|
sess.event_ids.should include("shmoo")
|
216
216
|
sess.event_ids.should include("fnord")
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,204 +1,199 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: fnordmetric
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.7.3
|
4
5
|
prerelease:
|
5
|
-
version: 0.7.1
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Paul Asmuth
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
dependencies:
|
16
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-05-07 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
17
15
|
name: bson_ext
|
18
|
-
|
19
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &83157930 !ruby/object:Gem::Requirement
|
20
17
|
none: false
|
21
|
-
requirements:
|
22
|
-
- -
|
23
|
-
- !ruby/object:Gem::Version
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
24
21
|
version: 1.4.0
|
25
22
|
type: :runtime
|
26
|
-
version_requirements: *id001
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: sinatra
|
29
23
|
prerelease: false
|
30
|
-
|
24
|
+
version_requirements: *83157930
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: sinatra
|
27
|
+
requirement: &83157680 !ruby/object:Gem::Requirement
|
31
28
|
none: false
|
32
|
-
requirements:
|
33
|
-
- -
|
34
|
-
- !ruby/object:Gem::Version
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
35
32
|
version: 1.2.6
|
36
33
|
type: :runtime
|
37
|
-
version_requirements: *id002
|
38
|
-
- !ruby/object:Gem::Dependency
|
39
|
-
name: redis
|
40
34
|
prerelease: false
|
41
|
-
|
35
|
+
version_requirements: *83157680
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: redis
|
38
|
+
requirement: &83157420 !ruby/object:Gem::Requirement
|
42
39
|
none: false
|
43
|
-
requirements:
|
44
|
-
- -
|
45
|
-
- !ruby/object:Gem::Version
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
46
43
|
version: 2.2.2
|
47
44
|
type: :runtime
|
48
|
-
version_requirements: *id003
|
49
|
-
- !ruby/object:Gem::Dependency
|
50
|
-
name: eventmachine
|
51
45
|
prerelease: false
|
52
|
-
|
46
|
+
version_requirements: *83157420
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: eventmachine
|
49
|
+
requirement: &83157230 !ruby/object:Gem::Requirement
|
53
50
|
none: false
|
54
|
-
requirements:
|
55
|
-
- -
|
56
|
-
- !ruby/object:Gem::Version
|
57
|
-
version:
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
58
55
|
type: :runtime
|
59
|
-
version_requirements: *id004
|
60
|
-
- !ruby/object:Gem::Dependency
|
61
|
-
name: em-hiredis
|
62
56
|
prerelease: false
|
63
|
-
|
57
|
+
version_requirements: *83157230
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: em-hiredis
|
60
|
+
requirement: &83156900 !ruby/object:Gem::Requirement
|
64
61
|
none: false
|
65
|
-
requirements:
|
66
|
-
- -
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version:
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
69
66
|
type: :runtime
|
70
|
-
version_requirements: *id005
|
71
|
-
- !ruby/object:Gem::Dependency
|
72
|
-
name: json
|
73
67
|
prerelease: false
|
74
|
-
|
68
|
+
version_requirements: *83156900
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: json
|
71
|
+
requirement: &83156630 !ruby/object:Gem::Requirement
|
75
72
|
none: false
|
76
|
-
requirements:
|
77
|
-
- -
|
78
|
-
- !ruby/object:Gem::Version
|
79
|
-
version:
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
80
77
|
type: :runtime
|
81
|
-
version_requirements: *id006
|
82
|
-
- !ruby/object:Gem::Dependency
|
83
|
-
name: i18n
|
84
78
|
prerelease: false
|
85
|
-
|
79
|
+
version_requirements: *83156630
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: i18n
|
82
|
+
requirement: &83156340 !ruby/object:Gem::Requirement
|
86
83
|
none: false
|
87
|
-
requirements:
|
88
|
-
- -
|
89
|
-
- !ruby/object:Gem::Version
|
90
|
-
version:
|
84
|
+
requirements:
|
85
|
+
- - ! '>='
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
91
88
|
type: :runtime
|
92
|
-
version_requirements: *id007
|
93
|
-
- !ruby/object:Gem::Dependency
|
94
|
-
name: haml
|
95
89
|
prerelease: false
|
96
|
-
|
90
|
+
version_requirements: *83156340
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
name: haml
|
93
|
+
requirement: &83174100 !ruby/object:Gem::Requirement
|
97
94
|
none: false
|
98
|
-
requirements:
|
99
|
-
- -
|
100
|
-
- !ruby/object:Gem::Version
|
101
|
-
version:
|
95
|
+
requirements:
|
96
|
+
- - ! '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
102
99
|
type: :runtime
|
103
|
-
version_requirements: *id008
|
104
|
-
- !ruby/object:Gem::Dependency
|
105
|
-
name: rack
|
106
100
|
prerelease: false
|
107
|
-
|
101
|
+
version_requirements: *83174100
|
102
|
+
- !ruby/object:Gem::Dependency
|
103
|
+
name: rack
|
104
|
+
requirement: &83173890 !ruby/object:Gem::Requirement
|
108
105
|
none: false
|
109
|
-
requirements:
|
110
|
-
- -
|
111
|
-
- !ruby/object:Gem::Version
|
112
|
-
version:
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
113
110
|
type: :runtime
|
114
|
-
version_requirements: *id009
|
115
|
-
- !ruby/object:Gem::Dependency
|
116
|
-
name: rack-test
|
117
111
|
prerelease: false
|
118
|
-
|
112
|
+
version_requirements: *83173890
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: rack-test
|
115
|
+
requirement: &83173650 !ruby/object:Gem::Requirement
|
119
116
|
none: false
|
120
|
-
requirements:
|
121
|
-
- -
|
122
|
-
- !ruby/object:Gem::Version
|
123
|
-
version:
|
117
|
+
requirements:
|
118
|
+
- - ! '>='
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: '0'
|
124
121
|
type: :runtime
|
125
|
-
version_requirements: *id010
|
126
|
-
- !ruby/object:Gem::Dependency
|
127
|
-
name: yajl-ruby
|
128
122
|
prerelease: false
|
129
|
-
|
123
|
+
version_requirements: *83173650
|
124
|
+
- !ruby/object:Gem::Dependency
|
125
|
+
name: yajl-ruby
|
126
|
+
requirement: &83173430 !ruby/object:Gem::Requirement
|
130
127
|
none: false
|
131
|
-
requirements:
|
132
|
-
- -
|
133
|
-
- !ruby/object:Gem::Version
|
134
|
-
version:
|
128
|
+
requirements:
|
129
|
+
- - ! '>='
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
135
132
|
type: :runtime
|
136
|
-
version_requirements: *id011
|
137
|
-
- !ruby/object:Gem::Dependency
|
138
|
-
name: thin
|
139
133
|
prerelease: false
|
140
|
-
|
134
|
+
version_requirements: *83173430
|
135
|
+
- !ruby/object:Gem::Dependency
|
136
|
+
name: thin
|
137
|
+
requirement: &83173150 !ruby/object:Gem::Requirement
|
141
138
|
none: false
|
142
|
-
requirements:
|
143
|
-
- -
|
144
|
-
- !ruby/object:Gem::Version
|
145
|
-
version:
|
139
|
+
requirements:
|
140
|
+
- - ! '>='
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: '0'
|
146
143
|
type: :runtime
|
147
|
-
version_requirements: *id012
|
148
|
-
- !ruby/object:Gem::Dependency
|
149
|
-
name: activesupport
|
150
144
|
prerelease: false
|
151
|
-
|
145
|
+
version_requirements: *83173150
|
146
|
+
- !ruby/object:Gem::Dependency
|
147
|
+
name: activesupport
|
148
|
+
requirement: &83172890 !ruby/object:Gem::Requirement
|
152
149
|
none: false
|
153
|
-
requirements:
|
154
|
-
- -
|
155
|
-
- !ruby/object:Gem::Version
|
156
|
-
version:
|
150
|
+
requirements:
|
151
|
+
- - ! '>='
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '0'
|
157
154
|
type: :runtime
|
158
|
-
version_requirements: *id013
|
159
|
-
- !ruby/object:Gem::Dependency
|
160
|
-
name: delorean
|
161
155
|
prerelease: false
|
162
|
-
|
156
|
+
version_requirements: *83172890
|
157
|
+
- !ruby/object:Gem::Dependency
|
158
|
+
name: delorean
|
159
|
+
requirement: &83172580 !ruby/object:Gem::Requirement
|
163
160
|
none: false
|
164
|
-
requirements:
|
165
|
-
- -
|
166
|
-
- !ruby/object:Gem::Version
|
167
|
-
version:
|
161
|
+
requirements:
|
162
|
+
- - ! '>='
|
163
|
+
- !ruby/object:Gem::Version
|
164
|
+
version: '0'
|
168
165
|
type: :development
|
169
|
-
version_requirements: *id014
|
170
|
-
- !ruby/object:Gem::Dependency
|
171
|
-
name: rspec
|
172
166
|
prerelease: false
|
173
|
-
|
167
|
+
version_requirements: *83172580
|
168
|
+
- !ruby/object:Gem::Dependency
|
169
|
+
name: rspec
|
170
|
+
requirement: &83172090 !ruby/object:Gem::Requirement
|
174
171
|
none: false
|
175
|
-
requirements:
|
172
|
+
requirements:
|
176
173
|
- - ~>
|
177
|
-
- !ruby/object:Gem::Version
|
174
|
+
- !ruby/object:Gem::Version
|
178
175
|
version: 2.8.0
|
179
176
|
type: :development
|
180
|
-
version_requirements: *id015
|
181
|
-
- !ruby/object:Gem::Dependency
|
182
|
-
name: shoulda
|
183
177
|
prerelease: false
|
184
|
-
|
178
|
+
version_requirements: *83172090
|
179
|
+
- !ruby/object:Gem::Dependency
|
180
|
+
name: shoulda
|
181
|
+
requirement: &83171880 !ruby/object:Gem::Requirement
|
185
182
|
none: false
|
186
|
-
requirements:
|
187
|
-
- -
|
188
|
-
- !ruby/object:Gem::Version
|
189
|
-
version:
|
183
|
+
requirements:
|
184
|
+
- - ! '>='
|
185
|
+
- !ruby/object:Gem::Version
|
186
|
+
version: '0'
|
190
187
|
type: :development
|
191
|
-
|
188
|
+
prerelease: false
|
189
|
+
version_requirements: *83171880
|
192
190
|
description: FnordMetric is a Ruby Event-Tracking gem on steroids
|
193
|
-
email:
|
191
|
+
email:
|
194
192
|
- paul@paulasmuth.com
|
195
193
|
executables: []
|
196
|
-
|
197
194
|
extensions: []
|
198
|
-
|
199
195
|
extra_rdoc_files: []
|
200
|
-
|
201
|
-
files:
|
196
|
+
files:
|
202
197
|
- Gemfile
|
203
198
|
- README.md
|
204
199
|
- Rakefile
|
@@ -220,11 +215,13 @@ files:
|
|
220
215
|
- lib/fnordmetric/count_metric.rb
|
221
216
|
- lib/fnordmetric/dashboard.rb
|
222
217
|
- lib/fnordmetric/event.rb
|
218
|
+
- lib/fnordmetric/ext.rb
|
223
219
|
- lib/fnordmetric/funnel_widget.rb
|
224
220
|
- lib/fnordmetric/gauge.rb
|
225
221
|
- lib/fnordmetric/gauge_calculations.rb
|
226
222
|
- lib/fnordmetric/gauge_modifiers.rb
|
227
223
|
- lib/fnordmetric/html_widget.rb
|
224
|
+
- lib/fnordmetric/inbound_datagram.rb
|
228
225
|
- lib/fnordmetric/inbound_stream.rb
|
229
226
|
- lib/fnordmetric/logger.rb
|
230
227
|
- lib/fnordmetric/metric.rb
|
@@ -238,6 +235,7 @@ files:
|
|
238
235
|
- lib/fnordmetric/sum_metric.rb
|
239
236
|
- lib/fnordmetric/timeline_widget.rb
|
240
237
|
- lib/fnordmetric/toplist_widget.rb
|
238
|
+
- lib/fnordmetric/udp_client.rb
|
241
239
|
- lib/fnordmetric/version.rb
|
242
240
|
- lib/fnordmetric/widget.rb
|
243
241
|
- lib/fnordmetric/worker.rb
|
@@ -251,55 +249,57 @@ files:
|
|
251
249
|
- spec/context_spec.rb
|
252
250
|
- spec/dashboard_spec.rb
|
253
251
|
- spec/event_spec.rb
|
252
|
+
- spec/ext_spec.rb
|
254
253
|
- spec/fnordmetric_spec.rb
|
255
254
|
- spec/gauge_modifiers_spec.rb
|
256
255
|
- spec/gauge_spec.rb
|
256
|
+
- spec/inbound_datagram_spec.rb
|
257
257
|
- spec/inbound_stream_spec.rb
|
258
258
|
- spec/namespace_spec.rb
|
259
259
|
- spec/session_spec.rb
|
260
260
|
- spec/spec_helper.rb
|
261
261
|
- spec/widget_spec.rb
|
262
262
|
- spec/worker_spec.rb
|
263
|
-
has_rdoc: true
|
264
263
|
homepage: http://github.com/paulasmuth/fnordmetric
|
265
|
-
licenses:
|
264
|
+
licenses:
|
266
265
|
- MIT
|
267
266
|
post_install_message:
|
268
267
|
rdoc_options: []
|
269
|
-
|
270
|
-
require_paths:
|
268
|
+
require_paths:
|
271
269
|
- lib
|
272
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
270
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
273
271
|
none: false
|
274
|
-
requirements:
|
275
|
-
- -
|
276
|
-
- !ruby/object:Gem::Version
|
277
|
-
version:
|
278
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
272
|
+
requirements:
|
273
|
+
- - ! '>='
|
274
|
+
- !ruby/object:Gem::Version
|
275
|
+
version: '0'
|
276
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
279
277
|
none: false
|
280
|
-
requirements:
|
281
|
-
- -
|
282
|
-
- !ruby/object:Gem::Version
|
283
|
-
version:
|
278
|
+
requirements:
|
279
|
+
- - ! '>='
|
280
|
+
- !ruby/object:Gem::Version
|
281
|
+
version: '0'
|
284
282
|
requirements: []
|
285
|
-
|
286
283
|
rubyforge_project:
|
287
|
-
rubygems_version: 1.6
|
284
|
+
rubygems_version: 1.8.6
|
288
285
|
signing_key:
|
289
286
|
specification_version: 3
|
290
287
|
summary: FnordMetric is a Ruby Event-Tracking gem on steroids
|
291
|
-
test_files:
|
288
|
+
test_files:
|
292
289
|
- spec/api_spec.rb
|
293
290
|
- spec/app_spec.rb
|
294
291
|
- spec/context_spec.rb
|
295
292
|
- spec/dashboard_spec.rb
|
296
293
|
- spec/event_spec.rb
|
294
|
+
- spec/ext_spec.rb
|
297
295
|
- spec/fnordmetric_spec.rb
|
298
296
|
- spec/gauge_modifiers_spec.rb
|
299
297
|
- spec/gauge_spec.rb
|
298
|
+
- spec/inbound_datagram_spec.rb
|
300
299
|
- spec/inbound_stream_spec.rb
|
301
300
|
- spec/namespace_spec.rb
|
302
301
|
- spec/session_spec.rb
|
303
302
|
- spec/spec_helper.rb
|
304
303
|
- spec/widget_spec.rb
|
305
304
|
- spec/worker_spec.rb
|
305
|
+
has_rdoc:
|