greek_fire 0.1.2 → 0.2.0
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/app/controllers/greek_fire/metrics_controller.rb +1 -1
- data/app/models/greek_fire/gauge.rb +36 -6
- data/app/models/greek_fire/metric.rb +18 -0
- data/app/views/greek_fire/gauges/_gauge.html.erb +2 -2
- data/app/views/greek_fire/metrics/_labels.html.erb +1 -0
- data/app/views/greek_fire/metrics/_metric.html.erb +1 -0
- data/lib/greek_fire/version.rb +1 -1
- data/lib/greek_fire.rb +0 -1
- metadata +33 -8
- data/app/controllers/greek_fire/application_controller.rb +0 -5
- data/app/helpers/greek_fire/application_helper.rb +0 -4
- data/app/jobs/greek_fire/application_job.rb +0 -4
- data/app/mailers/greek_fire/application_mailer.rb +0 -6
- data/app/models/greek_fire/application_record.rb +0 -5
- data/lib/greek_fire/metrics.rb +0 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c3e6df01ce9446f1f2950a068bf5e621a3528f9f
|
4
|
+
data.tar.gz: 4833d2e726973e3b9f39e00801f5cbfc769ffc06
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a758eff60556c5bfc049bd877c3d4ed1578ea3adf5905e4279f7ce3b611ff75cc05175e836fafe6c2de7b30912dfb703a76e2d5937868362d73f2137422df09d
|
7
|
+
data.tar.gz: 55aaf64df23449f042630a80e88c5340b487c610ad279b053b25d930a77444e49dc99fdbc9237bfe6411c25567b3ee63b3606f1459c11ee94c2d3b3f5496df93
|
@@ -4,13 +4,14 @@ module GreekFire
|
|
4
4
|
class Gauge
|
5
5
|
include ActiveModel::Conversion
|
6
6
|
|
7
|
-
attr_reader :name, :
|
7
|
+
attr_reader :name, :description
|
8
8
|
|
9
|
-
def self.register(
|
10
|
-
GreekFire::
|
9
|
+
def self.register(name, description:nil, labels:nil, &block)
|
10
|
+
GreekFire::Metric.register(self.new(name, description: description, labels: labels, &block))
|
11
11
|
end
|
12
12
|
|
13
|
-
def initialize(name, description, labels, &block)
|
13
|
+
def initialize(name, description:nil, labels:nil, &block)
|
14
|
+
labels ||= {}
|
14
15
|
@name = name
|
15
16
|
|
16
17
|
@labels = {
|
@@ -22,12 +23,41 @@ module GreekFire
|
|
22
23
|
@callable = block
|
23
24
|
end
|
24
25
|
|
25
|
-
def
|
26
|
-
|
26
|
+
def labels
|
27
|
+
label_products(convert_label_values_to_array @labels)
|
28
|
+
end
|
29
|
+
|
30
|
+
def value(labels)
|
31
|
+
@callable.call(labels).tap do |value|
|
27
32
|
unless value.is_a?(Numeric)
|
28
33
|
raise ArgumentError, "Gauge value must be a number: #{value.inspect}"
|
29
34
|
end
|
30
35
|
end
|
31
36
|
end
|
37
|
+
|
38
|
+
def metrics
|
39
|
+
labels.map {|label_set| Metric.new(name, label_set, value(label_set))}
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
def convert_label_values_to_array(labels)
|
44
|
+
labels.inject({}) do |doc, label_name|
|
45
|
+
label_values = label_name[1]
|
46
|
+
label_values = label_values.call if label_values.respond_to? :call
|
47
|
+
label_values = [label_values] unless label_values.is_a?(Enumerable)
|
48
|
+
doc[label_name[0]] = label_values
|
49
|
+
doc
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def label_products(hsh)
|
54
|
+
#http://stackoverflow.com/questions/9786264/all-possible-combinations-from-a-hash-of-arrays-in-ruby
|
55
|
+
#thanks, internet
|
56
|
+
attrs = hsh.values
|
57
|
+
keys = hsh.keys
|
58
|
+
product = attrs[0].product(*attrs[1..-1])
|
59
|
+
product.map{ |p| Hash[keys.zip p] }
|
60
|
+
end
|
61
|
+
|
32
62
|
end
|
33
63
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'active_model'
|
2
|
+
|
3
|
+
module GreekFire
|
4
|
+
class Metric < Struct.new(:name, :labels, :value)
|
5
|
+
include ActiveModel::Conversion
|
6
|
+
|
7
|
+
@registry = []
|
8
|
+
class << self
|
9
|
+
def register(measurer)
|
10
|
+
@registry << measurer
|
11
|
+
end
|
12
|
+
|
13
|
+
def metrics
|
14
|
+
@registry
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -1,3 +1,3 @@
|
|
1
|
-
# HELP <%= gauge.name %> <%= gauge.description %>
|
1
|
+
# HELP <%= gauge.name %> <%= gauge.description.nil? ? "A number." : gauge.description %>
|
2
2
|
# TYPE <%= gauge.name %> gauge
|
3
|
-
<%=
|
3
|
+
<%= render partial: "metric", collection: gauge.metrics %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= labels.map {|k,v| "#{k}=\"#{v}\""}.join(", ").html_safe %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= metric.name %>{<%= render partial: "labels", locals: {labels: metric.labels } %>} <%= metric.value %>
|
data/lib/greek_fire/version.rb
CHANGED
data/lib/greek_fire.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: greek_fire
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- cconstantine
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-03-
|
11
|
+
date: 2017-03-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec-rails
|
@@ -24,6 +24,34 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec-collection_matchers
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec-its
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
27
55
|
- !ruby/object:Gem::Dependency
|
28
56
|
name: rails
|
29
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -51,18 +79,15 @@ files:
|
|
51
79
|
- app/assets/config/greek_fire_manifest.js
|
52
80
|
- app/assets/javascripts/greek_fire/application.js
|
53
81
|
- app/assets/stylesheets/greek_fire/application.css
|
54
|
-
- app/controllers/greek_fire/application_controller.rb
|
55
82
|
- app/controllers/greek_fire/metrics_controller.rb
|
56
|
-
- app/helpers/greek_fire/application_helper.rb
|
57
|
-
- app/jobs/greek_fire/application_job.rb
|
58
|
-
- app/mailers/greek_fire/application_mailer.rb
|
59
|
-
- app/models/greek_fire/application_record.rb
|
60
83
|
- app/models/greek_fire/gauge.rb
|
84
|
+
- app/models/greek_fire/metric.rb
|
61
85
|
- app/views/greek_fire/gauges/_gauge.html.erb
|
86
|
+
- app/views/greek_fire/metrics/_labels.html.erb
|
87
|
+
- app/views/greek_fire/metrics/_metric.html.erb
|
62
88
|
- config/routes.rb
|
63
89
|
- lib/greek_fire.rb
|
64
90
|
- lib/greek_fire/engine.rb
|
65
|
-
- lib/greek_fire/metrics.rb
|
66
91
|
- lib/greek_fire/version.rb
|
67
92
|
- lib/tasks/greek_fire_tasks.rake
|
68
93
|
homepage: https://google.com
|