fnordmetric 0.5.1 → 0.5.2

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.
Files changed (65) hide show
  1. data/.travis.yml +1 -0
  2. data/VERSION +1 -1
  3. data/doc/preview1.png +0 -0
  4. data/doc/preview2.png +0 -0
  5. data/doc/ulm_stats.rb +622 -0
  6. data/doc/version +1 -0
  7. data/fnordmetric.gemspec +16 -38
  8. data/haml/app.haml +12 -5
  9. data/lib/fnordmetric.rb +3 -0
  10. data/lib/fnordmetric/app.rb +19 -10
  11. data/lib/fnordmetric/bars_widget.rb +26 -0
  12. data/lib/fnordmetric/context.rb +3 -3
  13. data/lib/fnordmetric/gauge.rb +20 -0
  14. data/lib/fnordmetric/gauge_calculations.rb +28 -4
  15. data/lib/fnordmetric/gauge_modifiers.rb +39 -6
  16. data/lib/fnordmetric/logger.rb +19 -0
  17. data/lib/fnordmetric/numbers_widget.rb +5 -15
  18. data/lib/fnordmetric/pie_widget.rb +23 -0
  19. data/lib/fnordmetric/standalone.rb +1 -1
  20. data/lib/fnordmetric/timeline_widget.rb +16 -23
  21. data/lib/fnordmetric/toplist_widget.rb +25 -0
  22. data/lib/fnordmetric/widget.rb +3 -3
  23. data/pub/{fnordmetric/fnordmetric.css → fnordmetric.css} +46 -36
  24. data/pub/fnordmetric.js +1069 -0
  25. data/pub/loader.gif +0 -0
  26. data/pub/{highcharts → vendor}/highcharts.js +0 -0
  27. data/pub/{jquery-1.6.1.min.js → vendor/jquery-1.6.1.min.js} +0 -0
  28. data/readme.rdoc +228 -311
  29. data/spec/app_spec.rb +63 -3
  30. data/spec/gauge_modifiers_spec.rb +157 -2
  31. data/spec/gauge_spec.rb +143 -12
  32. data/spec/widget_spec.rb +18 -18
  33. metadata +33 -58
  34. data/.document +0 -5
  35. data/_spec/app_spec.rb +0 -178
  36. data/_spec/cache_spec.rb +0 -53
  37. data/_spec/combine_metric_spec.rb +0 -19
  38. data/_spec/core_spec.rb +0 -50
  39. data/_spec/count_metric_spec.rb +0 -32
  40. data/_spec/dashboard_spec.rb +0 -67
  41. data/_spec/event_spec.rb +0 -46
  42. data/_spec/metric_spec.rb +0 -118
  43. data/_spec/report_spec.rb +0 -87
  44. data/_spec/sum_metric_spec.rb +0 -33
  45. data/_spec/widget_spec.rb +0 -107
  46. data/doc/example_server.rb +0 -56
  47. data/doc/import_dump.rb +0 -26
  48. data/pub/fnordmetric/fnordmetric.js +0 -543
  49. data/pub/fnordmetric/widget_numbers.js +0 -71
  50. data/pub/fnordmetric/widget_timeline.css +0 -0
  51. data/pub/fnordmetric/widget_timeline.js +0 -110
  52. data/pub/highcharts/adapters/mootools-adapter.js +0 -12
  53. data/pub/highcharts/adapters/mootools-adapter.src.js +0 -243
  54. data/pub/highcharts/adapters/prototype-adapter.js +0 -14
  55. data/pub/highcharts/adapters/prototype-adapter.src.js +0 -284
  56. data/pub/highcharts/highcharts.src.js +0 -11103
  57. data/pub/highcharts/modules/exporting.js +0 -22
  58. data/pub/highcharts/modules/exporting.src.js +0 -703
  59. data/pub/highcharts/themes/dark-blue.js +0 -268
  60. data/pub/highcharts/themes/dark-green.js +0 -268
  61. data/pub/highcharts/themes/gray.js +0 -262
  62. data/pub/highcharts/themes/grid.js +0 -97
  63. data/pub/raphael-min.js +0 -8
  64. data/pub/raphael-utils.js +0 -221
  65. data/ulm_stats.rb +0 -198
@@ -1,53 +0,0 @@
1
- require ::File.expand_path('../spec_helper.rb', __FILE__)
2
-
3
- describe FnordMetric::Cache do
4
-
5
- before(:each) do
6
- FnordMetric::Cache.destroy_all
7
- end
8
-
9
- it "should store a cache item with a integer value" do
10
- FnordMetric::Cache.store!('mykey', 123)
11
- FnordMetric::Cache.last[:data].should be_a(Hash)
12
- FnordMetric::Cache.last[:data].keys.should == ["value"]
13
- FnordMetric::Cache.last[:data]["value"].to_i.should == 123
14
- end
15
-
16
- it "should store a cache item with a float value" do
17
- FnordMetric::Cache.store!('mykey', 123.5)
18
- FnordMetric::Cache.last[:data].should be_a(Hash)
19
- FnordMetric::Cache.last[:data].keys.should == ["value"]
20
- FnordMetric::Cache.last[:data]["value"].to_f.should == 123.5
21
- end
22
-
23
- it "should store a cache item with a hash value" do
24
- FnordMetric::Cache.store!('mykey', :foobar => "fnord", :blubb => "asd")
25
- FnordMetric::Cache.last[:data].should be_a(Hash)
26
- FnordMetric::Cache.last[:data].keys.length.should == 2
27
- FnordMetric::Cache.last[:data].keys.should include("foobar")
28
- FnordMetric::Cache.last[:data].keys.should include("blubb")
29
- FnordMetric::Cache.last[:data]["foobar"].should == "fnord"
30
- FnordMetric::Cache.last[:data]["blubb"].should == "asd"
31
- end
32
-
33
- it "should get a cache item with a integer value" do
34
- FnordMetric::Cache.store!('mykey', 123)
35
- FnordMetric::Cache.get('mykey').should == 123
36
- end
37
-
38
- it "should store a cache item with a float value" do
39
- FnordMetric::Cache.store!('mykey', 42.5)
40
- FnordMetric::Cache.get('mykey').should == 42.5
41
- end
42
-
43
- it "should store a cache item with a hash value" do
44
- FnordMetric::Cache.store!('mykey', :foobar => "fnord", :blubb => "asd")
45
- FnordMetric::Cache.get('mykey').should be_a(Hash)
46
- FnordMetric::Cache.get('mykey').keys.length.should == 2
47
- FnordMetric::Cache.get('mykey').keys.should include("foobar")
48
- FnordMetric::Cache.get('mykey').keys.should include("blubb")
49
- FnordMetric::Cache.get('mykey')["foobar"].should == "fnord"
50
- FnordMetric::Cache.get('mykey')["blubb"].should == "asd"
51
- end
52
-
53
- end
@@ -1,19 +0,0 @@
1
- require ::File.expand_path('../spec_helper.rb', __FILE__)
2
-
3
- describe FnordMetric::CombineMetric do
4
-
5
- it "should return the block return" do
6
- metric = FnordMetric.metric('my_event_count', :combine => lambda{ |time_or_range|
7
- 2323
8
- })
9
- metric.current.should == 2323
10
- end
11
-
12
- it "should pass the time_or_range to the bloc" do
13
- metric = FnordMetric.metric('my_event_count', :combine => lambda{ |time_or_range|
14
- time_or_range.to_i
15
- })
16
- metric.current.should == Time.now.to_i
17
- end
18
-
19
- end
@@ -1,50 +0,0 @@
1
- require ::File.expand_path('../spec_helper.rb', __FILE__)
2
-
3
- describe FnordMetric do
4
-
5
- before(:each) do
6
- FnordMetric::Event.destroy_all
7
- end
8
-
9
- it "should define a new metric" do
10
- FnordMetric.metric(:myfield_total, :sum => :myfield)
11
- FnordMetric.metrics.keys.should include(:myfield_total)
12
- FnordMetric.metrics[:myfield_total].should be_a(FnordMetric::Metric)
13
- end
14
-
15
- it "should define a new dashboard" do
16
- FnordMetric.dashboard('My Dashboard'){ |dash| }
17
- dashboard = FnordMetric.dashboards.last
18
- dashboard.should be_a(FnordMetric::Dashboard)
19
- dashboard.title.should == 'My Dashboard'
20
- end
21
-
22
- it "should define a new dashboard and call the config block" do
23
- block_called = false
24
- FnordMetric.dashboard 'My Dashboard' do |dash|
25
- block_called = true
26
- dash.should be_a(FnordMetric::Dashboard)
27
- end
28
- block_called.should be_true
29
- end
30
-
31
- it "should define a new widget" do
32
- FnordMetric.metric(:my_metric, :sum => :my_field)
33
- FnordMetric.widget(:my_widget, :metrics => :my_metric, :title => "My Widget", :type => :timeline)
34
- FnordMetric.widgets[:my_widget].title.should == "My Widget"
35
- end
36
-
37
- it "should raise an error if no type option is provided" do
38
- FnordMetric.metric(:my_metric, :sum => :my_field)
39
- lambda{
40
- FnordMetric.widget(:my_widget, :metrics => :my_metric, :title => "My Widget")
41
- }.should raise_error(RuntimeError)
42
- end
43
-
44
- it "should raise an error if an unknown metric is added to a widget" do
45
- lambda{
46
- FnordMetric.widget(:my_widget, :metrics => :my_unknown_metric, :title => "My Widget", :type => :timeline)
47
- }.should raise_error(RuntimeError)
48
- end
49
-
50
- end
@@ -1,32 +0,0 @@
1
- require ::File.expand_path('../spec_helper.rb', __FILE__)
2
-
3
- describe FnordMetric::CountMetric do
4
-
5
- before(:each) do
6
- FnordMetric::Event.destroy_all
7
- FnordMetric.track('my_event_type', :time => 33.hours.ago)
8
- FnordMetric.track('my_event_type', :time => 32.hours.ago)
9
- FnordMetric.track('my_event_type', :time => 28.hours.ago)
10
- FnordMetric.track('my_event_type', :time => 27.hours.ago)
11
- FnordMetric.track('my_event_type', :time => 26.hours.ago)
12
- FnordMetric.track('my_event_type', :time => 13.hours.ago)
13
- FnordMetric.track('my_event_type', :time => 12.hours.ago)
14
- FnordMetric.track('my_event_type', :time => 11.hours.ago)
15
- end
16
-
17
- it "should count events until now" do
18
- metric = FnordMetric.metric('my_event_count', :count => true, :types => [:my_event_type])
19
- metric.current.should == 8
20
- end
21
-
22
- it "should count events until 18 hours ago" do
23
- metric = FnordMetric.metric('my_event_count', :count => true, :types => [:my_event_type])
24
- metric.at(18.hours.ago).should == 5
25
- end
26
-
27
- it "should count events from 30 to 20 hours ago" do
28
- metric = FnordMetric.metric('my_event_count', :count => true, :types => [:my_event_type])
29
- metric.at(30.hours.ago..20.hours.ago).should == 3
30
- end
31
-
32
- end
@@ -1,67 +0,0 @@
1
- require ::File.expand_path('../spec_helper.rb', __FILE__)
2
-
3
- describe FnordMetric::Dashboard do
4
-
5
- before(:each) do
6
- FnordMetric::Event.destroy_all
7
- FnordMetric.reset_metrics
8
- end
9
-
10
- it "should remember it's title" do
11
- dashboard = FnordMetric::Dashboard.new(:title => 'My Foobar Dashboard'){ |dash| }
12
- dashboard.title.should == 'My Foobar Dashboard'
13
- end
14
-
15
- it "should build a token" do
16
- dashboard = FnordMetric::Dashboard.new(:title => 'My!F00bar-.Dash_board'){ |dash| }
17
- dashboard.token.should == 'MyF00barDash_board'
18
- end
19
-
20
- it "should add a widget" do
21
- dashboard = FnordMetric::Dashboard.new(:title => 'My!F00bar-.Dash_board'){ |dash| }
22
- FnordMetric.metric(:my_metric, :sum => :my_field)
23
- widget = FnordMetric.widget(:my_widget, :metrics => :my_metric, :title => "My Widget", :type => :timeline)
24
- dashboard.add_widget(widget)
25
- dashboard.widgets.first.should == widget
26
- end
27
-
28
- it "should add a widget by name" do
29
- dashboard = FnordMetric::Dashboard.new(:title => 'My!F00bar-.Dash_board'){ |dash| }
30
- FnordMetric.metric(:my_metric, :sum => :my_field)
31
- widget = FnordMetric.widget(:my_widget, :metrics => :my_metric, :title => "My Widget", :type => :timeline)
32
- dashboard.add_widget(:my_widget)
33
- dashboard.widgets.first.should == widget
34
- end
35
-
36
- it "should add the report on init (and to all widgets)" do
37
- FnordMetric.metric(:my_metric, :sum => :my_field)
38
- report = FnordMetric.report(:range => (4.days.ago..Time.now))
39
- dashboard = FnordMetric::Dashboard.new(:title => 'My Foobar Dashboard', :report => report){ |dash|
40
- dash.add_widget FnordMetric.widget(:my_widget, :metrics => :my_metric, :title => "My Widget", :type => :timeline)
41
- }
42
- dashboard.report.should == report
43
- dashboard.widgets.last.report.should == report
44
- end
45
-
46
- it "should add the report after init (and to all widgets)" do
47
- FnordMetric.metric(:my_metric, :sum => :my_field)
48
- report = FnordMetric.report(:range => (4.days.ago..Time.now))
49
- dashboard = FnordMetric::Dashboard.new(:title => 'My Foobar Dashboard'){ |dash|
50
- dash.add_widget FnordMetric.widget(:my_widget, :metrics => :my_metric, :title => "My Widget", :type => :timeline)
51
- }
52
- dashboard.report.should == nil
53
- dashboard.add_report(report)
54
- dashboard.report.should == report
55
- dashboard.widgets.last.report.should == report
56
- end
57
-
58
- it "should call the config block" do
59
- block_called = false
60
- FnordMetric::Dashboard.new(:title => 'My Dashboard') do |dash|
61
- block_called = true
62
- dash.should be_a(FnordMetric::Dashboard)
63
- end
64
- block_called.should be_true
65
- end
66
-
67
- end
@@ -1,46 +0,0 @@
1
- require ::File.expand_path('../spec_helper.rb', __FILE__)
2
-
3
- include FnordMetric
4
-
5
- describe "event" do
6
-
7
- before(:each) do
8
- Event.destroy_all
9
- end
10
-
11
- it "should track an event" do
12
- event = Event.track!('_referral', :foobar => "fnord")
13
- Event.last[:type].should == "_referral"
14
- Event.last[:foobar].should == "fnord"
15
- end
16
-
17
- it "should track an event via the proxy method" do
18
- FnordMetric.track('blubb', :foo => "bar")
19
- FnordMetric::Event.last.foo.should == "bar"
20
- end
21
-
22
- it "should access info like a 'ostruct' object" do
23
- event = Event.track!('_referral', :foobar => "fnord")
24
- Event.last.type.should == "_referral"
25
- Event.last.foobar.should == "fnord"
26
- end
27
-
28
- it "should insert a data point in the past" do
29
- my_time = 23.minutes.ago
30
- event = Event.track!('_referral', :foobar => "fnord", :time => my_time)
31
- Event.last[:type].should == "_referral"
32
- Event.last[:foobar].should == "fnord"
33
- Event.last[:time].should == my_time.to_i
34
- end
35
-
36
- it "should save integer data" do
37
- event = Event.track!('_test', :num => 23)
38
- Event.last.num.should == 23
39
- end
40
-
41
- it "should save float data" do
42
- event = Event.track!('_test', :num => 42.5)
43
- Event.last.num.should == 42.5
44
- end
45
-
46
- end
@@ -1,118 +0,0 @@
1
- require ::File.expand_path('../spec_helper.rb', __FILE__)
2
-
3
- describe FnordMetric::Metric do
4
-
5
- before(:each) do
6
- FnordMetric::Event.destroy_all
7
- FnordMetric.track('my_event_type', :time => 33.hours.ago, :fnord => "a")
8
- FnordMetric.track('my_event_type', :time => 32.hours.ago, :fnord => "b")
9
- FnordMetric.track('my_event_type', :time => 28.hours.ago, :fnord => "c")
10
- FnordMetric.track('my_event_type', :time => 27.hours.ago, :fnord => "d")
11
- FnordMetric.track('my_event_type', :time => 26.hours.ago, :fnord => "e")
12
- FnordMetric.track('another_event_type', :time => 26.hours.ago, :fnord => "x")
13
- FnordMetric.track('my_event_type', :time => 13.hours.ago, :fnord => "f")
14
- FnordMetric.track('my_event_type', :time => 12.hours.ago, :fnord => "g")
15
- FnordMetric.track('my_event_type', :time => 11.hours.ago, :fnord => "h")
16
- end
17
-
18
- it "should find events by event_type" do
19
- metric = FnordMetric::Metric.new(:types => [:my_event_type, :another_event_type])
20
- metric.events.count.should == 9
21
- end
22
-
23
- it "should find events by event_type" do
24
- metric = FnordMetric::Metric.new(:types => [:my_event_type])
25
- metric.events.count.should == 8
26
- end
27
-
28
- it "should find events by event_type" do
29
- metric = FnordMetric::Metric.new(:types => [:another_event_type])
30
- metric.events.count.should == 1
31
- end
32
-
33
- it "should find events by time range" do
34
- metric = FnordMetric::Metric.new({})
35
- metric.events_at(30.hours.ago..20.hours.ago).count.should == 4
36
- end
37
-
38
- it "should find events by time range and event type" do
39
- metric = FnordMetric::Metric.new(:types => [:my_event_type, :another_event_type])
40
- metric.events_at(30.hours.ago..20.hours.ago).count.should == 4
41
- end
42
-
43
- it "should find events by time range and event type" do
44
- metric = FnordMetric::Metric.new(:types => [:my_event_type])
45
- metric.events_at(30.hours.ago..20.hours.ago).count.should == 3
46
- end
47
-
48
- it "should find events until time" do
49
- metric = FnordMetric::Metric.new({})
50
- metric.events_at(20.hours.ago).count.should == 6
51
- end
52
-
53
- it "should find events until time and event type" do
54
- metric = FnordMetric::Metric.new(:types => [:my_event_type, :another_event_type])
55
- metric.events_at(20.hours.ago).count.should == 6
56
- end
57
-
58
- it "should find events until time and event type" do
59
- metric = FnordMetric::Metric.new(:types => [:my_event_type])
60
- metric.events_at(20.hours.ago).count.should == 5
61
- end
62
-
63
- it "#from_options should return an instance of the right subclass" do
64
- FnordMetric::Metric.from_options(:count => true).should be_a(FnordMetric::CountMetric)
65
- FnordMetric::Metric.from_options(:sum => :fnord).should be_a(FnordMetric::SumMetric)
66
- FnordMetric::Metric.from_options(:average => :f).should be_a(FnordMetric::AverageMetric)
67
- FnordMetric::Metric.from_options(:combine => :l).should be_a(FnordMetric::CombineMetric)
68
- end
69
-
70
- it "#from_options should raise if none of the mandatory opts is provided" do
71
- lambda{ FnordMetric::Metric.from_options({}) }.should raise_error(RuntimeError)
72
- end
73
-
74
- it "should never cache value_at(time) where time is in the future" do
75
- FnordMetric::Metric.new({}).send(:cache_this?, Time.now.to_i+60).should be_false
76
- end
77
-
78
- it "should never cache value_at(time) where time is now" do
79
- FnordMetric::Metric.new({}).send(:cache_this?, Time.now.to_i).should be_false
80
- end
81
-
82
- it "should always cache value_at(time) where time is in the past" do
83
- FnordMetric::Metric.new({}).send(:cache_this?, Time.now.to_i-60).should be_true
84
- end
85
-
86
- it "should never cache value_at(range) where range is completely in the future" do
87
- range = ((Time.now.to_i+60)..(Time.now.to_i+120))
88
- FnordMetric::Metric.new({}).send(:cache_this?, range).should be_false
89
- end
90
-
91
- it "should never cache value_at(range) where range is partially in the future" do
92
- range = ((Time.now.to_i-60)..(Time.now.to_i+120))
93
- FnordMetric::Metric.new({}).send(:cache_this?, range).should be_false
94
- end
95
-
96
- it "should never cache value_at(range) where range ends now" do
97
- range = ((Time.now.to_i-60)..Time.now.to_i)
98
- FnordMetric::Metric.new({}).send(:cache_this?, range).should be_false
99
- end
100
-
101
- it "should always cache value_at(range) where range is completely in the past" do
102
- range = ((Time.now.to_i-120)..(Time.now.to_i-60))
103
- FnordMetric::Metric.new({}).send(:cache_this?, range).should be_true
104
- end
105
-
106
- it "should generate a cache key for a time" do
107
- time = Time.now.to_i - 120
108
- metric = FnordMetric::Metric.new(:name => "my_foobar_metric")
109
- metric.send(:cache_key, time).should == "my_foobar_metric|t#{time.to_i}"
110
- end
111
-
112
- it "should generate a cache key for a range" do
113
- range = ((Time.now.to_i-120)..(Time.now.to_i-60))
114
- metric = FnordMetric::Metric.new(:name => "my_foobar_metric")
115
- metric.send(:cache_key, range).should == "my_foobar_metric|r#{range.first.to_i}-#{range.last.to_i}"
116
- end
117
-
118
- end
@@ -1,87 +0,0 @@
1
- require ::File.expand_path('../spec_helper.rb', __FILE__)
2
-
3
- describe FnordMetric::Report do
4
-
5
- describe "Car Report" do
6
-
7
- before(:each) do
8
- FnordMetric.reset_metrics
9
- FnordMetric::Event.destroy_all
10
- build_car_report_for_test!
11
- sleep 1
12
- end
13
-
14
- it "should build the car report" do
15
- report = FnordMetric.report(:range => (3.days.ago..Time.now))
16
- report.should be_a(FnordMetric::Report)
17
- report.metrics.length.should == 4
18
- end
19
-
20
- it "should return a metrics object for each defined metric" do
21
- report = FnordMetric.report(:range => (3.days.ago..Time.now))
22
- report.colors_total.should be_a(FnordMetric::Metric)
23
- report.cars_total.should be_a(FnordMetric::Metric)
24
- report.average_speed.should be_a(FnordMetric::Metric)
25
- report.passengers_total.should be_a(FnordMetric::Metric)
26
- end
27
-
28
- it "should have the right total/current values" do
29
- report = FnordMetric.report(:range => (3.days.ago..Time.now))
30
- #report.colors_total.current.should == 3 # FIXME ~paul
31
- report.cars_total.current.should == 7
32
- #report.average_speed.current.should == 113.6 # FIXME ~paul
33
- report.passengers_total.current.should == 16
34
- end
35
-
36
- end
37
-
38
- describe "Metric Types" do
39
-
40
- before(:each) do
41
- FnordMetric.reset_metrics
42
- FnordMetric::Event.destroy_all
43
- end
44
-
45
- it "should create a sum-metric if the sum-option is provided" do
46
- FnordMetric.metric(:testmetric, :sum => :field_name)
47
- report = FnordMetric.report(:range => (3.days.ago..Time.now))
48
- report.testmetric.should be_a(FnordMetric::SumMetric)
49
- end
50
-
51
- it "should create avg-metric if the avg-option is provided" do
52
- FnordMetric.metric(:testmetric, :average => :field_name)
53
- report = FnordMetric.report(:range => (3.days.ago..Time.now))
54
- report.testmetric.should be_a(FnordMetric::AverageMetric)
55
- end
56
-
57
- it "should create a count-metric if the count-option is provided" do
58
- FnordMetric.metric(:testmetric, :count => true)
59
- report = FnordMetric.report(:range => (3.days.ago..Time.now))
60
- report.testmetric.should be_a(FnordMetric::CountMetric)
61
- end
62
-
63
- it "should create a sum-metric if the sum-option is provided" do
64
- FnordMetric.metric(:testmetric, :combine => :lambda)
65
- report = FnordMetric.report(:range => (3.days.ago..Time.now))
66
- report.testmetric.should be_a(FnordMetric::CombineMetric)
67
- end
68
-
69
- end
70
-
71
- private
72
-
73
- def build_car_report_for_test!
74
- FnordMetric.metric(:colors_total, :count => true, :unique => :color, :types => ['car_seen'])
75
- FnordMetric.metric(:cars_total, :count => true, :types => ['car_seen'])
76
- FnordMetric.metric(:passengers_total, :sum => :passengers, :types => ['car_seen'])
77
- FnordMetric.metric(:average_speed, :average => :speed, :types => ['car_seen'])
78
- FnordMetric.track('car_seen', :color => "red", :speed => 130, :passengers => 2)
79
- FnordMetric.track('car_seen', :color => "pink", :speed => 150, :passengers => 1)
80
- FnordMetric.track('car_seen', :color => "red", :speed => 65, :passengers => 4)
81
- FnordMetric.track('car_seen', :color => "blue", :speed => 100, :passengers => 2)
82
- FnordMetric.track('car_seen', :color => "red", :speed => 123, :passengers => 2)
83
- FnordMetric.track('car_seen', :color => "blue", :speed => 130, :passengers => 3)
84
- FnordMetric.track('car_seen', :color => "red", :speed => 142, :passengers => 2)
85
- end
86
-
87
- end