datadog-ci 1.11.0 → 1.12.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -2
- data/lib/datadog/ci/contrib/cuprite/configuration/settings.rb +34 -0
- data/lib/datadog/ci/contrib/cuprite/driver.rb +94 -0
- data/lib/datadog/ci/contrib/cuprite/ext.rb +15 -0
- data/lib/datadog/ci/contrib/cuprite/integration.rb +44 -0
- data/lib/datadog/ci/contrib/cuprite/patcher.rb +24 -0
- data/lib/datadog/ci/contrib/cuprite/script_executor.rb +32 -0
- data/lib/datadog/ci/contrib/selenium/capybara_driver.rb +4 -4
- data/lib/datadog/ci/contrib/selenium/configuration/settings.rb +3 -1
- data/lib/datadog/ci/contrib/selenium/driver.rb +4 -4
- data/lib/datadog/ci/contrib/selenium/ext.rb +0 -15
- data/lib/datadog/ci/contrib/selenium/navigation.rb +2 -2
- data/lib/datadog/ci/ext/environment/providers/github_actions.rb +3 -0
- data/lib/datadog/ci/ext/environment.rb +4 -0
- data/lib/datadog/ci/ext/rum.rb +26 -0
- data/lib/datadog/ci/test_optimisation/component.rb +2 -0
- data/lib/datadog/ci/test_visibility/transport.rb +14 -1
- data/lib/datadog/ci/utils/rum.rb +42 -0
- data/lib/datadog/ci/version.rb +1 -1
- data/lib/datadog/ci.rb +1 -0
- metadata +11 -7
- data/lib/datadog/ci/contrib/selenium/rum.rb +0 -43
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ccfa630b807e5675fd68f68e571aeda530a0923e4cd4bdd29451f3065f8c4c7c
|
4
|
+
data.tar.gz: 0a777e031ade13b09619a034206a1258285fd3e63c4bd36a5a3e24a3840590e0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c47398d3cc2557b047741b7f8699e6464ee323bf3a32da43442fad8e666ca7cbc3fa973a88a006be3b86d0d3a61b44573755589b909fc21b75feb9b1f374de23
|
7
|
+
data.tar.gz: e183e41a31344d2beb1f03790d48f31259d52b043f23a340b1480db065e23909ce3f90204dbc9e98a4ef88a22a3fe16d759bf47fca080701c0a3a750ef7adfc9
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
## [Unreleased]
|
2
2
|
|
3
|
+
## [1.12.0] - 2025-01-23
|
4
|
+
|
5
|
+
### Added
|
6
|
+
|
7
|
+
* Add Datadog RUM integration support for browser tests with cuprite driver ([#283][])
|
8
|
+
|
3
9
|
## [1.11.0] - 2025-01-02
|
4
10
|
|
5
11
|
### Changed
|
@@ -380,7 +386,8 @@ Currently test suite level visibility is not used by our instrumentation: it wil
|
|
380
386
|
|
381
387
|
- Ruby versions < 2.7 no longer supported ([#8][])
|
382
388
|
|
383
|
-
[Unreleased]: https://github.com/DataDog/datadog-ci-rb/compare/v1.
|
389
|
+
[Unreleased]: https://github.com/DataDog/datadog-ci-rb/compare/v1.12.0...main
|
390
|
+
[1.12.0]: https://github.com/DataDog/datadog-ci-rb/compare/v1.11.0...v1.12.0
|
384
391
|
[1.11.0]: https://github.com/DataDog/datadog-ci-rb/compare/v1.10.0...v1.11.0
|
385
392
|
[1.10.0]: https://github.com/DataDog/datadog-ci-rb/compare/v1.9.0...v1.10.0
|
386
393
|
[1.9.0]: https://github.com/DataDog/datadog-ci-rb/compare/v1.8.1...v1.9.0
|
@@ -546,4 +553,5 @@ Currently test suite level visibility is not used by our instrumentation: it wil
|
|
546
553
|
[#267]: https://github.com/DataDog/datadog-ci-rb/issues/267
|
547
554
|
[#271]: https://github.com/DataDog/datadog-ci-rb/issues/271
|
548
555
|
[#272]: https://github.com/DataDog/datadog-ci-rb/issues/272
|
549
|
-
[#275]: https://github.com/DataDog/datadog-ci-rb/issues/275
|
556
|
+
[#275]: https://github.com/DataDog/datadog-ci-rb/issues/275
|
557
|
+
[#283]: https://github.com/DataDog/datadog-ci-rb/issues/283
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "datadog/core"
|
4
|
+
|
5
|
+
require_relative "../ext"
|
6
|
+
require_relative "../../settings"
|
7
|
+
|
8
|
+
require_relative "../../../ext/rum"
|
9
|
+
|
10
|
+
module Datadog
|
11
|
+
module CI
|
12
|
+
module Contrib
|
13
|
+
module Cuprite
|
14
|
+
module Configuration
|
15
|
+
# Custom settings for the Cuprite integration
|
16
|
+
# @public_api
|
17
|
+
class Settings < Datadog::CI::Contrib::Settings
|
18
|
+
option :enabled do |o|
|
19
|
+
o.type :bool
|
20
|
+
o.env Ext::ENV_ENABLED
|
21
|
+
o.default true
|
22
|
+
end
|
23
|
+
|
24
|
+
option :rum_flush_wait_millis do |o|
|
25
|
+
o.type :int
|
26
|
+
o.env CI::Ext::RUM::ENV_RUM_FLUSH_WAIT_MILLIS
|
27
|
+
o.default 500
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "script_executor"
|
4
|
+
require_relative "../patcher"
|
5
|
+
|
6
|
+
require_relative "../../ext/rum"
|
7
|
+
require_relative "../../ext/test"
|
8
|
+
require_relative "../../utils/rum"
|
9
|
+
|
10
|
+
module Datadog
|
11
|
+
module CI
|
12
|
+
module Contrib
|
13
|
+
module Cuprite
|
14
|
+
# instruments Capybara::Cuprite::Driver
|
15
|
+
module Driver
|
16
|
+
def self.included(base)
|
17
|
+
base.prepend(InstanceMethods)
|
18
|
+
end
|
19
|
+
|
20
|
+
module InstanceMethods
|
21
|
+
def visit(url)
|
22
|
+
result = super
|
23
|
+
|
24
|
+
return result unless datadog_configuration[:enabled]
|
25
|
+
|
26
|
+
Datadog.logger.debug("[Cuprite] Navigation to #{url}")
|
27
|
+
|
28
|
+
# on session reset Capybara navigates to about:blank
|
29
|
+
return result if url == "about:blank"
|
30
|
+
|
31
|
+
active_test = Datadog::CI.active_test
|
32
|
+
Datadog.logger.debug("[Cuprite] Active test: #{active_test}")
|
33
|
+
|
34
|
+
return result unless active_test
|
35
|
+
|
36
|
+
# Set the test's trace id as a cookie in browser session
|
37
|
+
Datadog.logger.debug do
|
38
|
+
"[Cuprite] Setting cookie #{CI::Ext::RUM::COOKIE_TEST_EXECUTION_ID} to #{active_test.trace_id}"
|
39
|
+
end
|
40
|
+
set_cookie(CI::Ext::RUM::COOKIE_TEST_EXECUTION_ID, active_test.trace_id.to_s)
|
41
|
+
|
42
|
+
# set the test type to browser
|
43
|
+
active_test.set_tag(CI::Ext::Test::TAG_TYPE, CI::Ext::Test::Type::BROWSER)
|
44
|
+
|
45
|
+
# set the tags specific to the browser test
|
46
|
+
active_test.set_tag(CI::Ext::Test::TAG_BROWSER_DRIVER, "cuprite")
|
47
|
+
active_test.set_tag(CI::Ext::Test::TAG_BROWSER_DRIVER_VERSION, datadog_integration.version)
|
48
|
+
active_test.set_tag(CI::Ext::Test::TAG_BROWSER_NAME, browser.options.browser_name || "chrome")
|
49
|
+
active_test.set_tag(CI::Ext::Test::TAG_BROWSER_VERSION, browser.version.product)
|
50
|
+
|
51
|
+
result
|
52
|
+
end
|
53
|
+
|
54
|
+
def reset!
|
55
|
+
Datadog.logger.debug("[Cuprite] Driver reset! event")
|
56
|
+
|
57
|
+
datadog_end_rum_session
|
58
|
+
|
59
|
+
super
|
60
|
+
end
|
61
|
+
|
62
|
+
def quit
|
63
|
+
Datadog.logger.debug("[Cuprite] Driver quit event")
|
64
|
+
|
65
|
+
datadog_end_rum_session
|
66
|
+
|
67
|
+
super
|
68
|
+
end
|
69
|
+
|
70
|
+
private
|
71
|
+
|
72
|
+
def datadog_integration
|
73
|
+
CI::Contrib::Instrumentation.fetch_integration(:cuprite)
|
74
|
+
end
|
75
|
+
|
76
|
+
def datadog_configuration
|
77
|
+
Datadog.configuration.ci[:cuprite]
|
78
|
+
end
|
79
|
+
|
80
|
+
def datadog_end_rum_session
|
81
|
+
return unless datadog_configuration[:enabled]
|
82
|
+
|
83
|
+
executor = ScriptExecutor.new(browser)
|
84
|
+
Utils::RUM.stop_rum_session(executor, rum_flush_wait_millis: datadog_configuration[:rum_flush_wait_millis])
|
85
|
+
|
86
|
+
Datadog.logger.debug("[Cuprite] Deleting Datadog cookie")
|
87
|
+
remove_cookie(CI::Ext::RUM::COOKIE_TEST_EXECUTION_ID)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "../integration"
|
4
|
+
require_relative "configuration/settings"
|
5
|
+
require_relative "patcher"
|
6
|
+
|
7
|
+
module Datadog
|
8
|
+
module CI
|
9
|
+
module Contrib
|
10
|
+
module Cuprite
|
11
|
+
# Description of Cuprite integration
|
12
|
+
class Integration < Contrib::Integration
|
13
|
+
MINIMUM_VERSION = Gem::Version.new("0.15.0")
|
14
|
+
|
15
|
+
def version
|
16
|
+
Gem.loaded_specs["cuprite"]&.version
|
17
|
+
end
|
18
|
+
|
19
|
+
def loaded?
|
20
|
+
!defined?(::Capybara).nil? && !defined?(::Capybara::Cuprite).nil? &&
|
21
|
+
!defined?(::Capybara::Cuprite::Driver).nil?
|
22
|
+
end
|
23
|
+
|
24
|
+
def compatible?
|
25
|
+
super && version >= MINIMUM_VERSION
|
26
|
+
end
|
27
|
+
|
28
|
+
# additional instrumentations for test libraries are late instrumented on test session start
|
29
|
+
def late_instrument?
|
30
|
+
true
|
31
|
+
end
|
32
|
+
|
33
|
+
def new_configuration
|
34
|
+
Configuration::Settings.new
|
35
|
+
end
|
36
|
+
|
37
|
+
def patcher
|
38
|
+
Patcher
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "../patcher"
|
4
|
+
|
5
|
+
require_relative "driver"
|
6
|
+
|
7
|
+
module Datadog
|
8
|
+
module CI
|
9
|
+
module Contrib
|
10
|
+
module Cuprite
|
11
|
+
# Patcher enables patching of 'Capybara::Cuprite::Driver' class.
|
12
|
+
module Patcher
|
13
|
+
include Datadog::CI::Contrib::Patcher
|
14
|
+
|
15
|
+
module_function
|
16
|
+
|
17
|
+
def patch
|
18
|
+
::Capybara::Cuprite::Driver.include(Driver)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "../../ext/rum"
|
4
|
+
|
5
|
+
module Datadog
|
6
|
+
module CI
|
7
|
+
module Contrib
|
8
|
+
module Cuprite
|
9
|
+
class ScriptExecutor
|
10
|
+
# Ferrum::Browser requires a JS script to be wrapped in a function() { ... } block
|
11
|
+
WRAPPED_SCRIPTS = {
|
12
|
+
CI::Ext::RUM::SCRIPT_IS_RUM_ACTIVE => "function() { #{CI::Ext::RUM::SCRIPT_IS_RUM_ACTIVE}; }",
|
13
|
+
CI::Ext::RUM::SCRIPT_STOP_RUM_SESSION => <<~JS
|
14
|
+
function() {
|
15
|
+
#{CI::Ext::RUM::SCRIPT_STOP_RUM_SESSION}
|
16
|
+
}
|
17
|
+
JS
|
18
|
+
}.freeze
|
19
|
+
|
20
|
+
def initialize(ferrum_browser)
|
21
|
+
@ferrum_browser = ferrum_browser
|
22
|
+
end
|
23
|
+
|
24
|
+
def execute_script(script)
|
25
|
+
script = WRAPPED_SCRIPTS.fetch(script, script)
|
26
|
+
@ferrum_browser.evaluate_func(script)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -2,9 +2,9 @@
|
|
2
2
|
|
3
3
|
require_relative "../patcher"
|
4
4
|
|
5
|
-
require_relative "ext"
|
6
|
-
require_relative "rum"
|
5
|
+
require_relative "../../ext/rum"
|
7
6
|
require_relative "../../ext/test"
|
7
|
+
require_relative "../../utils/rum"
|
8
8
|
|
9
9
|
module Datadog
|
10
10
|
module CI
|
@@ -22,10 +22,10 @@ module Datadog
|
|
22
22
|
|
23
23
|
Datadog.logger.debug("[Selenium] Capybara session reset event")
|
24
24
|
|
25
|
-
RUM.stop_rum_session(@browser)
|
25
|
+
Utils::RUM.stop_rum_session(@browser, rum_flush_wait_millis: datadog_configuration[:rum_flush_wait_millis])
|
26
26
|
|
27
27
|
Datadog.logger.debug("[Selenium] RUM session stopped, deleting cookie")
|
28
|
-
@browser.manage.delete_cookie(Ext::COOKIE_TEST_EXECUTION_ID)
|
28
|
+
@browser.manage.delete_cookie(CI::Ext::RUM::COOKIE_TEST_EXECUTION_ID)
|
29
29
|
rescue ::Selenium::WebDriver::Error::WebDriverError => e
|
30
30
|
Datadog.logger.debug("[Selenium] Error while resetting Capybara session: #{e.message}")
|
31
31
|
ensure
|
@@ -5,6 +5,8 @@ require "datadog/core"
|
|
5
5
|
require_relative "../ext"
|
6
6
|
require_relative "../../settings"
|
7
7
|
|
8
|
+
require_relative "../../../ext/rum"
|
9
|
+
|
8
10
|
module Datadog
|
9
11
|
module CI
|
10
12
|
module Contrib
|
@@ -21,7 +23,7 @@ module Datadog
|
|
21
23
|
|
22
24
|
option :rum_flush_wait_millis do |o|
|
23
25
|
o.type :int
|
24
|
-
o.env Ext::ENV_RUM_FLUSH_WAIT_MILLIS
|
26
|
+
o.env CI::Ext::RUM::ENV_RUM_FLUSH_WAIT_MILLIS
|
25
27
|
o.default 500
|
26
28
|
end
|
27
29
|
end
|
@@ -2,8 +2,8 @@
|
|
2
2
|
|
3
3
|
require_relative "../patcher"
|
4
4
|
|
5
|
-
require_relative "
|
6
|
-
require_relative "rum"
|
5
|
+
require_relative "../../utils/rum"
|
6
|
+
require_relative "../../ext/rum"
|
7
7
|
require_relative "../../ext/test"
|
8
8
|
|
9
9
|
module Datadog
|
@@ -22,10 +22,10 @@ module Datadog
|
|
22
22
|
|
23
23
|
Datadog.logger.debug("[Selenium] Driver quit event")
|
24
24
|
|
25
|
-
RUM.stop_rum_session(@bridge)
|
25
|
+
Utils::RUM.stop_rum_session(@bridge, rum_flush_wait_millis: datadog_configuration[:rum_flush_wait_millis])
|
26
26
|
|
27
27
|
Datadog.logger.debug("[Selenium] RUM session stopped, deleting cookie")
|
28
|
-
@bridge.manage.delete_cookie(Ext::COOKIE_TEST_EXECUTION_ID)
|
28
|
+
@bridge.manage.delete_cookie(CI::Ext::RUM::COOKIE_TEST_EXECUTION_ID)
|
29
29
|
rescue ::Selenium::WebDriver::Error::WebDriverError => e
|
30
30
|
Datadog.logger.debug("[Selenium] Error while quitting Selenium driver: #{e.message}")
|
31
31
|
ensure
|
@@ -8,21 +8,6 @@ module Datadog
|
|
8
8
|
# @public_api
|
9
9
|
module Ext
|
10
10
|
ENV_ENABLED = "DD_CIVISIBILITY_SELENIUM_ENABLED"
|
11
|
-
ENV_RUM_FLUSH_WAIT_MILLIS = "DD_CIVISIBILITY_RUM_FLUSH_WAIT_MILLIS"
|
12
|
-
|
13
|
-
COOKIE_TEST_EXECUTION_ID = "datadog-ci-visibility-test-execution-id"
|
14
|
-
|
15
|
-
SCRIPT_IS_RUM_ACTIVE = <<~JS
|
16
|
-
return !!window.DD_RUM
|
17
|
-
JS
|
18
|
-
SCRIPT_STOP_RUM_SESSION = <<~JS
|
19
|
-
if (window.DD_RUM && window.DD_RUM.stopSession) {
|
20
|
-
window.DD_RUM.stopSession();
|
21
|
-
return true;
|
22
|
-
} else {
|
23
|
-
return false;
|
24
|
-
}
|
25
|
-
JS
|
26
11
|
end
|
27
12
|
end
|
28
13
|
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
require_relative "../patcher"
|
4
4
|
|
5
|
-
require_relative "ext"
|
5
|
+
require_relative "../../ext/rum"
|
6
6
|
require_relative "../../ext/test"
|
7
7
|
|
8
8
|
module Datadog
|
@@ -32,7 +32,7 @@ module Datadog
|
|
32
32
|
return result unless active_test
|
33
33
|
|
34
34
|
# Set the test's trace id as a cookie in browser session
|
35
|
-
cookie_hash = {name: Ext::COOKIE_TEST_EXECUTION_ID, value: active_test.trace_id.to_s}
|
35
|
+
cookie_hash = {name: CI::Ext::RUM::COOKIE_TEST_EXECUTION_ID, value: active_test.trace_id.to_s}
|
36
36
|
Datadog.logger.debug { "[Selenium] Setting cookie: #{cookie_hash}" }
|
37
37
|
@bridge.manage.add_cookie(cookie_hash)
|
38
38
|
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require "json"
|
4
4
|
|
5
|
+
require "datadog/core/telemetry/logging"
|
5
6
|
require "datadog/core/utils/url"
|
6
7
|
|
7
8
|
require_relative "base"
|
@@ -96,6 +97,8 @@ module Datadog
|
|
96
97
|
result
|
97
98
|
rescue => e
|
98
99
|
Datadog.logger.error("Failed to extract additional tags from GitHub Actions: #{e}")
|
100
|
+
Core::Telemetry::Logger.report(e, description: "Failed to extract additional tags from GitHub Actions")
|
101
|
+
|
99
102
|
{}
|
100
103
|
end
|
101
104
|
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "datadog/core/telemetry/logging"
|
4
|
+
|
3
5
|
require_relative "git"
|
4
6
|
require_relative "environment/extractor"
|
5
7
|
|
@@ -73,6 +75,7 @@ module Datadog
|
|
73
75
|
return if !repo_url.nil? && !repo_url.empty?
|
74
76
|
|
75
77
|
Datadog.logger.error("DD_GIT_REPOSITORY_URL is not set or empty; no repo URL was automatically extracted")
|
78
|
+
Core::Telemetry::Logger.error("DD_GIT_REPOSITORY_URL is not set or empty; no repo URL was automatically extracted")
|
76
79
|
end
|
77
80
|
|
78
81
|
def validate_git_sha(git_sha)
|
@@ -89,6 +92,7 @@ module Datadog
|
|
89
92
|
end
|
90
93
|
|
91
94
|
Datadog.logger.error(message)
|
95
|
+
Core::Telemetry::Logger.error(message)
|
92
96
|
end
|
93
97
|
end
|
94
98
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Datadog
|
4
|
+
module CI
|
5
|
+
module Ext
|
6
|
+
# Defines constants for Git tags
|
7
|
+
module RUM
|
8
|
+
ENV_RUM_FLUSH_WAIT_MILLIS = "DD_CIVISIBILITY_RUM_FLUSH_WAIT_MILLIS"
|
9
|
+
|
10
|
+
COOKIE_TEST_EXECUTION_ID = "datadog-ci-visibility-test-execution-id"
|
11
|
+
|
12
|
+
SCRIPT_IS_RUM_ACTIVE = <<~JS
|
13
|
+
return !!window.DD_RUM
|
14
|
+
JS
|
15
|
+
SCRIPT_STOP_RUM_SESSION = <<~JS
|
16
|
+
if (window.DD_RUM && window.DD_RUM.stopSession) {
|
17
|
+
window.DD_RUM.stopSession();
|
18
|
+
return true;
|
19
|
+
} else {
|
20
|
+
return false;
|
21
|
+
}
|
22
|
+
JS
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require "pp"
|
4
4
|
|
5
|
+
require "datadog/core/telemetry/logging"
|
5
6
|
require "datadog/core/utils/forking"
|
6
7
|
|
7
8
|
require_relative "../ext/test"
|
@@ -224,6 +225,7 @@ module Datadog
|
|
224
225
|
Datadog.logger.debug("Loaded Datadog code coverage collector, using coverage mode: #{code_coverage_mode}")
|
225
226
|
rescue LoadError => e
|
226
227
|
Datadog.logger.error("Failed to load coverage collector: #{e}. Code coverage will not be collected.")
|
228
|
+
Core::Telemetry::Logger.report(e, description: "Failed to load coverage collector")
|
227
229
|
|
228
230
|
@code_coverage_enabled = false
|
229
231
|
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "datadog/core/environment/identity"
|
4
|
+
require "datadog/core/telemetry/logging"
|
5
|
+
require "datadog/core/utils/only_once"
|
4
6
|
|
5
7
|
require_relative "serializers/factories/test_level"
|
6
8
|
require_relative "../ext/app_types"
|
@@ -15,6 +17,10 @@ module Datadog
|
|
15
17
|
class Transport < Datadog::CI::Transport::EventPlatformTransport
|
16
18
|
attr_reader :serializers_factory, :dd_env
|
17
19
|
|
20
|
+
def self.log_once
|
21
|
+
@log_once ||= Datadog::Core::Utils::OnlyOnce.new
|
22
|
+
end
|
23
|
+
|
18
24
|
def initialize(
|
19
25
|
api:,
|
20
26
|
dd_env:,
|
@@ -64,8 +70,15 @@ module Datadog
|
|
64
70
|
|
65
71
|
encoded
|
66
72
|
else
|
67
|
-
|
73
|
+
message = "Invalid event skipped: #{serializer} Errors: #{serializer.validation_errors}"
|
74
|
+
Datadog.logger.warn(message)
|
68
75
|
CI::Transport::Telemetry.endpoint_payload_dropped(1, endpoint: telemetry_endpoint_tag)
|
76
|
+
|
77
|
+
# log invalid message once as error to internal telemetry
|
78
|
+
self.class.log_once.run do
|
79
|
+
Core::Telemetry::Logger.error(message)
|
80
|
+
end
|
81
|
+
|
69
82
|
nil
|
70
83
|
end
|
71
84
|
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "../ext/rum"
|
4
|
+
require_relative "../ext/test"
|
5
|
+
require_relative "parsing"
|
6
|
+
|
7
|
+
module Datadog
|
8
|
+
module CI
|
9
|
+
module Utils
|
10
|
+
# Provides functionality to interact with Datadog Real User Monitoring product
|
11
|
+
# via executing JavaScript code in the browser.
|
12
|
+
#
|
13
|
+
# Relevant docs: https://docs.datadoghq.com/real_user_monitoring/browser/
|
14
|
+
module RUM
|
15
|
+
def self.is_rum_active?(script_executor)
|
16
|
+
is_rum_active_script_result = script_executor.execute_script(Ext::RUM::SCRIPT_IS_RUM_ACTIVE)
|
17
|
+
|
18
|
+
Datadog.logger.debug { "[RUM] SCRIPT_IS_RUM_ACTIVE result is #{is_rum_active_script_result.inspect}" }
|
19
|
+
|
20
|
+
Utils::Parsing.convert_to_bool(is_rum_active_script_result)
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.stop_rum_session(script_executor, rum_flush_wait_millis: 500)
|
24
|
+
return unless is_rum_active?(script_executor)
|
25
|
+
|
26
|
+
Datadog::CI.active_test&.set_tag(
|
27
|
+
CI::Ext::Test::TAG_IS_RUM_ACTIVE,
|
28
|
+
"true"
|
29
|
+
)
|
30
|
+
|
31
|
+
result = script_executor.execute_script(Ext::RUM::SCRIPT_STOP_RUM_SESSION)
|
32
|
+
Datadog.logger.debug { "[RUM] SCRIPT_STOP_RUM_SESSION result is #{result.inspect}" }
|
33
|
+
|
34
|
+
# introduce a delay to allow the RUM session to be stopped
|
35
|
+
delay = rum_flush_wait_millis / 1000.0
|
36
|
+
Datadog.logger.debug { "[RUM] Waiting for #{delay} seconds" }
|
37
|
+
sleep(delay)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/lib/datadog/ci/version.rb
CHANGED
data/lib/datadog/ci.rb
CHANGED
@@ -418,6 +418,7 @@ require_relative "ci/contrib/ciqueue/integration"
|
|
418
418
|
|
419
419
|
# Additional test libraries (auto instrumented later on test session start)
|
420
420
|
require_relative "ci/contrib/selenium/integration"
|
421
|
+
require_relative "ci/contrib/cuprite/integration"
|
421
422
|
require_relative "ci/contrib/simplecov/integration"
|
422
423
|
|
423
424
|
# Configuration extensions
|
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: datadog-ci
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.12.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Datadog, Inc.
|
8
|
-
autorequire:
|
9
8
|
bindir: exe
|
10
9
|
cert_chain: []
|
11
|
-
date: 2025-01-
|
10
|
+
date: 2025-01-23 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: datadog
|
@@ -83,6 +82,12 @@ files:
|
|
83
82
|
- lib/datadog/ci/contrib/cucumber/instrumentation.rb
|
84
83
|
- lib/datadog/ci/contrib/cucumber/integration.rb
|
85
84
|
- lib/datadog/ci/contrib/cucumber/patcher.rb
|
85
|
+
- lib/datadog/ci/contrib/cuprite/configuration/settings.rb
|
86
|
+
- lib/datadog/ci/contrib/cuprite/driver.rb
|
87
|
+
- lib/datadog/ci/contrib/cuprite/ext.rb
|
88
|
+
- lib/datadog/ci/contrib/cuprite/integration.rb
|
89
|
+
- lib/datadog/ci/contrib/cuprite/patcher.rb
|
90
|
+
- lib/datadog/ci/contrib/cuprite/script_executor.rb
|
86
91
|
- lib/datadog/ci/contrib/instrumentation.rb
|
87
92
|
- lib/datadog/ci/contrib/integration.rb
|
88
93
|
- lib/datadog/ci/contrib/knapsack/extension.rb
|
@@ -113,7 +118,6 @@ files:
|
|
113
118
|
- lib/datadog/ci/contrib/selenium/integration.rb
|
114
119
|
- lib/datadog/ci/contrib/selenium/navigation.rb
|
115
120
|
- lib/datadog/ci/contrib/selenium/patcher.rb
|
116
|
-
- lib/datadog/ci/contrib/selenium/rum.rb
|
117
121
|
- lib/datadog/ci/contrib/settings.rb
|
118
122
|
- lib/datadog/ci/contrib/simplecov/configuration/settings.rb
|
119
123
|
- lib/datadog/ci/contrib/simplecov/ext.rb
|
@@ -142,6 +146,7 @@ files:
|
|
142
146
|
- lib/datadog/ci/ext/environment/providers/travis.rb
|
143
147
|
- lib/datadog/ci/ext/environment/providers/user_defined_tags.rb
|
144
148
|
- lib/datadog/ci/ext/git.rb
|
149
|
+
- lib/datadog/ci/ext/rum.rb
|
145
150
|
- lib/datadog/ci/ext/settings.rb
|
146
151
|
- lib/datadog/ci/ext/telemetry.rb
|
147
152
|
- lib/datadog/ci/ext/test.rb
|
@@ -217,6 +222,7 @@ files:
|
|
217
222
|
- lib/datadog/ci/utils/configuration.rb
|
218
223
|
- lib/datadog/ci/utils/git.rb
|
219
224
|
- lib/datadog/ci/utils/parsing.rb
|
225
|
+
- lib/datadog/ci/utils/rum.rb
|
220
226
|
- lib/datadog/ci/utils/telemetry.rb
|
221
227
|
- lib/datadog/ci/utils/test_run.rb
|
222
228
|
- lib/datadog/ci/version.rb
|
@@ -229,7 +235,6 @@ metadata:
|
|
229
235
|
changelog_uri: https://github.com/DataDog/datadog-ci-rb/blob/main/CHANGELOG.md
|
230
236
|
homepage_uri: https://github.com/DataDog/datadog-ci-rb
|
231
237
|
source_code_uri: https://github.com/DataDog/datadog-ci-rb
|
232
|
-
post_install_message:
|
233
238
|
rdoc_options: []
|
234
239
|
require_paths:
|
235
240
|
- lib
|
@@ -247,8 +252,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
247
252
|
- !ruby/object:Gem::Version
|
248
253
|
version: 2.0.0
|
249
254
|
requirements: []
|
250
|
-
rubygems_version: 3.
|
251
|
-
signing_key:
|
255
|
+
rubygems_version: 3.6.2
|
252
256
|
specification_version: 4
|
253
257
|
summary: Datadog CI visibility for your ruby application
|
254
258
|
test_files: []
|
@@ -1,43 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "ext"
|
4
|
-
require_relative "../../ext/test"
|
5
|
-
require_relative "../../utils/parsing"
|
6
|
-
|
7
|
-
module Datadog
|
8
|
-
module CI
|
9
|
-
module Contrib
|
10
|
-
module Selenium
|
11
|
-
# Provides functionality to interact with Datadog Real User Monitoring product
|
12
|
-
# via executing JavaScript code in the browser.
|
13
|
-
#
|
14
|
-
# Relevant docs: https://docs.datadoghq.com/real_user_monitoring/browser/
|
15
|
-
module RUM
|
16
|
-
def self.is_rum_active?(script_executor)
|
17
|
-
is_rum_active_script_result = script_executor.execute_script(Ext::SCRIPT_IS_RUM_ACTIVE)
|
18
|
-
Datadog.logger.debug { "[Selenium] SCRIPT_IS_RUM_ACTIVE result is #{is_rum_active_script_result.inspect}" }
|
19
|
-
Utils::Parsing.convert_to_bool(is_rum_active_script_result)
|
20
|
-
end
|
21
|
-
|
22
|
-
def self.stop_rum_session(script_executor)
|
23
|
-
config = Datadog.configuration.ci[:selenium]
|
24
|
-
if is_rum_active?(script_executor)
|
25
|
-
Datadog::CI.active_test&.set_tag(
|
26
|
-
CI::Ext::Test::TAG_IS_RUM_ACTIVE,
|
27
|
-
"true"
|
28
|
-
)
|
29
|
-
|
30
|
-
result = script_executor.execute_script(Ext::SCRIPT_STOP_RUM_SESSION)
|
31
|
-
Datadog.logger.debug { "[Selenium] SCRIPT_STOP_RUM_SESSION result is #{result.inspect}" }
|
32
|
-
|
33
|
-
# introduce a delay to allow the RUM session to be stopped
|
34
|
-
delay = config[:rum_flush_wait_millis] / 1000.0
|
35
|
-
Datadog.logger.debug { "[Selenium] Waiting for #{delay} seconds" }
|
36
|
-
sleep(delay)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|