simple_metric 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0f6f75cb8943bae8a9d877c695a1c4f3eda18ac9
4
- data.tar.gz: be811fb88b4a172592f053c057ad51b0e98e8995
3
+ metadata.gz: e62345627aa093f653d23f6176846c9ca9fd1422
4
+ data.tar.gz: 39758f3e78dc1b576ffee430ac15e829a92836f0
5
5
  SHA512:
6
- metadata.gz: f2bf88aca4fefa0147b49a5f62c589669ebdafd7b1e629b7fa87c86ac9bfc84c1714284d6e15ed608098ab41536fafdabfd7d9c336c7b8583edfdd4615fcc1be
7
- data.tar.gz: 157b0a294b8c42b13f171ea5c0318a077aba555cdfc0cc5999fd76ac5ae4670ac6fdb10418bda13d19035010f5cd3c0d52edd8a22404b3ab156cf5ce246e39e6
6
+ metadata.gz: 2c2b6899e9413f53a386536f11122d09c62dd8a127d7c357a1fda5fdf6244899048c4c5cc60d7c8a0a2447795de6dbb2cd9686206eb18bd94fc74ac9c5b3b481
7
+ data.tar.gz: f08871d0a55002806076f457cb0edabb5b2de0c40ea8a06ec0bf67f360ee8c5a7f482da2ee1db0acffd380c32c13bdcf00c918ecd8018c9c17fdb04bca8b33e1
data/lib/simple_metric.rb CHANGED
@@ -1,13 +1,14 @@
1
1
  require "simple_metric/version"
2
2
  require "ostruct"
3
+ require 'spliner'
3
4
 
4
5
  module SimpleMetric
5
- module Helpers
6
- module Rails
7
- class Engine < ::Rails::Engine
8
- end
6
+ module Rails
7
+ class Engine < ::Rails::Engine
9
8
  end
9
+ end
10
10
 
11
+ module Helpers
11
12
 
12
13
  # simple_metric_graph([[:metric_key, :title], [:metric_key_2, :title_2]])
13
14
  # OR
@@ -30,31 +31,8 @@ module SimpleMetric
30
31
  metric
31
32
  end.compact
32
33
 
33
- # values[date][metric_id]
34
- values = {}
35
-
36
- metrics.each do |metric|
37
- metric.data_points.each do |point|
38
- values[point.date.strftime("%Y-%m-%d %H:%M")] ||= {}
39
- values[point.date.strftime("%Y-%m-%d %H:%M")][metric.id] = point.value
40
- end
41
- end
42
-
43
- dates = values.keys.sort
34
+ dates = metrics.map(&:data_set_object).map(&:data_points).flatten.map(&:x).uniq.sort.map { |x| Time.at(x) }
44
35
 
45
- get_value = lambda do |date, metric_id|
46
- value = values[date][metric_id]
47
-
48
- if value.blank?
49
- if dates.first == date
50
- value = nil
51
- else
52
- value = get_value.call(dates[dates.index(date) - 1], metric_id)
53
- end
54
- end
55
-
56
- value
57
- end
58
36
 
59
37
  content_tag :div do
60
38
  concat content_tag(:div, nil, :id => "metric_graph_#{metrics.map(&:id).join("_")}", :style => "width: 100%", :class => "dygraph_container")
@@ -68,7 +46,7 @@ module SimpleMetric
68
46
 
69
47
  // CSV or path to a CSV file.
70
48
  "Date,#{metrics.map{ |m| titles[m.id] }.join(',')}\\n" +
71
- "#{dates.map { |date| [date, metrics.map { |m| get_value.call(date, m.id) }].flatten.join(", ") + "\\n" }.join("")}"
49
+ "#{dates.map { |date| [date.strftime("%Y-%m-%d %H:%M"), metrics.map { |m| m.get_value(date) }].flatten.join(", ") + "\\n" }.join("")}"
72
50
 
73
51
  );
74
52
 
@@ -79,6 +57,27 @@ module SimpleMetric
79
57
  end
80
58
  end
81
59
 
60
+ class DataSet
61
+ attr_reader :data_points
62
+
63
+ def initialize(data_points)
64
+ @data_points = data_points.sort_by { |point| point.x }
65
+ @spliner = Spliner::Spliner.new(@data_points.map(&:x), @data_points.map(&:y))
66
+ end
67
+
68
+ def get_value(x)
69
+ @spliner[x.to_f]
70
+ end
71
+ end
72
+
73
+ class DataPoint
74
+ attr_reader :x, :y
75
+
76
+ def initialize(x, y)
77
+ @x, @y = x.to_f, y.to_f
78
+ end
79
+ end
80
+
82
81
  class Metric < ActiveRecord::Base
83
82
  serialize :data_set
84
83
  validates :key, :presence => true, :uniqueness => true
@@ -97,17 +96,22 @@ module SimpleMetric
97
96
  save!
98
97
  end
99
98
 
100
- class DataPoint < OpenStruct
99
+ def get_value(date)
100
+ @data_set_object ||= data_set_object
101
+
102
+ @data_set_object.get_value(date.to_f)
101
103
  end
102
104
 
103
- def data_points
105
+ def data_set_object
104
106
  if data_set.present?
105
- data_set.map { |row| DataPoint.new({ :date => row[0], :value => row[1] }) }
107
+ DataSet.new(data_points)
106
108
  end
107
109
  end
108
110
 
109
- def title
110
- self[:title] || "Metric ##{id}"
111
+ def data_points
112
+ if data_set.present?
113
+ data_set.map { |row| DataPoint.new(row[0], row[1]) }
114
+ end
111
115
  end
112
116
  end
113
117
  end
@@ -1,5 +1,5 @@
1
1
  module Simple
2
2
  module Metric
3
- VERSION = "0.0.1"
3
+ VERSION = "0.0.2"
4
4
  end
5
5
  end
@@ -20,6 +20,7 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_dependency "railties", ">= 3.1"
22
22
  spec.add_dependency "activesupport", ">= 3.1"
23
+ spec.add_dependency "spliner", "~> 1.0.5"
23
24
 
24
25
  spec.add_development_dependency "bundler", "~> 1.6"
25
26
  spec.add_development_dependency "rake"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_metric
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sergei O. Udalov
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '3.1'
41
+ - !ruby/object:Gem::Dependency
42
+ name: spliner
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 1.0.5
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 1.0.5
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: bundler
43
57
  requirement: !ruby/object:Gem::Requirement