greek_fire 0.1.2 → 0.2.0

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: 9d67d3e3fd8c3a08d0bd463603bbd8b907e657dd
4
- data.tar.gz: 4be31bbd5abc87d27e80098396177f784907430e
3
+ metadata.gz: c3e6df01ce9446f1f2950a068bf5e621a3528f9f
4
+ data.tar.gz: 4833d2e726973e3b9f39e00801f5cbfc769ffc06
5
5
  SHA512:
6
- metadata.gz: 574b0f82a2d5089f8771958192ba9c1d6a15b57f3ccc090cc4602e381a2aa5dbaaefaa30a016ebcbf6e82cedeaae8c3b8e265540e63db55bb940873e443cf3b2
7
- data.tar.gz: db9a64df19ac2cd2e9b2b3b49a71c916c198d82504f3bb8583813968547cc98daf9ab13245f32e328b0223cf30295c78f48b31ad7e4946b0cf8de20990ccd1e2
6
+ metadata.gz: a758eff60556c5bfc049bd877c3d4ed1578ea3adf5905e4279f7ce3b611ff75cc05175e836fafe6c2de7b30912dfb703a76e2d5937868362d73f2137422df09d
7
+ data.tar.gz: 55aaf64df23449f042630a80e88c5340b487c610ad279b053b25d930a77444e49dc99fdbc9237bfe6411c25567b3ee63b3606f1459c11ee94c2d3b3f5496df93
@@ -2,7 +2,7 @@ module GreekFire
2
2
  class MetricsController < ActionController::Base
3
3
 
4
4
  def index
5
- render GreekFire::Metrics.metrics, layout: false, content_type: 'text/plain'
5
+ render GreekFire::Metric.metrics, layout: false, content_type: 'text/plain'
6
6
  end
7
7
  end
8
8
  end
@@ -4,13 +4,14 @@ module GreekFire
4
4
  class Gauge
5
5
  include ActiveModel::Conversion
6
6
 
7
- attr_reader :name, :labels, :description
7
+ attr_reader :name, :description
8
8
 
9
- def self.register(*args, &block)
10
- GreekFire::Metrics.register(self.new(*args, &block))
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 call
26
- @callable.call.tap do |value|
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
- <%= gauge.name %>{<%= gauge.labels.map {|k,v| "#{k}=\"#{v}\""}.join(", ").html_safe %>} <%= gauge.call %>
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 %>
@@ -1,3 +1,3 @@
1
1
  module GreekFire
2
- VERSION = '0.1.2'
2
+ VERSION = '0.2.0'
3
3
  end
data/lib/greek_fire.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  require "greek_fire/version"
2
2
  require "greek_fire/engine"
3
- require "greek_fire/metrics"
4
3
 
5
4
  module GreekFire
6
5
  # Your code goes here...
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.1.2
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-15 00:00:00.000000000 Z
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
@@ -1,5 +0,0 @@
1
- module GreekFire
2
- class ApplicationController < ActionController::Base
3
- protect_from_forgery with: :exception
4
- end
5
- end
@@ -1,4 +0,0 @@
1
- module GreekFire
2
- module ApplicationHelper
3
- end
4
- end
@@ -1,4 +0,0 @@
1
- module GreekFire
2
- class ApplicationJob < ActiveJob::Base
3
- end
4
- end
@@ -1,6 +0,0 @@
1
- module GreekFire
2
- class ApplicationMailer < ActionMailer::Base
3
- default from: 'from@example.com'
4
- layout 'mailer'
5
- end
6
- end
@@ -1,5 +0,0 @@
1
- module GreekFire
2
- class ApplicationRecord < ActiveRecord::Base
3
- self.abstract_class = true
4
- end
5
- end
@@ -1,15 +0,0 @@
1
-
2
- module GreekFire
3
- class Metrics
4
- @metrics = []
5
- class << self
6
- def register(metric)
7
- @metrics << metric
8
- end
9
-
10
- def metrics
11
- @metrics
12
- end
13
- end
14
- end
15
- end