inst_statsd 2.1.0 → 3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1a9bd14115668f4b354ae740b4ff35cb5b551c09e7a6795986faafb35c379826
4
- data.tar.gz: 4811158906ecebf02185c5ebb4bb67f691e9f61ec3f369903d1cfa502438a554
3
+ metadata.gz: 52813306c6a3409e9abe7f114c58a471afe310eadd722bf555d0bd058144ce06
4
+ data.tar.gz: a899e4395f5cf3340040e500ad7ccdf4ac3f7c0fbcccbb52bb738f35e9f353a1
5
5
  SHA512:
6
- metadata.gz: 8d0c8ac4747069dbe6da16c798044d585fa6a32a871730f41bf80fc5cfd0064ddad967789af655e5b3cbd6138f7c169402e43cc563bd3f0748970820cb3e622b
7
- data.tar.gz: d0a88767195a8febc5e2c002d02ba9dd6da3438a4830f9c97f8fa013b325d8b8ee00835bcaf63ad2299af1f9db8479664ae55ae1e789208e16b6fcca515eb242
6
+ metadata.gz: e81e6b93a69826837fd5d952db4e9d784d3ae9230e72e9a62c6abb21dba6deb248a9baf89690e4d4bad4b0710bfd0dd72d93e5d8463f60c8265dbfbc42ea152c
7
+ data.tar.gz: 718e935a24b5e899c1bd67ea5669bcb0fada8e78a71c6e2b93b43f57b3744354fe732ebe702f2e06fb28ad8a325dbc3a319d99e58916aef593445a5d172607fb
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module InstStatsd
2
4
  class BlockStat
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'benchmark'
2
4
 
3
5
  module InstStatsd
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module InstStatsd
2
4
  class Counter
3
5
  class << self
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "active_support"
2
4
 
3
5
  module InstStatsd
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ module InstStatsd
4
+ # Mix-in methods for supporting DataDog events
5
+ # See https://docs.datadoghq.com/service_management/events/
6
+ module Event
7
+ SUPPORTED_TYPES = %i[
8
+ deploy
9
+ feature_disabled
10
+ feature_enabled
11
+ provision
12
+ refresh
13
+ ].freeze
14
+
15
+ def instance; end
16
+ def data_dog?; end
17
+ def dog_tags; end
18
+
19
+ # This end point allows you to post events to the DatDog event stream.
20
+ #
21
+ # @param [String] title Event title
22
+ # @param [String] text Event text. Supports newlines (+\n+)
23
+ # @param [String, nil] :type Can be "deploy", "feature_disabled",
24
+ # "feature_enabled", "provision", or "refresh"
25
+ # @param [Hash] :tags tags to be added to event. Note that the
26
+ # environment, service, and other data are automatically
27
+ # added as tags for you without specifying them here.
28
+ # @param [Integer, String, nil] :date_happened (nil) Assign a timestamp
29
+ # to the event. Default is now when none
30
+ # @param [String, nil] :priority ('normal') Can be "normal" or "low"
31
+ # @param [String, nil] :alert_type ('info') Can be "error", "warning", "info" or "success".
32
+ #
33
+ # @example Report an event:
34
+ # InstStatsd::Statsd.event(
35
+ # "Quiz API Deploy",
36
+ # "<release> was deployed to Quiz API",
37
+ # tags: {foo: 'bar'},
38
+ # type: 'deploy',
39
+ # alert_type: :success
40
+ # )
41
+ def event(title, text, type: nil, tags: {}, alert_type: nil, priority: nil, date_happened: nil)
42
+ return unless instance && data_dog?
43
+
44
+ instance.event(
45
+ title,
46
+ text,
47
+ {
48
+ alert_type: alert_type,
49
+ priority: priority,
50
+ date_happened: date_happened,
51
+ tags: tags_from_opts(tags, type, dog_tags)
52
+ }.compact
53
+ )
54
+ end
55
+
56
+ private
57
+
58
+ def tags_from_opts(tags, type, dd_tags)
59
+ custom_tags = tags.merge(dd_tags)
60
+ custom_tags[:type] = type if SUPPORTED_TYPES.include? type
61
+ custom_tags.compact
62
+ end
63
+ end
64
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'logger'
2
4
 
3
5
  module InstStatsd
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module InstStatsd
2
4
  class RequestLogger
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module InstStatsd
2
4
  class RequestStat < BlockStat
3
5
  def initialize(name, start, finish, id, payload, statsd=InstStatsd::Statsd)
@@ -18,6 +20,7 @@ module InstStatsd
18
20
  self.short_stat = "request"
19
21
  self.tags[:controller] = controller if controller
20
22
  self.tags[:action] = action if action
23
+ self.tags[:status] = status if status
21
24
  else
22
25
  self.common_key = "request.#{controller}.#{action}" if controller && action
23
26
  end
@@ -46,6 +49,17 @@ module InstStatsd
46
49
  @payload.fetch(:params, {})['action']
47
50
  end
48
51
 
52
+ def status
53
+ status = @payload.fetch(:status, 0)
54
+ # Only return status group to reduce the number of indexed custom metrics (and cost) of datadog
55
+ return '1XX' if status >= 100 and status < 200
56
+ return '2XX' if status >= 200 and status < 300
57
+ return '3XX' if status >= 300 and status < 400
58
+ return '4XX' if status >= 400 and status < 500
59
+ return '5XX' if status >= 500 and status < 600
60
+ nil
61
+ end
62
+
49
63
  def total
50
64
  if (!@finish || !@start)
51
65
  return 0
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module InstStatsd
2
4
  class RequestTracking
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module InstStatsd
2
4
  class SqlTracker
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Proxy class to communicate messages to statsd
2
4
  # Available statsd messages are described in:
3
5
  # https://github.com/etsy/statsd/blob/master/README.md
@@ -22,6 +24,8 @@
22
24
 
23
25
  module InstStatsd
24
26
  module Statsd
27
+ extend InstStatsd::Event
28
+
25
29
  # replace "." in key names with another character to avoid creating spurious sub-folders in graphite
26
30
  def self.escape(str, replacement = '_')
27
31
  str.respond_to?(:gsub) ? str.gsub('.', replacement) : str
@@ -41,7 +45,7 @@ module InstStatsd
41
45
  if self.instance
42
46
  if Array === stat
43
47
  stat.each do |st|
44
- self.#{method}(st, *args, tags: {}, short_stat: nil)
48
+ self.#{method}(st, *args, tags: tags, short_stat: nil)
45
49
  end
46
50
  return
47
51
  end
@@ -53,11 +57,15 @@ module InstStatsd
53
57
  end
54
58
 
55
59
  if data_dog?
60
+ tags ||= {}
56
61
  tags.merge!(dog_tags) if tags.is_a? Hash
57
62
  tags = convert_tags(tags)
58
63
  tags << 'host:' unless self.append_hostname?
59
64
  short_stat ||= stat_name
60
- self.instance.#{method}(short_stat, *args, tags: tags)
65
+ opts = { tags: tags }
66
+ opts[:sample_rate] = args.pop if args.length == 2
67
+ args << opts
68
+ self.instance.#{method}(short_stat, *args)
61
69
  else
62
70
  self.instance.#{method}(stat_name, *args)
63
71
  end
@@ -107,8 +115,9 @@ module InstStatsd
107
115
  @data_dog = true
108
116
  host = statsd_settings[:host] || 'localhost'
109
117
  port = statsd_settings[:port] || 8125
110
- @statsd = Datadog::Statsd.new(host, port)
111
- @statsd.dog_tags = statsd_settings[:dog_tags] || {}
118
+ require 'datadog/statsd'
119
+ @statsd = ::Datadog::Statsd.new(host, port, namespace: statsd_settings[:namespace])
120
+ self.dog_tags.replace(statsd_settings[:dog_tags] || {})
112
121
  @append_hostname = !statsd_settings.key?(:append_hostname) || !!statsd_settings[:append_hostname]
113
122
  elsif statsd_settings && statsd_settings[:host]
114
123
  @statsd = ::Statsd.new(statsd_settings[:host])
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module InstStatsd
4
+ VERSION = "3.0.2"
5
+ end
data/lib/inst_statsd.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'statsd'
2
4
 
3
5
  module InstStatsd
@@ -6,6 +8,7 @@ module InstStatsd
6
8
 
7
9
  class ConfigurationError < StandardError; end
8
10
 
11
+ require 'inst_statsd/event'
9
12
  require 'inst_statsd/statsd'
10
13
  require 'inst_statsd/block_stat'
11
14
  require 'inst_statsd/block_tracking'
@@ -42,12 +45,13 @@ module InstStatsd
42
45
  end
43
46
 
44
47
  def env_settings(env = ENV)
48
+ dog_tags = JSON.parse(env['INST_DOG_TAGS']).to_h if env['INST_DOG_TAGS']
45
49
  config = {
46
50
  host: env.fetch('INST_STATSD_HOST', nil),
47
51
  port: env.fetch('INST_STATSD_PORT', nil),
48
52
  namespace: env.fetch('INST_STATSD_NAMESPACE', nil),
49
53
  append_hostname: env.fetch('INST_STATSD_APPEND_HOSTNAME', nil),
50
- dog_tags: env.fetch('INST_DOG_TAGS', nil)
54
+ dog_tags: dog_tags
51
55
  }
52
56
  config.delete_if { |_k, v| v.nil? }
53
57
  convert_bool(config, :append_hostname)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe InstStatsd::BlockStat do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe InstStatsd::BlockTracking do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe InstStatsd::Counter do
@@ -0,0 +1,159 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe InstStatsd::Event do
6
+ include described_class
7
+
8
+ let(:title) { "Title" }
9
+ let(:text) {"Some text."}
10
+
11
+ let(:instance) { double }
12
+ let(:data_dog?) { true }
13
+ let(:dog_tags) { {} }
14
+ let(:opts) { {} }
15
+
16
+ describe '#event' do
17
+ subject { event(title, text, opts) }
18
+
19
+ context 'with title and text only' do
20
+ let(:opts) { {} }
21
+
22
+ it 'invokes "event" on the instance with title and text' do
23
+ expect(instance).to receive(:event).with(
24
+ title,
25
+ text,
26
+ tags: {}
27
+ )
28
+
29
+ subject
30
+ end
31
+ end
32
+
33
+ context 'with alert_type set' do
34
+ let(:opts) { { alert_type: :error } }
35
+
36
+ it 'invokes "event" on the instance with expected arguments' do
37
+ expect(instance).to receive(:event).with(
38
+ title,
39
+ text,
40
+ alert_type: :error,
41
+ tags: {}
42
+ )
43
+
44
+ subject
45
+ end
46
+ end
47
+
48
+ context 'with priority set' do
49
+ let(:opts) { { priority: :low } }
50
+
51
+ it 'invokes "event" on the instance with expected arguments' do
52
+ expect(instance).to receive(:event).with(
53
+ title,
54
+ text,
55
+ priority: :low,
56
+ tags: {}
57
+ )
58
+
59
+ subject
60
+ end
61
+ end
62
+
63
+ context 'with date_happened set' do
64
+ let(:opts) { { date_happened: date_happened } }
65
+ let(:date_happened) { Time.now.to_i }
66
+
67
+ it 'invokes "event" on the instance with expected arguments' do
68
+ expect(instance).to receive(:event).with(
69
+ title,
70
+ text,
71
+ date_happened: date_happened,
72
+ tags: {}
73
+ )
74
+
75
+ subject
76
+ end
77
+ end
78
+
79
+ context 'with an invalid type set' do
80
+ let(:opts) { { type: :banana } }
81
+
82
+ it 'does not sent the invalid aggregation key' do
83
+ expect(instance).to receive(:event).with(
84
+ title,
85
+ text,
86
+ tags: {}
87
+ )
88
+
89
+ subject
90
+ end
91
+ end
92
+
93
+ context 'with a valid type set' do
94
+ let(:opts) { { type: :deploy } }
95
+
96
+ it 'sets the valid aggregation key' do
97
+ expect(instance).to receive(:event).with(
98
+ title,
99
+ text,
100
+ tags: {type: :deploy}
101
+ )
102
+
103
+ subject
104
+ end
105
+ end
106
+
107
+ context 'with custom tags' do
108
+ let(:opts) { { tags: { project: 'cool-project'} } }
109
+
110
+ it 'invokes "event" on the instance with expected arguments' do
111
+ expect(instance).to receive(:event).with(
112
+ title,
113
+ text,
114
+ tags: { project: 'cool-project' }
115
+ )
116
+
117
+ subject
118
+ end
119
+ end
120
+
121
+ context 'with all opts set' do
122
+ let(:date_happened) { Time.now.to_i }
123
+ let(:opts) do
124
+ {
125
+ type: :deploy,
126
+ alert_type: :warning,
127
+ priority: :low,
128
+ date_happened: date_happened,
129
+ tags: { foo: 'bar' }
130
+ }
131
+ end
132
+
133
+ it 'sets all arguments' do
134
+ expect(instance).to receive(:event).with(
135
+ title,
136
+ text,
137
+ alert_type: :warning,
138
+ priority: :low,
139
+ date_happened: date_happened,
140
+ tags: { foo: 'bar', type: :deploy }
141
+ )
142
+
143
+ subject
144
+ end
145
+ end
146
+
147
+ context 'when the instance is not DataDog' do
148
+ let(:data_dog?) { false }
149
+
150
+ it { is_expected.to eq nil }
151
+
152
+ it 'does not invoke "event" on the instance' do
153
+ expect(instance).not_to receive(:event)
154
+
155
+ subject
156
+ end
157
+ end
158
+ end
159
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe InstStatsd do
@@ -121,10 +123,10 @@ describe InstStatsd do
121
123
 
122
124
  it 'builds settings hash with dog environment vars' do
123
125
  env = {
124
- 'INST_DOG_TAGS' => {app: 'canvas', env: 'prod'},
126
+ 'INST_DOG_TAGS' => '{"app": "canvas", "env": "prod"}',
125
127
  }
126
128
  expected = {
127
- dog_tags: {app: 'canvas', env: 'prod'},
129
+ dog_tags: {"app" => "canvas", "env" => "prod"},
128
130
  }
129
131
  expect(InstStatsd.env_settings(env)).to eq(expected)
130
132
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe InstStatsd::NullLogger do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'logger'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
 
@@ -68,6 +70,22 @@ describe InstStatsd::RequestStat do
68
70
  end
69
71
  end
70
72
 
73
+ describe '#status' do
74
+ it 'should return nil if status is not defined' do
75
+ rs = create_subject
76
+ expect(rs.status).to eq nil
77
+ end
78
+
79
+ it 'should return HTTP status group if present' do
80
+ expect(create_subject({status: 200}).status).to eq '2XX'
81
+ expect(create_subject({status: 201}).status).to eq '2XX'
82
+ expect(create_subject({status: 302}).status).to eq '3XX'
83
+ expect(create_subject({status: 400}).status).to eq '4XX'
84
+ expect(create_subject({status: 404}).status).to eq '4XX'
85
+ expect(create_subject({status: 503}).status).to eq '5XX'
86
+ end
87
+ end
88
+
71
89
  describe '#total' do
72
90
  it 'correctly calculates milliseconds from start, finish' do
73
91
  rs = create_subject({params: {}})
@@ -111,10 +129,11 @@ describe InstStatsd::RequestStat do
111
129
  params: {
112
130
  'controller' => 'foo',
113
131
  'action' => 'index'
114
- }
132
+ },
133
+ status: 200
115
134
  }
116
135
  rs = create_subject(payload, statsd)
117
- expect(statsd).to receive(:timing).with('request.total', 1000, {short_stat: 'request.total', tags: {action: "index", controller: "foo"}} )
136
+ expect(statsd).to receive(:timing).with('request.total', 1000, {short_stat: 'request.total', tags: {action: "index", controller: "foo", status: '2XX'}} )
118
137
  rs.report
119
138
  end
120
139
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe InstStatsd::RequestTracking do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  module InstStatsd
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe InstStatsd::Statsd do
@@ -8,6 +10,10 @@ describe InstStatsd::Statsd do
8
10
  InstStatsd::Statsd.reset_instance
9
11
  end
10
12
 
13
+ it 'includes the events module' do
14
+ expect(described_class).to respond_to :event
15
+ end
16
+
11
17
  it 'appends the hostname to stat names by default' do
12
18
  allow(InstStatsd::Statsd).to receive(:hostname).and_return('testhost')
13
19
  statsd = double
@@ -24,8 +30,11 @@ describe InstStatsd::Statsd do
24
30
  it 'sending tags should not break statsd' do
25
31
  default_tags = {app: 'canvas', env: 'prod'}
26
32
  short_stat = 'test2'
33
+ env = {
34
+ 'INST_DOG_TAGS' => '{"app": "canvas", "env": "prod"}',
35
+ }
36
+ InstStatsd.env_settings(env)
27
37
  allow(InstStatsd::Statsd).to receive(:hostname).and_return('testhost')
28
- allow(InstStatsd::Statsd).to receive(:dog_tags).and_return(default_tags)
29
38
  allow(InstStatsd::Statsd).to receive(:short_stat).and_return(short_stat)
30
39
  statsd = double
31
40
  allow(InstStatsd::Statsd).to receive(:instance).and_return(statsd)
@@ -53,7 +62,7 @@ describe InstStatsd::Statsd do
53
62
  expect(statsd).to receive(method).with(short_stat, 'test', tags: converted_tags)
54
63
  InstStatsd::Statsd.send(method, 'test.name', 'test', short_stat: short_stat)
55
64
  end
56
- expect(statsd).to receive('timing').with(short_stat, anything, anything, tags: converted_tags)
65
+ expect(statsd).to receive('timing').with(short_stat, anything, sample_rate: anything, tags: converted_tags)
57
66
  expect(InstStatsd::Statsd.time('test.name', short_stat: short_stat) {'test'}).to eq 'test'
58
67
  end
59
68
 
@@ -69,7 +78,7 @@ describe InstStatsd::Statsd do
69
78
  expect(statsd).to receive(method).with('test.name', 'test', tags: converted_tags)
70
79
  InstStatsd::Statsd.send(method, 'test.name', 'test')
71
80
  end
72
- expect(statsd).to receive('timing').with('test.name', anything, anything, tags: converted_tags)
81
+ expect(statsd).to receive('timing').with('test.name', anything, sample_rate: anything, tags: converted_tags)
73
82
  expect(InstStatsd::Statsd.time('test.name') {'test'}).to eq 'test'
74
83
  end
75
84
 
@@ -86,6 +95,24 @@ describe InstStatsd::Statsd do
86
95
  expect(InstStatsd::Statsd.time('test.name') { 'test' }).to eq 'test'
87
96
  end
88
97
 
98
+ context 'with datadog enabled' do
99
+ it 'handles being called with an array of stat names' do
100
+ converted_tags = %w[tag:value host:]
101
+ statsd = double
102
+ allow(InstStatsd::Statsd).to receive(:instance).and_return(statsd)
103
+ allow(InstStatsd::Statsd).to receive(:append_hostname?).and_return(false)
104
+ allow(InstStatsd::Statsd).to receive(:data_dog?).and_return(true)
105
+ METHODS.each do |method|
106
+ expect(statsd).to receive(method).once.with('test.one', 'value', tags: converted_tags)
107
+ expect(statsd).to receive(method).once.with('test.two', 'value', tags: converted_tags)
108
+ InstStatsd::Statsd.send(method, %w[test.one test.two], 'value', tags: {tag: 'value'}, short_stat: 'short_stat')
109
+ end
110
+ expect(statsd).to receive('timing').once.with('test.one', anything, tags: converted_tags, sample_rate: anything)
111
+ expect(statsd).to receive('timing').once.with('test.two', anything, tags: converted_tags, sample_rate: anything)
112
+ expect(InstStatsd::Statsd.time(%w[test.one test.two], tags: {tag: 'value'}, short_stat: 'short_stat') { 'test' }).to eq 'test'
113
+ end
114
+ end
115
+
89
116
  it "ignores all calls if statsd isn't enabled" do
90
117
  allow(InstStatsd::Statsd).to receive(:instance).and_return(nil)
91
118
  METHODS.each do |method|
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'inst_statsd'
2
4
 
3
5
  RSpec.configure do |config|
data/test.sh CHANGED
@@ -2,9 +2,9 @@
2
2
  result=0
3
3
 
4
4
  echo "################ inst_statsd ################"
5
- echo "################ Running tests against Rails 3 ################"
6
- bundle check || bundle install
7
- bundle exec rspec spec
5
+ echo "################ Running tests ################"
6
+ bundle exec appraisal install
7
+ bundle exec appraisal rspec spec
8
8
  let result=$result+$?
9
9
 
10
10
  if [ $result -eq 0 ]; then
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: inst_statsd
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 3.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Cloward
@@ -9,22 +9,34 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2019-02-20 00:00:00.000000000 Z
12
+ date: 2023-08-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: dogstatsd-ruby
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - "~>"
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: '4.2'
21
+ - - "<"
22
+ - !ruby/object:Gem::Version
23
+ version: '6.0'
24
+ - - "!="
19
25
  - !ruby/object:Gem::Version
20
- version: '3.3'
26
+ version: 5.0.0
21
27
  type: :runtime
22
28
  prerelease: false
23
29
  version_requirements: !ruby/object:Gem::Requirement
24
30
  requirements:
25
- - - "~>"
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '4.2'
34
+ - - "<"
35
+ - !ruby/object:Gem::Version
36
+ version: '6.0'
37
+ - - "!="
26
38
  - !ruby/object:Gem::Version
27
- version: '3.3'
39
+ version: 5.0.0
28
40
  - !ruby/object:Gem::Dependency
29
41
  name: statsd-ruby
30
42
  requirement: !ruby/object:Gem::Requirement
@@ -43,28 +55,42 @@ dependencies:
43
55
  name: aroi
44
56
  requirement: !ruby/object:Gem::Requirement
45
57
  requirements:
46
- - - "~>"
58
+ - - ">="
47
59
  - !ruby/object:Gem::Version
48
- version: 0.0.4
60
+ version: 0.0.7
49
61
  type: :runtime
50
62
  prerelease: false
51
63
  version_requirements: !ruby/object:Gem::Requirement
52
64
  requirements:
53
- - - "~>"
65
+ - - ">="
54
66
  - !ruby/object:Gem::Version
55
- version: 0.0.4
67
+ version: 0.0.7
68
+ - !ruby/object:Gem::Dependency
69
+ name: appraisal
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ type: :development
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
56
82
  - !ruby/object:Gem::Dependency
57
83
  name: bundler
58
84
  requirement: !ruby/object:Gem::Requirement
59
85
  requirements:
60
- - - "~>"
86
+ - - ">="
61
87
  - !ruby/object:Gem::Version
62
88
  version: '1.5'
63
89
  type: :development
64
90
  prerelease: false
65
91
  version_requirements: !ruby/object:Gem::Requirement
66
92
  requirements:
67
- - - "~>"
93
+ - - ">="
68
94
  - !ruby/object:Gem::Version
69
95
  version: '1.5'
70
96
  - !ruby/object:Gem::Dependency
@@ -122,15 +148,18 @@ files:
122
148
  - lib/inst_statsd/block_tracking.rb
123
149
  - lib/inst_statsd/counter.rb
124
150
  - lib/inst_statsd/default_tracking.rb
151
+ - lib/inst_statsd/event.rb
125
152
  - lib/inst_statsd/null_logger.rb
126
153
  - lib/inst_statsd/request_logger.rb
127
154
  - lib/inst_statsd/request_stat.rb
128
155
  - lib/inst_statsd/request_tracking.rb
129
156
  - lib/inst_statsd/sql_tracker.rb
130
157
  - lib/inst_statsd/statsd.rb
158
+ - lib/inst_statsd/version.rb
131
159
  - spec/inst_statsd/block_stat_spec.rb
132
160
  - spec/inst_statsd/block_tracking_spec.rb
133
161
  - spec/inst_statsd/counter_spec.rb
162
+ - spec/inst_statsd/event_spec.rb
134
163
  - spec/inst_statsd/inst_statsd_spec.rb
135
164
  - spec/inst_statsd/null_logger_spec.rb
136
165
  - spec/inst_statsd/request_logger_spec.rb
@@ -153,15 +182,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
153
182
  requirements:
154
183
  - - ">="
155
184
  - !ruby/object:Gem::Version
156
- version: '2.3'
185
+ version: '2.7'
157
186
  required_rubygems_version: !ruby/object:Gem::Requirement
158
187
  requirements:
159
188
  - - ">="
160
189
  - !ruby/object:Gem::Version
161
190
  version: '0'
162
191
  requirements: []
163
- rubyforge_project:
164
- rubygems_version: 2.7.6
192
+ rubygems_version: 3.2.6
165
193
  signing_key:
166
194
  specification_version: 4
167
195
  summary: Statsd for Instructure
@@ -169,6 +197,7 @@ test_files:
169
197
  - spec/inst_statsd/block_stat_spec.rb
170
198
  - spec/inst_statsd/block_tracking_spec.rb
171
199
  - spec/inst_statsd/counter_spec.rb
200
+ - spec/inst_statsd/event_spec.rb
172
201
  - spec/inst_statsd/inst_statsd_spec.rb
173
202
  - spec/inst_statsd/null_logger_spec.rb
174
203
  - spec/inst_statsd/request_logger_spec.rb