spectator-rb 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,64 @@
1
+ require 'spectator/atomic_number'
2
+ require 'spectator/clock'
3
+
4
+ module Spectator
5
+ # The class Timer is intended to track a large number of
6
+ # short running events. Example would be something like
7
+ # an http request. Though "short running" is a bit subjective
8
+ # the assumption is that it should be under a minute.
9
+ class Timer
10
+ def initialize(id, clock = SystemClock.new)
11
+ @id = id
12
+ @clock = clock
13
+
14
+ @count = AtomicNumber.new(0)
15
+ @total_time = AtomicNumber.new(0)
16
+ @total_sq = AtomicNumber.new(0)
17
+ @max = AtomicNumber.new(Float::NAN)
18
+ end
19
+
20
+ # Update the statistics kept by this timer. If the amount of nanoseconds
21
+ # passed is negative, the value will be ignored.
22
+ def record(nanos)
23
+ return if nanos < 0
24
+ @count.add_and_get(1)
25
+ @total_time.add_and_get(nanos)
26
+ @total_sq.add_and_get(nanos * nanos)
27
+ @max.max(nanos)
28
+ end
29
+
30
+ # Record the time it takes to execute the given block
31
+ #
32
+ def time
33
+ start = @clock.monotonic_time
34
+ yield
35
+ elapsed = @clock.monotonic_time - start
36
+ record(elapsed)
37
+ end
38
+
39
+ # Get the number of events recorded
40
+ def count
41
+ @count.get
42
+ end
43
+
44
+ # Get the total time of events recorded in nanoseconds
45
+ def total_time
46
+ @total_time.get
47
+ end
48
+
49
+ # Measure this timer. It returns the count, totalTime in seconds,
50
+ # max in seconds, and totalOfSquares (normalized) to seconds to seconds
51
+ def measure
52
+ total_seconds = @total_time.get_and_set(0) / 1e9
53
+ max_seconds = @max.get_and_set(Float::NAN) / 1e9
54
+ tot_sq_seconds = @total_sq.get_and_set(0) / 1e18
55
+
56
+ cnt = Measure.new(@id.with_stat('count'), @count.get_and_set(0))
57
+ tot = Measure.new(@id.with_stat('totalTime'), total_seconds)
58
+ tot_sq = Measure.new(@id.with_stat('totalOfSquares'), tot_sq_seconds)
59
+ mx = Measure.new(@id.with_stat('max'), max_seconds)
60
+
61
+ [cnt, tot, tot_sq, mx]
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,3 @@
1
+ module Spectator
2
+ VERSION = '0.1.0'.freeze
3
+ end
data/spectator.gemspec ADDED
@@ -0,0 +1,30 @@
1
+
2
+ lib = File.expand_path('lib', __dir__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'spectator/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'spectator-rb'
8
+ spec.version = Spectator::VERSION
9
+ spec.authors = ['Daniel Muino']
10
+ spec.email = ['dmuino@netflix.com']
11
+ spec.licenses = ['Apache-2.0']
12
+
13
+ spec.summary = 'Simple library for instrumenting code to record ' \
14
+ 'dimensional time series.'
15
+ spec.description = 'Library for instrumenting ruby applications, ' \
16
+ 'sending metrics to an Atlas aggregator service.'
17
+ spec.homepage = 'https://github.com/Netflix/spectator-rb'
18
+
19
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
20
+ f.match(%r{^(test|spec|features)/})
21
+ end
22
+ spec.bindir = 'exe'
23
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
24
+ spec.require_paths = ['lib']
25
+
26
+ spec.add_development_dependency 'bundler', '~> 1.16'
27
+ spec.add_development_dependency 'minitest', '~> 5.0'
28
+ spec.add_development_dependency 'rake', '~> 10.0'
29
+ spec.add_development_dependency 'rubocop', '~> 0.55'
30
+ end
metadata ADDED
@@ -0,0 +1,126 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: spectator-rb
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Daniel Muino
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2018-04-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.16'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.16'
27
+ - !ruby/object:Gem::Dependency
28
+ name: minitest
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '5.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '5.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '10.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '10.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rubocop
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.55'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.55'
69
+ description: Library for instrumenting ruby applications, sending metrics to an Atlas
70
+ aggregator service.
71
+ email:
72
+ - dmuino@netflix.com
73
+ executables: []
74
+ extensions: []
75
+ extra_rdoc_files: []
76
+ files:
77
+ - ".gitignore"
78
+ - ".rubocop.yml"
79
+ - ".travis.yml"
80
+ - Gemfile
81
+ - Gemfile.lock
82
+ - LICENSE
83
+ - OSSMETADATA
84
+ - README.md
85
+ - Rakefile
86
+ - bin/console
87
+ - bin/setup
88
+ - buildViaTravis.sh
89
+ - lib/spectator.rb
90
+ - lib/spectator/atomic_number.rb
91
+ - lib/spectator/clock.rb
92
+ - lib/spectator/counter.rb
93
+ - lib/spectator/distribution_summary.rb
94
+ - lib/spectator/gauge.rb
95
+ - lib/spectator/http.rb
96
+ - lib/spectator/measure.rb
97
+ - lib/spectator/meter_id.rb
98
+ - lib/spectator/registry.rb
99
+ - lib/spectator/timer.rb
100
+ - lib/spectator/version.rb
101
+ - spectator.gemspec
102
+ homepage: https://github.com/Netflix/spectator-rb
103
+ licenses:
104
+ - Apache-2.0
105
+ metadata: {}
106
+ post_install_message:
107
+ rdoc_options: []
108
+ require_paths:
109
+ - lib
110
+ required_ruby_version: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - ">="
113
+ - !ruby/object:Gem::Version
114
+ version: '0'
115
+ required_rubygems_version: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ requirements: []
121
+ rubyforge_project:
122
+ rubygems_version: 2.5.2
123
+ signing_key:
124
+ specification_version: 4
125
+ summary: Simple library for instrumenting code to record dimensional time series.
126
+ test_files: []