datadog-ci 0.4.1 → 0.5.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 +42 -1
- data/README.md +26 -3
- data/lib/datadog/ci/concurrent_span.rb +59 -0
- data/lib/datadog/ci/configuration/components.rb +33 -3
- data/lib/datadog/ci/configuration/settings.rb +7 -1
- data/lib/datadog/ci/context/global.rb +80 -0
- data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +12 -1
- data/lib/datadog/ci/contrib/cucumber/formatter.rb +3 -4
- data/lib/datadog/ci/contrib/minitest/configuration/settings.rb +10 -1
- data/lib/datadog/ci/contrib/minitest/hooks.rb +3 -4
- data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +10 -1
- data/lib/datadog/ci/contrib/rspec/example.rb +3 -4
- data/lib/datadog/ci/contrib/settings.rb +2 -0
- data/lib/datadog/ci/ext/app_types.rb +5 -0
- data/lib/datadog/ci/ext/settings.rb +11 -0
- data/lib/datadog/ci/ext/test.rb +12 -1
- data/lib/datadog/ci/null_span.rb +63 -0
- data/lib/datadog/ci/recorder.rb +207 -35
- data/lib/datadog/ci/span.rb +13 -3
- data/lib/datadog/ci/test.rb +0 -1
- data/lib/datadog/ci/test_module.rb +23 -0
- data/lib/datadog/ci/test_session.rb +36 -0
- data/lib/datadog/ci/test_suite.rb +25 -0
- data/lib/datadog/ci/test_visibility/serializers/base.rb +100 -12
- data/lib/datadog/ci/test_visibility/serializers/factories/test_suite_level.rb +37 -0
- data/lib/datadog/ci/test_visibility/serializers/span.rb +2 -16
- data/lib/datadog/ci/test_visibility/serializers/test_module.rb +46 -0
- data/lib/datadog/ci/test_visibility/serializers/test_session.rb +46 -0
- data/lib/datadog/ci/test_visibility/serializers/test_suite.rb +46 -0
- data/lib/datadog/ci/test_visibility/serializers/test_v1.rb +3 -17
- data/lib/datadog/ci/test_visibility/serializers/test_v2.rb +38 -0
- data/lib/datadog/ci/test_visibility/transport.rb +4 -4
- data/lib/datadog/ci/utils/test_run.rb +15 -0
- data/lib/datadog/ci/version.rb +2 -2
- data/lib/datadog/ci.rb +214 -32
- data/sig/datadog/ci/concurrent_span.rbs +23 -0
- data/sig/datadog/ci/configuration/components.rbs +2 -0
- data/sig/datadog/ci/context/global.rbs +37 -0
- data/sig/datadog/ci/ext/app_types.rbs +6 -1
- data/sig/datadog/ci/ext/settings.rbs +3 -0
- data/sig/datadog/ci/ext/test.rbs +15 -0
- data/sig/datadog/ci/null_span.rbs +37 -0
- data/sig/datadog/ci/recorder.rbs +54 -1
- data/sig/datadog/ci/span.rbs +4 -0
- data/sig/datadog/ci/test_module.rbs +6 -0
- data/sig/datadog/ci/test_session.rbs +9 -0
- data/sig/datadog/ci/test_suite.rbs +6 -0
- data/sig/datadog/ci/test_visibility/serializers/base.rbs +26 -5
- data/sig/datadog/ci/test_visibility/serializers/factories/test_suite_level.rbs +13 -0
- data/sig/datadog/ci/test_visibility/serializers/test_module.rbs +26 -0
- data/sig/datadog/ci/test_visibility/serializers/test_session.rbs +26 -0
- data/sig/datadog/ci/test_visibility/serializers/test_suite.rbs +26 -0
- data/sig/datadog/ci/test_visibility/serializers/test_v1.rbs +1 -1
- data/sig/datadog/ci/test_visibility/serializers/test_v2.rbs +25 -0
- data/sig/datadog/ci/test_visibility/transport.rbs +3 -3
- data/sig/datadog/ci/utils/test_run.rbs +11 -0
- data/sig/datadog/ci.rbs +18 -2
- metadata +26 -2
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "../test_v2"
|
4
|
+
require_relative "../test_session"
|
5
|
+
require_relative "../test_module"
|
6
|
+
require_relative "../test_suite"
|
7
|
+
require_relative "../span"
|
8
|
+
|
9
|
+
module Datadog
|
10
|
+
module CI
|
11
|
+
module TestVisibility
|
12
|
+
module Serializers
|
13
|
+
module Factories
|
14
|
+
# This factory takes care of creating citestcycle serializers when test-suite-level visibility is enabled
|
15
|
+
module TestSuiteLevel
|
16
|
+
module_function
|
17
|
+
|
18
|
+
def serializer(trace, span)
|
19
|
+
case span.type
|
20
|
+
when Datadog::CI::Ext::AppTypes::TYPE_TEST
|
21
|
+
Serializers::TestV2.new(trace, span)
|
22
|
+
when Datadog::CI::Ext::AppTypes::TYPE_TEST_SESSION
|
23
|
+
Serializers::TestSession.new(trace, span)
|
24
|
+
when Datadog::CI::Ext::AppTypes::TYPE_TEST_MODULE
|
25
|
+
Serializers::TestModule.new(trace, span)
|
26
|
+
when Datadog::CI::Ext::AppTypes::TYPE_TEST_SUITE
|
27
|
+
Serializers::TestSuite.new(trace, span)
|
28
|
+
else
|
29
|
+
Serializers::Span.new(trace, span)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -7,25 +7,11 @@ module Datadog
|
|
7
7
|
module TestVisibility
|
8
8
|
module Serializers
|
9
9
|
class Span < Base
|
10
|
-
CONTENT_FIELDS = [
|
11
|
-
"trace_id", "span_id", "parent_id",
|
12
|
-
"name", "resource", "service",
|
13
|
-
"error", "start", "duration",
|
14
|
-
"meta", "metrics",
|
15
|
-
"type" => "span_type"
|
16
|
-
].freeze
|
10
|
+
CONTENT_FIELDS = (["trace_id", "span_id", "parent_id"] + Base::CONTENT_FIELDS).freeze
|
17
11
|
|
18
12
|
CONTENT_MAP_SIZE = calculate_content_map_size(CONTENT_FIELDS)
|
19
13
|
|
20
|
-
REQUIRED_FIELDS = [
|
21
|
-
"trace_id",
|
22
|
-
"span_id",
|
23
|
-
"error",
|
24
|
-
"name",
|
25
|
-
"resource",
|
26
|
-
"start",
|
27
|
-
"duration"
|
28
|
-
].freeze
|
14
|
+
REQUIRED_FIELDS = (["trace_id", "span_id"] + Base::REQUIRED_FIELDS).freeze
|
29
15
|
|
30
16
|
def content_fields
|
31
17
|
CONTENT_FIELDS
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "base"
|
4
|
+
require_relative "../../ext/test"
|
5
|
+
|
6
|
+
module Datadog
|
7
|
+
module CI
|
8
|
+
module TestVisibility
|
9
|
+
module Serializers
|
10
|
+
class TestModule < Base
|
11
|
+
CONTENT_FIELDS = (["test_session_id", "test_module_id"] + Base::CONTENT_FIELDS).freeze
|
12
|
+
|
13
|
+
CONTENT_MAP_SIZE = calculate_content_map_size(CONTENT_FIELDS)
|
14
|
+
|
15
|
+
REQUIRED_FIELDS = (["test_session_id", "test_module_id"] + Base::REQUIRED_FIELDS).freeze
|
16
|
+
|
17
|
+
def content_fields
|
18
|
+
CONTENT_FIELDS
|
19
|
+
end
|
20
|
+
|
21
|
+
def content_map_size
|
22
|
+
CONTENT_MAP_SIZE
|
23
|
+
end
|
24
|
+
|
25
|
+
def type
|
26
|
+
Ext::AppTypes::TYPE_TEST_MODULE
|
27
|
+
end
|
28
|
+
|
29
|
+
def name
|
30
|
+
"#{@span.get_tag(Ext::Test::TAG_FRAMEWORK)}.test_module"
|
31
|
+
end
|
32
|
+
|
33
|
+
def resource
|
34
|
+
"#{@span.get_tag(Ext::Test::TAG_FRAMEWORK)}.test_module.#{@span.get_tag(Ext::Test::TAG_MODULE)}"
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def required_fields
|
40
|
+
REQUIRED_FIELDS
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "base"
|
4
|
+
require_relative "../../ext/test"
|
5
|
+
|
6
|
+
module Datadog
|
7
|
+
module CI
|
8
|
+
module TestVisibility
|
9
|
+
module Serializers
|
10
|
+
class TestSession < Base
|
11
|
+
CONTENT_FIELDS = (["test_session_id"] + Base::CONTENT_FIELDS).freeze
|
12
|
+
|
13
|
+
CONTENT_MAP_SIZE = calculate_content_map_size(CONTENT_FIELDS)
|
14
|
+
|
15
|
+
REQUIRED_FIELDS = (["test_session_id"] + Base::REQUIRED_FIELDS).freeze
|
16
|
+
|
17
|
+
def content_fields
|
18
|
+
CONTENT_FIELDS
|
19
|
+
end
|
20
|
+
|
21
|
+
def content_map_size
|
22
|
+
CONTENT_MAP_SIZE
|
23
|
+
end
|
24
|
+
|
25
|
+
def type
|
26
|
+
Ext::AppTypes::TYPE_TEST_SESSION
|
27
|
+
end
|
28
|
+
|
29
|
+
def name
|
30
|
+
"#{@span.get_tag(Ext::Test::TAG_FRAMEWORK)}.test_session"
|
31
|
+
end
|
32
|
+
|
33
|
+
def resource
|
34
|
+
"#{@span.get_tag(Ext::Test::TAG_FRAMEWORK)}.test_session.#{@span.get_tag(Ext::Test::TAG_COMMAND)}"
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def required_fields
|
40
|
+
REQUIRED_FIELDS
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "base"
|
4
|
+
require_relative "../../ext/test"
|
5
|
+
|
6
|
+
module Datadog
|
7
|
+
module CI
|
8
|
+
module TestVisibility
|
9
|
+
module Serializers
|
10
|
+
class TestSuite < Base
|
11
|
+
CONTENT_FIELDS = (["test_session_id", "test_module_id", "test_suite_id"] + Base::CONTENT_FIELDS).freeze
|
12
|
+
|
13
|
+
CONTENT_MAP_SIZE = calculate_content_map_size(CONTENT_FIELDS)
|
14
|
+
|
15
|
+
REQUIRED_FIELDS = (["test_session_id", "test_module_id", "test_suite_id"] + Base::REQUIRED_FIELDS).freeze
|
16
|
+
|
17
|
+
def content_fields
|
18
|
+
CONTENT_FIELDS
|
19
|
+
end
|
20
|
+
|
21
|
+
def content_map_size
|
22
|
+
CONTENT_MAP_SIZE
|
23
|
+
end
|
24
|
+
|
25
|
+
def type
|
26
|
+
Ext::AppTypes::TYPE_TEST_SUITE
|
27
|
+
end
|
28
|
+
|
29
|
+
def name
|
30
|
+
"#{@span.get_tag(Ext::Test::TAG_FRAMEWORK)}.test_suite"
|
31
|
+
end
|
32
|
+
|
33
|
+
def resource
|
34
|
+
"#{@span.get_tag(Ext::Test::TAG_FRAMEWORK)}.test_suite.#{@span.get_tag(Ext::Test::TAG_SUITE)}"
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def required_fields
|
40
|
+
REQUIRED_FIELDS
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -8,25 +8,11 @@ module Datadog
|
|
8
8
|
module TestVisibility
|
9
9
|
module Serializers
|
10
10
|
class TestV1 < Base
|
11
|
-
CONTENT_FIELDS = [
|
12
|
-
"trace_id", "span_id",
|
13
|
-
"name", "resource", "service",
|
14
|
-
"error", "start", "duration",
|
15
|
-
"meta", "metrics",
|
16
|
-
"type" => "span_type"
|
17
|
-
].freeze
|
11
|
+
CONTENT_FIELDS = (["trace_id", "span_id"] + Base::CONTENT_FIELDS).freeze
|
18
12
|
|
19
13
|
CONTENT_MAP_SIZE = calculate_content_map_size(CONTENT_FIELDS)
|
20
14
|
|
21
|
-
REQUIRED_FIELDS = [
|
22
|
-
"trace_id",
|
23
|
-
"span_id",
|
24
|
-
"error",
|
25
|
-
"name",
|
26
|
-
"resource",
|
27
|
-
"start",
|
28
|
-
"duration"
|
29
|
-
].freeze
|
15
|
+
REQUIRED_FIELDS = (["trace_id", "span_id"] + Base::REQUIRED_FIELDS).freeze
|
30
16
|
|
31
17
|
def content_fields
|
32
18
|
CONTENT_FIELDS
|
@@ -37,7 +23,7 @@ module Datadog
|
|
37
23
|
end
|
38
24
|
|
39
25
|
def type
|
40
|
-
|
26
|
+
Ext::AppTypes::TYPE_TEST
|
41
27
|
end
|
42
28
|
|
43
29
|
def name
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "test_v1"
|
4
|
+
require_relative "../../ext/test"
|
5
|
+
|
6
|
+
module Datadog
|
7
|
+
module CI
|
8
|
+
module TestVisibility
|
9
|
+
module Serializers
|
10
|
+
class TestV2 < TestV1
|
11
|
+
CONTENT_FIELDS = (["test_session_id", "test_module_id", "test_suite_id"] + TestV1::CONTENT_FIELDS).freeze
|
12
|
+
|
13
|
+
CONTENT_MAP_SIZE = calculate_content_map_size(CONTENT_FIELDS)
|
14
|
+
|
15
|
+
REQUIRED_FIELDS = (["test_session_id", "test_module_id", "test_suite_id"] + TestV1::REQUIRED_FIELDS).freeze
|
16
|
+
|
17
|
+
def content_fields
|
18
|
+
CONTENT_FIELDS
|
19
|
+
end
|
20
|
+
|
21
|
+
def content_map_size
|
22
|
+
CONTENT_MAP_SIZE
|
23
|
+
end
|
24
|
+
|
25
|
+
def version
|
26
|
+
2
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def required_fields
|
32
|
+
REQUIRED_FIELDS
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -81,7 +81,7 @@ module Datadog
|
|
81
81
|
if spans.respond_to?(:filter_map)
|
82
82
|
spans.filter_map { |span| encode_span(trace, span) }
|
83
83
|
else
|
84
|
-
|
84
|
+
spans.map { |span| encode_span(trace, span) }.reject(&:nil?)
|
85
85
|
end
|
86
86
|
end
|
87
87
|
end
|
@@ -94,15 +94,15 @@ module Datadog
|
|
94
94
|
|
95
95
|
if encoded.size > max_payload_size
|
96
96
|
# This single event is too large, we can't flush it
|
97
|
-
Datadog.logger.
|
98
|
-
Datadog.logger.
|
97
|
+
Datadog.logger.warn("Dropping test event. Payload too large: '#{span.inspect}'")
|
98
|
+
Datadog.logger.warn(encoded)
|
99
99
|
|
100
100
|
return nil
|
101
101
|
end
|
102
102
|
|
103
103
|
encoded
|
104
104
|
else
|
105
|
-
Datadog.logger.
|
105
|
+
Datadog.logger.warn("Invalid event skipped: #{serializer} Errors: #{serializer.validation_errors}")
|
106
106
|
nil
|
107
107
|
end
|
108
108
|
end
|