codecov_opentelem 0.1.3 → 0.1.6

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
  SHA256:
3
- metadata.gz: 6914eed45d30e64ce8c2982e130fc182539e953e463ec31eb5924ebac9347002
4
- data.tar.gz: bdc8110f1234339151b7a8bbc51aead42603faf263f1fc75d1fc89f73ff07993
3
+ metadata.gz: a837d9537c3dccbc0d656e4bd7c7a196073c95e5686a02252a69f267b49be89b
4
+ data.tar.gz: 6feed841349acebe12bbc6afc3f1f87f9b897d86867e9fc91a4a442f3930b10f
5
5
  SHA512:
6
- metadata.gz: 66932b7701993e76e43798ec280718293333ab88520cb1bd881f1a9f0ce653dc4680b727fb22288e082296f6479bf8fe7161d3e834c3c562c7ccce4870d8b2f2
7
- data.tar.gz: a727af20f23a98ca148612f0cc792da9733f5c8e37290a4e532ba8396a145b6129e77f1bf3e14b919407a82140ff39227a536082bd6092b1dd7bbb76032d005c
6
+ metadata.gz: c0823f094eb916153de0aae3a29496bd9f1245648159435e6c070ef86e371b9015f399efc3f54e3cc9fe45081357c524ea9c5fbf01f216fb78f3f41b3e9853f7
7
+ data.tar.gz: 7fd37d56e8ca61aac7ee18537a486a865efe4a834a77eabeb8b3dab17a002c4430cfca3a6af4b603dbbed0e598b803405cd61045b6291aaa692b5b9955adf591
data/Gemfile.lock ADDED
@@ -0,0 +1,221 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ codecov_opentelem (0.1.5)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ diff-lcs (1.5.0)
10
+ google-protobuf (3.21.1-x86_64-darwin)
11
+ googleapis-common-protos-types (1.3.1)
12
+ google-protobuf (~> 3.14)
13
+ opentelemetry-api (1.0.2)
14
+ opentelemetry-common (0.19.6)
15
+ opentelemetry-api (~> 1.0)
16
+ opentelemetry-exporter-otlp (0.22.0)
17
+ google-protobuf (~> 3.19)
18
+ googleapis-common-protos-types (~> 1.3)
19
+ opentelemetry-api (~> 1.0)
20
+ opentelemetry-common (~> 0.19.6)
21
+ opentelemetry-sdk (~> 1.0)
22
+ opentelemetry-semantic_conventions
23
+ opentelemetry-instrumentation-action_pack (0.2.0)
24
+ opentelemetry-api (~> 1.0)
25
+ opentelemetry-instrumentation-base (~> 0.21.0)
26
+ opentelemetry-instrumentation-rack (~> 0.21.0)
27
+ opentelemetry-instrumentation-action_view (0.3.0)
28
+ opentelemetry-api (~> 1.0)
29
+ opentelemetry-instrumentation-active_support (~> 0.1)
30
+ opentelemetry-instrumentation-base (~> 0.20)
31
+ opentelemetry-instrumentation-active_job (0.3.0)
32
+ opentelemetry-api (~> 1.0)
33
+ opentelemetry-instrumentation-base (~> 0.21.0)
34
+ opentelemetry-instrumentation-active_model_serializers (0.19.0)
35
+ opentelemetry-api (~> 1.0)
36
+ opentelemetry-instrumentation-base (~> 0.21.0)
37
+ opentelemetry-instrumentation-active_record (0.4.0)
38
+ opentelemetry-api (~> 1.0)
39
+ opentelemetry-instrumentation-base (~> 0.21.0)
40
+ ruby2_keywords
41
+ opentelemetry-instrumentation-active_support (0.2.0)
42
+ opentelemetry-api (~> 1.0)
43
+ opentelemetry-instrumentation-base (~> 0.21.0)
44
+ opentelemetry-instrumentation-all (0.25.0)
45
+ opentelemetry-instrumentation-action_pack (~> 0.2.0)
46
+ opentelemetry-instrumentation-action_view (~> 0.3.0)
47
+ opentelemetry-instrumentation-active_job (~> 0.3.0)
48
+ opentelemetry-instrumentation-active_model_serializers (~> 0.19.0)
49
+ opentelemetry-instrumentation-active_record (~> 0.4.0)
50
+ opentelemetry-instrumentation-active_support (~> 0.2.0)
51
+ opentelemetry-instrumentation-aws_sdk (~> 0.3.0)
52
+ opentelemetry-instrumentation-bunny (~> 0.19.0)
53
+ opentelemetry-instrumentation-concurrent_ruby (~> 0.20.0)
54
+ opentelemetry-instrumentation-dalli (~> 0.22.0)
55
+ opentelemetry-instrumentation-delayed_job (~> 0.19.0)
56
+ opentelemetry-instrumentation-ethon (~> 0.20.0)
57
+ opentelemetry-instrumentation-excon (~> 0.20.0)
58
+ opentelemetry-instrumentation-faraday (~> 0.21.0)
59
+ opentelemetry-instrumentation-graphql (~> 0.20.0)
60
+ opentelemetry-instrumentation-http (~> 0.20.0)
61
+ opentelemetry-instrumentation-http_client (~> 0.20.0)
62
+ opentelemetry-instrumentation-koala (~> 0.19.0)
63
+ opentelemetry-instrumentation-lmdb (~> 0.21.0)
64
+ opentelemetry-instrumentation-mongo (~> 0.20.0)
65
+ opentelemetry-instrumentation-mysql2 (~> 0.21.0)
66
+ opentelemetry-instrumentation-net_http (~> 0.20.0)
67
+ opentelemetry-instrumentation-pg (~> 0.21.0)
68
+ opentelemetry-instrumentation-que (~> 0.4.0)
69
+ opentelemetry-instrumentation-rack (~> 0.21.0)
70
+ opentelemetry-instrumentation-rails (~> 0.22.0)
71
+ opentelemetry-instrumentation-rdkafka (~> 0.2.0)
72
+ opentelemetry-instrumentation-redis (~> 0.23.0)
73
+ opentelemetry-instrumentation-resque (~> 0.3.0)
74
+ opentelemetry-instrumentation-restclient (~> 0.20.0)
75
+ opentelemetry-instrumentation-ruby_kafka (~> 0.19.0)
76
+ opentelemetry-instrumentation-sidekiq (~> 0.22.0)
77
+ opentelemetry-instrumentation-sinatra (~> 0.20.0)
78
+ opentelemetry-instrumentation-trilogy (~> 0.51.0)
79
+ opentelemetry-instrumentation-aws_sdk (0.3.0)
80
+ opentelemetry-api (~> 1.0)
81
+ opentelemetry-instrumentation-base (~> 0.21.0)
82
+ opentelemetry-instrumentation-base (0.21.0)
83
+ opentelemetry-api (~> 1.0)
84
+ opentelemetry-registry (~> 0.1)
85
+ opentelemetry-instrumentation-bunny (0.19.0)
86
+ opentelemetry-api (~> 1.0)
87
+ opentelemetry-instrumentation-base (~> 0.21.0)
88
+ opentelemetry-instrumentation-concurrent_ruby (0.20.0)
89
+ opentelemetry-api (~> 1.0)
90
+ opentelemetry-instrumentation-base (~> 0.21.0)
91
+ opentelemetry-instrumentation-dalli (0.22.0)
92
+ opentelemetry-api (~> 1.0)
93
+ opentelemetry-common (~> 0.19.3)
94
+ opentelemetry-instrumentation-base (~> 0.21.0)
95
+ opentelemetry-instrumentation-delayed_job (0.19.0)
96
+ opentelemetry-api (~> 1.0)
97
+ opentelemetry-instrumentation-base (~> 0.21.0)
98
+ opentelemetry-instrumentation-ethon (0.20.0)
99
+ opentelemetry-api (~> 1.0)
100
+ opentelemetry-common (~> 0.19.3)
101
+ opentelemetry-instrumentation-base (~> 0.21.0)
102
+ opentelemetry-instrumentation-excon (0.20.0)
103
+ opentelemetry-api (~> 1.0)
104
+ opentelemetry-common (~> 0.19.3)
105
+ opentelemetry-instrumentation-base (~> 0.21.0)
106
+ opentelemetry-instrumentation-faraday (0.21.0)
107
+ opentelemetry-api (~> 1.0)
108
+ opentelemetry-common (~> 0.19.3)
109
+ opentelemetry-instrumentation-base (~> 0.21.0)
110
+ opentelemetry-instrumentation-graphql (0.20.0)
111
+ opentelemetry-api (~> 1.0)
112
+ opentelemetry-instrumentation-base (~> 0.21.0)
113
+ opentelemetry-instrumentation-http (0.20.0)
114
+ opentelemetry-api (~> 1.0)
115
+ opentelemetry-instrumentation-base (~> 0.21.0)
116
+ opentelemetry-instrumentation-http_client (0.20.0)
117
+ opentelemetry-api (~> 1.0)
118
+ opentelemetry-common (~> 0.19.3)
119
+ opentelemetry-instrumentation-base (~> 0.21.0)
120
+ opentelemetry-instrumentation-koala (0.19.0)
121
+ opentelemetry-api (~> 1.0)
122
+ opentelemetry-common (~> 0.19.3)
123
+ opentelemetry-instrumentation-base (~> 0.21.0)
124
+ opentelemetry-instrumentation-lmdb (0.21.0)
125
+ opentelemetry-api (~> 1.0)
126
+ opentelemetry-instrumentation-base (~> 0.21.0)
127
+ opentelemetry-instrumentation-mongo (0.20.0)
128
+ opentelemetry-api (~> 1.0)
129
+ opentelemetry-instrumentation-base (~> 0.21.0)
130
+ opentelemetry-instrumentation-mysql2 (0.21.0)
131
+ opentelemetry-api (~> 1.0)
132
+ opentelemetry-instrumentation-base (~> 0.21.0)
133
+ opentelemetry-instrumentation-net_http (0.20.0)
134
+ opentelemetry-api (~> 1.0)
135
+ opentelemetry-common (~> 0.19.3)
136
+ opentelemetry-instrumentation-base (~> 0.21.0)
137
+ opentelemetry-instrumentation-pg (0.21.0)
138
+ opentelemetry-api (~> 1.0)
139
+ opentelemetry-instrumentation-base (~> 0.21.0)
140
+ opentelemetry-instrumentation-que (0.4.0)
141
+ opentelemetry-api (~> 1.0)
142
+ opentelemetry-instrumentation-base (~> 0.21.0)
143
+ opentelemetry-instrumentation-rack (0.21.0)
144
+ opentelemetry-api (~> 1.0)
145
+ opentelemetry-common (~> 0.19.3)
146
+ opentelemetry-instrumentation-base (~> 0.21.0)
147
+ opentelemetry-instrumentation-rails (0.22.0)
148
+ opentelemetry-api (~> 1.0)
149
+ opentelemetry-instrumentation-action_pack (~> 0.2.0)
150
+ opentelemetry-instrumentation-action_view (~> 0.3.0)
151
+ opentelemetry-instrumentation-active_record (~> 0.4.0)
152
+ opentelemetry-instrumentation-active_support (~> 0.2.0)
153
+ opentelemetry-instrumentation-base (~> 0.21.0)
154
+ opentelemetry-instrumentation-rdkafka (0.2.0)
155
+ opentelemetry-api (~> 1.0.0)
156
+ opentelemetry-common (~> 0.19.3)
157
+ opentelemetry-instrumentation-base (~> 0.21.0)
158
+ opentelemetry-instrumentation-redis (0.23.0)
159
+ opentelemetry-api (~> 1.0)
160
+ opentelemetry-common (~> 0.19.3)
161
+ opentelemetry-instrumentation-base (~> 0.21.0)
162
+ opentelemetry-instrumentation-resque (0.3.0)
163
+ opentelemetry-api (~> 1.0)
164
+ opentelemetry-instrumentation-base (~> 0.21.0)
165
+ opentelemetry-instrumentation-restclient (0.20.0)
166
+ opentelemetry-api (~> 1.0)
167
+ opentelemetry-common (~> 0.19.3)
168
+ opentelemetry-instrumentation-base (~> 0.21.0)
169
+ opentelemetry-instrumentation-ruby_kafka (0.19.0)
170
+ opentelemetry-api (~> 1.0)
171
+ opentelemetry-instrumentation-base (~> 0.21.0)
172
+ opentelemetry-instrumentation-sidekiq (0.22.0)
173
+ opentelemetry-api (~> 1.0)
174
+ opentelemetry-common (~> 0.19.3)
175
+ opentelemetry-instrumentation-base (~> 0.21.0)
176
+ opentelemetry-instrumentation-sinatra (0.20.0)
177
+ opentelemetry-api (~> 1.0)
178
+ opentelemetry-common (~> 0.19.3)
179
+ opentelemetry-instrumentation-base (~> 0.21.0)
180
+ opentelemetry-instrumentation-trilogy (0.51.0)
181
+ opentelemetry-api (~> 1.0)
182
+ opentelemetry-instrumentation-base (~> 0.21.0)
183
+ opentelemetry-semantic_conventions (>= 1.8.0)
184
+ opentelemetry-registry (0.1.0)
185
+ opentelemetry-api (~> 1.0.1)
186
+ opentelemetry-sdk (1.1.0)
187
+ opentelemetry-api (~> 1.0)
188
+ opentelemetry-common (~> 0.19.3)
189
+ opentelemetry-registry (~> 0.1)
190
+ opentelemetry-semantic_conventions
191
+ opentelemetry-semantic_conventions (1.8.0)
192
+ opentelemetry-api (~> 1.0)
193
+ rake (13.0.6)
194
+ rspec (3.11.0)
195
+ rspec-core (~> 3.11.0)
196
+ rspec-expectations (~> 3.11.0)
197
+ rspec-mocks (~> 3.11.0)
198
+ rspec-core (3.11.0)
199
+ rspec-support (~> 3.11.0)
200
+ rspec-expectations (3.11.0)
201
+ diff-lcs (>= 1.2.0, < 2.0)
202
+ rspec-support (~> 3.11.0)
203
+ rspec-mocks (3.11.1)
204
+ diff-lcs (>= 1.2.0, < 2.0)
205
+ rspec-support (~> 3.11.0)
206
+ rspec-support (3.11.0)
207
+ ruby2_keywords (0.0.5)
208
+
209
+ PLATFORMS
210
+ x86_64-darwin-21
211
+
212
+ DEPENDENCIES
213
+ codecov_opentelem!
214
+ opentelemetry-exporter-otlp
215
+ opentelemetry-instrumentation-all
216
+ opentelemetry-sdk
217
+ rake (~> 13.0)
218
+ rspec
219
+
220
+ BUNDLED WITH
221
+ 2.3.16
@@ -1,11 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'base64'
3
4
  require 'json'
4
- require 'uri'
5
5
  require 'net/http'
6
+ require 'uri'
6
7
 
7
- require 'opentelemetry/sdk'
8
8
  require 'coverage'
9
+ require 'opentelemetry/sdk'
9
10
 
10
11
  module CoverageSpanFilter
11
12
  REGEX_NAME = 'name_regex'
@@ -14,28 +15,27 @@ end
14
15
 
15
16
  class CodecovCoverageStorageManager
16
17
  def initialize(filters)
17
- Coverage.start
18
18
  @filters = filters
19
19
  @inner = {}
20
20
  end
21
21
 
22
22
  def start_coverage_for_span(span)
23
23
  if !@filters[CoverageSpanFilter::REGEX_NAME].nil? && @filters[CoverageSpanFilter::REGEX_NAME].match(span.name)
24
+ puts 'returned false'
24
25
  return false
25
26
  end
26
27
 
27
- Coverage.resume unless Coverage.running?
28
+ Coverage.start unless Coverage.running?
28
29
  true
29
30
  end
30
31
 
31
- def stop_coverage_for_span(_span)
32
+ def stop_coverage_for_span(span)
32
33
  span_id = span.context.span_id
33
- Coverage.suspend
34
34
  @inner[span_id] = Coverage.result(stop: false, clear: true)
35
35
  end
36
36
 
37
- def pop_coverage_for_span(_span)
38
- span_id = span.context.span_id
37
+ def pop_coverage_for_span(span)
38
+ span_id = span.span_id
39
39
  @inner.delete(span_id)
40
40
  end
41
41
  end
@@ -48,10 +48,10 @@ class CodecovCoverageGenerator < OpenTelemetry::SDK::Trace::SpanProcessor
48
48
  end
49
49
 
50
50
  def on_start(span, _parent_context = nil)
51
- @cov_storage.start_coverage_for_span(span) if rand < @sample_rate
51
+ @cov_storage.start_coverage_for_span(span) if rand() < @sample_rate
52
52
  end
53
53
 
54
- def on_end(span)
54
+ def on_finish(span)
55
55
  @cov_storage.stop_coverage_for_span(span)
56
56
  end
57
57
  end
@@ -66,32 +66,59 @@ class CoverageExporter < OpenTelemetry::SDK::Trace::Export::SpanExporter
66
66
  @untracked_export_rate = untracked_export_rate
67
67
  end
68
68
 
69
- def export(spans)
69
+ def export(spans, timeout)
70
70
  tracked_spans = []
71
71
  untracked_spans = []
72
+
72
73
  spans.each do |span|
73
- cov = cov_storage.pop_coverage_for_span(span)
74
- s = JSON.parse(span)
74
+ cov = @cov_storage.pop_coverage_for_span(span)
75
+
76
+ span_hash = Hash.new
77
+ span.to_h.each do |k, v|
78
+ v = v.dup.force_encoding("ISO-8859-1").encode("UTF-8") if v.is_a? String
79
+ span_hash[k] = v
80
+ end
81
+
82
+ cov_string = cov.map{ |k, v| "\"#{k}\":[#{v.map{ |i| i.nil? ? "null" : i}.join(',')}]"}.join(',')
83
+ cov_string = "{\"coverage\":{#{cov_string}}}"
84
+
75
85
  if !cov.nil?
76
- s['codecov'] = { 'type' => 'bytes', 'coverage' => cov }
77
- tracked_spans.append(s)
78
- elsif rand < @untracked_export_rate
79
- untracked_spans.append(s)
86
+ span_hash['codecov'] = {
87
+ 'coverage': Base64.strict_encode64(cov_string),
88
+ 'type': 'bytes',
89
+ }
90
+ tracked_spans.append(span_hash)
91
+ elsif rand() < @untracked_export_rate
92
+ untracked_spans.append(span_hash)
80
93
  end
81
94
  end
82
- return SpanExportResult.SUCCESS if !tracked_spans && !untracked_spans
83
-
84
- res = Net::HTTP.post(URI.join(@codecov_url, '/profiling/uploads'),
85
- { 'code' => @code }.to_json,
86
- 'Content-Type' => 'application/json',
87
- 'Authorization' => "repotoken #{@repository_token}")
88
- return SpanExportResult.FAILURE if res.is_a?(Net::HTTPError)
89
-
90
- location = res.body.raw_upload_location
91
- Net::HTTP.put(URI(location),
92
- { 'spans' => tracked_spans,
93
- 'untracked' => untracked_spans }.to_json,
94
- 'Content-Type' => 'text/plain')
95
- SpanExportResult.SUCCESS
95
+
96
+ return OpenTelemetry::SDK::Trace::Export::SUCCESS if !tracked_spans && !untracked_spans
97
+
98
+ body = { 'profiling' => @code }.to_json
99
+ res = Net::HTTP.post(
100
+ URI.join(@codecov_url, '/profiling/uploads'),
101
+ { 'profiling' => @code }.to_json,
102
+ 'Content-Type' => 'application/json',
103
+ 'Authorization' => "repotoken #{@repository_token}"
104
+ )
105
+ return OpenTelemetry::SDK::Trace::Export::FAILURE if res.is_a?(Net::HTTPError)
106
+
107
+ location = JSON(res.body)['raw_upload_location']
108
+ uri = URI(location)
109
+ https = Net::HTTP.new(uri.host, uri.port)
110
+ https.use_ssl = true
111
+ req = Net::HTTP::Put.new(
112
+ location,
113
+ {
114
+ 'Content-Type' => 'text/plain'
115
+ }
116
+ )
117
+ req.body = {
118
+ 'spans' => tracked_spans,
119
+ 'untracked' => untracked_spans
120
+ }.to_json
121
+ https.request(req)
122
+ OpenTelemetry::SDK::Trace::Export::SUCCESS
96
123
  end
97
124
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CodecovOpentelem
4
- VERSION = "0.1.3"
4
+ VERSION = "0.1.6"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: codecov_opentelem
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ahmed-Elghrbawy
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-06-17 00:00:00.000000000 Z
11
+ date: 2022-06-21 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email:
@@ -19,6 +19,7 @@ extra_rdoc_files: []
19
19
  files:
20
20
  - CHANGELOG.md
21
21
  - Gemfile
22
+ - Gemfile.lock
22
23
  - LICENSE.txt
23
24
  - README.md
24
25
  - Rakefile