instana 1.215.0 → 1.216.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.circleci/config.yml +83 -3
- data/.tekton/.currency/resources/requirements.txt +0 -1
- data/.tekton/.currency/resources/table.json +13 -13
- data/.tekton/.currency/scripts/generate_report.py +37 -130
- data/.tekton/README.md +278 -0
- data/.tekton/github-pr-eventlistener.yaml +1 -1
- data/.tekton/pipeline.yaml +96 -2
- data/.tekton/pipelinerun.yaml +2 -2
- data/.tekton/ruby-tracer-prepuller.yaml +4 -0
- data/.tekton/run_unittests.sh +27 -6
- data/.tekton/scheduled-eventlistener.yaml +1 -1
- data/.tekton/task.yaml +72 -0
- data/gemfiles/rails_61.gemfile +1 -0
- data/gemfiles/rails_70.gemfile +1 -0
- data/gemfiles/rails_71.gemfile +1 -0
- data/gemfiles/sequel_56.gemfile +16 -0
- data/gemfiles/sequel_57.gemfile +16 -0
- data/gemfiles/sequel_58.gemfile +16 -0
- data/instana.gemspec +2 -0
- data/lib/instana/activators/sequel.rb +20 -0
- data/lib/instana/backend/host_agent.rb +5 -1
- data/lib/instana/config.rb +1 -0
- data/lib/instana/instrumentation/sequel.rb +42 -0
- data/lib/instana/tracing/span.rb +2 -2
- data/lib/instana/version.rb +1 -1
- data/test/activator_test.rb +1 -1
- data/test/backend/host_agent_test.rb +2 -0
- data/test/instrumentation/rails_active_record_test.rb +1 -1
- data/test/instrumentation/sequel_test.rb +105 -0
- data/test/tracing/span_test.rb +2 -2
- data/test/tracing/tracer_test.rb +1 -3
- metadata +39 -8
- data/.tekton/.currency/currency-pipeline.yaml +0 -36
- data/.tekton/.currency/currency-pipelinerun.yaml +0 -20
- data/.tekton/.currency/currency-rbac.yaml +0 -29
- data/.tekton/.currency/currency-scheduled-eventlistener.yaml +0 -56
- data/.tekton/.currency/currency-tasks.yaml +0 -94
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d537c1bb144d87403ff4f77159269e31e8af893fd31f6c942d5d6c00a2f89a4a
|
4
|
+
data.tar.gz: 81d978a21bd5bd84c1305851a34570a20c69dd794ccaef7081490db78037c5d4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 423d36b04c2e7b6035b566d0bd9617dfd9c2d7700e8d0c8ae934ce2631703cdc4e875ac73a64b136aed2f511a07bb5cfdd257c881a293a2cb85b66bc1d347bd9
|
7
|
+
data.tar.gz: ef472837810e93803daef7776c0b0e664093ddb72cb44f149be2798c9f8ddc0d26eeefe25a9d01a5114e42fb578d050ddc75e03470d1735d1d34eecd5226baa5
|
data/.circleci/config.yml
CHANGED
@@ -183,6 +183,43 @@ executors:
|
|
183
183
|
environment:
|
184
184
|
POSTGRES_PASSWORD: 'test'
|
185
185
|
POSTGRES_DB: 'ci_test'
|
186
|
+
ruby_34:
|
187
|
+
docker:
|
188
|
+
- image: ruby:3.4.0-preview1-bookworm
|
189
|
+
environment:
|
190
|
+
MEMCACHED_HOST: '127.0.0.1:11211'
|
191
|
+
REDIS_URL: 'redis://127.0.0.1:6379'
|
192
|
+
DATABASE_URL: 'sqlite3::memory:'
|
193
|
+
- image: memcached
|
194
|
+
- image: redis
|
195
|
+
- image: amazon/dynamodb-local
|
196
|
+
- image: minio/minio:latest
|
197
|
+
command: ["server", "/data"]
|
198
|
+
- image: s12v/sns
|
199
|
+
- image: softwaremill/elasticmq-native
|
200
|
+
- image: mongo:5-focal
|
201
|
+
ruby_34_mysql2:
|
202
|
+
docker:
|
203
|
+
- image: ruby:3.4.0-preview1-bookworm
|
204
|
+
environment:
|
205
|
+
DATABASE_URL: "mysql2://root@127.0.0.1:3306/ci_test"
|
206
|
+
- image: mariadb
|
207
|
+
environment:
|
208
|
+
MYSQL_DATABASE: 'ci_test'
|
209
|
+
MYSQL_USER: 'root'
|
210
|
+
MYSQL_PASSWORD: ''
|
211
|
+
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
|
212
|
+
MYSQL_ROOT_PASSWORD: ''
|
213
|
+
MYSQL_ROOT_HOST: '%'
|
214
|
+
ruby_34_postgres:
|
215
|
+
docker:
|
216
|
+
- image: ruby:3.4.0-preview1-bookworm
|
217
|
+
environment:
|
218
|
+
DATABASE_URL: "postgres://postgres:test@127.0.0.1:5432/ci_test"
|
219
|
+
- image: postgres
|
220
|
+
environment:
|
221
|
+
POSTGRES_PASSWORD: 'test'
|
222
|
+
POSTGRES_DB: 'ci_test'
|
186
223
|
ruby_33_lint:
|
187
224
|
docker:
|
188
225
|
- image: cimg/ruby:3.3-node
|
@@ -319,12 +356,12 @@ jobs:
|
|
319
356
|
bundle check || bundle install
|
320
357
|
- run_rubocop
|
321
358
|
report_coverage:
|
322
|
-
executor:
|
359
|
+
executor: ruby_33
|
323
360
|
steps:
|
324
361
|
- checkout
|
325
362
|
- run_sonarqube
|
326
363
|
publish:
|
327
|
-
executor:
|
364
|
+
executor: ruby_33
|
328
365
|
steps:
|
329
366
|
- checkout
|
330
367
|
- setup
|
@@ -350,7 +387,8 @@ workflows:
|
|
350
387
|
- ruby_31
|
351
388
|
- ruby_32
|
352
389
|
- ruby_33
|
353
|
-
|
390
|
+
- ruby_34
|
391
|
+
libraries_ruby_30_32:
|
354
392
|
jobs:
|
355
393
|
- test_apprisal:
|
356
394
|
matrix:
|
@@ -359,8 +397,26 @@ workflows:
|
|
359
397
|
- ruby_30
|
360
398
|
- ruby_31
|
361
399
|
- ruby_32
|
400
|
+
<<: *library_gemfile
|
401
|
+
libraries_ruby_33_34:
|
402
|
+
jobs:
|
403
|
+
- test_apprisal:
|
404
|
+
matrix:
|
405
|
+
parameters:
|
406
|
+
stack:
|
362
407
|
- ruby_33
|
408
|
+
- ruby_34
|
363
409
|
<<: *library_gemfile
|
410
|
+
# Currently compiling the native extensions for `grpc`
|
411
|
+
# exceeds an internal RAM and/or CPU limit of CircleCI executor,
|
412
|
+
# and the job gets terminated with:
|
413
|
+
# `Received "killed" signal`
|
414
|
+
# Hence we exclude it here for the time being.
|
415
|
+
# TODO: Remove this exclusion as soon as pre-built binaries are available
|
416
|
+
# on https://rubygems.org/gems/grpc/versions
|
417
|
+
exclude:
|
418
|
+
- stack: ruby_34
|
419
|
+
gemfile: "./gemfiles/grpc_10.gemfile"
|
364
420
|
rails_ruby_3:
|
365
421
|
jobs:
|
366
422
|
- test_apprisal:
|
@@ -376,12 +432,36 @@ workflows:
|
|
376
432
|
- ruby_32
|
377
433
|
- ruby_32_postgres
|
378
434
|
- ruby_32_mysql2
|
435
|
+
- ruby_33
|
379
436
|
- ruby_33_postgres
|
380
437
|
- ruby_33_mysql2
|
438
|
+
- ruby_34
|
439
|
+
- ruby_34_postgres
|
440
|
+
- ruby_34_mysql2
|
381
441
|
gemfile:
|
382
442
|
- "./gemfiles/rails_61.gemfile"
|
383
443
|
- "./gemfiles/rails_70.gemfile"
|
384
444
|
- "./gemfiles/rails_71.gemfile"
|
445
|
+
sequel:
|
446
|
+
jobs:
|
447
|
+
- test_apprisal:
|
448
|
+
matrix:
|
449
|
+
parameters:
|
450
|
+
stack:
|
451
|
+
- ruby_30
|
452
|
+
- ruby_30_mysql2
|
453
|
+
- ruby_31
|
454
|
+
- ruby_31_mysql2
|
455
|
+
- ruby_32
|
456
|
+
- ruby_32_mysql2
|
457
|
+
- ruby_33
|
458
|
+
- ruby_33_mysql2
|
459
|
+
- ruby_34
|
460
|
+
- ruby_34_mysql2
|
461
|
+
gemfile:
|
462
|
+
- "./gemfiles/sequel_56.gemfile"
|
463
|
+
- "./gemfiles/sequel_57.gemfile"
|
464
|
+
- "./gemfiles/sequel_58.gemfile"
|
385
465
|
report_coverage:
|
386
466
|
jobs:
|
387
467
|
- report_coverage
|
@@ -8,19 +8,19 @@
|
|
8
8
|
},
|
9
9
|
{
|
10
10
|
"Package name": "Rack",
|
11
|
-
"Support Policy": "
|
11
|
+
"Support Policy": "45-days",
|
12
12
|
"Beta version": "No",
|
13
13
|
"Cloud Native": "No"
|
14
14
|
},
|
15
15
|
{
|
16
16
|
"Package name": "Rails",
|
17
|
-
"Support Policy": "
|
17
|
+
"Support Policy": "45-days",
|
18
18
|
"Beta version": "No",
|
19
19
|
"Cloud Native": "No"
|
20
20
|
},
|
21
21
|
{
|
22
22
|
"Package name": "Rails::API",
|
23
|
-
"Support Policy": "
|
23
|
+
"Support Policy": "45-days",
|
24
24
|
"Beta version": "No",
|
25
25
|
"Cloud Native": "No"
|
26
26
|
},
|
@@ -32,61 +32,61 @@
|
|
32
32
|
},
|
33
33
|
{
|
34
34
|
"Package name": "Roda",
|
35
|
-
"Support Policy": "
|
35
|
+
"Support Policy": "45-days",
|
36
36
|
"Beta version": "No",
|
37
37
|
"Cloud Native": "No"
|
38
38
|
},
|
39
39
|
{
|
40
40
|
"Package name": "Sinatra",
|
41
|
-
"Support Policy": "
|
41
|
+
"Support Policy": "45-days",
|
42
42
|
"Beta version": "No",
|
43
43
|
"Cloud Native": "No"
|
44
44
|
},
|
45
45
|
{
|
46
46
|
"Package name": "Excon",
|
47
|
-
"Support Policy": "
|
47
|
+
"Support Policy": "45-days",
|
48
48
|
"Beta version": "No",
|
49
49
|
"Cloud Native": "Yes"
|
50
50
|
},
|
51
51
|
{
|
52
52
|
"Package name": "gRPC",
|
53
|
-
"Support Policy": "
|
53
|
+
"Support Policy": "45-days",
|
54
54
|
"Beta version": "No",
|
55
55
|
"Cloud Native": "No"
|
56
56
|
},
|
57
57
|
{
|
58
58
|
"Package name": "Net::HTTP",
|
59
59
|
"Support Policy": "0-day",
|
60
|
-
"Beta version": "
|
60
|
+
"Beta version": "Yes",
|
61
61
|
"Cloud Native": "No"
|
62
62
|
},
|
63
63
|
{
|
64
64
|
"Package name": "Rest-Client",
|
65
|
-
"Support Policy": "
|
65
|
+
"Support Policy": "45-days",
|
66
66
|
"Beta version": "No",
|
67
67
|
"Cloud Native": "No"
|
68
68
|
},
|
69
69
|
{
|
70
70
|
"Package name": "Dalli",
|
71
|
-
"Support Policy": "
|
71
|
+
"Support Policy": "45-days",
|
72
72
|
"Beta version": "No",
|
73
73
|
"Cloud Native": "No"
|
74
74
|
},
|
75
75
|
{
|
76
76
|
"Package name": "Resque",
|
77
|
-
"Support Policy": "
|
77
|
+
"Support Policy": "45-days",
|
78
78
|
"Beta version": "No",
|
79
79
|
"Cloud Native": "Yes"
|
80
80
|
},
|
81
81
|
{
|
82
82
|
"Package name": "Sidekiq",
|
83
|
-
"Support Policy": "
|
83
|
+
"Support Policy": "45-days",
|
84
84
|
"Beta version": "No",
|
85
85
|
"Cloud Native": "Yes"
|
86
86
|
},
|
87
87
|
{
|
88
88
|
"Package name": "GraphQL",
|
89
|
-
"Support Policy": "
|
89
|
+
"Support Policy": "45-days",
|
90
90
|
"Beta version": "No",
|
91
91
|
"Cloud Native": "Yes"
|
92
92
|
}
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# Standard Libraries
|
2
|
+
import glob
|
2
3
|
import re
|
3
4
|
from json import load
|
4
5
|
|
@@ -6,143 +7,49 @@ from json import load
|
|
6
7
|
from requests import get
|
7
8
|
from pandas import DataFrame
|
8
9
|
from bs4 import BeautifulSoup
|
9
|
-
from kubernetes import client, config
|
10
10
|
|
11
11
|
JSON_FILE = "resources/table.json"
|
12
12
|
REPORT_FILE = "docs/report.md"
|
13
13
|
API_V1_ENDPOINT = "https://rubygems.org/api/v1/versions/"
|
14
14
|
|
15
|
-
def
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
taskruns = tektonV1.list_namespaced_custom_object(
|
32
|
-
group,
|
33
|
-
version,
|
34
|
-
namespace,
|
35
|
-
plural,
|
36
|
-
label_selector=f"{group}/task={task_name}, triggers.tekton.dev/trigger=ruby-tracer-scheduled-pipeline-triggger",
|
37
|
-
)["items"]
|
38
|
-
|
39
|
-
return taskruns
|
40
|
-
|
41
|
-
|
42
|
-
def process_taskrun_logs(
|
43
|
-
taskruns, core_v1_client, namespace, library, tekton_ci_output
|
44
|
-
):
|
45
|
-
for tr in taskruns:
|
46
|
-
pod_name = tr["status"]["podName"]
|
47
|
-
taskrun_name = tr["metadata"]["name"]
|
48
|
-
logs = core_v1_client.read_namespaced_pod_log(
|
49
|
-
pod_name, namespace, container="step-unittest"
|
50
|
-
)
|
51
|
-
if "Installing" not in logs:
|
52
|
-
print(
|
53
|
-
f"Unable to retrieve logs from taskrun pod {pod_name} of taskrun {taskrun_name} for gem {library}."
|
54
|
-
)
|
55
|
-
continue
|
56
|
-
|
57
|
-
print(
|
58
|
-
f"Retrieving logs from taskrun pod {pod_name} of taskrun {taskrun_name} for gem {library}.."
|
59
|
-
)
|
60
|
-
|
61
|
-
match = re.search(f"Installing ({library} [^\s]+)", logs)
|
62
|
-
tekton_ci_output += f"{match[1]}\n"
|
63
|
-
break
|
64
|
-
|
65
|
-
return tekton_ci_output
|
66
|
-
|
67
|
-
|
68
|
-
def get_tekton_ci_output():
|
69
|
-
config.load_incluster_config()
|
70
|
-
|
71
|
-
namespace = "default"
|
72
|
-
core_v1_client = client.CoreV1Api()
|
73
|
-
|
74
|
-
ruby_33_prefix = "unittest-default-ruby-33-"
|
75
|
-
ruby_31_prefix = "unittest-default-ruby-31-"
|
76
|
-
|
77
|
-
default_libraries_dict = {
|
78
|
-
"cuba": f"{ruby_33_prefix}1",
|
79
|
-
"excon": f"{ruby_33_prefix}4",
|
80
|
-
"graphql": f"{ruby_33_prefix}6",
|
81
|
-
"grpc": f"{ruby_33_prefix}7",
|
82
|
-
"rack": f"{ruby_33_prefix}10",
|
83
|
-
"rest-client": f"{ruby_33_prefix}11",
|
84
|
-
"roda": f"{ruby_33_prefix}13",
|
85
|
-
"sinatra": f"{ruby_33_prefix}16",
|
86
|
-
"net-http": f"{ruby_31_prefix}8",
|
15
|
+
def get_bundle_install_output():
|
16
|
+
|
17
|
+
libraries_from_logs = {
|
18
|
+
"cuba": "cuba_40_ruby_3.3.",
|
19
|
+
"excon": "excon_100_ruby_3.3.",
|
20
|
+
"graphql": "graphql_20_ruby_3.3.",
|
21
|
+
"grpc": "grpc_10_ruby_3.3.",
|
22
|
+
"rack": "rack_30_ruby_3.3.",
|
23
|
+
"rest-client": "rest_client_20_ruby_3.3.",
|
24
|
+
"roda": "roda_30_ruby_3.3.",
|
25
|
+
"sinatra": "sinatra_40_ruby_3.3.",
|
26
|
+
"net-http": "net_http_01_ruby_3.1.",
|
27
|
+
"rails": "rails_71_sqlite3_ruby_3.3.",
|
28
|
+
"dalli": "dalli_32_ruby_3.3.",
|
29
|
+
"resque": "resque_20_ruby_3.3.",
|
30
|
+
"sidekiq": "sidekiq_70_ruby_3.3."
|
87
31
|
}
|
88
32
|
|
89
|
-
|
90
|
-
task_name = "ruby-tracer-unittest-default-libraries-task"
|
91
|
-
default_taskruns = get_taskruns(namespace, task_name)
|
33
|
+
bundle_install_output = ""
|
92
34
|
|
93
|
-
for library, pattern in
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
filtered_default_taskruns = filter_taskruns(taskrun_filter, default_taskruns)
|
99
|
-
|
100
|
-
tekton_ci_output = process_taskrun_logs(
|
101
|
-
filtered_default_taskruns,
|
102
|
-
core_v1_client,
|
103
|
-
namespace,
|
104
|
-
library,
|
105
|
-
tekton_ci_output,
|
106
|
-
)
|
35
|
+
for library, pattern in libraries_from_logs.items():
|
36
|
+
glob_result = glob.glob(f"../../dep_{pattern}*")
|
37
|
+
if not glob_result:
|
38
|
+
print(f"Could not find bundle install log for gem '{library}'.")
|
39
|
+
continue
|
107
40
|
|
108
|
-
|
109
|
-
|
110
|
-
"pattern": "rails-postgres-11",
|
111
|
-
"task_name": "ruby-tracer-unittest-rails-postgres-task",
|
112
|
-
},
|
113
|
-
"dalli": {
|
114
|
-
"pattern": "memcached-11",
|
115
|
-
"task_name": "ruby-tracer-unittest-memcached-libraries-task",
|
116
|
-
},
|
117
|
-
"resque": {
|
118
|
-
"pattern": "unittest-redis-ruby-32-33-9",
|
119
|
-
"task_name": "ruby-tracer-unittest-redis-libraries-task",
|
120
|
-
},
|
121
|
-
"sidekiq": {
|
122
|
-
"pattern": "unittest-redis-ruby-32-33-18",
|
123
|
-
"task_name": "ruby-tracer-unittest-redis-libraries-task",
|
124
|
-
},
|
125
|
-
}
|
41
|
+
with open(glob_result[0], 'r') as file:
|
42
|
+
logs = file.read().replace('\n', ' ')
|
126
43
|
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
other_taskruns = get_taskruns(namespace, task_name)
|
135
|
-
filtered_other_taskruns = filter_taskruns(taskrun_filter, other_taskruns)
|
136
|
-
|
137
|
-
tekton_ci_output = process_taskrun_logs(
|
138
|
-
filtered_other_taskruns,
|
139
|
-
core_v1_client,
|
140
|
-
namespace,
|
141
|
-
library,
|
142
|
-
tekton_ci_output
|
143
|
-
)
|
44
|
+
if "Installing" not in logs:
|
45
|
+
print( f"Unable to retrieve logs from for gem '{library}'.")
|
46
|
+
continue
|
47
|
+
|
48
|
+
print(f"Retrieving currency for gem '{library}'.")
|
49
|
+
match = re.search(f"Installing ({library} [^\s]+)", logs)
|
50
|
+
bundle_install_output += f"{match[1]}\n"
|
144
51
|
|
145
|
-
return
|
52
|
+
return bundle_install_output
|
146
53
|
|
147
54
|
|
148
55
|
def get_upstream_version(dependency):
|
@@ -161,11 +68,11 @@ def get_upstream_version(dependency):
|
|
161
68
|
return latest_version
|
162
69
|
|
163
70
|
|
164
|
-
def get_last_supported_version(
|
71
|
+
def get_last_supported_version(bundle_install_output, dependency):
|
165
72
|
"""get up-to-date supported version"""
|
166
73
|
pattern = r" ([^\s]+)"
|
167
74
|
|
168
|
-
last_supported_version = re.search(dependency + pattern,
|
75
|
+
last_supported_version = re.search(dependency + pattern, bundle_install_output, flags=re.I | re.M)
|
169
76
|
|
170
77
|
return last_supported_version[1]
|
171
78
|
|
@@ -183,7 +90,7 @@ def main():
|
|
183
90
|
with open(JSON_FILE) as file:
|
184
91
|
data = load(file)
|
185
92
|
|
186
|
-
|
93
|
+
bundle_install_output = get_bundle_install_output()
|
187
94
|
|
188
95
|
items = data["table"]
|
189
96
|
|
@@ -194,7 +101,7 @@ def main():
|
|
194
101
|
latest_version = get_upstream_version(package)
|
195
102
|
|
196
103
|
if not package in ["rails lts", "rails-api"]:
|
197
|
-
last_supported_version = get_last_supported_version(
|
104
|
+
last_supported_version = get_last_supported_version(bundle_install_output, package)
|
198
105
|
else:
|
199
106
|
last_supported_version = latest_version
|
200
107
|
|