instana 1.215.1 → 1.216.0

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.
@@ -53,6 +53,8 @@ spec:
53
53
  - "sha256:007d2edd515f9cfc8c5c571486aca4fc4a25c903d004decee302961bb8c636ed"
54
54
  # 3.3.1-bookworm
55
55
  - "sha256:5cf0004738f54bd67e4c4316394208ca38a6726eda7a1b0586d95601aad86e5d"
56
+ # 3.4.0-preview1-bookworm
57
+ - "sha256:2690af2a931469abe513b22a083b5ae0b56d4feffc0d3496eb6378723ab203e7"
56
58
  - name: gemfile
57
59
  value:
58
60
  - "./Gemfile"
@@ -217,9 +219,47 @@ spec:
217
219
  workspaces:
218
220
  - name: task-pvc
219
221
  workspace: ruby-tracer-ci-pipeline-pvc
220
- - name: unittest-mongo
222
+ - name: unittest-default-ruby-34
221
223
  runAfter:
222
224
  - unittest-default-ruby-33
225
+ matrix:
226
+ params:
227
+ - name: imageDigest
228
+ value:
229
+ # 3.4.0-preview1-bookworm
230
+ - "sha256:2690af2a931469abe513b22a083b5ae0b56d4feffc0d3496eb6378723ab203e7"
231
+ - name: gemfile
232
+ value:
233
+ - "./gemfiles/cuba_30.gemfile"
234
+ - "./gemfiles/cuba_40.gemfile"
235
+ - "./gemfiles/excon_02.gemfile"
236
+ - "./gemfiles/excon_079.gemfile"
237
+ - "./gemfiles/excon_100.gemfile"
238
+ - "./gemfiles/graphql_10.gemfile"
239
+ - "./gemfiles/graphql_20.gemfile"
240
+ - "./gemfiles/grpc_10.gemfile"
241
+ - "./gemfiles/net_http_01.gemfile"
242
+ - "./gemfiles/rack_20.gemfile"
243
+ - "./gemfiles/rack_30.gemfile"
244
+ - "./gemfiles/rest_client_20.gemfile"
245
+ - "./gemfiles/roda_20.gemfile"
246
+ - "./gemfiles/roda_30.gemfile"
247
+ - "./gemfiles/sinatra_22.gemfile"
248
+ - "./gemfiles/sinatra_30.gemfile"
249
+ - "./gemfiles/sinatra_40.gemfile"
250
+ - "./gemfiles/shoryuken_50.gemfile"
251
+ - "./gemfiles/shoryuken_60.gemfile"
252
+ - name: configuration
253
+ value:
254
+ - "libraries"
255
+ taskRef:
256
+ name: ruby-tracer-unittest-default-libraries-task
257
+ workspaces:
258
+ - name: task-pvc
259
+ workspace: ruby-tracer-ci-pipeline-pvc
260
+ - name: unittest-mongo
261
+ runAfter:
262
+ - unittest-default-ruby-34
223
263
  matrix:
224
264
  params:
225
265
  - name: imageDigest
@@ -232,6 +272,8 @@ spec:
232
272
  - "sha256:007d2edd515f9cfc8c5c571486aca4fc4a25c903d004decee302961bb8c636ed"
233
273
  # 3.3.1-bookworm
234
274
  - "sha256:5cf0004738f54bd67e4c4316394208ca38a6726eda7a1b0586d95601aad86e5d"
275
+ # 3.4.0-preview1-bookworm
276
+ - "sha256:2690af2a931469abe513b22a083b5ae0b56d4feffc0d3496eb6378723ab203e7"
235
277
  - name: gemfile
236
278
  value:
237
279
  - "./gemfiles/mongo_216.gemfile"
@@ -256,6 +298,8 @@ spec:
256
298
  - "sha256:007d2edd515f9cfc8c5c571486aca4fc4a25c903d004decee302961bb8c636ed"
257
299
  # 3.3.1-bookworm
258
300
  - "sha256:5cf0004738f54bd67e4c4316394208ca38a6726eda7a1b0586d95601aad86e5d"
301
+ # 3.4.0-preview1-bookworm
302
+ - "sha256:2690af2a931469abe513b22a083b5ae0b56d4feffc0d3496eb6378723ab203e7"
259
303
  - name: gemfile
260
304
  value:
261
305
  - "./gemfiles/dalli_20.gemfile"
@@ -281,6 +325,8 @@ spec:
281
325
  - "sha256:007d2edd515f9cfc8c5c571486aca4fc4a25c903d004decee302961bb8c636ed"
282
326
  # 3.3.1-bookworm
283
327
  - "sha256:5cf0004738f54bd67e4c4316394208ca38a6726eda7a1b0586d95601aad86e5d"
328
+ # 3.4.0-preview1-bookworm
329
+ - "sha256:2690af2a931469abe513b22a083b5ae0b56d4feffc0d3496eb6378723ab203e7"
284
330
  - name: gemfile
285
331
  value:
286
332
  - "./gemfiles/aws_30.gemfile"
@@ -346,9 +392,35 @@ spec:
346
392
  workspaces:
347
393
  - name: task-pvc
348
394
  workspace: ruby-tracer-ci-pipeline-pvc
349
- - name: unittest-rails-sqlite3
395
+ - name: unittest-redis-ruby-34
350
396
  runAfter:
351
397
  - unittest-redis-ruby-32-33
398
+ matrix:
399
+ params:
400
+ - name: imageDigest
401
+ value:
402
+ # 3.4.0-preview1-bookworm
403
+ - "sha256:2690af2a931469abe513b22a083b5ae0b56d4feffc0d3496eb6378723ab203e7"
404
+ - name: gemfile
405
+ value:
406
+ - "./gemfiles/redis_40.gemfile"
407
+ - "./gemfiles/redis_50.gemfile"
408
+ - "./gemfiles/redis_51.gemfile"
409
+ - "./gemfiles/resque_122.gemfile"
410
+ - "./gemfiles/resque_20.gemfile"
411
+ - "./gemfiles/sidekiq_42.gemfile"
412
+ - "./gemfiles/sidekiq_50.gemfile"
413
+ - "./gemfiles/sidekiq_60.gemfile"
414
+ - "./gemfiles/sidekiq_65.gemfile"
415
+ - "./gemfiles/sidekiq_70.gemfile"
416
+ taskRef:
417
+ name: ruby-tracer-unittest-redis-libraries-task
418
+ workspaces:
419
+ - name: task-pvc
420
+ workspace: ruby-tracer-ci-pipeline-pvc
421
+ - name: unittest-rails-sqlite3
422
+ runAfter:
423
+ - unittest-redis-ruby-34
352
424
  matrix:
353
425
  params:
354
426
  - name: imageDigest
@@ -361,6 +433,8 @@ spec:
361
433
  - "sha256:007d2edd515f9cfc8c5c571486aca4fc4a25c903d004decee302961bb8c636ed"
362
434
  # 3.3.1-bookworm
363
435
  - "sha256:5cf0004738f54bd67e4c4316394208ca38a6726eda7a1b0586d95601aad86e5d"
436
+ # 3.4.0-preview1-bookworm
437
+ - "sha256:2690af2a931469abe513b22a083b5ae0b56d4feffc0d3496eb6378723ab203e7"
364
438
  - name: gemfile
365
439
  value:
366
440
  - "./gemfiles/rails_61.gemfile"
@@ -386,6 +460,8 @@ spec:
386
460
  - "sha256:007d2edd515f9cfc8c5c571486aca4fc4a25c903d004decee302961bb8c636ed"
387
461
  # 3.3.1-bookworm
388
462
  - "sha256:5cf0004738f54bd67e4c4316394208ca38a6726eda7a1b0586d95601aad86e5d"
463
+ # 3.4.0-preview1-bookworm
464
+ - "sha256:2690af2a931469abe513b22a083b5ae0b56d4feffc0d3496eb6378723ab203e7"
389
465
  - name: gemfile
390
466
  value:
391
467
  - "./gemfiles/rails_61.gemfile"
@@ -411,6 +487,8 @@ spec:
411
487
  - "sha256:007d2edd515f9cfc8c5c571486aca4fc4a25c903d004decee302961bb8c636ed"
412
488
  # 3.3.1-bookworm
413
489
  - "sha256:5cf0004738f54bd67e4c4316394208ca38a6726eda7a1b0586d95601aad86e5d"
490
+ # 3.4.0-preview1-bookworm
491
+ - "sha256:2690af2a931469abe513b22a083b5ae0b56d4feffc0d3496eb6378723ab203e7"
414
492
  - name: gemfile
415
493
  value:
416
494
  - "./gemfiles/rails_61.gemfile"
@@ -421,3 +499,19 @@ spec:
421
499
  workspaces:
422
500
  - name: task-pvc
423
501
  workspace: ruby-tracer-ci-pipeline-pvc
502
+ - name: generate-currency-report
503
+ runAfter:
504
+ - unittest-rails-postgres
505
+ taskRef:
506
+ name: ruby-generate-currency-report-task
507
+ workspaces:
508
+ - name: task-pvc
509
+ workspace: ruby-tracer-ci-pipeline-pvc
510
+ - name: upload-currency-report
511
+ runAfter:
512
+ - generate-currency-report
513
+ taskRef:
514
+ name: ruby-upload-currency-report-task
515
+ workspaces:
516
+ - name: task-pvc
517
+ workspace: ruby-tracer-ci-pipeline-pvc
@@ -7,7 +7,7 @@ spec:
7
7
  pipeline: "2h"
8
8
  params:
9
9
  - name: revision
10
- value: "tekton"
10
+ value: "master"
11
11
  pipelineRef:
12
12
  name: ruby-tracer-ci-pipeline
13
13
  workspaces:
@@ -18,4 +18,4 @@ spec:
18
18
  - ReadWriteOnce
19
19
  resources:
20
20
  requests:
21
- storage: 100Mi
21
+ storage: 200Mi
@@ -69,6 +69,10 @@ spec:
69
69
  # 3.3.1-bookworm
70
70
  image: ruby@sha256:5cf0004738f54bd67e4c4316394208ca38a6726eda7a1b0586d95601aad86e5d
71
71
  command: ["sh", "-c", "'true'"]
72
+ - name: prepuller-34
73
+ # 3.4.0-preview1-bookworm
74
+ image: ruby@sha256:2690af2a931469abe513b22a083b5ae0b56d4feffc0d3496eb6378723ab203e7
75
+ command: ["sh", "-c", "'true'"]
72
76
  # Use the pause container to ensure the Pod goes into a `Running` phase
73
77
  # but doesn't take up resource on the cluster
74
78
  containers:
@@ -21,7 +21,7 @@ fi
21
21
 
22
22
  case "${TEST_CONFIGURATION}" in
23
23
  libraries)
24
- export COVERAGE_PATH="cov_$(basename ${BUNDLE_GEMFILE%.gemfile})_ruby_${RUBY_VERSION}"
24
+ export TEST_SETUP="$(basename ${BUNDLE_GEMFILE%.gemfile})_ruby_${RUBY_VERSION}"
25
25
  export APPRAISAL_INITIALIZED=1 ;;
26
26
  rails)
27
27
  if [[ -z "${DATABASE_URL}" ]]; then
@@ -31,23 +31,36 @@ rails)
31
31
  else
32
32
  echo "DATABASE_URL is '${DATABASE_URL}'"
33
33
  fi
34
- export COVERAGE_PATH="cov_$(basename ${BUNDLE_GEMFILE%.gemfile})_${DATABASE_URL%:[:/]*}_ruby_${RUBY_VERSION}"
34
+ export TEST_SETUP="$(basename ${BUNDLE_GEMFILE%.gemfile})_${DATABASE_URL%:[:/]*}_ruby_${RUBY_VERSION}"
35
35
  export APPRAISAL_INITIALIZED=1 ;;
36
36
  core)
37
- export COVERAGE_PATH="cov_core_ruby_${RUBY_VERSION}" ;;
37
+ export TEST_SETUP="core_ruby_${RUBY_VERSION}" ;;
38
38
  lint)
39
- unset APPRAISAL_INITIALIZED ;;
39
+ export TEST_SETUP="lint_ruby_${RUBY_VERSION}" ;;
40
40
  *)
41
41
  echo "ERROR \$TEST_CONFIGURATION='${TEST_CONFIGURATION}' is unsupported " \
42
42
  "not in (libraries|rails|core|lint)" >&2
43
43
  exit 5 ;;
44
44
  esac
45
45
 
46
+ export COVERAGE_PATH="cov_${TEST_SETUP}"
47
+ export DEPENDENCY_PATH="dep_${TEST_SETUP}"
48
+
46
49
  echo -n "Configuration is '${TEST_CONFIGURATION}' on Ruby ${RUBY_VERSION} "
47
50
  echo "with dependencies in '${BUNDLE_GEMFILE}'"
48
51
 
52
+ # The gemfiles folder is under the tekton shared workspace
53
+ # but we have to prevent the sharing, and the concurrent writing
54
+ # of the gemfiles/*.lock files
55
+ # so here we create a container-local, non-shared copy, of the sources and use that.
56
+ cp --recursive ../ruby-sensor/ /tmp/
57
+ pushd /tmp/ruby-sensor/
58
+
49
59
  # Update RubyGems
50
- gem update --system > /dev/null
60
+ while ! gem update --system > /dev/null; do
61
+ echo "Updating Gem with 'gem update --system' failed, retrying in a minute"
62
+ sleep 60
63
+ done
51
64
  echo "Gem version $(gem --version)"
52
65
 
53
66
  # Configure Bundler
@@ -55,7 +68,10 @@ bundler --version
55
68
  bundle config set path '/tmp/vendor/bundle'
56
69
 
57
70
  # Install Dependencies
58
- bundle check || bundle install
71
+ while ! (bundle check || bundle install) | tee "${DEPENDENCY_PATH}"; do
72
+ echo "Bundle install failed, retrying in a minute"
73
+ sleep 60
74
+ done
59
75
 
60
76
  # Run tests
61
77
  if [[ "${TEST_CONFIGURATION}" = "lint" ]]; then
@@ -63,4 +79,9 @@ if [[ "${TEST_CONFIGURATION}" = "lint" ]]; then
63
79
  else
64
80
  mkdir --parents "${COVERAGE_PATH}/_junit"
65
81
  bundle exec rake
82
+ cp --recursive "${COVERAGE_PATH}" "${OLDPWD}/"
66
83
  fi
84
+
85
+ # Put back the dependency insallation results to the shared workspace
86
+ cp --recursive "${DEPENDENCY_PATH}" "${OLDPWD}/"
87
+ popd
@@ -36,7 +36,7 @@ spec:
36
36
  - ReadWriteOnce
37
37
  resources:
38
38
  requests:
39
- storage: 100Mi
39
+ storage: 200Mi
40
40
  ---
41
41
  apiVersion: triggers.tekton.dev/v1beta1
42
42
  kind: TriggerBinding
data/.tekton/task.yaml CHANGED
@@ -291,3 +291,75 @@ spec:
291
291
  workingDir: /workspace/ruby-sensor/
292
292
  command:
293
293
  - /workspace/ruby-sensor/.tekton/run_unittests.sh
294
+ ---
295
+ apiVersion: tekton.dev/v1
296
+ kind: Task
297
+ metadata:
298
+ name: ruby-generate-currency-report-task
299
+ spec:
300
+ workspaces:
301
+ - name: task-pvc
302
+ mountPath: /workspace
303
+ steps:
304
+ - name: generate-currency-report
305
+ # 3.10.13-bookworm
306
+ image: python@sha256:c970ff53939772f47b0672e380328afb50d8fd1c0568ed4f82c22effc54244fc
307
+ script: |
308
+ #!/usr/bin/env bash
309
+
310
+ cd /workspace/ruby-sensor/.tekton/.currency
311
+
312
+ python -m venv /tmp/venv
313
+ source /tmp/venv/bin/activate
314
+ pip install -r resources/requirements.txt
315
+
316
+ python scripts/generate_report.py
317
+ if [ $? -ne 0 ]; then
318
+ echo "Error occured while generating the ruby tracer currency report." >&2
319
+ exit 1
320
+ fi
321
+ cat docs/report.md
322
+ ---
323
+ apiVersion: tekton.dev/v1
324
+ kind: Task
325
+ metadata:
326
+ name: ruby-upload-currency-report-task
327
+ spec:
328
+ params:
329
+ - name: github-token-secret
330
+ default: instanacd-github-api-token
331
+ workspaces:
332
+ - name: task-pvc
333
+ mountPath: /workspace
334
+ steps:
335
+ - name: upload-currency-report
336
+ # alpine/git:2.43.0
337
+ image: alpine/git@sha256:6ff4de047dcc8f0c7d75d2efff63fbc189e87d2f458305f2cc8f165ff83309cf
338
+ env:
339
+ - name: GH_ENTERPRISE_TOKEN
340
+ valueFrom:
341
+ secretKeyRef:
342
+ name: $(params.github-token-secret)
343
+ key: "GH_ENTERPRISE_TOKEN"
344
+ script: |
345
+ #!/bin/sh
346
+
347
+ cd /workspace
348
+ git clone https://oauth2:$GH_ENTERPRISE_TOKEN@github.ibm.com/instana/tracer-reports.git
349
+
350
+ if [ $? -ne 0 ]; then
351
+ echo "The attempt to clone the tracer-reports repository failed, preventing the upload of ruby tracer currency report." >&2
352
+ exit 1
353
+ fi
354
+
355
+ cd tracer-reports
356
+
357
+ cp ../ruby-sensor/.tekton/.currency/docs/report.md ./automated/currency/ruby/report.md
358
+
359
+ git config user.name "Instanacd PAT for GitHub Enterprise"
360
+ git config user.email instana.ibm.github.enterprise@ibm.com
361
+
362
+ git add .
363
+
364
+ git commit -m "chore: Updated ruby currency report"
365
+ git push origin main
@@ -11,6 +11,7 @@ gem "puma"
11
11
  gem "rack-test"
12
12
  gem "simplecov", "~> 0.21.2"
13
13
  gem "mail", ">= 2.8.1"
14
+ gem "mutex_m" # mutex_m is not part of the default gems since Ruby 3.4.0
14
15
  gem "rails", ">= 6.1", "< 7.0"
15
16
  gem "mysql2", "0.5.5"
16
17
  gem "pg"
@@ -8,6 +8,7 @@ gem "puma"
8
8
  gem "rack-test"
9
9
  gem "simplecov", "~> 0.21.2"
10
10
  gem "mail", ">= 2.8.1"
11
+ gem "mutex_m" # mutex_m is not part of the default gems since Ruby 3.4.0
11
12
  gem "rails", "7.0.3"
12
13
  gem "mysql2", "0.5.5"
13
14
  gem "pg"
@@ -8,6 +8,7 @@ gem "puma"
8
8
  gem "rack-test"
9
9
  gem "simplecov", "~> 0.21.2"
10
10
  gem "mail", ">= 2.8.1"
11
+ gem "mutex_m" # mutex_m is not part of the default gems since Ruby 3.4.0
11
12
  gem "rails", ">= 7.1"
12
13
  gem "mysql2", "0.5.5"
13
14
  gem "pg"
@@ -0,0 +1,16 @@
1
+ # This file was generated by Appraisal
2
+
3
+ # (c) Copyright IBM Corp. 2024
4
+
5
+ source "https://rubygems.org"
6
+
7
+ gem "minitest-reporters"
8
+ gem "webmock"
9
+ gem "puma"
10
+ gem "rack-test"
11
+ gem "simplecov", "~> 0.21.2"
12
+ gem "sequel", "~> 5.60"
13
+ gem "sqlite3", "~> 1.4"
14
+ gem "mysql2", "0.5.5"
15
+
16
+ gemspec path: "../"
@@ -0,0 +1,16 @@
1
+ # This file was generated by Appraisal
2
+
3
+ # (c) Copyright IBM Corp. 2024
4
+
5
+ source "https://rubygems.org"
6
+
7
+ gem "minitest-reporters"
8
+ gem "webmock"
9
+ gem "puma"
10
+ gem "rack-test"
11
+ gem "simplecov", "~> 0.21.2"
12
+ gem "sequel", "~> 5.70"
13
+ gem "sqlite3", "~> 1.4"
14
+ gem "mysql2", "0.5.5"
15
+
16
+ gemspec path: "../"
@@ -0,0 +1,16 @@
1
+ # This file was generated by Appraisal
2
+
3
+ # (c) Copyright IBM Corp. 2024
4
+
5
+ source "https://rubygems.org"
6
+
7
+ gem "minitest-reporters"
8
+ gem "webmock"
9
+ gem "puma"
10
+ gem "rack-test"
11
+ gem "simplecov", "~> 0.21.2"
12
+ gem "sequel", ">= 5.80"
13
+ gem "sqlite3", "~> 1.4"
14
+ gem "mysql2", "0.5.5"
15
+
16
+ gemspec path: "../"
@@ -0,0 +1,20 @@
1
+ # (c) Copyright IBM Corp. 2024
2
+
3
+ module Instana
4
+ module Activators
5
+ class Sequel < Activator
6
+ def can_instrument?
7
+ defined?(::Sequel::Database)
8
+ end
9
+
10
+ def instrument
11
+ require 'instana/instrumentation/sequel'
12
+
13
+ ::Sequel::Database
14
+ .prepend(Instana::Instrumentation::Sequel)
15
+
16
+ true
17
+ end
18
+ end
19
+ end
20
+ end
@@ -73,6 +73,7 @@ module Instana
73
73
  @config[:'resque-client'] = { :enabled => true, :propagate => true }
74
74
  @config[:'resque-worker'] = { :enabled => true, :'setup-fork' => true }
75
75
  @config[:'rest-client'] = { :enabled => true }
76
+ @config[:sequel] = { :enabled => true }
76
77
  @config[:'sidekiq-client'] = { :enabled => true }
77
78
  @config[:'sidekiq-worker'] = { :enabled => true }
78
79
  end
@@ -0,0 +1,42 @@
1
+ # (c) Copyright IBM Corp. 2024
2
+
3
+ module Instana
4
+ module Instrumentation
5
+ module Sequel
6
+ IGNORED_SQL = %w[BEGIN COMMIT SET].freeze
7
+ VERSION_SELECT_STATEMENT = "SELECT VERSION()".freeze
8
+ SANITIZE_REGEXP = /('[\s\S][^']*'|\d*\.\d+|\d+|NULL)/i.freeze
9
+
10
+ def log_connection_yield(sql, conn, *args)
11
+ call_payload = {
12
+ sequel: {
13
+ adapter: opts[:adapter],
14
+ host: opts[:host],
15
+ username: opts[:user],
16
+ db: opts[:database],
17
+ sql: maybe_sanitize(sql)
18
+ }
19
+ }
20
+ maybe_trace(call_payload) { super(sql, conn, *args) }
21
+ end
22
+
23
+ private
24
+
25
+ def maybe_sanitize(sql)
26
+ ::Instana.config[:sanitize_sql] ? sql.gsub(SANITIZE_REGEXP, '?') : sql
27
+ end
28
+
29
+ def maybe_trace(call_payload, &blk)
30
+ if ::Instana.tracer.tracing? && !ignored?(call_payload)
31
+ ::Instana.tracer.trace(:sequel, call_payload, &blk)
32
+ else
33
+ yield
34
+ end
35
+ end
36
+
37
+ def ignored?(call_payload)
38
+ IGNORED_SQL.any? { |s| call_payload[:sequel][:sql].upcase.start_with?(s) } || call_payload[:sequel][:sql].upcase == VERSION_SELECT_STATEMENT
39
+ end
40
+ end
41
+ end
42
+ end
@@ -7,12 +7,12 @@ module Instana
7
7
  :memcache, :'net-http', :rack, :render, :'rpc-client',
8
8
  :'rpc-server', :'sidekiq-client', :'sidekiq-worker',
9
9
  :redis, :'resque-client', :'resque-worker', :'graphql.server', :dynamodb, :s3, :sns, :sqs, :'aws.lambda.entry', :activejob, :log, :"mail.actionmailer",
10
- :"aws.lambda.invoke", :mongo ].freeze
10
+ :"aws.lambda.invoke", :mongo, :sequel ].freeze
11
11
  ENTRY_SPANS = [ :rack, :'resque-worker', :'rpc-server', :'sidekiq-worker', :'graphql.server', :sqs,
12
12
  :'aws.lambda.entry' ].freeze
13
13
  EXIT_SPANS = [ :activerecord, :excon, :'net-http', :'resque-client',
14
14
  :'rpc-client', :'sidekiq-client', :redis, :dynamodb, :s3, :sns, :sqs, :log, :"mail.actionmailer",
15
- :"aws.lambda.invoke", :mongo ].freeze
15
+ :"aws.lambda.invoke", :mongo, :sequel ].freeze
16
16
  HTTP_SPANS = [ :rack, :excon, :'net-http' ].freeze
17
17
 
18
18
  attr_accessor :parent
@@ -2,6 +2,6 @@
2
2
  # (c) Copyright Instana Inc. 2016
3
3
 
4
4
  module Instana
5
- VERSION = "1.215.1"
5
+ VERSION = "1.216.0"
6
6
  VERSION_FULL = "instana-#{VERSION}"
7
7
  end
@@ -43,7 +43,7 @@ class ActivatorTest < Minitest::Test
43
43
  ENV.delete('INSTANA_ACTIVATE_SET')
44
44
  subject = activated_set
45
45
  assert_instance_of Set, subject
46
- assert_equal 31, subject.length
46
+ assert_equal 32, subject.length
47
47
  ensure
48
48
  ENV.delete('INSTANA_ACTIVATE_SET')
49
49
  end
@@ -17,7 +17,7 @@ class RailsActiveRecordTest < Minitest::Test
17
17
  ActiveRecord::Migration.suppress_messages do
18
18
  ActiveRecord::Migration.run(CreateBlocks, direction: :down)
19
19
  end
20
- ActiveRecord::Base.remove_connection(@connection)
20
+ ActiveRecord::Base.remove_connection
21
21
  end
22
22
 
23
23
  def test_config_defaults
@@ -0,0 +1,105 @@
1
+ # (c) Copyright IBM Corp. 2024
2
+
3
+ require 'test_helper'
4
+ require 'sequel'
5
+
6
+ class SequelTest < Minitest::Test
7
+ def setup
8
+ skip unless ENV['DATABASE_URL']
9
+ db_url = ENV['DATABASE_URL'].sub("sqlite3", "sqlite")
10
+ @db = Sequel.connect(db_url)
11
+ @db.create_table!(:blocks) do
12
+ String :name
13
+ String :color
14
+ end
15
+ @model = @db[:blocks]
16
+ end
17
+
18
+ def teardown
19
+ @db.drop_table(:blocks)
20
+ @db.disconnect
21
+ end
22
+
23
+ def test_config_defaults
24
+ assert ::Instana.config[:sanitize_sql] == true
25
+ assert ::Instana.config[:sequel].is_a?(Hash)
26
+ assert ::Instana.config[:sequel].key?(:enabled)
27
+ assert_equal true, ::Instana.config[:sequel][:enabled]
28
+ end
29
+
30
+ def test_create
31
+ Instana::Tracer.start_or_continue_trace(:sequel_test, {}) do
32
+ @model.insert(name: 'core', color: 'blue')
33
+ end
34
+ spans = ::Instana.processor.queued_spans
35
+ assert_equal 2, spans.length
36
+ span = find_first_span_by_name(spans, :sequel)
37
+ data = span[:data][:sequel]
38
+ assert data[:sql].start_with?('INSERT INTO')
39
+ end
40
+
41
+ def test_read
42
+ @model.insert(name: 'core', color: 'blue')
43
+ Instana::Tracer.start_or_continue_trace(:sequel_test, {}) do
44
+ @model.where(name: 'core').first
45
+ end
46
+ spans = ::Instana.processor.queued_spans
47
+ assert_equal 2, spans.length
48
+ span = find_first_span_by_name(spans, :sequel)
49
+ data = span[:data][:sequel]
50
+ assert data[:sql].start_with?('SELECT')
51
+ assert_nil span[:ec]
52
+ end
53
+
54
+ def test_update
55
+ @model.insert(name: 'core', color: 'blue')
56
+ Instana::Tracer.start_or_continue_trace(:sequel_test, {}) do
57
+ @model.where(name: 'core').update(color: 'red')
58
+ end
59
+ spans = ::Instana.processor.queued_spans
60
+ assert_equal 2, spans.length
61
+ span = find_first_span_by_name(spans, :sequel)
62
+ data = span[:data][:sequel]
63
+ assert data[:sql].start_with?('UPDATE')
64
+ assert_nil span[:ec]
65
+ assert_equal 'red', @model.where(name: 'core').first[:color]
66
+ end
67
+
68
+ def test_delete
69
+ @model.insert(name: 'core', color: 'blue')
70
+ Instana::Tracer.start_or_continue_trace(:sequel_test, {}) do
71
+ @model.where(name: 'core').delete
72
+ end
73
+ spans = ::Instana.processor.queued_spans
74
+ assert_equal 2, spans.length
75
+ span = find_first_span_by_name(spans, :sequel)
76
+ data = span[:data][:sequel]
77
+ assert data[:sql].start_with?('DELETE')
78
+ assert_nil span[:ec]
79
+ assert_nil @model.where(name: 'core').first
80
+ end
81
+
82
+ def test_raw
83
+ Instana::Tracer.start_or_continue_trace(:sequel_test, {}) do
84
+ @db.run('SELECT 1')
85
+ end
86
+ spans = ::Instana.processor.queued_spans
87
+ assert_equal 2, spans.length
88
+ span = find_first_span_by_name(spans, :sequel)
89
+ data = span[:data][:sequel]
90
+ assert 'SELECT 1', data[:sql]
91
+ assert_nil span[:ec]
92
+ end
93
+
94
+ def test_raw_error
95
+ assert_raises Sequel::DatabaseError do
96
+ Instana::Tracer.start_or_continue_trace(:sequel_test, {}) do
97
+ @db.run('INVALID')
98
+ end
99
+ end
100
+ spans = ::Instana.processor.queued_spans
101
+ assert_equal 2, spans.length
102
+ span = find_first_span_by_name(spans, :sequel)
103
+ assert_equal 1, span[:ec]
104
+ end
105
+ end