codemonitor 0.6.6 → 0.7.1

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: 66a75b8e6b4c58d6c59f98c5953c4d6638fbfc478ecef138f5a33af21c37b6e5
4
- data.tar.gz: 227b8c303da35666afb239110761ed5de74866b690bc2c9b863c4fbee89c8149
3
+ metadata.gz: 3827599eb7fa2efbf7519ac50cab319cbb558ccd8c8919bbbc655699c12c10e8
4
+ data.tar.gz: 574ea905f2ab2643a83e807a9109a2d3761e2b89e6d657aad9e9c7c4d0cca4be
5
5
  SHA512:
6
- metadata.gz: dbf1927531abbfff9cc138efa66377591cf6e447c1092f715d2f1e555b2d2e2f56258f77aef5af4faf557ce3a7e82a3daeae7ed4fc713d1b8013f4a1142fcadb
7
- data.tar.gz: 35983bc1a143f0b31ca64c28819cf9718e7469a7d6df212ca8fd6b680fb405d2a75575b02cb8d8903a6ea565e10ddfb307746b2f5a790bdbc280f76db0f58359
6
+ metadata.gz: 1dbcd9264909f8a556b97752c1c600bca72a072799855cd897485d1acbde01ece7277a17662db12056d7ff37230c100d47a4dcdfb99efe1e24de35de885cd7c2
7
+ data.tar.gz: 63bd28af1b58d502e4a1f767050b3062d37994e5bdf90a4b0592162286ea9eebd7b843018f9d4978910551f829cffd70e07038a3d04d65e562fdef4874e2ea66
data/.tool-versions ADDED
@@ -0,0 +1 @@
1
+ ruby 3.3.5
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- codemonitor (0.6.6)
4
+ codemonitor (0.7.0)
5
5
  dogapi (~> 1.45)
6
6
  octokit (~> 9.0)
7
7
 
@@ -15,16 +15,16 @@ GEM
15
15
  diff-lcs (1.3)
16
16
  dogapi (1.45.0)
17
17
  multi_json
18
- faraday (2.12.2)
18
+ faraday (2.13.4)
19
19
  faraday-net_http (>= 2.0, < 3.5)
20
20
  json
21
21
  logger
22
- faraday-net_http (3.4.0)
22
+ faraday-net_http (3.4.1)
23
23
  net-http (>= 0.5.0)
24
- json (2.9.1)
25
- logger (1.6.5)
24
+ json (2.13.2)
25
+ logger (1.7.0)
26
26
  method_source (1.0.0)
27
- multi_json (1.15.0)
27
+ multi_json (1.17.0)
28
28
  net-http (0.6.0)
29
29
  uri
30
30
  octokit (9.2.0)
@@ -36,7 +36,7 @@ GEM
36
36
  pry (0.13.1)
37
37
  coderay (~> 1.1)
38
38
  method_source (~> 1.0)
39
- public_suffix (6.0.1)
39
+ public_suffix (6.0.2)
40
40
  rainbow (3.0.0)
41
41
  rake (13.0.3)
42
42
  regexp_parser (2.1.1)
@@ -70,7 +70,7 @@ GEM
70
70
  addressable (>= 2.3.5)
71
71
  faraday (>= 0.17.3, < 3)
72
72
  unicode-display_width (1.7.0)
73
- uri (1.0.2)
73
+ uri (1.0.3)
74
74
 
75
75
  PLATFORMS
76
76
  ruby
data/README.md CHANGED
@@ -135,11 +135,37 @@ scc -f json scc.output.json
135
135
 
136
136
  ## Console
137
137
 
138
- TODO
138
+ Simply outputs all metrics to the console.
139
+
140
+ **Usage**:
141
+
142
+ The console provider prints metrics in the format `metric_name: value`. If metrics include tags (using the `#` delimiter format), they are printed as is:
143
+
144
+ ```
145
+ requests: 100
146
+ errors: 5
147
+ requests#production: 200
148
+ latency#backend,region:us-east-1,env:prod: 150
149
+ ```
139
150
 
140
151
  ## Datadog
141
152
 
142
- TODO
153
+ Sends metrics to Datadog using the Datadog API. Supports metric tagging for better organization and filtering.
154
+
155
+ **Environment Variables**:
156
+
157
+ - `DATADOG_API_KEY` (required): your Datadog API key
158
+ - `DATADOG_PREFIX` (optional): prefix to add to all metric names (default: `'codemonitor.'`)
159
+
160
+ **Metric Tagging**:
161
+
162
+ The Datadog provider supports adding tags to metrics by including them in the metric name using the `#` delimiter:
163
+
164
+ - Format: `metric_name#tag1,tag2:value,tag3`
165
+ - Example: `requests#frontend,app:webserver` → sends metric `requests` with tags `['frontend', 'app:webserver']`
166
+ - Tags follow Datadog's standard format where tags can be simple (`tag`) or key-value pairs (`key:value`)
167
+
168
+ More about tagging: [https://docs.datadoghq.com/getting_started/tagging/](https://docs.datadoghq.com/getting_started/tagging/)
143
169
 
144
170
  # Contribute
145
171
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CodeMonitor
4
- VERSION = '0.6.6'
4
+ VERSION = "0.7.1"
5
5
  end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Providers
4
+ class BaseProvider
5
+ attr_reader :pending
6
+
7
+ def initialize
8
+ @pending = {}
9
+ end
10
+
11
+ def emit(metrics)
12
+ @pending = pending.merge(metrics.transform_keys(&:to_s))
13
+ end
14
+ end
15
+ end
data/providers/console.rb CHANGED
@@ -1,23 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Providers
4
- class Console
5
- def initialize
6
- @pending = {}
7
- end
8
-
9
- def emit(metrics)
10
- @pending = pending.merge(metrics)
11
- end
3
+ require_relative 'base_provider'
12
4
 
5
+ module Providers
6
+ class Console < BaseProvider
13
7
  def send
14
8
  pending.map do |metric, value|
15
9
  puts "#{metric}: #{value}"
16
10
  end
17
11
  end
18
-
19
- private
20
-
21
- attr_reader :pending
22
12
  end
23
13
  end
data/providers/datadog.rb CHANGED
@@ -1,31 +1,39 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative 'base_provider'
3
4
  require 'dogapi'
4
5
 
5
6
  module Providers
6
- class Datadog
7
+ class Datadog < BaseProvider
7
8
  def initialize
8
- @pending = {}
9
+ super
9
10
  @metric_prefix = ENV['DATADOG_PREFIX'] || 'codemonitor.'
10
11
  @datadog_client = Dogapi::Client.new(ENV['DATADOG_API_KEY'])
11
12
  end
12
13
 
13
- def emit(metrics)
14
- @pending = pending.merge(metrics)
15
- end
16
-
17
14
  def send
18
15
  datadog_client.batch_metrics do
19
16
  pending.each do |metric, value|
20
- metric = "#{metric_prefix}#{metric}"
21
- puts "#{metric}: #{value}"
22
- datadog_client.emit_point(metric, value, type: 'gauge')
17
+ metric_name, tags = extract_tags(metric)
18
+ metric_name = "#{metric_prefix}#{metric_name}"
19
+ puts "#{metric_name}#{tags ? "[#{tags.join(',')}]" : ''}: #{value}"
20
+ datadog_client.emit_point(metric_name, value, type: 'gauge', tags: tags)
23
21
  end
24
22
  end
25
23
  end
26
24
 
27
25
  private
28
26
 
29
- attr_reader :pending, :metric_prefix, :datadog_client
27
+ attr_reader :metric_prefix, :datadog_client
28
+
29
+ def extract_tags(metric)
30
+ if metric.include?('#')
31
+ metric_name, tag_string = metric.split('#', 2)
32
+ tags = tag_string.split(',')
33
+ [metric_name, tags]
34
+ else
35
+ [metric, nil]
36
+ end
37
+ end
30
38
  end
31
39
  end
data/providers/test.rb CHANGED
@@ -1,17 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Providers
4
- class Test
5
- def initialize
6
- @pending = {}
7
- end
8
-
9
- def emit(metrics)
10
- @pending = pending.merge(metrics)
11
- end
3
+ require_relative 'base_provider'
12
4
 
5
+ module Providers
6
+ class Test < BaseProvider
13
7
  def send; end
14
-
15
- attr_reader :pending
16
8
  end
17
9
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: codemonitor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.6
4
+ version: 0.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ferran Basora
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-01-21 00:00:00.000000000 Z
11
+ date: 2025-09-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dogapi
@@ -120,6 +120,7 @@ extra_rdoc_files:
120
120
  files:
121
121
  - ".gitignore"
122
122
  - ".rubocop.yml"
123
+ - ".tool-versions"
123
124
  - ".travis.yml"
124
125
  - Gemfile
125
126
  - Gemfile.lock
@@ -146,6 +147,7 @@ files:
146
147
  - exe/codemonitor
147
148
  - lib/codemonitor/version.rb
148
149
  - lib/shell.rb
150
+ - providers/base_provider.rb
149
151
  - providers/console.rb
150
152
  - providers/datadog.rb
151
153
  - providers/test.rb
@@ -170,7 +172,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
170
172
  - !ruby/object:Gem::Version
171
173
  version: '0'
172
174
  requirements: []
173
- rubygems_version: 3.5.22
175
+ rubygems_version: 3.5.16
174
176
  signing_key:
175
177
  specification_version: 4
176
178
  summary: Collect many metrics your code is generating