simple_metric 0.0.1 → 0.0.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.
- checksums.yaml +4 -4
- data/lib/simple_metric.rb +38 -34
- data/lib/simple_metric/version.rb +1 -1
- data/simple-metric.gemspec +1 -0
- metadata +15 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e62345627aa093f653d23f6176846c9ca9fd1422
|
4
|
+
data.tar.gz: 39758f3e78dc1b576ffee430ac15e829a92836f0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
6
|
-
|
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
|
-
|
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
|
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
|
-
|
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
|
105
|
+
def data_set_object
|
104
106
|
if data_set.present?
|
105
|
-
|
107
|
+
DataSet.new(data_points)
|
106
108
|
end
|
107
109
|
end
|
108
110
|
|
109
|
-
def
|
110
|
-
|
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
|
data/simple-metric.gemspec
CHANGED
@@ -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.
|
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
|