From 50add91d560aa40adb5d323ee594260c9113d6fd Mon Sep 17 00:00:00 2001 From: Liudmila Molkova Date: Tue, 27 Feb 2024 04:01:32 -0800 Subject: [PATCH] Make stability required, fix ref and extends, render badges on metrics (#272) --- .../semconv/model/semantic_attribute.py | 10 +- .../semconv/model/semantic_convention.py | 7 +- .../semconv/templating/markdown/__init__.py | 44 +++--- .../vnext.yaml | 1 + .../vprev.yaml | 1 + .../compat/attribute_type_changed/vprev.yaml | 1 + .../data/compat/removed_attribute/vprev.yaml | 2 + .../src/tests/data/compat/success/vprev.yaml | 1 + .../attribute_group/attribute_group.yaml | 6 +- .../attribute_templates.yaml | 4 + .../data/markdown/deprecated/general.yaml | 10 ++ .../tests/data/markdown/deprecated/http.yaml | 10 ++ .../tests/data/markdown/empty/general.yaml | 10 ++ .../src/tests/data/markdown/empty/http.yaml | 8 ++ .../tests/data/markdown/empty_table/faas.yaml | 2 + .../data/markdown/empty_table/general.yaml | 10 ++ .../tests/data/markdown/empty_table/http.yaml | 11 ++ .../src/tests/data/markdown/enum_int/rpc.yaml | 1 + .../src/tests/data/markdown/event/event.yaml | 4 + .../data/markdown/event_noprefix/event.yaml | 1 + .../data/markdown/event_renamed/event.yaml | 1 + .../data/markdown/example_array/http.yaml | 1 + .../markdown/extend_constraint/database.yaml | 12 ++ .../markdown/extend_constraint/general.yaml | 10 ++ .../markdown/extend_grandparent/database.yaml | 3 + .../src/tests/data/markdown/include/faas.yaml | 2 + .../tests/data/markdown/include/general.yaml | 9 ++ .../src/tests/data/markdown/include/http.yaml | 17 ++- .../data/markdown/metrics_tables/expected.md | 2 +- .../markdown/missing_end_tag/general.yaml | 9 ++ .../data/markdown/missing_end_tag/http.yaml | 9 ++ .../tests/data/markdown/multiple/general.yaml | 9 ++ .../tests/data/markdown/multiple/http.yaml | 9 ++ .../data/markdown/multiple_enum/general.yaml | 16 +++ .../markdown/omit_requirement_level/http.yaml | 3 + .../data/markdown/parameter_empty/faas.yaml | 2 + .../markdown/parameter_empty/general.yaml | 9 ++ .../data/markdown/parameter_empty/http.yaml | 11 ++ .../data/markdown/parameter_full/faas.yaml | 2 + .../data/markdown/parameter_full/general.yaml | 9 ++ .../data/markdown/parameter_full/http.yaml | 11 ++ .../parameter_remove_constraint/database.yaml | 14 +- .../parameter_remove_constraint/general.yaml | 9 ++ .../data/markdown/parameter_tag/database.yaml | 14 +- .../data/markdown/parameter_tag/general.yaml | 9 ++ .../parameter_tag_empty/database.yaml | 14 +- .../markdown/parameter_tag_empty/general.yaml | 9 ++ .../parameter_tag_no_attr/database.yaml | 1 + .../data/markdown/parameter_wrong/faas.yaml | 2 + .../markdown/parameter_wrong/general.yaml | 9 ++ .../data/markdown/parameter_wrong/http.yaml | 11 ++ .../parameter_wrong_duplicate/faas.yaml | 2 + .../parameter_wrong_duplicate/general.yaml | 9 ++ .../parameter_wrong_duplicate/http.yaml | 11 ++ .../markdown/parameter_wrong_syntax/faas.yaml | 2 + .../parameter_wrong_syntax/general.yaml | 9 ++ .../markdown/parameter_wrong_syntax/http.yaml | 11 ++ .../src/tests/data/markdown/ref/general.yaml | 12 ++ .../src/tests/data/markdown/ref/http.yaml | 11 ++ .../src/tests/data/markdown/ref/rpc.yaml | 1 + .../tests/data/markdown/ref_extends/http.yaml | 1 + .../data/markdown/ref_extends/server.yaml | 1 + .../markdown/sampling_relevant/general.yaml | 3 + .../data/markdown/sampling_relevant/http.yaml | 7 + .../src/tests/data/markdown/scope/scope.yaml | 1 + .../tests/data/markdown/single/general.yaml | 9 ++ .../src/tests/data/markdown/single/http.yaml | 11 ++ .../tests/data/markdown/sorting/input.yaml | 6 + .../markdown/stability/all_badges_expected.md | 44 ++++++ .../markdown/stability/badges_expected.md | 10 -- .../tests/data/markdown/stability/input.md | 16 ++- .../markdown/stability/labels_expected.md | 10 -- .../data/markdown/stability/stability.yaml | 44 +++++- .../stability/stable_badges_expected.md | 44 ++++++ .../markdown/wrong_semconv_id/general.yaml | 9 ++ .../data/markdown/wrong_semconv_id/http.yaml | 11 ++ .../attribute_templates.yml | 5 +- .../tests/data/yaml/attribute_templates.yml | 3 + .../src/tests/data/yaml/basic_example.yml | 2 + .../src/tests/data/yaml/cloud.yaml | 4 + .../src/tests/data/yaml/database.yaml | 5 + .../src/tests/data/yaml/deprecated/http.yaml | 43 ++---- .../deprecated/deprecation_boolean.yaml | 1 + .../deprecated/deprecation_empty_string.yaml | 1 + .../errors/deprecated/deprecation_number.yaml | 1 + .../extends_overrides_deprecation.yaml | 20 +++ .../deprecated/multiple_deprecations.yaml | 14 ++ .../deprecated/ref_overrides_deprecation.yaml | 18 +++ .../data/yaml/errors/empty/empty_enum.yaml | 3 +- .../errors/empty/empty_example_boolean.yaml | 1 + .../empty/empty_example_boolean_array.yaml | 3 +- .../yaml/errors/empty/empty_example_enum.yaml | 1 + .../errors/empty/empty_example_string.yaml | 1 + .../tests/data/yaml/errors/empty_type.yaml | 3 +- .../enum/enum_member_with_extra_keys.yaml | 3 +- .../errors/enum/enum_with_double_values.yaml | 1 + .../errors/enum/enum_with_extra_keys.yaml | 3 +- .../yaml/errors/events/missing_event.yaml | 2 + .../yaml/errors/events/nameless_event.yaml | 1 + .../yaml/errors/events/no_event_type.yaml | 2 + .../yaml/errors/examples/example.types.yaml | 5 + .../yaml/errors/examples/example_bool.yaml | 1 + .../errors/examples/example_bool_array.yaml | 1 + .../errors/examples/example_number_array.yaml | 3 +- .../examples/example_number_array_single.yaml | 3 +- .../examples/example_single_string.yaml | 1 + .../yaml/errors/examples/example_string.yaml | 1 + .../errors/examples/example_string_array.yaml | 1 + .../errors/examples/example_wrong_type.yaml | 1 + .../tests/data/yaml/errors/id_clash/http.yaml | 6 +- .../yaml/errors/id_clash/httpInherited.yaml | 3 + .../yaml/errors/id_clash/resource2_faas.yaml | 4 + .../yaml/errors/id_clash/resource_faas.yaml | 4 + .../data/yaml/errors/id_clash/span_faas.yaml | 4 + .../tests/data/yaml/errors/invalid_type.yaml | 1 + .../data/yaml/errors/missing_attr_type.yaml | 1 + .../data/yaml/errors/missing_semconv_id.yaml | 1 + .../data/yaml/errors/resource_spankind.yaml | 1 + .../stability/extends_override_stability.yaml | 16 +++ .../stability/missing_stability_value.yaml | 8 ++ .../stability/multiple_stability_values.yaml | 10 ++ .../stability/ref_override_stability.yaml | 15 ++ .../data/yaml/errors/validate_anyof.yaml | 1 + ...g_conditionally_required_no_condition.yaml | 1 + .../data/yaml/errors/wrong_double_type.yaml | 1 + ...ong_multiple_requirement_level_values.yaml | 3 +- .../wrong_multiple_requirement_levels.yaml | 1 + .../data/yaml/errors/wrong_requirement.yaml | 1 + .../data/yaml/errors/wrong_sampling.yaml | 1 + .../src/tests/data/yaml/event.yaml | 29 +++- .../src/tests/data/yaml/extends/http.yaml | 1 + .../src/tests/data/yaml/faas.yaml | 8 ++ .../src/tests/data/yaml/general.yaml | 10 ++ .../src/tests/data/yaml/http.yaml | 10 ++ .../tests/data/yaml/imported-inherited.yaml | 8 ++ .../src/tests/data/yaml/links.yaml | 5 + .../src/tests/data/yaml/metrics.yaml | 11 +- .../tests/data/yaml/numeric_attributes.yml | 2 + .../src/tests/data/yaml/rpc.yaml | 1 + .../src/tests/data/yaml/scope.yaml | 1 + .../tests/data/yaml/semantic_attributes.yml | 3 + .../yaml/semantic_attributes_deprecated.yml | 1 + .../src/tests/data/yaml/span_event.yaml | 2 + .../src/tests/data/yaml/stability.yaml | 61 +++----- .../tests/semconv/model/test_correct_parse.py | 132 ++++++++++++++---- .../semconv/model/test_error_detection.py | 58 +++++++- .../tests/semconv/templating/test_markdown.py | 17 ++- semantic-conventions/syntax.md | 15 +- 148 files changed, 1117 insertions(+), 186 deletions(-) create mode 100644 semantic-conventions/src/tests/data/markdown/stability/all_badges_expected.md delete mode 100644 semantic-conventions/src/tests/data/markdown/stability/badges_expected.md delete mode 100644 semantic-conventions/src/tests/data/markdown/stability/labels_expected.md create mode 100644 semantic-conventions/src/tests/data/markdown/stability/stable_badges_expected.md create mode 100644 semantic-conventions/src/tests/data/yaml/errors/deprecated/extends_overrides_deprecation.yaml create mode 100644 semantic-conventions/src/tests/data/yaml/errors/deprecated/multiple_deprecations.yaml create mode 100644 semantic-conventions/src/tests/data/yaml/errors/deprecated/ref_overrides_deprecation.yaml create mode 100644 semantic-conventions/src/tests/data/yaml/errors/stability/extends_override_stability.yaml create mode 100644 semantic-conventions/src/tests/data/yaml/errors/stability/missing_stability_value.yaml create mode 100644 semantic-conventions/src/tests/data/yaml/errors/stability/multiple_stability_values.yaml create mode 100644 semantic-conventions/src/tests/data/yaml/errors/stability/ref_override_stability.yaml diff --git a/semantic-conventions/src/opentelemetry/semconv/model/semantic_attribute.py b/semantic-conventions/src/opentelemetry/semconv/model/semantic_attribute.py index edde7808..5d1c1b49 100644 --- a/semantic-conventions/src/opentelemetry/semconv/model/semantic_attribute.py +++ b/semantic-conventions/src/opentelemetry/semconv/model/semantic_attribute.py @@ -128,6 +128,12 @@ def parse( if "type" in attribute: msg = f"Ref attribute '{ref}' must not declare a type" raise ValidationError.from_yaml_pos(position, msg) + if "stability" in attribute: + msg = f"Ref attribute '{ref}' must not override stability" + raise ValidationError.from_yaml_pos(position, msg) + if "deprecated" in attribute: + msg = f"Ref attribute '{ref}' must not override deprecation status" + raise ValidationError.from_yaml_pos(position, msg) brief = attribute.get("brief") examples = attribute.get("examples") ref = ref.strip() @@ -224,7 +230,7 @@ def parse( @staticmethod def parse_attribute(attribute): - check_no_missing_keys(attribute, ["type", "brief"]) + check_no_missing_keys(attribute, ["type", "brief", "stability"]) attr_val = attribute["type"] try: attr_type = EnumAttributeType.parse(attr_val) @@ -284,7 +290,7 @@ def parse_attribute(attribute): @staticmethod def parse_stability(stability, position_data, strict_validation=True): if stability is None: - return StabilityLevel.EXPERIMENTAL + return None stability_value_map = { "experimental": StabilityLevel.EXPERIMENTAL, diff --git a/semantic-conventions/src/opentelemetry/semconv/model/semantic_convention.py b/semantic-conventions/src/opentelemetry/semconv/model/semantic_convention.py index af51a6e0..932cd578 100644 --- a/semantic-conventions/src/opentelemetry/semconv/model/semantic_convention.py +++ b/semantic-conventions/src/opentelemetry/semconv/model/semantic_convention.py @@ -104,6 +104,7 @@ class BaseSemanticConvention(ValidatableYamlNode): "extends", "attributes", "constraints", + "deprecated", ) GROUP_TYPE_NAME: str @@ -268,11 +269,11 @@ def __init__(self, group, strict_validation=True): self.validate() def validate(self): - val_tuple = (self.metric_name, self.unit, self.instrument) + val_tuple = (self.metric_name, self.unit, self.instrument, self.stability) if not all(val_tuple): raise ValidationError.from_yaml_pos( self._position, - "All of metric_name, units, and instrument must be defined", + "All of metric_name, units, instrument, and stability must be defined", ) if self.instrument not in self.allowed_instruments: @@ -483,6 +484,8 @@ def _fill_inherited_attribute(self, attr, semconv): def _merge_attribute(self, child, parent): child.attr_type = parent.attr_type + child.stability = parent.stability + child.deprecated = parent.deprecated if not child.brief: child.brief = parent.brief if not child.requirement_level: diff --git a/semantic-conventions/src/opentelemetry/semconv/templating/markdown/__init__.py b/semantic-conventions/src/opentelemetry/semconv/templating/markdown/__init__.py index 20537ced..bbd9f3e4 100644 --- a/semantic-conventions/src/opentelemetry/semconv/templating/markdown/__init__.py +++ b/semantic-conventions/src/opentelemetry/semconv/templating/markdown/__init__.py @@ -124,25 +124,7 @@ def to_markdown_attr( if isinstance(attribute.attr_type, EnumAttributeType) else AttributeType.get_instantiated_type(attribute.attr_type) ) - description = "" - if attribute.deprecated and self.options.enable_deprecated: - if "deprecated" in attribute.deprecated.lower(): - description = f"**{attribute.deprecated}**
" - else: - deprecated_msg = self.options.deprecated_md_snippet().format( - attribute.deprecated - ) - description = f"{deprecated_msg}
" - elif ( - attribute.stability == StabilityLevel.STABLE and self.options.enable_stable - ): - description = f"{self.options.stable_md_snippet()}
" - elif ( - attribute.stability == StabilityLevel.EXPERIMENTAL - and self.options.enable_experimental - ): - description = f"{self.options.experimental_md_snippet()}
" - description += attribute.brief + description = self._description_with_badge(attribute) + attribute.brief if attribute.note: self.render_ctx.add_note(attribute.note) description += f" [{len(self.render_ctx.notes)}]" @@ -258,7 +240,7 @@ def to_markdown_metric_table( "| -------- | --------------- | ----------- | -------------- |\n" ) - description = semconv.brief + description = self._description_with_badge(semconv) + semconv.brief if semconv.note: self.render_ctx.add_note(semconv.note) description += f" [{len(self.render_ctx.notes)}]" @@ -544,3 +526,25 @@ def _render_group(self, semconv, parameters, output): self.to_markdown_unit_table(semconv.members, output) output.write("") + + def _description_with_badge( + self, item: typing.Union[SemanticAttribute | BaseSemanticConvention] + ): + description = "" + if item.deprecated and self.options.enable_deprecated: + if "deprecated" in item.deprecated.lower(): + description = f"**{item.deprecated}**
" + else: + deprecated_msg = self.options.deprecated_md_snippet().format( + item.deprecated + ) + description = f"{deprecated_msg}
" + elif item.stability == StabilityLevel.STABLE and self.options.enable_stable: + description = f"{self.options.stable_md_snippet()}
" + elif ( + item.stability == StabilityLevel.EXPERIMENTAL + and self.options.enable_experimental + ): + description = f"{self.options.experimental_md_snippet()}
" + + return description diff --git a/semantic-conventions/src/tests/data/compat/attribute_stable_to_experimental/vnext.yaml b/semantic-conventions/src/tests/data/compat/attribute_stable_to_experimental/vnext.yaml index a26c943f..d83717a1 100644 --- a/semantic-conventions/src/tests/data/compat/attribute_stable_to_experimental/vnext.yaml +++ b/semantic-conventions/src/tests/data/compat/attribute_stable_to_experimental/vnext.yaml @@ -22,3 +22,4 @@ groups: brief: "Request headers." note: "Request headers note." examples: '`first.fifth_attr.bar=["foo"]`' + stability: experimental \ No newline at end of file diff --git a/semantic-conventions/src/tests/data/compat/attribute_stable_to_experimental/vprev.yaml b/semantic-conventions/src/tests/data/compat/attribute_stable_to_experimental/vprev.yaml index 74f0d577..4664a214 100644 --- a/semantic-conventions/src/tests/data/compat/attribute_stable_to_experimental/vprev.yaml +++ b/semantic-conventions/src/tests/data/compat/attribute_stable_to_experimental/vprev.yaml @@ -10,6 +10,7 @@ groups: brief: "first attribute" note: "first attribute note" examples: "first example" + stability: experimental - id: second_attr type: int brief: "second attribute" diff --git a/semantic-conventions/src/tests/data/compat/attribute_type_changed/vprev.yaml b/semantic-conventions/src/tests/data/compat/attribute_type_changed/vprev.yaml index 74f0d577..4664a214 100644 --- a/semantic-conventions/src/tests/data/compat/attribute_type_changed/vprev.yaml +++ b/semantic-conventions/src/tests/data/compat/attribute_type_changed/vprev.yaml @@ -10,6 +10,7 @@ groups: brief: "first attribute" note: "first attribute note" examples: "first example" + stability: experimental - id: second_attr type: int brief: "second attribute" diff --git a/semantic-conventions/src/tests/data/compat/removed_attribute/vprev.yaml b/semantic-conventions/src/tests/data/compat/removed_attribute/vprev.yaml index 5d674714..5d3189d3 100644 --- a/semantic-conventions/src/tests/data/compat/removed_attribute/vprev.yaml +++ b/semantic-conventions/src/tests/data/compat/removed_attribute/vprev.yaml @@ -10,6 +10,7 @@ groups: brief: "first attribute" note: "first attribute note" examples: "first example" + stability: experimental - id: second_attr type: int brief: "second attribute" @@ -20,3 +21,4 @@ groups: type: template[string[]] brief: "request headers" examples: '`first.fifth_attr.foo=["bar"]`' + stability: experimental \ No newline at end of file diff --git a/semantic-conventions/src/tests/data/compat/success/vprev.yaml b/semantic-conventions/src/tests/data/compat/success/vprev.yaml index 8fc72dc2..0c3ca727 100644 --- a/semantic-conventions/src/tests/data/compat/success/vprev.yaml +++ b/semantic-conventions/src/tests/data/compat/success/vprev.yaml @@ -10,6 +10,7 @@ groups: brief: "first attribute" note: "first attribute note" examples: "first example" + stability: experimental - id: second_attr type: int brief: "second attribute" diff --git a/semantic-conventions/src/tests/data/markdown/attribute_group/attribute_group.yaml b/semantic-conventions/src/tests/data/markdown/attribute_group/attribute_group.yaml index 9aee0e17..5b2fab95 100644 --- a/semantic-conventions/src/tests/data/markdown/attribute_group/attribute_group.yaml +++ b/semantic-conventions/src/tests/data/markdown/attribute_group/attribute_group.yaml @@ -6,10 +6,11 @@ groups: attributes: - id: bar type: string - requirement_level: + requirement_level: recommended: if available brief: Attribute 1 examples: ['baz'] + stability: experimental - id: derived_attributes type: attribute_group @@ -19,10 +20,11 @@ groups: attributes: - id: qux type: int - requirement_level: + requirement_level: conditionally_required: if available brief: Attribute 2 examples: [42] + stability: experimental - id: span_attribute_group prefix: "" diff --git a/semantic-conventions/src/tests/data/markdown/attribute_templates/attribute_templates.yaml b/semantic-conventions/src/tests/data/markdown/attribute_templates/attribute_templates.yaml index ebaa1644..8bec259c 100644 --- a/semantic-conventions/src/tests/data/markdown/attribute_templates/attribute_templates.yaml +++ b/semantic-conventions/src/tests/data/markdown/attribute_templates/attribute_templates.yaml @@ -14,12 +14,14 @@ groups: HTTP request headers, `` being the normalized HTTP Header name (lowercase, with - characters replaced by _), the value being the header values. examples: '`http.request.header.content_type=["application/json"]`' + stability: experimental - id: request.method type: string requirement_level: required sampling_relevant: false brief: 'HTTP request method.' examples: ["GET", "POST", "HEAD"] + stability: experimental - ref: referenced_http.request.referenced.header - id: referenced_http_id type: span @@ -31,6 +33,7 @@ groups: brief: > This is a referenced attribute. examples: '`http.request.header.content_type=["application/json"]`' + stability: experimental - id: general type: span prefix: general @@ -41,3 +44,4 @@ groups: brief: > This is a general attribute. examples: '`some_general_attribute.some_key="abc"`' + stability: experimental \ No newline at end of file diff --git a/semantic-conventions/src/tests/data/markdown/deprecated/general.yaml b/semantic-conventions/src/tests/data/markdown/deprecated/general.yaml index 32cc7f48..907fd00a 100644 --- a/semantic-conventions/src/tests/data/markdown/deprecated/general.yaml +++ b/semantic-conventions/src/tests/data/markdown/deprecated/general.yaml @@ -6,6 +6,7 @@ groups: These attributes may be used for any network related operation. attributes: - id: transport + stability: experimental type: allow_custom_values: false members: @@ -36,28 +37,34 @@ groups: Transport protocol used. See note below. examples: 'IP.TCP' - id: peer.ip + stability: experimental type: string brief: > Remote address of the peer (dotted decimal for IPv4 or [RFC5952](https://tools.ietf.org/html/rfc5952) for IPv6) examples: '127.0.0.1' - id: peer.port + stability: experimental type: int brief: 'Remote port number.' examples: [80, 8080, 443] - id: peer.name + stability: experimental type: string brief: 'Remote hostname or similar, see note below.' examples: 'example.com' - id: host.ip + stability: experimental type: string brief: 'Like `net.peer.ip` but for the host IP. Useful in case of a multi-IP host.' examples: '192.168.0.1' - id: host.port + stability: experimental type: int brief: 'Like `net.peer.port` but for the host port.' examples: 35555 - id: host.name + stability: experimental type: string brief: 'Local hostname or similar, see note below.' examples: 'localhost' @@ -68,16 +75,19 @@ groups: These attributes may be used for any operation with an authenticated and/or authorized enduser. attributes: - id: id + stability: experimental type: string brief: > Username or client_id extracted from the access token or Authorization header in the inbound request from outside the system. examples: 'username' - id: role + stability: experimental type: string brief: 'Actual/assumed role the client is making the request under extracted from token or application security context.' examples: 'admin' - id: scope + stability: experimental type: string brief: > Scopes or granted authorities the client currently possesses extracted from token diff --git a/semantic-conventions/src/tests/data/markdown/deprecated/http.yaml b/semantic-conventions/src/tests/data/markdown/deprecated/http.yaml index b41ca89e..4f668d6d 100644 --- a/semantic-conventions/src/tests/data/markdown/deprecated/http.yaml +++ b/semantic-conventions/src/tests/data/markdown/deprecated/http.yaml @@ -8,43 +8,51 @@ groups: and various HTTP versions like 1.1, 2 and SPDY. attributes: - id: method + stability: experimental type: string requirement_level: required sampling_relevant: false brief: 'HTTP request method.' examples: ["GET", "POST", "HEAD"] - id: url + stability: experimental type: string brief: > Full HTTP request URL in the form `scheme://host[:port]/path?query[#fragment]`. Usually the fragment is not transmitted over HTTP, but if it is known, it should be included nevertheless. examples: ['https://www.foo.bar/search?q=OpenTelemetry#SemConv'] - id: target + stability: experimental type: string brief: 'The full request target as passed in a HTTP request line or equivalent.' examples: ['/path/12314/?q=ddds#123'] - id: host + stability: experimental type: string brief: > The value of the [HTTP host header](https://tools.ietf.org/html/rfc7230#section-5.4). When the header is empty or not present, this attribute should be the same. examples: ['www.example.org'] - id: scheme + stability: experimental type: string brief: 'The URI scheme identifying the used protocol.' examples: ["http", "https"] - id: status_code + stability: experimental type: int requirement_level: conditionally_required: "if and only if one was received/sent" brief: '[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).' examples: [200] - id: status_text + stability: experimental type: string brief: '[HTTP reason phrase](https://tools.ietf.org/html/rfc7230#section-3.1.2).' deprecated: Use attribute `status_description` instead. examples: ['OK'] - id: flavor + stability: experimental type: # Default value: `true`. If false, it helps the code gen tool to # encode checks that only accept the listed values. @@ -72,6 +80,7 @@ groups: is `QUIC`, in which case `IP.UDP` is assumed. examples: ['1.0'] - id: user_agent + stability: experimental type: string brief: 'Value of the [HTTP User-Agent](https://tools.ietf.org/html/rfc7231#section-5.5.3) header sent by the client.' examples: ['CERN-LineMode/2.15 libwww/2.17b3'] @@ -95,6 +104,7 @@ groups: brief: 'Semantic Convention for HTTP Server' attributes: - id: server_name + stability: experimental type: string requirement_level: conditionally_required: > diff --git a/semantic-conventions/src/tests/data/markdown/empty/general.yaml b/semantic-conventions/src/tests/data/markdown/empty/general.yaml index 32cc7f48..907fd00a 100644 --- a/semantic-conventions/src/tests/data/markdown/empty/general.yaml +++ b/semantic-conventions/src/tests/data/markdown/empty/general.yaml @@ -6,6 +6,7 @@ groups: These attributes may be used for any network related operation. attributes: - id: transport + stability: experimental type: allow_custom_values: false members: @@ -36,28 +37,34 @@ groups: Transport protocol used. See note below. examples: 'IP.TCP' - id: peer.ip + stability: experimental type: string brief: > Remote address of the peer (dotted decimal for IPv4 or [RFC5952](https://tools.ietf.org/html/rfc5952) for IPv6) examples: '127.0.0.1' - id: peer.port + stability: experimental type: int brief: 'Remote port number.' examples: [80, 8080, 443] - id: peer.name + stability: experimental type: string brief: 'Remote hostname or similar, see note below.' examples: 'example.com' - id: host.ip + stability: experimental type: string brief: 'Like `net.peer.ip` but for the host IP. Useful in case of a multi-IP host.' examples: '192.168.0.1' - id: host.port + stability: experimental type: int brief: 'Like `net.peer.port` but for the host port.' examples: 35555 - id: host.name + stability: experimental type: string brief: 'Local hostname or similar, see note below.' examples: 'localhost' @@ -68,16 +75,19 @@ groups: These attributes may be used for any operation with an authenticated and/or authorized enduser. attributes: - id: id + stability: experimental type: string brief: > Username or client_id extracted from the access token or Authorization header in the inbound request from outside the system. examples: 'username' - id: role + stability: experimental type: string brief: 'Actual/assumed role the client is making the request under extracted from token or application security context.' examples: 'admin' - id: scope + stability: experimental type: string brief: > Scopes or granted authorities the client currently possesses extracted from token diff --git a/semantic-conventions/src/tests/data/markdown/empty/http.yaml b/semantic-conventions/src/tests/data/markdown/empty/http.yaml index 66cc08b1..96300950 100644 --- a/semantic-conventions/src/tests/data/markdown/empty/http.yaml +++ b/semantic-conventions/src/tests/data/markdown/empty/http.yaml @@ -8,6 +8,7 @@ groups: and various HTTP versions like 1.1, 2 and SPDY. attributes: - id: method + stability: experimental type: string requirement_level: required sampling_relevant: false @@ -20,30 +21,36 @@ groups: Usually the fragment is not transmitted over HTTP, but if it is known, it should be included nevertheless. See note [1] examples: ['https://www.foo.bar/search?q=OpenTelemetry#SemConv'] - id: target + stability: experimental type: string brief: 'The full request target as passed in a HTTP request line or equivalent.' examples: ['/path/12314/?q=ddds#123'] - id: host + stability: experimental type: string brief: > The value of the [HTTP host header](https://tools.ietf.org/html/rfc7230#section-5.4). When the header is empty or not present, this attribute should be the same. examples: ['www.example.org'] - id: scheme + stability: experimental type: string brief: 'The URI scheme identifying the used protocol.' examples: ["http", "https"] - id: status_code + stability: experimental type: int requirement_level: conditionally_required: "if and only if one was received/sent" brief: '[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).' examples: [200] - id: status_text + stability: experimental type: string brief: '[HTTP reason phrase](https://tools.ietf.org/html/rfc7230#section-3.1.2).' examples: ['OK'] - id: user_agent + stability: experimental type: string brief: 'Value of the [HTTP User-Agent](https://tools.ietf.org/html/rfc7231#section-5.5.3) header sent by the client.' examples: ['CERN-LineMode/2.15 libwww/2.17b3'] @@ -67,6 +74,7 @@ groups: brief: 'Semantic Convention for HTTP Server' attributes: - id: server_name + stability: experimental type: string requirement_level: conditionally_required: > diff --git a/semantic-conventions/src/tests/data/markdown/empty_table/faas.yaml b/semantic-conventions/src/tests/data/markdown/empty_table/faas.yaml index 8c3288cc..648eb26e 100644 --- a/semantic-conventions/src/tests/data/markdown/empty_table/faas.yaml +++ b/semantic-conventions/src/tests/data/markdown/empty_table/faas.yaml @@ -8,6 +8,7 @@ groups: serverless) with spans. attributes: - id: trigger + stability: experimental requirement_level: required brief: 'Type of the trigger on which the function is executed.' type: @@ -28,6 +29,7 @@ groups: - id: other value: 'other' - id: execution + stability: experimental type: string brief: "The execution id of the current function execution." examples: 'af9d5aa4-a685-4c5f-a22b-444f80b3cc28' diff --git a/semantic-conventions/src/tests/data/markdown/empty_table/general.yaml b/semantic-conventions/src/tests/data/markdown/empty_table/general.yaml index 32cc7f48..907fd00a 100644 --- a/semantic-conventions/src/tests/data/markdown/empty_table/general.yaml +++ b/semantic-conventions/src/tests/data/markdown/empty_table/general.yaml @@ -6,6 +6,7 @@ groups: These attributes may be used for any network related operation. attributes: - id: transport + stability: experimental type: allow_custom_values: false members: @@ -36,28 +37,34 @@ groups: Transport protocol used. See note below. examples: 'IP.TCP' - id: peer.ip + stability: experimental type: string brief: > Remote address of the peer (dotted decimal for IPv4 or [RFC5952](https://tools.ietf.org/html/rfc5952) for IPv6) examples: '127.0.0.1' - id: peer.port + stability: experimental type: int brief: 'Remote port number.' examples: [80, 8080, 443] - id: peer.name + stability: experimental type: string brief: 'Remote hostname or similar, see note below.' examples: 'example.com' - id: host.ip + stability: experimental type: string brief: 'Like `net.peer.ip` but for the host IP. Useful in case of a multi-IP host.' examples: '192.168.0.1' - id: host.port + stability: experimental type: int brief: 'Like `net.peer.port` but for the host port.' examples: 35555 - id: host.name + stability: experimental type: string brief: 'Local hostname or similar, see note below.' examples: 'localhost' @@ -68,16 +75,19 @@ groups: These attributes may be used for any operation with an authenticated and/or authorized enduser. attributes: - id: id + stability: experimental type: string brief: > Username or client_id extracted from the access token or Authorization header in the inbound request from outside the system. examples: 'username' - id: role + stability: experimental type: string brief: 'Actual/assumed role the client is making the request under extracted from token or application security context.' examples: 'admin' - id: scope + stability: experimental type: string brief: > Scopes or granted authorities the client currently possesses extracted from token diff --git a/semantic-conventions/src/tests/data/markdown/empty_table/http.yaml b/semantic-conventions/src/tests/data/markdown/empty_table/http.yaml index c27fcba5..c754967f 100644 --- a/semantic-conventions/src/tests/data/markdown/empty_table/http.yaml +++ b/semantic-conventions/src/tests/data/markdown/empty_table/http.yaml @@ -8,42 +8,50 @@ groups: and various HTTP versions like 1.1, 2 and SPDY. attributes: - id: method + stability: experimental type: string requirement_level: required sampling_relevant: false brief: 'HTTP request method.' examples: ["GET", "POST", "HEAD"] - id: url + stability: experimental type: string brief: > Full HTTP request URL in the form `scheme://host[:port]/path?query[#fragment]`. Usually the fragment is not transmitted over HTTP, but if it is known, it should be included nevertheless. examples: ['https://www.foo.bar/search?q=OpenTelemetry#SemConv'] - id: target + stability: experimental type: string brief: 'The full request target as passed in a HTTP request line or equivalent.' examples: ['/path/12314/?q=ddds#123'] - id: host + stability: experimental type: string brief: > The value of the [HTTP host header](https://tools.ietf.org/html/rfc7230#section-5.4). When the header is empty or not present, this attribute should be the same. examples: ['www.example.org'] - id: scheme + stability: experimental type: string brief: 'The URI scheme identifying the used protocol.' examples: ["http", "https"] - id: status_code + stability: experimental type: int requirement_level: conditionally_required: if and only if one was received/sent. brief: '[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).' examples: [200] - id: status_text + stability: experimental type: string brief: '[HTTP reason phrase](https://tools.ietf.org/html/rfc7230#section-3.1.2).' examples: ['OK'] - id: user_agent + stability: experimental type: string brief: 'Value of the [HTTP User-Agent](https://tools.ietf.org/html/rfc7231#section-5.5.3) header sent by the client.' examples: ['CERN-LineMode/2.15 libwww/2.17b3'] @@ -67,6 +75,7 @@ groups: brief: 'Semantic Convention for HTTP Server' attributes: - id: server_name + stability: experimental type: string requirement_level: conditionally_required: > @@ -81,11 +90,13 @@ groups: It is thus preferred to supply the raw data that is available. examples: ['example.com'] - id: route + stability: experimental type: string brief: > The matched route (path template). examples: '/users/:userID?' - id: client_ip + stability: experimental type: string sampling_relevant: false brief: > diff --git a/semantic-conventions/src/tests/data/markdown/enum_int/rpc.yaml b/semantic-conventions/src/tests/data/markdown/enum_int/rpc.yaml index 601d05a2..1c13a243 100644 --- a/semantic-conventions/src/tests/data/markdown/enum_int/rpc.yaml +++ b/semantic-conventions/src/tests/data/markdown/enum_int/rpc.yaml @@ -5,6 +5,7 @@ groups: brief: 'Tech-specific attributes for gRPC.' attributes: - id: status_code + stability: experimental type: members: - id: ok diff --git a/semantic-conventions/src/tests/data/markdown/event/event.yaml b/semantic-conventions/src/tests/data/markdown/event/event.yaml index e90e4a21..ba74c1ae 100644 --- a/semantic-conventions/src/tests/data/markdown/event/event.yaml +++ b/semantic-conventions/src/tests/data/markdown/event/event.yaml @@ -7,15 +7,18 @@ groups: report a single exception associated with a span. attributes: - id: type + stability: experimental type: string brief: > The type of the exception. examples: ["java.net.ConnectException","OSError"] - id: message + stability: experimental type: string brief: The exception message. examples: ["Division by zero","Can't convert 'int' object to str implicitly"] - id: stacktrace + stability: experimental type: string brief: > A stacktrace. @@ -24,6 +27,7 @@ groups: at com.example.GenerateTrace.methodA(GenerateTrace.java:9)\n at com.example.GenerateTrace.main(GenerateTrace.java:5)' - id: escaped + stability: experimental type: boolean brief: > SHOULD be set to true if the exception event is recorded at a point where diff --git a/semantic-conventions/src/tests/data/markdown/event_noprefix/event.yaml b/semantic-conventions/src/tests/data/markdown/event_noprefix/event.yaml index 3e41bf3c..ff215b42 100644 --- a/semantic-conventions/src/tests/data/markdown/event_noprefix/event.yaml +++ b/semantic-conventions/src/tests/data/markdown/event_noprefix/event.yaml @@ -7,3 +7,4 @@ groups: - id: attr type: boolean brief: attrbrief + stability: experimental \ No newline at end of file diff --git a/semantic-conventions/src/tests/data/markdown/event_renamed/event.yaml b/semantic-conventions/src/tests/data/markdown/event_renamed/event.yaml index f90d2e53..5b79be99 100644 --- a/semantic-conventions/src/tests/data/markdown/event_renamed/event.yaml +++ b/semantic-conventions/src/tests/data/markdown/event_renamed/event.yaml @@ -8,3 +8,4 @@ groups: - id: attr type: boolean brief: attrbrief + stability: experimental \ No newline at end of file diff --git a/semantic-conventions/src/tests/data/markdown/example_array/http.yaml b/semantic-conventions/src/tests/data/markdown/example_array/http.yaml index 2f90ce2d..4c884123 100644 --- a/semantic-conventions/src/tests/data/markdown/example_array/http.yaml +++ b/semantic-conventions/src/tests/data/markdown/example_array/http.yaml @@ -8,6 +8,7 @@ groups: and various HTTP versions like 1.1, 2 and SPDY. attributes: - id: method + stability: experimental type: string[] requirement_level: required sampling_relevant: false diff --git a/semantic-conventions/src/tests/data/markdown/extend_constraint/database.yaml b/semantic-conventions/src/tests/data/markdown/extend_constraint/database.yaml index a9427dc7..a64b6d85 100644 --- a/semantic-conventions/src/tests/data/markdown/extend_constraint/database.yaml +++ b/semantic-conventions/src/tests/data/markdown/extend_constraint/database.yaml @@ -8,6 +8,7 @@ groups: span_kind: client attributes: - id: system + stability: experimental tag: connection-level brief: An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers. requirement_level: required @@ -144,6 +145,7 @@ groups: value: 'neo4j' brief: 'Neo4j' - id: connection_string + stability: experimental tag: connection-level type: string brief: > @@ -151,12 +153,14 @@ groups: note: It is recommended to remove embedded credentials. examples: 'Server=(localdb)\v11.0;Integrated Security=true;' - id: user + stability: experimental tag: connection-level type: string brief: > Username for accessing the database. examples: ['readonly_user', 'reporting_user'] - id: mssql.instance_name + stability: experimental tag: connection-level-tech-specific type: string note: > @@ -167,12 +171,14 @@ groups: connecting to. This name is used to determine the port of a named instance. examples: 'MSSQLSERVER' - id: jdbc.driver_classname + stability: experimental tag: connection-level-tech-specific type: string brief: > The fully-qualified class name of the JDBC driver used to connect. examples: ['org.postgresql.Driver', 'com.microsoft.sqlserver.jdbc.SQLServerDriver'] - id: name + stability: experimental tag: call-level type: string requirement_level: @@ -185,6 +191,7 @@ groups: In some SQL databases, the database name to be used is called "schema name". examples: [ 'customers', 'main' ] - id: statement + stability: experimental tag: call-level type: string requirement_level: @@ -194,6 +201,7 @@ groups: note: The value may be sanitized to exclude sensitive information. examples: ['SELECT * FROM wuser_table', 'SET mykey "WuValue"'] - id: operation + stability: experimental tag: call-level type: string requirement_level: @@ -231,6 +239,7 @@ groups: Call-level attributes for Cassandra attributes: - id: keyspace + stability: experimental type: string requirement_level: required brief: > @@ -245,6 +254,7 @@ groups: Call-level attributes for Apache HBase attributes: - id: namespace + stability: experimental type: string requirement_level: required brief: > @@ -260,6 +270,7 @@ groups: Call-level attributes for Redis attributes: - id: database_index + stability: experimental type: int requirement_level: conditionally_required: if other than the default database (`0`). @@ -276,6 +287,7 @@ groups: Call-level attributes for MongoDB attributes: - id: collection + stability: experimental type: string requirement_level: required brief: > diff --git a/semantic-conventions/src/tests/data/markdown/extend_constraint/general.yaml b/semantic-conventions/src/tests/data/markdown/extend_constraint/general.yaml index 32cc7f48..907fd00a 100644 --- a/semantic-conventions/src/tests/data/markdown/extend_constraint/general.yaml +++ b/semantic-conventions/src/tests/data/markdown/extend_constraint/general.yaml @@ -6,6 +6,7 @@ groups: These attributes may be used for any network related operation. attributes: - id: transport + stability: experimental type: allow_custom_values: false members: @@ -36,28 +37,34 @@ groups: Transport protocol used. See note below. examples: 'IP.TCP' - id: peer.ip + stability: experimental type: string brief: > Remote address of the peer (dotted decimal for IPv4 or [RFC5952](https://tools.ietf.org/html/rfc5952) for IPv6) examples: '127.0.0.1' - id: peer.port + stability: experimental type: int brief: 'Remote port number.' examples: [80, 8080, 443] - id: peer.name + stability: experimental type: string brief: 'Remote hostname or similar, see note below.' examples: 'example.com' - id: host.ip + stability: experimental type: string brief: 'Like `net.peer.ip` but for the host IP. Useful in case of a multi-IP host.' examples: '192.168.0.1' - id: host.port + stability: experimental type: int brief: 'Like `net.peer.port` but for the host port.' examples: 35555 - id: host.name + stability: experimental type: string brief: 'Local hostname or similar, see note below.' examples: 'localhost' @@ -68,16 +75,19 @@ groups: These attributes may be used for any operation with an authenticated and/or authorized enduser. attributes: - id: id + stability: experimental type: string brief: > Username or client_id extracted from the access token or Authorization header in the inbound request from outside the system. examples: 'username' - id: role + stability: experimental type: string brief: 'Actual/assumed role the client is making the request under extracted from token or application security context.' examples: 'admin' - id: scope + stability: experimental type: string brief: > Scopes or granted authorities the client currently possesses extracted from token diff --git a/semantic-conventions/src/tests/data/markdown/extend_grandparent/database.yaml b/semantic-conventions/src/tests/data/markdown/extend_grandparent/database.yaml index af4aaa1d..ef74b20f 100644 --- a/semantic-conventions/src/tests/data/markdown/extend_grandparent/database.yaml +++ b/semantic-conventions/src/tests/data/markdown/extend_grandparent/database.yaml @@ -5,6 +5,7 @@ groups: brief: These attributes describe database calls. attributes: - id: name + stability: experimental brief: Database name. type: string examples: [ 'the_shop' ] @@ -16,6 +17,7 @@ groups: extends: database.common_attributes attributes: - id: bar + stability: experimental brief: Some property. type: string examples: [ 'baz' ] @@ -28,6 +30,7 @@ groups: - id: database.foo.duration.metric type: metric + stability: experimental metric_name: db.foo.duration instrument: histogram unit: s diff --git a/semantic-conventions/src/tests/data/markdown/include/faas.yaml b/semantic-conventions/src/tests/data/markdown/include/faas.yaml index bfca14c3..b9d592b1 100644 --- a/semantic-conventions/src/tests/data/markdown/include/faas.yaml +++ b/semantic-conventions/src/tests/data/markdown/include/faas.yaml @@ -8,6 +8,7 @@ groups: serverless) with spans. attributes: - id: trigger + stability: experimental requirement_level: required brief: 'Type of the trigger on which the function is executed.' type: @@ -28,6 +29,7 @@ groups: - id: other value: 'other' - id: execution + stability: experimental type: string brief: "The execution id of the current function execution." examples: 'af9d5aa4-a685-4c5f-a22b-444f80b3cc28' diff --git a/semantic-conventions/src/tests/data/markdown/include/general.yaml b/semantic-conventions/src/tests/data/markdown/include/general.yaml index fed550d4..22af26ac 100644 --- a/semantic-conventions/src/tests/data/markdown/include/general.yaml +++ b/semantic-conventions/src/tests/data/markdown/include/general.yaml @@ -6,28 +6,34 @@ groups: These attributes may be used for any network related operation. attributes: - id: peer.ip + stability: experimental type: string brief: > Remote address of the peer (dotted decimal for IPv4 or [RFC5952](https://tools.ietf.org/html/rfc5952) for IPv6) examples: '127.0.0.1' - id: peer.port + stability: experimental type: int brief: 'Remote port number.' examples: [80, 8080, 443] - id: peer.name + stability: experimental type: string brief: 'Remote hostname or similar, see note below.' examples: 'example.com' - id: host.ip + stability: experimental type: string brief: 'Like `net.peer.ip` but for the host IP. Useful in case of a multi-IP host.' examples: '192.168.0.1' - id: host.port + stability: experimental type: int brief: 'Like `net.peer.port` but for the host port.' examples: 35555 - id: host.name + stability: experimental type: string brief: 'Local hostname or similar, see note below.' examples: 'localhost' @@ -38,16 +44,19 @@ groups: These attributes may be used for any operation with an authenticated and/or authorized enduser. attributes: - id: id + stability: experimental type: string brief: > Username or client_id extracted from the access token or Authorization header in the inbound request from outside the system. examples: 'username' - id: role + stability: experimental type: string brief: 'Actual/assumed role the client is making the request under extracted from token or application security context.' examples: 'admin' - id: scope + stability: experimental type: string brief: > Scopes or granted authorities the client currently possesses extracted from token diff --git a/semantic-conventions/src/tests/data/markdown/include/http.yaml b/semantic-conventions/src/tests/data/markdown/include/http.yaml index 65ed4497..2bd266f2 100644 --- a/semantic-conventions/src/tests/data/markdown/include/http.yaml +++ b/semantic-conventions/src/tests/data/markdown/include/http.yaml @@ -8,56 +8,66 @@ groups: and various HTTP versions like 1.1, 2 and SPDY. attributes: - id: method + stability: experimental type: string requirement_level: required sampling_relevant: false brief: 'HTTP request method.' examples: ["GET", "POST", "HEAD"] - id: url + stability: experimental type: string brief: > Full HTTP request URL in the form `scheme://host[:port]/path?query[#fragment]`. Usually the fragment is not transmitted over HTTP, but if it is known, it should be included nevertheless. examples: ['https://www.foo.bar/search?q=OpenTelemetry#SemConv'] - id: target + stability: experimental type: string brief: 'The full request target as passed in a HTTP request line or equivalent.' examples: ['/path/12314/?q=ddds#123'] - id: host + stability: experimental type: string brief: > The value of the [HTTP host header](https://tools.ietf.org/html/rfc7230#section-5.4). When the header is empty or not present, this attribute should be the same. examples: ['www.example.org'] - id: scheme + stability: experimental type: string brief: 'The URI scheme identifying the used protocol.' examples: ["http", "https"] - id: status_code + stability: experimental type: int requirement_level: conditionally_required: "if and only if one was received/sent" brief: '[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).' examples: [200] - id: status_text + stability: experimental type: string brief: '[HTTP reason phrase](https://tools.ietf.org/html/rfc7230#section-3.1.2).' examples: ['OK'] - id: user_agent + stability: experimental type: string requirement_level: recommended brief: 'Value of the [HTTP User-Agent](https://tools.ietf.org/html/rfc7231#section-5.5.3) header sent by the client.' examples: ['CERN-LineMode/2.15 libwww/2.17b3'] - id: recommended_attribute + stability: experimental brief: brief type: string - requirement_level: + requirement_level: recommended: short note examples: foo - id: recommended_attribute_long_note + stability: experimental brief: brief type: string - requirement_level: + requirement_level: recommended: some very long note that should be written under the semconv table examples: bar @@ -81,6 +91,7 @@ groups: brief: 'Semantic Convention for HTTP Server' attributes: - id: server_name + stability: experimental type: string requirement_level: conditionally_required: > @@ -93,7 +104,7 @@ groups: This is an example - of note - - with list + - with list examples: ['example.com'] constraints: - any_of: diff --git a/semantic-conventions/src/tests/data/markdown/metrics_tables/expected.md b/semantic-conventions/src/tests/data/markdown/metrics_tables/expected.md index 253863ba..8074bd93 100644 --- a/semantic-conventions/src/tests/data/markdown/metrics_tables/expected.md +++ b/semantic-conventions/src/tests/data/markdown/metrics_tables/expected.md @@ -21,7 +21,7 @@ | Name | Instrument Type | Unit (UCUM) | Description | | -------- | --------------- | ----------- | -------------- | -| `foo.active_eggs` | UpDownCounter | `{cartons}` | Measures how many eggs are currently active. | +| `foo.active_eggs` | UpDownCounter | `{cartons}` | **Deprecated: Removed.**
Measures how many eggs are currently active. | **Attributes for `foo.active_eggs`** diff --git a/semantic-conventions/src/tests/data/markdown/missing_end_tag/general.yaml b/semantic-conventions/src/tests/data/markdown/missing_end_tag/general.yaml index fed550d4..22af26ac 100644 --- a/semantic-conventions/src/tests/data/markdown/missing_end_tag/general.yaml +++ b/semantic-conventions/src/tests/data/markdown/missing_end_tag/general.yaml @@ -6,28 +6,34 @@ groups: These attributes may be used for any network related operation. attributes: - id: peer.ip + stability: experimental type: string brief: > Remote address of the peer (dotted decimal for IPv4 or [RFC5952](https://tools.ietf.org/html/rfc5952) for IPv6) examples: '127.0.0.1' - id: peer.port + stability: experimental type: int brief: 'Remote port number.' examples: [80, 8080, 443] - id: peer.name + stability: experimental type: string brief: 'Remote hostname or similar, see note below.' examples: 'example.com' - id: host.ip + stability: experimental type: string brief: 'Like `net.peer.ip` but for the host IP. Useful in case of a multi-IP host.' examples: '192.168.0.1' - id: host.port + stability: experimental type: int brief: 'Like `net.peer.port` but for the host port.' examples: 35555 - id: host.name + stability: experimental type: string brief: 'Local hostname or similar, see note below.' examples: 'localhost' @@ -38,16 +44,19 @@ groups: These attributes may be used for any operation with an authenticated and/or authorized enduser. attributes: - id: id + stability: experimental type: string brief: > Username or client_id extracted from the access token or Authorization header in the inbound request from outside the system. examples: 'username' - id: role + stability: experimental type: string brief: 'Actual/assumed role the client is making the request under extracted from token or application security context.' examples: 'admin' - id: scope + stability: experimental type: string brief: > Scopes or granted authorities the client currently possesses extracted from token diff --git a/semantic-conventions/src/tests/data/markdown/missing_end_tag/http.yaml b/semantic-conventions/src/tests/data/markdown/missing_end_tag/http.yaml index c9e672bd..de43aad4 100644 --- a/semantic-conventions/src/tests/data/markdown/missing_end_tag/http.yaml +++ b/semantic-conventions/src/tests/data/markdown/missing_end_tag/http.yaml @@ -8,42 +8,50 @@ groups: and various HTTP versions like 1.1, 2 and SPDY. attributes: - id: method + stability: experimental type: string requirement_level: required sampling_relevant: false brief: 'HTTP request method.' examples: ["GET", "POST", "HEAD"] - id: url + stability: experimental type: string brief: > Full HTTP request URL in the form `scheme://host[:port]/path?query[#fragment]`. Usually the fragment is not transmitted over HTTP, but if it is known, it should be included nevertheless. examples: ['https://www.foo.bar/search?q=OpenTelemetry#SemConv'] - id: target + stability: experimental type: string brief: 'The full request target as passed in a HTTP request line or equivalent.' examples: ['/path/12314/?q=ddds#123'] - id: host + stability: experimental type: string brief: > The value of the [HTTP host header](https://tools.ietf.org/html/rfc7230#section-5.4). When the header is empty or not present, this attribute should be the same. examples: ['www.example.org'] - id: scheme + stability: experimental type: string brief: 'The URI scheme identifying the used protocol.' examples: ["http", "https"] - id: status_code + stability: experimental type: int requirement_level: conditionally_required: "if and only if one was received/sent" brief: '[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).' examples: [200] - id: status_text + stability: experimental type: string brief: '[HTTP reason phrase](https://tools.ietf.org/html/rfc7230#section-3.1.2).' examples: ['OK'] - id: user_agent + stability: experimental type: string brief: 'Value of the [HTTP User-Agent](https://tools.ietf.org/html/rfc7231#section-5.5.3) header sent by the client.' examples: ['CERN-LineMode/2.15 libwww/2.17b3'] @@ -67,6 +75,7 @@ groups: brief: 'Semantic Convention for HTTP Server' attributes: - id: server_name + stability: experimental type: string requirement_level: conditionally_required: > diff --git a/semantic-conventions/src/tests/data/markdown/multiple/general.yaml b/semantic-conventions/src/tests/data/markdown/multiple/general.yaml index fed550d4..22af26ac 100644 --- a/semantic-conventions/src/tests/data/markdown/multiple/general.yaml +++ b/semantic-conventions/src/tests/data/markdown/multiple/general.yaml @@ -6,28 +6,34 @@ groups: These attributes may be used for any network related operation. attributes: - id: peer.ip + stability: experimental type: string brief: > Remote address of the peer (dotted decimal for IPv4 or [RFC5952](https://tools.ietf.org/html/rfc5952) for IPv6) examples: '127.0.0.1' - id: peer.port + stability: experimental type: int brief: 'Remote port number.' examples: [80, 8080, 443] - id: peer.name + stability: experimental type: string brief: 'Remote hostname or similar, see note below.' examples: 'example.com' - id: host.ip + stability: experimental type: string brief: 'Like `net.peer.ip` but for the host IP. Useful in case of a multi-IP host.' examples: '192.168.0.1' - id: host.port + stability: experimental type: int brief: 'Like `net.peer.port` but for the host port.' examples: 35555 - id: host.name + stability: experimental type: string brief: 'Local hostname or similar, see note below.' examples: 'localhost' @@ -38,16 +44,19 @@ groups: These attributes may be used for any operation with an authenticated and/or authorized enduser. attributes: - id: id + stability: experimental type: string brief: > Username or client_id extracted from the access token or Authorization header in the inbound request from outside the system. examples: 'username' - id: role + stability: experimental type: string brief: 'Actual/assumed role the client is making the request under extracted from token or application security context.' examples: 'admin' - id: scope + stability: experimental type: string brief: > Scopes or granted authorities the client currently possesses extracted from token diff --git a/semantic-conventions/src/tests/data/markdown/multiple/http.yaml b/semantic-conventions/src/tests/data/markdown/multiple/http.yaml index c9e672bd..de43aad4 100644 --- a/semantic-conventions/src/tests/data/markdown/multiple/http.yaml +++ b/semantic-conventions/src/tests/data/markdown/multiple/http.yaml @@ -8,42 +8,50 @@ groups: and various HTTP versions like 1.1, 2 and SPDY. attributes: - id: method + stability: experimental type: string requirement_level: required sampling_relevant: false brief: 'HTTP request method.' examples: ["GET", "POST", "HEAD"] - id: url + stability: experimental type: string brief: > Full HTTP request URL in the form `scheme://host[:port]/path?query[#fragment]`. Usually the fragment is not transmitted over HTTP, but if it is known, it should be included nevertheless. examples: ['https://www.foo.bar/search?q=OpenTelemetry#SemConv'] - id: target + stability: experimental type: string brief: 'The full request target as passed in a HTTP request line or equivalent.' examples: ['/path/12314/?q=ddds#123'] - id: host + stability: experimental type: string brief: > The value of the [HTTP host header](https://tools.ietf.org/html/rfc7230#section-5.4). When the header is empty or not present, this attribute should be the same. examples: ['www.example.org'] - id: scheme + stability: experimental type: string brief: 'The URI scheme identifying the used protocol.' examples: ["http", "https"] - id: status_code + stability: experimental type: int requirement_level: conditionally_required: "if and only if one was received/sent" brief: '[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).' examples: [200] - id: status_text + stability: experimental type: string brief: '[HTTP reason phrase](https://tools.ietf.org/html/rfc7230#section-3.1.2).' examples: ['OK'] - id: user_agent + stability: experimental type: string brief: 'Value of the [HTTP User-Agent](https://tools.ietf.org/html/rfc7231#section-5.5.3) header sent by the client.' examples: ['CERN-LineMode/2.15 libwww/2.17b3'] @@ -67,6 +75,7 @@ groups: brief: 'Semantic Convention for HTTP Server' attributes: - id: server_name + stability: experimental type: string requirement_level: conditionally_required: > diff --git a/semantic-conventions/src/tests/data/markdown/multiple_enum/general.yaml b/semantic-conventions/src/tests/data/markdown/multiple_enum/general.yaml index ea444b9e..650de793 100644 --- a/semantic-conventions/src/tests/data/markdown/multiple_enum/general.yaml +++ b/semantic-conventions/src/tests/data/markdown/multiple_enum/general.yaml @@ -6,6 +6,7 @@ groups: These attributes may be used for any network related operation. attributes: - id: transport + stability: experimental type: allow_custom_values: false members: @@ -36,6 +37,7 @@ groups: Transport protocol used. See note below. examples: 'IP.TCP' - id: host.connection.type + stability: experimental type: allow_custom_values: true members: @@ -51,6 +53,7 @@ groups: brief: 'unavailable' examples: 'wifi' - id: host.connection.subtype + stability: experimental type: allow_custom_values: true members: @@ -65,44 +68,54 @@ groups: brief: 'This describes more details regarding the connection.type. It may be the type of cell connection, but it could be used for describing details about a wifi connection.' examples: '2G' - id: host.carrier.name + stability: experimental type: string brief: "host.carrier.name" examples: "sprint" - id: host.carrier.mcc + stability: experimental type: string brief: "host.carrier.mcc" examples: "310" - id: host.carrier.mnc + stability: experimental type: string brief: "host.carrier.mnc" examples: "001" - id: host.carrier.icc + stability: experimental type: string brief: "host.carrier.icc" examples: "DE" - id: peer.ip + stability: experimental type: string brief: > Remote address of the peer (dotted decimal for IPv4 or [RFC5952](https://tools.ietf.org/html/rfc5952) for IPv6) examples: '127.0.0.1' - id: peer.port + stability: experimental type: int brief: 'Remote port number.' examples: [80, 8080, 443] - id: peer.name + stability: experimental type: string brief: 'Remote hostname or similar, see note below.' examples: 'example.com' - id: host.ip + stability: experimental type: string brief: 'Like `net.peer.ip` but for the host IP. Useful in case of a multi-IP host.' examples: '192.168.0.1' - id: host.port + stability: experimental type: int brief: 'Like `net.peer.port` but for the host port.' examples: 35555 - id: host.name + stability: experimental type: string brief: 'Local hostname or similar, see note below.' examples: 'localhost' @@ -113,16 +126,19 @@ groups: These attributes may be used for any operation with an authenticated and/or authorized enduser. attributes: - id: id + stability: experimental type: string brief: > Username or client_id extracted from the access token or Authorization header in the inbound request from outside the system. examples: 'username' - id: role + stability: experimental type: string brief: 'Actual/assumed role the client is making the request under extracted from token or application security context.' examples: 'admin' - id: scope + stability: experimental type: string brief: > Scopes or granted authorities the client currently possesses extracted from token diff --git a/semantic-conventions/src/tests/data/markdown/omit_requirement_level/http.yaml b/semantic-conventions/src/tests/data/markdown/omit_requirement_level/http.yaml index 0186d65e..7db0d45c 100644 --- a/semantic-conventions/src/tests/data/markdown/omit_requirement_level/http.yaml +++ b/semantic-conventions/src/tests/data/markdown/omit_requirement_level/http.yaml @@ -8,18 +8,21 @@ groups: and various HTTP versions like 1.1, 2 and SPDY. attributes: - id: method + stability: experimental type: string requirement_level: required sampling_relevant: false brief: 'HTTP request method.' examples: ["GET", "POST", "HEAD"] - id: url + stability: experimental type: string brief: > Full HTTP request URL in the form `scheme://host[:port]/path?query[#fragment]`. Usually the fragment is not transmitted over HTTP, but if it is known, it should be included nevertheless. examples: ['https://www.foo.bar/search?q=OpenTelemetry#SemConv'] - id: target + stability: experimental type: string brief: 'The full request target as passed in a HTTP request line or equivalent.' examples: ['/path/12314/?q=ddds#123'] diff --git a/semantic-conventions/src/tests/data/markdown/parameter_empty/faas.yaml b/semantic-conventions/src/tests/data/markdown/parameter_empty/faas.yaml index 8c3288cc..648eb26e 100644 --- a/semantic-conventions/src/tests/data/markdown/parameter_empty/faas.yaml +++ b/semantic-conventions/src/tests/data/markdown/parameter_empty/faas.yaml @@ -8,6 +8,7 @@ groups: serverless) with spans. attributes: - id: trigger + stability: experimental requirement_level: required brief: 'Type of the trigger on which the function is executed.' type: @@ -28,6 +29,7 @@ groups: - id: other value: 'other' - id: execution + stability: experimental type: string brief: "The execution id of the current function execution." examples: 'af9d5aa4-a685-4c5f-a22b-444f80b3cc28' diff --git a/semantic-conventions/src/tests/data/markdown/parameter_empty/general.yaml b/semantic-conventions/src/tests/data/markdown/parameter_empty/general.yaml index fed550d4..22af26ac 100644 --- a/semantic-conventions/src/tests/data/markdown/parameter_empty/general.yaml +++ b/semantic-conventions/src/tests/data/markdown/parameter_empty/general.yaml @@ -6,28 +6,34 @@ groups: These attributes may be used for any network related operation. attributes: - id: peer.ip + stability: experimental type: string brief: > Remote address of the peer (dotted decimal for IPv4 or [RFC5952](https://tools.ietf.org/html/rfc5952) for IPv6) examples: '127.0.0.1' - id: peer.port + stability: experimental type: int brief: 'Remote port number.' examples: [80, 8080, 443] - id: peer.name + stability: experimental type: string brief: 'Remote hostname or similar, see note below.' examples: 'example.com' - id: host.ip + stability: experimental type: string brief: 'Like `net.peer.ip` but for the host IP. Useful in case of a multi-IP host.' examples: '192.168.0.1' - id: host.port + stability: experimental type: int brief: 'Like `net.peer.port` but for the host port.' examples: 35555 - id: host.name + stability: experimental type: string brief: 'Local hostname or similar, see note below.' examples: 'localhost' @@ -38,16 +44,19 @@ groups: These attributes may be used for any operation with an authenticated and/or authorized enduser. attributes: - id: id + stability: experimental type: string brief: > Username or client_id extracted from the access token or Authorization header in the inbound request from outside the system. examples: 'username' - id: role + stability: experimental type: string brief: 'Actual/assumed role the client is making the request under extracted from token or application security context.' examples: 'admin' - id: scope + stability: experimental type: string brief: > Scopes or granted authorities the client currently possesses extracted from token diff --git a/semantic-conventions/src/tests/data/markdown/parameter_empty/http.yaml b/semantic-conventions/src/tests/data/markdown/parameter_empty/http.yaml index 211caf66..c7281bd6 100644 --- a/semantic-conventions/src/tests/data/markdown/parameter_empty/http.yaml +++ b/semantic-conventions/src/tests/data/markdown/parameter_empty/http.yaml @@ -8,42 +8,50 @@ groups: and various HTTP versions like 1.1, 2 and SPDY. attributes: - id: method + stability: experimental type: string requirement_level: required sampling_relevant: false brief: 'HTTP request method.' examples: ["GET", "POST", "HEAD"] - id: url + stability: experimental type: string brief: > Full HTTP request URL in the form `scheme://host[:port]/path?query[#fragment]`. Usually the fragment is not transmitted over HTTP, but if it is known, it should be included nevertheless. examples: ['https://www.foo.bar/search?q=OpenTelemetry#SemConv'] - id: target + stability: experimental type: string brief: 'The full request target as passed in a HTTP request line or equivalent.' examples: ['/path/12314/?q=ddds#123'] - id: host + stability: experimental type: string brief: > The value of the [HTTP host header](https://tools.ietf.org/html/rfc7230#section-5.4). When the header is empty or not present, this attribute should be the same. examples: ['www.example.org'] - id: scheme + stability: experimental type: string brief: 'The URI scheme identifying the used protocol.' examples: ["http", "https"] - id: status_code + stability: experimental type: int requirement_level: conditionally_required: if and only if one was received/sent. brief: '[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).' examples: [200] - id: status_text + stability: experimental type: string brief: '[HTTP reason phrase](https://tools.ietf.org/html/rfc7230#section-3.1.2).' examples: ['OK'] - id: user_agent + stability: experimental type: string brief: 'Value of the [HTTP User-Agent](https://tools.ietf.org/html/rfc7231#section-5.5.3) header sent by the client.' examples: ['CERN-LineMode/2.15 libwww/2.17b3'] @@ -67,6 +75,7 @@ groups: brief: 'Semantic Convention for HTTP Server' attributes: - id: server_name + stability: experimental type: string requirement_level: conditionally_required: > @@ -81,11 +90,13 @@ groups: It is thus preferred to supply the raw data that is available. examples: ['example.com'] - id: route + stability: experimental type: string brief: > The matched route (path template). examples: '/users/:userID?' - id: client_ip + stability: experimental type: string sampling_relevant: false brief: > diff --git a/semantic-conventions/src/tests/data/markdown/parameter_full/faas.yaml b/semantic-conventions/src/tests/data/markdown/parameter_full/faas.yaml index 1fd67a8d..0fb1cad4 100644 --- a/semantic-conventions/src/tests/data/markdown/parameter_full/faas.yaml +++ b/semantic-conventions/src/tests/data/markdown/parameter_full/faas.yaml @@ -8,6 +8,7 @@ groups: serverless) with spans. attributes: - id: trigger + stability: experimental requirement_level: required brief: 'Type of the trigger on which the function is executed.' type: @@ -28,6 +29,7 @@ groups: - id: other value: 'other' - id: execution + stability: experimental type: string brief: "The execution id of the current function execution." examples: 'af9d5aa4-a685-4c5f-a22b-444f80b3cc28' diff --git a/semantic-conventions/src/tests/data/markdown/parameter_full/general.yaml b/semantic-conventions/src/tests/data/markdown/parameter_full/general.yaml index fed550d4..22af26ac 100644 --- a/semantic-conventions/src/tests/data/markdown/parameter_full/general.yaml +++ b/semantic-conventions/src/tests/data/markdown/parameter_full/general.yaml @@ -6,28 +6,34 @@ groups: These attributes may be used for any network related operation. attributes: - id: peer.ip + stability: experimental type: string brief: > Remote address of the peer (dotted decimal for IPv4 or [RFC5952](https://tools.ietf.org/html/rfc5952) for IPv6) examples: '127.0.0.1' - id: peer.port + stability: experimental type: int brief: 'Remote port number.' examples: [80, 8080, 443] - id: peer.name + stability: experimental type: string brief: 'Remote hostname or similar, see note below.' examples: 'example.com' - id: host.ip + stability: experimental type: string brief: 'Like `net.peer.ip` but for the host IP. Useful in case of a multi-IP host.' examples: '192.168.0.1' - id: host.port + stability: experimental type: int brief: 'Like `net.peer.port` but for the host port.' examples: 35555 - id: host.name + stability: experimental type: string brief: 'Local hostname or similar, see note below.' examples: 'localhost' @@ -38,16 +44,19 @@ groups: These attributes may be used for any operation with an authenticated and/or authorized enduser. attributes: - id: id + stability: experimental type: string brief: > Username or client_id extracted from the access token or Authorization header in the inbound request from outside the system. examples: 'username' - id: role + stability: experimental type: string brief: 'Actual/assumed role the client is making the request under extracted from token or application security context.' examples: 'admin' - id: scope + stability: experimental type: string brief: > Scopes or granted authorities the client currently possesses extracted from token diff --git a/semantic-conventions/src/tests/data/markdown/parameter_full/http.yaml b/semantic-conventions/src/tests/data/markdown/parameter_full/http.yaml index 1b732061..f3fbdb4b 100644 --- a/semantic-conventions/src/tests/data/markdown/parameter_full/http.yaml +++ b/semantic-conventions/src/tests/data/markdown/parameter_full/http.yaml @@ -8,22 +8,26 @@ groups: and various HTTP versions like 1.1, 2 and SPDY. attributes: - id: method + stability: experimental type: string requirement_level: required sampling_relevant: false brief: 'HTTP request method.' examples: ["GET", "POST", "HEAD"] - id: url + stability: experimental type: string brief: > Full HTTP request URL in the form `scheme://host[:port]/path?query[#fragment]`. Usually the fragment is not transmitted over HTTP, but if it is known, it should be included nevertheless. examples: ['https://www.foo.bar/search?q=OpenTelemetry#SemConv'] - id: target + stability: experimental type: string brief: 'The full request target as passed in a HTTP request line or equivalent.' examples: ['/path/12314/?q=ddds#123'] - id: host + stability: experimental type: string brief: > The value of the [HTTP host header](https://tools.ietf.org/html/rfc7230#section-5.4). @@ -32,20 +36,24 @@ groups: requirement_level: conditionally_required: - id: scheme + stability: experimental type: string brief: 'The URI scheme identifying the used protocol.' examples: ["http", "https"] - id: status_code + stability: experimental type: int requirement_level: conditionally_required: if and only if one was received/sent. brief: '[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).' examples: [200] - id: status_text + stability: experimental type: string brief: '[HTTP reason phrase](https://tools.ietf.org/html/rfc7230#section-3.1.2).' examples: ['OK'] - id: user_agent + stability: experimental type: string brief: 'Value of the [HTTP User-Agent](https://tools.ietf.org/html/rfc7231#section-5.5.3) header sent by the client.' examples: ['CERN-LineMode/2.15 libwww/2.17b3'] @@ -69,6 +77,7 @@ groups: brief: 'Semantic Convention for HTTP Server' attributes: - id: server_name + stability: experimental type: string requirement_level: conditionally_required: > @@ -83,11 +92,13 @@ groups: It is thus preferred to supply the raw data that is available. examples: ['example.com'] - id: route + stability: experimental type: string brief: > The matched route (path template). examples: '/users/:userID?' - id: client_ip + stability: experimental type: string sampling_relevant: false brief: > diff --git a/semantic-conventions/src/tests/data/markdown/parameter_remove_constraint/database.yaml b/semantic-conventions/src/tests/data/markdown/parameter_remove_constraint/database.yaml index 673ccd69..ebad25df 100644 --- a/semantic-conventions/src/tests/data/markdown/parameter_remove_constraint/database.yaml +++ b/semantic-conventions/src/tests/data/markdown/parameter_remove_constraint/database.yaml @@ -9,6 +9,7 @@ groups: span_kind: client attributes: - id: type + stability: experimental tag: connection-level type: allow_custom_values: true @@ -39,6 +40,7 @@ groups: Database type. For any SQL database, "sql". For others, the lower-case database category. - id: dbms + stability: experimental type: allow_custom_values: true members: @@ -146,6 +148,7 @@ groups: brief: > An identifier for the DBMS (database management system) product - id: connection_string + stability: experimental tag: connection-level type: string note: 'It is recommended to remove embedded credentials.' @@ -153,12 +156,14 @@ groups: The connection string used to connect to the database. examples: 'Server=(localdb)\v11.0;Integrated Security=true;' - id: user + stability: experimental tag: connection-level type: string brief: > Username for accessing the database. examples: ['readonly_user', 'reporting_user'] - id: mssql.instance_name + stability: experimental type: string note: > If setting a `db.mssql.instance_name`, `net.peer.port` is no longer @@ -168,11 +173,13 @@ groups: connecting to. This name is used to determine the port of a named instance. examples: 'MSSQLSERVER' - id: jdbc.driver_classname + stability: experimental type: string brief: > The fully-qualified class name of the JDBC driver used to connect. examples: ['org.postgresql.Driver', 'com.microsoft.sqlserver.jdbc.SQLServerDriver'] - id: name + stability: experimental type: string requirement_level: conditionally_required: > @@ -186,6 +193,7 @@ groups: Redis does not have a database name to used here. examples: [ 'customers', 'master' ] - id: statement + stability: experimental type: string requirement_level: conditionally_required: if applicable. @@ -194,6 +202,7 @@ groups: A database statement for the given database type. examples: ['SELECT * FROM wuser_table', 'SET mykey "WuValue"'] - id: operation + stability: experimental type: string requirement_level: conditionally_required: if `db.statement` is not applicable. @@ -222,6 +231,7 @@ groups: Call-level attributes for Cassandra attributes: - id: keyspace + stability: experimental type: string requirement_level: required brief: > @@ -235,6 +245,7 @@ groups: Call-level attributes for Apache HBase attributes: - id: namespace + stability: experimental type: string requirement_level: required brief: > @@ -249,8 +260,9 @@ groups: Call-level attributes for MongoDB attributes: - id: collection + stability: experimental type: string requirement_level: required brief: > The collection being accessed within the database stated in `db.name`. - examples: [ 'customers', 'products' ] + examples: [ 'customers', 'products' ] diff --git a/semantic-conventions/src/tests/data/markdown/parameter_remove_constraint/general.yaml b/semantic-conventions/src/tests/data/markdown/parameter_remove_constraint/general.yaml index 1340605b..56bbfd48 100644 --- a/semantic-conventions/src/tests/data/markdown/parameter_remove_constraint/general.yaml +++ b/semantic-conventions/src/tests/data/markdown/parameter_remove_constraint/general.yaml @@ -6,28 +6,34 @@ groups: These attributes may be used for any network related operation. attributes: - id: peer.ip + stability: experimental type: string brief: > Remote address of the peer (dotted decimal for IPv4 or [RFC5952](https://tools.ietf.org/html/rfc5952) for IPv6) examples: '127.0.0.1' - id: peer.port + stability: experimental type: int brief: 'Remote port number.' examples: [80, 8080, 443] - id: peer.name + stability: experimental type: string brief: 'Remote hostname or similar, see note below.' examples: 'example.com' - id: host.ip + stability: experimental type: string brief: 'Like `net.peer.ip` but for the host IP. Useful in case of a multi-IP host.' examples: '192.168.0.1' - id: host.port + stability: experimental type: int brief: 'Like `net.peer.port` but for the host port.' examples: 35555 - id: host.name + stability: experimental type: string brief: 'Local hostname or similar, see note below.' examples: 'localhost' @@ -38,16 +44,19 @@ groups: These attributes may be used for any operation with an authenticated and/or authorized enduser. attributes: - id: id + stability: experimental type: string brief: > Username or client_id extracted from the access token or Authorization header in the inbound request from outside the system. examples: 'username' - id: role + stability: experimental type: string brief: 'Actual/assumed role the client is making the request under extracted from token or application security context.' examples: 'admin' - id: scope + stability: experimental type: string brief: > Scopes or granted authorities the client currently possesses extracted from token diff --git a/semantic-conventions/src/tests/data/markdown/parameter_tag/database.yaml b/semantic-conventions/src/tests/data/markdown/parameter_tag/database.yaml index 54011f6f..36240552 100644 --- a/semantic-conventions/src/tests/data/markdown/parameter_tag/database.yaml +++ b/semantic-conventions/src/tests/data/markdown/parameter_tag/database.yaml @@ -9,6 +9,7 @@ groups: span_kind: client attributes: - id: type + stability: experimental tag: connection-level type: allow_custom_values: true @@ -39,6 +40,7 @@ groups: Database type. For any SQL database, "sql". For others, the lower-case database category. - id: dbms + stability: experimental type: allow_custom_values: true members: @@ -146,6 +148,7 @@ groups: brief: > An identifier for the DBMS (database management system) product - id: connection_string + stability: experimental tag: connection-level type: string note: 'It is recommended to remove embedded credentials.' @@ -153,12 +156,14 @@ groups: The connection string used to connect to the database. examples: 'Server=(localdb)\v11.0;Integrated Security=true;' - id: user + stability: experimental tag: connection-level type: string brief: > Username for accessing the database. examples: ['readonly_user', 'reporting_user'] - id: mssql.instance_name + stability: experimental type: string note: > If setting a `db.mssql.instance_name`, `net.peer.port` is no longer @@ -168,11 +173,13 @@ groups: connecting to. This name is used to determine the port of a named instance. examples: 'MSSQLSERVER' - id: jdbc.driver_classname + stability: experimental type: string brief: > The fully-qualified class name of the JDBC driver used to connect. examples: ['org.postgresql.Driver', 'com.microsoft.sqlserver.jdbc.SQLServerDriver'] - id: name + stability: experimental type: string requirement_level: conditionally_required: > @@ -186,6 +193,7 @@ groups: Redis does not have a database name to used here. examples: [ 'customers', 'master' ] - id: statement + stability: experimental type: string requirement_level: conditionally_required: if applicable. @@ -194,6 +202,7 @@ groups: A database statement for the given database type. examples: ['SELECT * FROM wuser_table', 'SET mykey "WuValue"'] - id: operation + stability: experimental type: string requirement_level: conditionally_required: if `db.statement` is not applicable. @@ -222,6 +231,7 @@ groups: Call-level attributes for Cassandra attributes: - id: keyspace + stability: experimental type: string requirement_level: required brief: > @@ -235,6 +245,7 @@ groups: Call-level attributes for Apache HBase attributes: - id: namespace + stability: experimental type: string requirement_level: required brief: > @@ -249,8 +260,9 @@ groups: Call-level attributes for MongoDB attributes: - id: collection + stability: experimental type: string requirement_level: required brief: > The collection being accessed within the database stated in `db.name`. - examples: [ 'customers', 'products' ] + examples: [ 'customers', 'products' ] diff --git a/semantic-conventions/src/tests/data/markdown/parameter_tag/general.yaml b/semantic-conventions/src/tests/data/markdown/parameter_tag/general.yaml index fed550d4..22af26ac 100644 --- a/semantic-conventions/src/tests/data/markdown/parameter_tag/general.yaml +++ b/semantic-conventions/src/tests/data/markdown/parameter_tag/general.yaml @@ -6,28 +6,34 @@ groups: These attributes may be used for any network related operation. attributes: - id: peer.ip + stability: experimental type: string brief: > Remote address of the peer (dotted decimal for IPv4 or [RFC5952](https://tools.ietf.org/html/rfc5952) for IPv6) examples: '127.0.0.1' - id: peer.port + stability: experimental type: int brief: 'Remote port number.' examples: [80, 8080, 443] - id: peer.name + stability: experimental type: string brief: 'Remote hostname or similar, see note below.' examples: 'example.com' - id: host.ip + stability: experimental type: string brief: 'Like `net.peer.ip` but for the host IP. Useful in case of a multi-IP host.' examples: '192.168.0.1' - id: host.port + stability: experimental type: int brief: 'Like `net.peer.port` but for the host port.' examples: 35555 - id: host.name + stability: experimental type: string brief: 'Local hostname or similar, see note below.' examples: 'localhost' @@ -38,16 +44,19 @@ groups: These attributes may be used for any operation with an authenticated and/or authorized enduser. attributes: - id: id + stability: experimental type: string brief: > Username or client_id extracted from the access token or Authorization header in the inbound request from outside the system. examples: 'username' - id: role + stability: experimental type: string brief: 'Actual/assumed role the client is making the request under extracted from token or application security context.' examples: 'admin' - id: scope + stability: experimental type: string brief: > Scopes or granted authorities the client currently possesses extracted from token diff --git a/semantic-conventions/src/tests/data/markdown/parameter_tag_empty/database.yaml b/semantic-conventions/src/tests/data/markdown/parameter_tag_empty/database.yaml index 00d3136f..7bb4e580 100644 --- a/semantic-conventions/src/tests/data/markdown/parameter_tag_empty/database.yaml +++ b/semantic-conventions/src/tests/data/markdown/parameter_tag_empty/database.yaml @@ -9,6 +9,7 @@ groups: span_kind: client attributes: - id: type + stability: experimental tag: connection-level type: allow_custom_values: true @@ -39,6 +40,7 @@ groups: Database type. For any SQL database, "sql". For others, the lower-case database category. - id: dbms + stability: experimental type: allow_custom_values: true members: @@ -146,6 +148,7 @@ groups: brief: > An identifier for the DBMS (database management system) product - id: connection_string + stability: experimental tag: connection-level type: string note: 'It is recommended to remove embedded credentials.' @@ -153,12 +156,14 @@ groups: The connection string used to connect to the database. examples: 'Server=(localdb)\v11.0;Integrated Security=true;' - id: user + stability: experimental tag: connection-level type: string brief: > Username for accessing the database. examples: ['readonly_user', 'reporting_user'] - id: mssql.instance_name + stability: experimental type: string note: > If setting a `db.mssql.instance_name`, `net.peer.port` is no longer @@ -168,11 +173,13 @@ groups: connecting to. This name is used to determine the port of a named instance. examples: 'MSSQLSERVER' - id: jdbc.driver_classname + stability: experimental type: string brief: > The fully-qualified class name of the JDBC driver used to connect. examples: ['org.postgresql.Driver', 'com.microsoft.sqlserver.jdbc.SQLServerDriver'] - id: name + stability: experimental type: string requirement_level: conditionally_required: > @@ -186,6 +193,7 @@ groups: Redis does not have a database name to used here. examples: [ 'customers', 'master' ] - id: statement + stability: experimental type: string requirement_level: conditionally_required: if applicable. @@ -194,6 +202,7 @@ groups: A database statement for the given database type. examples: ['SELECT * FROM wuser_table', 'SET mykey "WuValue"'] - id: operation + stability: experimental type: string requirement_level: conditionally_required: if `db.statement` is not applicable. @@ -221,6 +230,7 @@ groups: Call-level attributes for Cassandra attributes: - id: keyspace + stability: experimental type: string requirement_level: required brief: > @@ -234,6 +244,7 @@ groups: Call-level attributes for Apache HBase attributes: - id: namespace + stability: experimental type: string requirement_level: required brief: > @@ -248,8 +259,9 @@ groups: Call-level attributes for MongoDB attributes: - id: collection + stability: experimental type: string requirement_level: required brief: > The collection being accessed within the database stated in `db.name`. - examples: [ 'customers', 'products' ] + examples: [ 'customers', 'products' ] diff --git a/semantic-conventions/src/tests/data/markdown/parameter_tag_empty/general.yaml b/semantic-conventions/src/tests/data/markdown/parameter_tag_empty/general.yaml index c4ecd8bc..8ff48838 100644 --- a/semantic-conventions/src/tests/data/markdown/parameter_tag_empty/general.yaml +++ b/semantic-conventions/src/tests/data/markdown/parameter_tag_empty/general.yaml @@ -6,28 +6,34 @@ groups: These attributes may be used for any network related operation. attributes: - id: peer.ip + stability: experimental type: string brief: > Remote address of the peer (dotted decimal for IPv4 or [RFC5952](https://tools.ietf.org/html/rfc5952) for IPv6) examples: '127.0.0.1' - id: peer.port + stability: experimental type: int brief: 'Remote port number.' examples: [80, 8080, 443] - id: peer.name + stability: experimental type: string brief: 'Remote hostname or similar, see note below.' examples: 'example.com' - id: host.ip + stability: experimental type: string brief: 'Like `net.peer.ip` but for the host IP. Useful in case of a multi-IP host.' examples: '192.168.0.1' - id: host.port + stability: experimental type: int brief: 'Like `net.peer.port` but for the host port.' examples: 35555 - id: host.name + stability: experimental type: string brief: 'Local hostname or similar, see note below.' examples: 'localhost' @@ -38,16 +44,19 @@ groups: These attributes may be used for any operation with an authenticated and/or authorized enduser. attributes: - id: id + stability: experimental type: string brief: > Username or client_id extracted from the access token or Authorization header in the inbound request from outside the system. examples: 'username' - id: role + stability: experimental type: string brief: 'Actual/assumed role the client is making the request under extracted from token or application security context.' examples: 'admin' - id: scope + stability: experimental type: string brief: > Scopes or granted authorities the client currently possesses extracted from token diff --git a/semantic-conventions/src/tests/data/markdown/parameter_tag_no_attr/database.yaml b/semantic-conventions/src/tests/data/markdown/parameter_tag_no_attr/database.yaml index 8caf272d..05e2239f 100644 --- a/semantic-conventions/src/tests/data/markdown/parameter_tag_no_attr/database.yaml +++ b/semantic-conventions/src/tests/data/markdown/parameter_tag_no_attr/database.yaml @@ -6,6 +6,7 @@ groups: span_kind: client attributes: - id: type + stability: experimental tag: connection-level type: boolean requirement_level: required diff --git a/semantic-conventions/src/tests/data/markdown/parameter_wrong/faas.yaml b/semantic-conventions/src/tests/data/markdown/parameter_wrong/faas.yaml index 8c3288cc..648eb26e 100644 --- a/semantic-conventions/src/tests/data/markdown/parameter_wrong/faas.yaml +++ b/semantic-conventions/src/tests/data/markdown/parameter_wrong/faas.yaml @@ -8,6 +8,7 @@ groups: serverless) with spans. attributes: - id: trigger + stability: experimental requirement_level: required brief: 'Type of the trigger on which the function is executed.' type: @@ -28,6 +29,7 @@ groups: - id: other value: 'other' - id: execution + stability: experimental type: string brief: "The execution id of the current function execution." examples: 'af9d5aa4-a685-4c5f-a22b-444f80b3cc28' diff --git a/semantic-conventions/src/tests/data/markdown/parameter_wrong/general.yaml b/semantic-conventions/src/tests/data/markdown/parameter_wrong/general.yaml index fed550d4..22af26ac 100644 --- a/semantic-conventions/src/tests/data/markdown/parameter_wrong/general.yaml +++ b/semantic-conventions/src/tests/data/markdown/parameter_wrong/general.yaml @@ -6,28 +6,34 @@ groups: These attributes may be used for any network related operation. attributes: - id: peer.ip + stability: experimental type: string brief: > Remote address of the peer (dotted decimal for IPv4 or [RFC5952](https://tools.ietf.org/html/rfc5952) for IPv6) examples: '127.0.0.1' - id: peer.port + stability: experimental type: int brief: 'Remote port number.' examples: [80, 8080, 443] - id: peer.name + stability: experimental type: string brief: 'Remote hostname or similar, see note below.' examples: 'example.com' - id: host.ip + stability: experimental type: string brief: 'Like `net.peer.ip` but for the host IP. Useful in case of a multi-IP host.' examples: '192.168.0.1' - id: host.port + stability: experimental type: int brief: 'Like `net.peer.port` but for the host port.' examples: 35555 - id: host.name + stability: experimental type: string brief: 'Local hostname or similar, see note below.' examples: 'localhost' @@ -38,16 +44,19 @@ groups: These attributes may be used for any operation with an authenticated and/or authorized enduser. attributes: - id: id + stability: experimental type: string brief: > Username or client_id extracted from the access token or Authorization header in the inbound request from outside the system. examples: 'username' - id: role + stability: experimental type: string brief: 'Actual/assumed role the client is making the request under extracted from token or application security context.' examples: 'admin' - id: scope + stability: experimental type: string brief: > Scopes or granted authorities the client currently possesses extracted from token diff --git a/semantic-conventions/src/tests/data/markdown/parameter_wrong/http.yaml b/semantic-conventions/src/tests/data/markdown/parameter_wrong/http.yaml index 1b732061..f3fbdb4b 100644 --- a/semantic-conventions/src/tests/data/markdown/parameter_wrong/http.yaml +++ b/semantic-conventions/src/tests/data/markdown/parameter_wrong/http.yaml @@ -8,22 +8,26 @@ groups: and various HTTP versions like 1.1, 2 and SPDY. attributes: - id: method + stability: experimental type: string requirement_level: required sampling_relevant: false brief: 'HTTP request method.' examples: ["GET", "POST", "HEAD"] - id: url + stability: experimental type: string brief: > Full HTTP request URL in the form `scheme://host[:port]/path?query[#fragment]`. Usually the fragment is not transmitted over HTTP, but if it is known, it should be included nevertheless. examples: ['https://www.foo.bar/search?q=OpenTelemetry#SemConv'] - id: target + stability: experimental type: string brief: 'The full request target as passed in a HTTP request line or equivalent.' examples: ['/path/12314/?q=ddds#123'] - id: host + stability: experimental type: string brief: > The value of the [HTTP host header](https://tools.ietf.org/html/rfc7230#section-5.4). @@ -32,20 +36,24 @@ groups: requirement_level: conditionally_required: - id: scheme + stability: experimental type: string brief: 'The URI scheme identifying the used protocol.' examples: ["http", "https"] - id: status_code + stability: experimental type: int requirement_level: conditionally_required: if and only if one was received/sent. brief: '[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).' examples: [200] - id: status_text + stability: experimental type: string brief: '[HTTP reason phrase](https://tools.ietf.org/html/rfc7230#section-3.1.2).' examples: ['OK'] - id: user_agent + stability: experimental type: string brief: 'Value of the [HTTP User-Agent](https://tools.ietf.org/html/rfc7231#section-5.5.3) header sent by the client.' examples: ['CERN-LineMode/2.15 libwww/2.17b3'] @@ -69,6 +77,7 @@ groups: brief: 'Semantic Convention for HTTP Server' attributes: - id: server_name + stability: experimental type: string requirement_level: conditionally_required: > @@ -83,11 +92,13 @@ groups: It is thus preferred to supply the raw data that is available. examples: ['example.com'] - id: route + stability: experimental type: string brief: > The matched route (path template). examples: '/users/:userID?' - id: client_ip + stability: experimental type: string sampling_relevant: false brief: > diff --git a/semantic-conventions/src/tests/data/markdown/parameter_wrong_duplicate/faas.yaml b/semantic-conventions/src/tests/data/markdown/parameter_wrong_duplicate/faas.yaml index 1fd67a8d..0fb1cad4 100644 --- a/semantic-conventions/src/tests/data/markdown/parameter_wrong_duplicate/faas.yaml +++ b/semantic-conventions/src/tests/data/markdown/parameter_wrong_duplicate/faas.yaml @@ -8,6 +8,7 @@ groups: serverless) with spans. attributes: - id: trigger + stability: experimental requirement_level: required brief: 'Type of the trigger on which the function is executed.' type: @@ -28,6 +29,7 @@ groups: - id: other value: 'other' - id: execution + stability: experimental type: string brief: "The execution id of the current function execution." examples: 'af9d5aa4-a685-4c5f-a22b-444f80b3cc28' diff --git a/semantic-conventions/src/tests/data/markdown/parameter_wrong_duplicate/general.yaml b/semantic-conventions/src/tests/data/markdown/parameter_wrong_duplicate/general.yaml index fed550d4..22af26ac 100644 --- a/semantic-conventions/src/tests/data/markdown/parameter_wrong_duplicate/general.yaml +++ b/semantic-conventions/src/tests/data/markdown/parameter_wrong_duplicate/general.yaml @@ -6,28 +6,34 @@ groups: These attributes may be used for any network related operation. attributes: - id: peer.ip + stability: experimental type: string brief: > Remote address of the peer (dotted decimal for IPv4 or [RFC5952](https://tools.ietf.org/html/rfc5952) for IPv6) examples: '127.0.0.1' - id: peer.port + stability: experimental type: int brief: 'Remote port number.' examples: [80, 8080, 443] - id: peer.name + stability: experimental type: string brief: 'Remote hostname or similar, see note below.' examples: 'example.com' - id: host.ip + stability: experimental type: string brief: 'Like `net.peer.ip` but for the host IP. Useful in case of a multi-IP host.' examples: '192.168.0.1' - id: host.port + stability: experimental type: int brief: 'Like `net.peer.port` but for the host port.' examples: 35555 - id: host.name + stability: experimental type: string brief: 'Local hostname or similar, see note below.' examples: 'localhost' @@ -38,16 +44,19 @@ groups: These attributes may be used for any operation with an authenticated and/or authorized enduser. attributes: - id: id + stability: experimental type: string brief: > Username or client_id extracted from the access token or Authorization header in the inbound request from outside the system. examples: 'username' - id: role + stability: experimental type: string brief: 'Actual/assumed role the client is making the request under extracted from token or application security context.' examples: 'admin' - id: scope + stability: experimental type: string brief: > Scopes or granted authorities the client currently possesses extracted from token diff --git a/semantic-conventions/src/tests/data/markdown/parameter_wrong_duplicate/http.yaml b/semantic-conventions/src/tests/data/markdown/parameter_wrong_duplicate/http.yaml index 1b732061..f3fbdb4b 100644 --- a/semantic-conventions/src/tests/data/markdown/parameter_wrong_duplicate/http.yaml +++ b/semantic-conventions/src/tests/data/markdown/parameter_wrong_duplicate/http.yaml @@ -8,22 +8,26 @@ groups: and various HTTP versions like 1.1, 2 and SPDY. attributes: - id: method + stability: experimental type: string requirement_level: required sampling_relevant: false brief: 'HTTP request method.' examples: ["GET", "POST", "HEAD"] - id: url + stability: experimental type: string brief: > Full HTTP request URL in the form `scheme://host[:port]/path?query[#fragment]`. Usually the fragment is not transmitted over HTTP, but if it is known, it should be included nevertheless. examples: ['https://www.foo.bar/search?q=OpenTelemetry#SemConv'] - id: target + stability: experimental type: string brief: 'The full request target as passed in a HTTP request line or equivalent.' examples: ['/path/12314/?q=ddds#123'] - id: host + stability: experimental type: string brief: > The value of the [HTTP host header](https://tools.ietf.org/html/rfc7230#section-5.4). @@ -32,20 +36,24 @@ groups: requirement_level: conditionally_required: - id: scheme + stability: experimental type: string brief: 'The URI scheme identifying the used protocol.' examples: ["http", "https"] - id: status_code + stability: experimental type: int requirement_level: conditionally_required: if and only if one was received/sent. brief: '[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).' examples: [200] - id: status_text + stability: experimental type: string brief: '[HTTP reason phrase](https://tools.ietf.org/html/rfc7230#section-3.1.2).' examples: ['OK'] - id: user_agent + stability: experimental type: string brief: 'Value of the [HTTP User-Agent](https://tools.ietf.org/html/rfc7231#section-5.5.3) header sent by the client.' examples: ['CERN-LineMode/2.15 libwww/2.17b3'] @@ -69,6 +77,7 @@ groups: brief: 'Semantic Convention for HTTP Server' attributes: - id: server_name + stability: experimental type: string requirement_level: conditionally_required: > @@ -83,11 +92,13 @@ groups: It is thus preferred to supply the raw data that is available. examples: ['example.com'] - id: route + stability: experimental type: string brief: > The matched route (path template). examples: '/users/:userID?' - id: client_ip + stability: experimental type: string sampling_relevant: false brief: > diff --git a/semantic-conventions/src/tests/data/markdown/parameter_wrong_syntax/faas.yaml b/semantic-conventions/src/tests/data/markdown/parameter_wrong_syntax/faas.yaml index 1fd67a8d..0fb1cad4 100644 --- a/semantic-conventions/src/tests/data/markdown/parameter_wrong_syntax/faas.yaml +++ b/semantic-conventions/src/tests/data/markdown/parameter_wrong_syntax/faas.yaml @@ -8,6 +8,7 @@ groups: serverless) with spans. attributes: - id: trigger + stability: experimental requirement_level: required brief: 'Type of the trigger on which the function is executed.' type: @@ -28,6 +29,7 @@ groups: - id: other value: 'other' - id: execution + stability: experimental type: string brief: "The execution id of the current function execution." examples: 'af9d5aa4-a685-4c5f-a22b-444f80b3cc28' diff --git a/semantic-conventions/src/tests/data/markdown/parameter_wrong_syntax/general.yaml b/semantic-conventions/src/tests/data/markdown/parameter_wrong_syntax/general.yaml index fed550d4..22af26ac 100644 --- a/semantic-conventions/src/tests/data/markdown/parameter_wrong_syntax/general.yaml +++ b/semantic-conventions/src/tests/data/markdown/parameter_wrong_syntax/general.yaml @@ -6,28 +6,34 @@ groups: These attributes may be used for any network related operation. attributes: - id: peer.ip + stability: experimental type: string brief: > Remote address of the peer (dotted decimal for IPv4 or [RFC5952](https://tools.ietf.org/html/rfc5952) for IPv6) examples: '127.0.0.1' - id: peer.port + stability: experimental type: int brief: 'Remote port number.' examples: [80, 8080, 443] - id: peer.name + stability: experimental type: string brief: 'Remote hostname or similar, see note below.' examples: 'example.com' - id: host.ip + stability: experimental type: string brief: 'Like `net.peer.ip` but for the host IP. Useful in case of a multi-IP host.' examples: '192.168.0.1' - id: host.port + stability: experimental type: int brief: 'Like `net.peer.port` but for the host port.' examples: 35555 - id: host.name + stability: experimental type: string brief: 'Local hostname or similar, see note below.' examples: 'localhost' @@ -38,16 +44,19 @@ groups: These attributes may be used for any operation with an authenticated and/or authorized enduser. attributes: - id: id + stability: experimental type: string brief: > Username or client_id extracted from the access token or Authorization header in the inbound request from outside the system. examples: 'username' - id: role + stability: experimental type: string brief: 'Actual/assumed role the client is making the request under extracted from token or application security context.' examples: 'admin' - id: scope + stability: experimental type: string brief: > Scopes or granted authorities the client currently possesses extracted from token diff --git a/semantic-conventions/src/tests/data/markdown/parameter_wrong_syntax/http.yaml b/semantic-conventions/src/tests/data/markdown/parameter_wrong_syntax/http.yaml index 1b732061..f3fbdb4b 100644 --- a/semantic-conventions/src/tests/data/markdown/parameter_wrong_syntax/http.yaml +++ b/semantic-conventions/src/tests/data/markdown/parameter_wrong_syntax/http.yaml @@ -8,22 +8,26 @@ groups: and various HTTP versions like 1.1, 2 and SPDY. attributes: - id: method + stability: experimental type: string requirement_level: required sampling_relevant: false brief: 'HTTP request method.' examples: ["GET", "POST", "HEAD"] - id: url + stability: experimental type: string brief: > Full HTTP request URL in the form `scheme://host[:port]/path?query[#fragment]`. Usually the fragment is not transmitted over HTTP, but if it is known, it should be included nevertheless. examples: ['https://www.foo.bar/search?q=OpenTelemetry#SemConv'] - id: target + stability: experimental type: string brief: 'The full request target as passed in a HTTP request line or equivalent.' examples: ['/path/12314/?q=ddds#123'] - id: host + stability: experimental type: string brief: > The value of the [HTTP host header](https://tools.ietf.org/html/rfc7230#section-5.4). @@ -32,20 +36,24 @@ groups: requirement_level: conditionally_required: - id: scheme + stability: experimental type: string brief: 'The URI scheme identifying the used protocol.' examples: ["http", "https"] - id: status_code + stability: experimental type: int requirement_level: conditionally_required: if and only if one was received/sent. brief: '[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).' examples: [200] - id: status_text + stability: experimental type: string brief: '[HTTP reason phrase](https://tools.ietf.org/html/rfc7230#section-3.1.2).' examples: ['OK'] - id: user_agent + stability: experimental type: string brief: 'Value of the [HTTP User-Agent](https://tools.ietf.org/html/rfc7231#section-5.5.3) header sent by the client.' examples: ['CERN-LineMode/2.15 libwww/2.17b3'] @@ -69,6 +77,7 @@ groups: brief: 'Semantic Convention for HTTP Server' attributes: - id: server_name + stability: experimental type: string requirement_level: conditionally_required: > @@ -83,11 +92,13 @@ groups: It is thus preferred to supply the raw data that is available. examples: ['example.com'] - id: route + stability: experimental type: string brief: > The matched route (path template). examples: '/users/:userID?' - id: client_ip + stability: experimental type: string sampling_relevant: false brief: > diff --git a/semantic-conventions/src/tests/data/markdown/ref/general.yaml b/semantic-conventions/src/tests/data/markdown/ref/general.yaml index 4472178f..a1ebb62a 100644 --- a/semantic-conventions/src/tests/data/markdown/ref/general.yaml +++ b/semantic-conventions/src/tests/data/markdown/ref/general.yaml @@ -6,43 +6,52 @@ groups: These attributes may be used for any network related operation. attributes: - id: peer.ip + stability: experimental type: string brief: > Remote address of the peer (dotted decimal for IPv4 or [RFC5952](https://tools.ietf.org/html/rfc5952) for IPv6) examples: '127.0.0.1' - id: peer.port + stability: experimental type: int brief: 'Remote port number.' examples: [80, 8080, 443] - id: peer.name + stability: experimental type: string brief: 'Remote hostname or similar, see note below.' examples: 'example.com' - id: host.ip + stability: experimental type: string brief: 'Like `net.peer.ip` but for the host IP. Useful in case of a multi-IP host.' examples: '192.168.0.1' - id: host.port + stability: experimental type: int brief: 'Like `net.peer.port` but for the host port.' examples: 35555 - id: host.name + stability: experimental type: string brief: 'Local hostname or similar, see note below.' examples: 'localhost' - id: sock.peer.name + stability: experimental type: string brief: Remote socket peer name. requirement_level: recommended: If available and different than `net.peer.name` and if `net.sock.peer.addr` is set. examples: proxy.example.com - id: sock.peer.addr + stability: experimental type: string brief: > Remote socket peer address. examples: ['127.0.0.1', '/tmp/mysql.sock' ] - id: sock.peer.port + stability: experimental type: int brief: Remote socket peer port. requirement_level: @@ -55,16 +64,19 @@ groups: These attributes may be used for any operation with an authenticated and/or authorized enduser. attributes: - id: id + stability: experimental type: string brief: > Username or client_id extracted from the access token or Authorization header in the inbound request from outside the system. examples: 'username' - id: role + stability: experimental type: string brief: 'Actual/assumed role the client is making the request under extracted from token or application security context.' examples: 'admin' - id: scope + stability: experimental type: string brief: > Scopes or granted authorities the client currently possesses extracted from token diff --git a/semantic-conventions/src/tests/data/markdown/ref/http.yaml b/semantic-conventions/src/tests/data/markdown/ref/http.yaml index 1b732061..f3fbdb4b 100644 --- a/semantic-conventions/src/tests/data/markdown/ref/http.yaml +++ b/semantic-conventions/src/tests/data/markdown/ref/http.yaml @@ -8,22 +8,26 @@ groups: and various HTTP versions like 1.1, 2 and SPDY. attributes: - id: method + stability: experimental type: string requirement_level: required sampling_relevant: false brief: 'HTTP request method.' examples: ["GET", "POST", "HEAD"] - id: url + stability: experimental type: string brief: > Full HTTP request URL in the form `scheme://host[:port]/path?query[#fragment]`. Usually the fragment is not transmitted over HTTP, but if it is known, it should be included nevertheless. examples: ['https://www.foo.bar/search?q=OpenTelemetry#SemConv'] - id: target + stability: experimental type: string brief: 'The full request target as passed in a HTTP request line or equivalent.' examples: ['/path/12314/?q=ddds#123'] - id: host + stability: experimental type: string brief: > The value of the [HTTP host header](https://tools.ietf.org/html/rfc7230#section-5.4). @@ -32,20 +36,24 @@ groups: requirement_level: conditionally_required: - id: scheme + stability: experimental type: string brief: 'The URI scheme identifying the used protocol.' examples: ["http", "https"] - id: status_code + stability: experimental type: int requirement_level: conditionally_required: if and only if one was received/sent. brief: '[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).' examples: [200] - id: status_text + stability: experimental type: string brief: '[HTTP reason phrase](https://tools.ietf.org/html/rfc7230#section-3.1.2).' examples: ['OK'] - id: user_agent + stability: experimental type: string brief: 'Value of the [HTTP User-Agent](https://tools.ietf.org/html/rfc7231#section-5.5.3) header sent by the client.' examples: ['CERN-LineMode/2.15 libwww/2.17b3'] @@ -69,6 +77,7 @@ groups: brief: 'Semantic Convention for HTTP Server' attributes: - id: server_name + stability: experimental type: string requirement_level: conditionally_required: > @@ -83,11 +92,13 @@ groups: It is thus preferred to supply the raw data that is available. examples: ['example.com'] - id: route + stability: experimental type: string brief: > The matched route (path template). examples: '/users/:userID?' - id: client_ip + stability: experimental type: string sampling_relevant: false brief: > diff --git a/semantic-conventions/src/tests/data/markdown/ref/rpc.yaml b/semantic-conventions/src/tests/data/markdown/ref/rpc.yaml index 58e932b2..a41dc390 100644 --- a/semantic-conventions/src/tests/data/markdown/ref/rpc.yaml +++ b/semantic-conventions/src/tests/data/markdown/ref/rpc.yaml @@ -5,6 +5,7 @@ groups: brief: 'This document defines semantic conventions for remote procedure calls.' attributes: - id: service + stability: experimental type: string requirement_level: required brief: 'The service name, must be equal to the $service part in the span name.' diff --git a/semantic-conventions/src/tests/data/markdown/ref_extends/http.yaml b/semantic-conventions/src/tests/data/markdown/ref_extends/http.yaml index 89cd5a5e..347a75f1 100644 --- a/semantic-conventions/src/tests/data/markdown/ref_extends/http.yaml +++ b/semantic-conventions/src/tests/data/markdown/ref_extends/http.yaml @@ -19,6 +19,7 @@ groups: - id: http.client.request.duration.metric type: metric + stability: experimental metric_name: http.client.request.duration brief: "Measures request duration." instrument: histogram diff --git a/semantic-conventions/src/tests/data/markdown/ref_extends/server.yaml b/semantic-conventions/src/tests/data/markdown/ref_extends/server.yaml index 0b25c86f..a6e144b4 100644 --- a/semantic-conventions/src/tests/data/markdown/ref_extends/server.yaml +++ b/semantic-conventions/src/tests/data/markdown/ref_extends/server.yaml @@ -5,6 +5,7 @@ groups: brief: 'This document defines semantic conventions for common server attributes.' attributes: - id: address + stability: experimental type: string brief: 'Domain name. (original brief)' examples: 'foo' diff --git a/semantic-conventions/src/tests/data/markdown/sampling_relevant/general.yaml b/semantic-conventions/src/tests/data/markdown/sampling_relevant/general.yaml index 016be000..a256ef13 100644 --- a/semantic-conventions/src/tests/data/markdown/sampling_relevant/general.yaml +++ b/semantic-conventions/src/tests/data/markdown/sampling_relevant/general.yaml @@ -6,14 +6,17 @@ groups: These attributes may be used for any network related operation. attributes: - id: peer.ip + stability: experimental type: string brief: . examples: '.' - id: peer.port + stability: experimental type: int brief: . examples: [] - id: peer.name + stability: experimental type: string brief: . examples: '.' diff --git a/semantic-conventions/src/tests/data/markdown/sampling_relevant/http.yaml b/semantic-conventions/src/tests/data/markdown/sampling_relevant/http.yaml index 4fb47954..808799dd 100644 --- a/semantic-conventions/src/tests/data/markdown/sampling_relevant/http.yaml +++ b/semantic-conventions/src/tests/data/markdown/sampling_relevant/http.yaml @@ -4,12 +4,14 @@ groups: brief: 'This document defines semantic conventions for HTTP client and server Spans.' attributes: - id: method + stability: experimental type: string requirement_level: required brief: . sampling_relevant: true examples: ["GET"] - id: url + stability: experimental type: string brief: . note: > @@ -18,27 +20,32 @@ groups: sampling_relevant: true examples: ['.'] - id: target + stability: experimental type: string brief: . sampling_relevant: true examples: ['.'] - id: host + stability: experimental type: string brief: . sampling_relevant: true examples: ['.'] - id: scheme + stability: experimental type: string brief: . sampling_relevant: true examples: ["http"] - id: status_code + stability: experimental type: int requirement_level: conditionally_required: brief: . examples: [] - id: user_agent + stability: experimental type: string brief: . examples: ['.'] diff --git a/semantic-conventions/src/tests/data/markdown/scope/scope.yaml b/semantic-conventions/src/tests/data/markdown/scope/scope.yaml index 12036dbf..ab0c8ce0 100644 --- a/semantic-conventions/src/tests/data/markdown/scope/scope.yaml +++ b/semantic-conventions/src/tests/data/markdown/scope/scope.yaml @@ -6,6 +6,7 @@ groups: Instrumentation Scope attributes attributes: - id: short_name + stability: experimental type: string requirement_level: recommended brief: > diff --git a/semantic-conventions/src/tests/data/markdown/single/general.yaml b/semantic-conventions/src/tests/data/markdown/single/general.yaml index fba8c3bf..bebaef5d 100644 --- a/semantic-conventions/src/tests/data/markdown/single/general.yaml +++ b/semantic-conventions/src/tests/data/markdown/single/general.yaml @@ -6,27 +6,33 @@ groups: These attributes may be used for any network related operation. attributes: - id: peer.ip + stability: experimental type: string brief: > Remote address of the peer (dotted decimal for IPv4 or [RFC5952](https://tools.ietf.org/html/rfc5952) for IPv6) examples: '127.0.0.1' - id: peer.port + stability: experimental type: int brief: 'Remote port number.' examples: [80, 8080, 443] - id: peer.name + stability: experimental type: string brief: 'Remote hostname or similar, see note below.' examples: 'example.com' - id: host.ip + stability: experimental type: string brief: 'Like `net.peer.ip` but for the host IP. Useful in case of a multi-IP host.' examples: '192.168.0.1' - id: host.port + stability: experimental type: int brief: 'Like `net.peer.port` but for the host port.' - id: host.name + stability: experimental type: string brief: 'Local hostname or similar, see note below.' examples: 'localhost' @@ -37,16 +43,19 @@ groups: These attributes may be used for any operation with an authenticated and/or authorized enduser. attributes: - id: id + stability: experimental type: string brief: > Username or client_id extracted from the access token or Authorization header in the inbound request from outside the system. examples: 'username' - id: role + stability: experimental type: string brief: 'Actual/assumed role the client is making the request under extracted from token or application security context.' examples: 'admin' - id: scope + stability: experimental type: string brief: > Scopes or granted authorities the client currently possesses extracted from token diff --git a/semantic-conventions/src/tests/data/markdown/single/http.yaml b/semantic-conventions/src/tests/data/markdown/single/http.yaml index 1b732061..f3fbdb4b 100644 --- a/semantic-conventions/src/tests/data/markdown/single/http.yaml +++ b/semantic-conventions/src/tests/data/markdown/single/http.yaml @@ -8,22 +8,26 @@ groups: and various HTTP versions like 1.1, 2 and SPDY. attributes: - id: method + stability: experimental type: string requirement_level: required sampling_relevant: false brief: 'HTTP request method.' examples: ["GET", "POST", "HEAD"] - id: url + stability: experimental type: string brief: > Full HTTP request URL in the form `scheme://host[:port]/path?query[#fragment]`. Usually the fragment is not transmitted over HTTP, but if it is known, it should be included nevertheless. examples: ['https://www.foo.bar/search?q=OpenTelemetry#SemConv'] - id: target + stability: experimental type: string brief: 'The full request target as passed in a HTTP request line or equivalent.' examples: ['/path/12314/?q=ddds#123'] - id: host + stability: experimental type: string brief: > The value of the [HTTP host header](https://tools.ietf.org/html/rfc7230#section-5.4). @@ -32,20 +36,24 @@ groups: requirement_level: conditionally_required: - id: scheme + stability: experimental type: string brief: 'The URI scheme identifying the used protocol.' examples: ["http", "https"] - id: status_code + stability: experimental type: int requirement_level: conditionally_required: if and only if one was received/sent. brief: '[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).' examples: [200] - id: status_text + stability: experimental type: string brief: '[HTTP reason phrase](https://tools.ietf.org/html/rfc7230#section-3.1.2).' examples: ['OK'] - id: user_agent + stability: experimental type: string brief: 'Value of the [HTTP User-Agent](https://tools.ietf.org/html/rfc7231#section-5.5.3) header sent by the client.' examples: ['CERN-LineMode/2.15 libwww/2.17b3'] @@ -69,6 +77,7 @@ groups: brief: 'Semantic Convention for HTTP Server' attributes: - id: server_name + stability: experimental type: string requirement_level: conditionally_required: > @@ -83,11 +92,13 @@ groups: It is thus preferred to supply the raw data that is available. examples: ['example.com'] - id: route + stability: experimental type: string brief: > The matched route (path template). examples: '/users/:userID?' - id: client_ip + stability: experimental type: string sampling_relevant: false brief: > diff --git a/semantic-conventions/src/tests/data/markdown/sorting/input.yaml b/semantic-conventions/src/tests/data/markdown/sorting/input.yaml index 50260364..a33ec950 100644 --- a/semantic-conventions/src/tests/data/markdown/sorting/input.yaml +++ b/semantic-conventions/src/tests/data/markdown/sorting/input.yaml @@ -5,10 +5,12 @@ groups: brief: 'Attributes that appear last.' attributes: - id: yyy + stability: experimental type: string brief: 'the 6th attribute' examples: 'yyy' - id: xxx + stability: experimental type: string brief: 'the 5th attribute' examples: 'xxx' @@ -19,6 +21,7 @@ groups: brief: 'Attributes that appear first.' attributes: - id: aaa + stability: experimental type: string brief: 'the 1st attribute' examples: 'aaa' @@ -29,6 +32,7 @@ groups: brief: 'Attributes that appear after `mmm`.' attributes: - id: nnn + stability: experimental type: string brief: 'the 4th attribute' examples: 'nnn' @@ -40,10 +44,12 @@ groups: extends: nnn attributes: - id: ccc + stability: experimental type: template[string] brief: the 3rd attribute examples: '`mmm.ccc="ccc"`' - id: bbb + stability: experimental type: string brief: the 2nd attribute examples: 'bbb' diff --git a/semantic-conventions/src/tests/data/markdown/stability/all_badges_expected.md b/semantic-conventions/src/tests/data/markdown/stability/all_badges_expected.md new file mode 100644 index 00000000..856f8a0c --- /dev/null +++ b/semantic-conventions/src/tests/data/markdown/stability/all_badges_expected.md @@ -0,0 +1,44 @@ + +| Attribute | Type | Description | Examples | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | +|---|---|---|---|---| +| [`test.deprecated_experimental_attr`](stable_badges_expected.md) | boolean | ![Deprecated](https://img.shields.io/badge/-deprecated-red)
| | `Required` | +| [`test.deprecated_stable_attr`](stable_badges_expected.md) | boolean | ![Deprecated](https://img.shields.io/badge/-deprecated-red)
| | `Required` | +| [`test.exp_attr`](stable_badges_expected.md) | boolean | ![Experimental](https://img.shields.io/badge/-experimental-blue)
| | `Required` | +| [`test.stable_attr`](stable_badges_expected.md) | boolean | ![Stable](https://img.shields.io/badge/-stable-lightgreen)
| | `Required` | + + + +| Attribute | Type | Description | Examples | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | +|---|---|---|---|---| +| [`test.deprecated_experimental_attr`](stable_badges_expected.md) | boolean | ![Deprecated](https://img.shields.io/badge/-deprecated-red)
| | `Required` | +| [`test.deprecated_stable_attr`](stable_badges_expected.md) | boolean | ![Deprecated](https://img.shields.io/badge/-deprecated-red)
| | `Required` | +| [`test.exp_attr`](stable_badges_expected.md) | boolean | ![Experimental](https://img.shields.io/badge/-experimental-blue)
| | `Required` | +| [`test.stable_attr`](stable_badges_expected.md) | boolean | ![Stable](https://img.shields.io/badge/-stable-lightgreen)
| | `Required` | + + + +| Attribute | Type | Description | Examples | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | +|---|---|---|---|---| +| [`test.deprecated_experimental_attr`](stable_badges_expected.md) | boolean | ![Deprecated](https://img.shields.io/badge/-deprecated-red)
| | `Required` | +| [`test.deprecated_stable_attr`](stable_badges_expected.md) | boolean | ![Deprecated](https://img.shields.io/badge/-deprecated-red)
| | `Required` | +| [`test.exp_attr`](stable_badges_expected.md) | boolean | ![Experimental](https://img.shields.io/badge/-experimental-blue)
| | `Required` | +| [`test.stable_attr`](stable_badges_expected.md) | boolean | ![Stable](https://img.shields.io/badge/-stable-lightgreen)
| | `Required` | + + + +| Name | Instrument Type | Unit (UCUM) | Description | +| -------- | --------------- | ----------- | -------------- | +| `stable_metric` | Histogram | `s` | ![Stable](https://img.shields.io/badge/-stable-lightgreen)
stable_metric | + + + +| Name | Instrument Type | Unit (UCUM) | Description | +| -------- | --------------- | ----------- | -------------- | +| `experimental_metric` | Counter | `{e}` | ![Experimental](https://img.shields.io/badge/-experimental-blue)
experimental_metric | + + + +| Name | Instrument Type | Unit (UCUM) | Description | +| -------- | --------------- | ----------- | -------------- | +| `deprecated_metric` | UpDownCounter | `{d}` | ![Deprecated](https://img.shields.io/badge/-deprecated-red)
deprecated_metric | + \ No newline at end of file diff --git a/semantic-conventions/src/tests/data/markdown/stability/badges_expected.md b/semantic-conventions/src/tests/data/markdown/stability/badges_expected.md deleted file mode 100644 index 8c53eba4..00000000 --- a/semantic-conventions/src/tests/data/markdown/stability/badges_expected.md +++ /dev/null @@ -1,10 +0,0 @@ -# Common Attributes - - -| Attribute | Type | Description | Examples | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | -|---|---|---|---|---| -| [`test.def_stability`](labels_expected.md) | boolean | | | `Required` | -| [`test.deprecated_attr`](labels_expected.md) | boolean | ![Deprecated](https://img.shields.io/badge/-deprecated-red)
| | `Required` | -| [`test.exp_attr`](labels_expected.md) | boolean | | | `Required` | -| [`test.stable_attr`](labels_expected.md) | boolean | ![Stable](https://img.shields.io/badge/-stable-lightgreen)
| | `Required` | - diff --git a/semantic-conventions/src/tests/data/markdown/stability/input.md b/semantic-conventions/src/tests/data/markdown/stability/input.md index 0109ba90..f699ebb8 100644 --- a/semantic-conventions/src/tests/data/markdown/stability/input.md +++ b/semantic-conventions/src/tests/data/markdown/stability/input.md @@ -1,5 +1,17 @@ -# Common Attributes - + + + + + + + + + + + + + + \ No newline at end of file diff --git a/semantic-conventions/src/tests/data/markdown/stability/labels_expected.md b/semantic-conventions/src/tests/data/markdown/stability/labels_expected.md deleted file mode 100644 index d6edf766..00000000 --- a/semantic-conventions/src/tests/data/markdown/stability/labels_expected.md +++ /dev/null @@ -1,10 +0,0 @@ -# Common Attributes - - -| Attribute | Type | Description | Examples | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | -|---|---|---|---|---| -| [`test.def_stability`](labels_expected.md) | boolean | | | `Required` | -| [`test.deprecated_attr`](labels_expected.md) | boolean | **Deprecated: Removed.**
| | `Required` | -| [`test.exp_attr`](labels_expected.md) | boolean | | | `Required` | -| [`test.stable_attr`](labels_expected.md) | boolean | | | `Required` | - diff --git a/semantic-conventions/src/tests/data/markdown/stability/stability.yaml b/semantic-conventions/src/tests/data/markdown/stability/stability.yaml index 14ed4783..6ad528db 100644 --- a/semantic-conventions/src/tests/data/markdown/stability/stability.yaml +++ b/semantic-conventions/src/tests/data/markdown/stability/stability.yaml @@ -14,13 +14,53 @@ groups: requirement_level: required stability: stable brief: "" - - id: deprecated_attr + - id: deprecated_stable_attr type: boolean requirement_level: required stability: stable deprecated: "Removed." brief: "" - - id: def_stability + - id: deprecated_experimental_attr type: boolean requirement_level: required + stability: experimental + deprecated: "Removed." brief: "" + - id: ref_test + brief: 'ref_test' + attributes: + - ref: test.exp_attr + - ref: test.stable_attr + - ref: test.deprecated_stable_attr + - ref: test.deprecated_experimental_attr + - id: extends_test + brief: 'extends_test' + extends: test + - id: stable_metric + type: metric + brief: 'stable_metric' + stability: stable + metric_name: stable_metric + instrument: histogram + unit: "s" + attributes: + - ref: test.stable_attr + - id: experimental_metric + type: metric + brief: 'experimental_metric' + stability: experimental + metric_name: experimental_metric + instrument: counter + unit: "{e}" + attributes: + - ref: test.exp_attr + - id: deprecated_metric + type: metric + brief: 'deprecated_metric' + stability: stable + deprecated: "Removed." + metric_name: deprecated_metric + instrument: updowncounter + unit: "{d}" + attributes: + - ref: test.deprecated_experimental_attr \ No newline at end of file diff --git a/semantic-conventions/src/tests/data/markdown/stability/stable_badges_expected.md b/semantic-conventions/src/tests/data/markdown/stability/stable_badges_expected.md new file mode 100644 index 00000000..b1e779ad --- /dev/null +++ b/semantic-conventions/src/tests/data/markdown/stability/stable_badges_expected.md @@ -0,0 +1,44 @@ + +| Attribute | Type | Description | Examples | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | +|---|---|---|---|---| +| [`test.deprecated_experimental_attr`](stable_badges_expected.md) | boolean | ![Deprecated](https://img.shields.io/badge/-deprecated-red)
| | `Required` | +| [`test.deprecated_stable_attr`](stable_badges_expected.md) | boolean | ![Deprecated](https://img.shields.io/badge/-deprecated-red)
| | `Required` | +| [`test.exp_attr`](stable_badges_expected.md) | boolean | | | `Required` | +| [`test.stable_attr`](stable_badges_expected.md) | boolean | ![Stable](https://img.shields.io/badge/-stable-lightgreen)
| | `Required` | + + + +| Attribute | Type | Description | Examples | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | +|---|---|---|---|---| +| [`test.deprecated_experimental_attr`](stable_badges_expected.md) | boolean | ![Deprecated](https://img.shields.io/badge/-deprecated-red)
| | `Required` | +| [`test.deprecated_stable_attr`](stable_badges_expected.md) | boolean | ![Deprecated](https://img.shields.io/badge/-deprecated-red)
| | `Required` | +| [`test.exp_attr`](stable_badges_expected.md) | boolean | | | `Required` | +| [`test.stable_attr`](stable_badges_expected.md) | boolean | ![Stable](https://img.shields.io/badge/-stable-lightgreen)
| | `Required` | + + + +| Attribute | Type | Description | Examples | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | +|---|---|---|---|---| +| [`test.deprecated_experimental_attr`](stable_badges_expected.md) | boolean | ![Deprecated](https://img.shields.io/badge/-deprecated-red)
| | `Required` | +| [`test.deprecated_stable_attr`](stable_badges_expected.md) | boolean | ![Deprecated](https://img.shields.io/badge/-deprecated-red)
| | `Required` | +| [`test.exp_attr`](stable_badges_expected.md) | boolean | | | `Required` | +| [`test.stable_attr`](stable_badges_expected.md) | boolean | ![Stable](https://img.shields.io/badge/-stable-lightgreen)
| | `Required` | + + + +| Name | Instrument Type | Unit (UCUM) | Description | +| -------- | --------------- | ----------- | -------------- | +| `stable_metric` | Histogram | `s` | ![Stable](https://img.shields.io/badge/-stable-lightgreen)
stable_metric | + + + +| Name | Instrument Type | Unit (UCUM) | Description | +| -------- | --------------- | ----------- | -------------- | +| `experimental_metric` | Counter | `{e}` | experimental_metric | + + + +| Name | Instrument Type | Unit (UCUM) | Description | +| -------- | --------------- | ----------- | -------------- | +| `deprecated_metric` | UpDownCounter | `{d}` | ![Deprecated](https://img.shields.io/badge/-deprecated-red)
deprecated_metric | + \ No newline at end of file diff --git a/semantic-conventions/src/tests/data/markdown/wrong_semconv_id/general.yaml b/semantic-conventions/src/tests/data/markdown/wrong_semconv_id/general.yaml index fed550d4..22af26ac 100644 --- a/semantic-conventions/src/tests/data/markdown/wrong_semconv_id/general.yaml +++ b/semantic-conventions/src/tests/data/markdown/wrong_semconv_id/general.yaml @@ -6,28 +6,34 @@ groups: These attributes may be used for any network related operation. attributes: - id: peer.ip + stability: experimental type: string brief: > Remote address of the peer (dotted decimal for IPv4 or [RFC5952](https://tools.ietf.org/html/rfc5952) for IPv6) examples: '127.0.0.1' - id: peer.port + stability: experimental type: int brief: 'Remote port number.' examples: [80, 8080, 443] - id: peer.name + stability: experimental type: string brief: 'Remote hostname or similar, see note below.' examples: 'example.com' - id: host.ip + stability: experimental type: string brief: 'Like `net.peer.ip` but for the host IP. Useful in case of a multi-IP host.' examples: '192.168.0.1' - id: host.port + stability: experimental type: int brief: 'Like `net.peer.port` but for the host port.' examples: 35555 - id: host.name + stability: experimental type: string brief: 'Local hostname or similar, see note below.' examples: 'localhost' @@ -38,16 +44,19 @@ groups: These attributes may be used for any operation with an authenticated and/or authorized enduser. attributes: - id: id + stability: experimental type: string brief: > Username or client_id extracted from the access token or Authorization header in the inbound request from outside the system. examples: 'username' - id: role + stability: experimental type: string brief: 'Actual/assumed role the client is making the request under extracted from token or application security context.' examples: 'admin' - id: scope + stability: experimental type: string brief: > Scopes or granted authorities the client currently possesses extracted from token diff --git a/semantic-conventions/src/tests/data/markdown/wrong_semconv_id/http.yaml b/semantic-conventions/src/tests/data/markdown/wrong_semconv_id/http.yaml index aa650b1a..11802496 100644 --- a/semantic-conventions/src/tests/data/markdown/wrong_semconv_id/http.yaml +++ b/semantic-conventions/src/tests/data/markdown/wrong_semconv_id/http.yaml @@ -8,22 +8,26 @@ groups: and various HTTP versions like 1.1, 2 and SPDY. attributes: - id: method + stability: experimental type: string requirement_level: required sampling_relevant: false brief: 'HTTP request method.' examples: ["GET", "POST", "HEAD"] - id: url + stability: experimental type: string brief: > Full HTTP request URL in the form `scheme://host[:port]/path?query[#fragment]`. Usually the fragment is not transmitted over HTTP, but if it is known, it should be included nevertheless. examples: ['https://www.foo.bar/search?q=OpenTelemetry#SemConv'] - id: target + stability: experimental type: string brief: 'The full request target as passed in a HTTP request line or equivalent.' examples: ['/path/12314/?q=ddds#123'] - id: host + stability: experimental type: string brief: > The value of the [HTTP host header](https://tools.ietf.org/html/rfc7230#section-5.4). @@ -32,20 +36,24 @@ groups: requirement_level: conditionally_required: . - id: scheme + stability: experimental type: string brief: 'The URI scheme identifying the used protocol.' examples: ["http", "https"] - id: status_code + stability: experimental type: int requirement_level: conditionally_required: if and only if one was received/sent. brief: '[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).' examples: [200] - id: status_text + stability: experimental type: string brief: '[HTTP reason phrase](https://tools.ietf.org/html/rfc7230#section-3.1.2).' examples: ['OK'] - id: user_agent + stability: experimental type: string brief: 'Value of the [HTTP User-Agent](https://tools.ietf.org/html/rfc7231#section-5.5.3) header sent by the client.' examples: ['CERN-LineMode/2.15 libwww/2.17b3'] @@ -69,6 +77,7 @@ groups: brief: 'Semantic Convention for HTTP Server' attributes: - id: server_name + stability: experimental type: string requirement_level: conditionally_required: > @@ -83,11 +92,13 @@ groups: It is thus preferred to supply the raw data that is available. examples: ['example.com'] - id: route + stability: experimental type: string brief: > The matched route (path template). examples: '/users/:userID?' - id: client_ip + stability: experimental type: string sampling_relevant: false brief: > diff --git a/semantic-conventions/src/tests/data/yaml/attr_templates_code/attribute_templates.yml b/semantic-conventions/src/tests/data/yaml/attr_templates_code/attribute_templates.yml index d56a0bba..355db758 100644 --- a/semantic-conventions/src/tests/data/yaml/attr_templates_code/attribute_templates.yml +++ b/semantic-conventions/src/tests/data/yaml/attr_templates_code/attribute_templates.yml @@ -1,9 +1,10 @@ -groups: +groups: - id: test type: attribute_group brief: 'brief' attributes: - id: attribute_template_one + stability: experimental tag: tag-one type: template[string] brief: > @@ -11,6 +12,7 @@ groups: the first attribute template examples: 'This is a good example of the first attribute template' - id: attribute_template_two + stability: experimental tag: tag-two type: template[int] brief: > @@ -18,6 +20,7 @@ groups: the second attribute template. It's a number. examples: [1000, 10, 1] - id: attribute_three + stability: experimental tag: tag-three type: boolean brief: > diff --git a/semantic-conventions/src/tests/data/yaml/attribute_templates.yml b/semantic-conventions/src/tests/data/yaml/attribute_templates.yml index d9ec04c8..05fe20e5 100644 --- a/semantic-conventions/src/tests/data/yaml/attribute_templates.yml +++ b/semantic-conventions/src/tests/data/yaml/attribute_templates.yml @@ -1,5 +1,6 @@ attributes: - id: attribute_template_one + stability: experimental tag: tag-one type: template[string] brief: > @@ -7,6 +8,7 @@ attributes: the first attribute template examples: 'This is a good example of the first attribute template' - id: attribute_template_two + stability: experimental tag: tag-two type: template[int] brief: > @@ -14,6 +16,7 @@ attributes: the second attribute template. It's a number. examples: [1000, 10, 1] - id: attribute_three + stability: experimental tag: tag-three type: boolean brief: > diff --git a/semantic-conventions/src/tests/data/yaml/basic_example.yml b/semantic-conventions/src/tests/data/yaml/basic_example.yml index dc6274bc..e252f90d 100644 --- a/semantic-conventions/src/tests/data/yaml/basic_example.yml +++ b/semantic-conventions/src/tests/data/yaml/basic_example.yml @@ -6,6 +6,7 @@ groups: span_kind: server attributes: - id: attr_one + stability: experimental type: boolean brief: short description - id: second_group_id @@ -16,6 +17,7 @@ groups: extends: first_group_id attributes: - id: attr_two + stability: experimental type: string brief: short description examples: ['example_one', 'example_two'] \ No newline at end of file diff --git a/semantic-conventions/src/tests/data/yaml/cloud.yaml b/semantic-conventions/src/tests/data/yaml/cloud.yaml index 3befe01d..a376ff21 100644 --- a/semantic-conventions/src/tests/data/yaml/cloud.yaml +++ b/semantic-conventions/src/tests/data/yaml/cloud.yaml @@ -6,6 +6,7 @@ groups: Attributes for a cloud infrastructure (e.g. GCP, Azure, AWS). attributes: - id: provider + stability: experimental type: allow_custom_values: true members: @@ -18,16 +19,19 @@ groups: brief: > Name of the cloud provider. - id: account.id + stability: experimental type: string brief: > The cloud account id used to identify different entities. examples: ['opentelemetry-user'] - id: region + stability: experimental type: string brief: > A specific geographical location where different entities can run. examples: ['us-central1'] - id: zone + stability: experimental type: string brief: > Zones are a sub set of the region connected through low-latency links. diff --git a/semantic-conventions/src/tests/data/yaml/database.yaml b/semantic-conventions/src/tests/data/yaml/database.yaml index 8112fd7c..31e7119f 100644 --- a/semantic-conventions/src/tests/data/yaml/database.yaml +++ b/semantic-conventions/src/tests/data/yaml/database.yaml @@ -7,6 +7,7 @@ groups: span_kind: client attributes: - id: type + stability: experimental type: string requirement_level: required brief: > @@ -14,6 +15,7 @@ groups: For others, the lower-case database category. examples: ['cassandra', 'hbase', 'redis'] - id: instance + stability: experimental type: string requirement_level: required brief: > @@ -22,6 +24,7 @@ groups: the instance name is "customers" examples: ['customers'] - id: statement + stability: experimental type: string requirement_level: required brief: > @@ -30,11 +33,13 @@ groups: sensitive information. examples: ['SELECT * FROM wuser_table', "SET mykey 'WuValue'"] - id: url + stability: experimental type: string requirement_level: required brief: 'JDBC substring' examples: ['mysql://db.example.com:3306'] - id: user + stability: experimental type: string brief: 'Username for accessing database.' examples: ['readonly_user','reporting_user'] diff --git a/semantic-conventions/src/tests/data/yaml/deprecated/http.yaml b/semantic-conventions/src/tests/data/yaml/deprecated/http.yaml index 7e68b2e3..e5c9b3e2 100644 --- a/semantic-conventions/src/tests/data/yaml/deprecated/http.yaml +++ b/semantic-conventions/src/tests/data/yaml/deprecated/http.yaml @@ -8,44 +8,29 @@ groups: and various HTTP versions like 1.1, 2 and SPDY. attributes: - id: method + stability: experimental type: string - requirement_level: required - sampling_relevant: false deprecated: Use attribute `nonDepecrated`. brief: 'HTTP request method.' examples: ["GET", "POST", "HEAD"] - id: url + stability: experimental type: string deprecated: Use attribute `nonDepecrated`. - brief: > - Full HTTP request URL in the form `scheme://host[:port]/path?query[#fragment]`. - Usually the fragment is not transmitted over HTTP, but if it is known, it should be included nevertheless. + brief: "" examples: ['https://www.foo.bar/search?q=OpenTelemetry#SemConv'] - id: target + stability: experimental type: string brief: 'The full request target as passed in a HTTP request line or equivalent.' examples: ['/path/12314/?q=ddds#123'] - - id: host - type: string - brief: > - The value of the [HTTP host header](https://tools.ietf.org/html/rfc7230#section-5.4). - When the header is empty or not present, this attribute should be the same. - examples: ['www.example.org'] - - id: scheme - type: string - brief: 'The URI scheme identifying the used protocol.' - examples: ["http", "https"] - - id: status_code - type: int - requirement_level: - conditionally_required: "if and only if one was received/sent" - brief: '[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).' - examples: [200] - - id: status_text - type: string - brief: '[HTTP reason phrase](https://tools.ietf.org/html/rfc7230#section-3.1.2).' - examples: ['OK'] - - id: user_agent - type: string - brief: 'Value of the [HTTP User-Agent](https://tools.ietf.org/html/rfc7231#section-5.5.3) header sent by the client.' - examples: ['CERN-LineMode/2.15 libwww/2.17b3'] \ No newline at end of file + - id: http.client + type: span + brief: "" + attributes: + - ref: http.method + - id: http.server + type: span + brief: "" + extends: http + diff --git a/semantic-conventions/src/tests/data/yaml/errors/deprecated/deprecation_boolean.yaml b/semantic-conventions/src/tests/data/yaml/errors/deprecated/deprecation_boolean.yaml index 7cd09130..ef346145 100644 --- a/semantic-conventions/src/tests/data/yaml/errors/deprecated/deprecation_boolean.yaml +++ b/semantic-conventions/src/tests/data/yaml/errors/deprecated/deprecation_boolean.yaml @@ -10,3 +10,4 @@ groups: deprecated: 99 brief: 'test' examples: [true, false] + stability: experimental \ No newline at end of file diff --git a/semantic-conventions/src/tests/data/yaml/errors/deprecated/deprecation_empty_string.yaml b/semantic-conventions/src/tests/data/yaml/errors/deprecated/deprecation_empty_string.yaml index 9de2d8a7..9dd7cd7b 100644 --- a/semantic-conventions/src/tests/data/yaml/errors/deprecated/deprecation_empty_string.yaml +++ b/semantic-conventions/src/tests/data/yaml/errors/deprecated/deprecation_empty_string.yaml @@ -10,3 +10,4 @@ groups: deprecated: '' brief: 'test' examples: [true, false] + stability: experimental \ No newline at end of file diff --git a/semantic-conventions/src/tests/data/yaml/errors/deprecated/deprecation_number.yaml b/semantic-conventions/src/tests/data/yaml/errors/deprecated/deprecation_number.yaml index 17897012..58bd4e7b 100644 --- a/semantic-conventions/src/tests/data/yaml/errors/deprecated/deprecation_number.yaml +++ b/semantic-conventions/src/tests/data/yaml/errors/deprecated/deprecation_number.yaml @@ -10,3 +10,4 @@ groups: deprecated: True brief: 'test' examples: [true, false] + stability: experimental \ No newline at end of file diff --git a/semantic-conventions/src/tests/data/yaml/errors/deprecated/extends_overrides_deprecation.yaml b/semantic-conventions/src/tests/data/yaml/errors/deprecated/extends_overrides_deprecation.yaml new file mode 100644 index 00000000..c74ad8c1 --- /dev/null +++ b/semantic-conventions/src/tests/data/yaml/errors/deprecated/extends_overrides_deprecation.yaml @@ -0,0 +1,20 @@ +groups: + - id: test + type: span + prefix: test + brief: "" + span_kind: client + attributes: + - id: convention_version + type: boolean + brief: 'test' + examples: [true, false] + stability: experimental + deprecated: "parent description" + - id: test_child + type: span + brief: "" + extends: test + attributes: + - ref: test.convention_version + deprecated: "Removed" \ No newline at end of file diff --git a/semantic-conventions/src/tests/data/yaml/errors/deprecated/multiple_deprecations.yaml b/semantic-conventions/src/tests/data/yaml/errors/deprecated/multiple_deprecations.yaml new file mode 100644 index 00000000..b83ffe5b --- /dev/null +++ b/semantic-conventions/src/tests/data/yaml/errors/deprecated/multiple_deprecations.yaml @@ -0,0 +1,14 @@ +groups: + - id: test + type: span + prefix: test + brief: 'This document defines semantic conventions for test.' + span_kind: client + attributes: + - id: convention_version + type: boolean + deprecated: "first" + deprecated: "second" + brief: 'test' + examples: [true, false] + stability: experimental \ No newline at end of file diff --git a/semantic-conventions/src/tests/data/yaml/errors/deprecated/ref_overrides_deprecation.yaml b/semantic-conventions/src/tests/data/yaml/errors/deprecated/ref_overrides_deprecation.yaml new file mode 100644 index 00000000..f8adeac5 --- /dev/null +++ b/semantic-conventions/src/tests/data/yaml/errors/deprecated/ref_overrides_deprecation.yaml @@ -0,0 +1,18 @@ +groups: + - id: test + type: span + prefix: test + brief: "" + span_kind: client + attributes: + - id: convention_version + type: boolean + brief: 'test' + examples: [true, false] + stability: experimental + - id: test_child + type: span + brief: "" + attributes: + - ref: test.convention_version + deprecated: "Removed" diff --git a/semantic-conventions/src/tests/data/yaml/errors/empty/empty_enum.yaml b/semantic-conventions/src/tests/data/yaml/errors/empty/empty_enum.yaml index 4d6ce117..fea267cd 100644 --- a/semantic-conventions/src/tests/data/yaml/errors/empty/empty_enum.yaml +++ b/semantic-conventions/src/tests/data/yaml/errors/empty/empty_enum.yaml @@ -10,4 +10,5 @@ groups: allow_custom_values: false members: requirement_level: required - brief: 'test' \ No newline at end of file + brief: 'test' + stability: experimental \ No newline at end of file diff --git a/semantic-conventions/src/tests/data/yaml/errors/empty/empty_example_boolean.yaml b/semantic-conventions/src/tests/data/yaml/errors/empty/empty_example_boolean.yaml index a85ed435..dcbe52d0 100644 --- a/semantic-conventions/src/tests/data/yaml/errors/empty/empty_example_boolean.yaml +++ b/semantic-conventions/src/tests/data/yaml/errors/empty/empty_example_boolean.yaml @@ -6,6 +6,7 @@ groups: span_kind: client attributes: - id: convention_version + stability: experimental type: boolean requirement_level: required brief: 'test' \ No newline at end of file diff --git a/semantic-conventions/src/tests/data/yaml/errors/empty/empty_example_boolean_array.yaml b/semantic-conventions/src/tests/data/yaml/errors/empty/empty_example_boolean_array.yaml index 38641a9b..d5db6048 100644 --- a/semantic-conventions/src/tests/data/yaml/errors/empty/empty_example_boolean_array.yaml +++ b/semantic-conventions/src/tests/data/yaml/errors/empty/empty_example_boolean_array.yaml @@ -8,4 +8,5 @@ groups: - id: convention_version type: boolean[] requirement_level: required - brief: 'test' \ No newline at end of file + brief: 'test' + stability: experimental \ No newline at end of file diff --git a/semantic-conventions/src/tests/data/yaml/errors/empty/empty_example_enum.yaml b/semantic-conventions/src/tests/data/yaml/errors/empty/empty_example_enum.yaml index a51f1730..98743a36 100644 --- a/semantic-conventions/src/tests/data/yaml/errors/empty/empty_example_enum.yaml +++ b/semantic-conventions/src/tests/data/yaml/errors/empty/empty_example_enum.yaml @@ -6,6 +6,7 @@ groups: span_kind: client attributes: - id: type + stability: experimental type: allow_custom_values: false members: diff --git a/semantic-conventions/src/tests/data/yaml/errors/empty/empty_example_string.yaml b/semantic-conventions/src/tests/data/yaml/errors/empty/empty_example_string.yaml index 02bebc47..1db8c96a 100644 --- a/semantic-conventions/src/tests/data/yaml/errors/empty/empty_example_string.yaml +++ b/semantic-conventions/src/tests/data/yaml/errors/empty/empty_example_string.yaml @@ -6,6 +6,7 @@ groups: span_kind: client attributes: - id: convention_version + stability: experimental type: string requirement_level: required brief: 'test' \ No newline at end of file diff --git a/semantic-conventions/src/tests/data/yaml/errors/empty_type.yaml b/semantic-conventions/src/tests/data/yaml/errors/empty_type.yaml index 6c0127f0..25e91a44 100644 --- a/semantic-conventions/src/tests/data/yaml/errors/empty_type.yaml +++ b/semantic-conventions/src/tests/data/yaml/errors/empty_type.yaml @@ -7,4 +7,5 @@ groups: attributes: - id: test requirement_level: required - brief: 'test.' \ No newline at end of file + brief: 'test.' + stability: experimental \ No newline at end of file diff --git a/semantic-conventions/src/tests/data/yaml/errors/enum/enum_member_with_extra_keys.yaml b/semantic-conventions/src/tests/data/yaml/errors/enum/enum_member_with_extra_keys.yaml index 1576e509..c89b43b8 100644 --- a/semantic-conventions/src/tests/data/yaml/errors/enum/enum_member_with_extra_keys.yaml +++ b/semantic-conventions/src/tests/data/yaml/errors/enum/enum_member_with_extra_keys.yaml @@ -13,4 +13,5 @@ groups: type: shouldnt value: yesyes requirement_level: required - brief: 'test' \ No newline at end of file + brief: 'test' + stability: experimental \ No newline at end of file diff --git a/semantic-conventions/src/tests/data/yaml/errors/enum/enum_with_double_values.yaml b/semantic-conventions/src/tests/data/yaml/errors/enum/enum_with_double_values.yaml index c9a7dc64..02b97e43 100644 --- a/semantic-conventions/src/tests/data/yaml/errors/enum/enum_with_double_values.yaml +++ b/semantic-conventions/src/tests/data/yaml/errors/enum/enum_with_double_values.yaml @@ -14,3 +14,4 @@ groups: requirement_level: required brief: "The [numeric status code](https://github.com/grpc/grpc/blob/v1.33.2/doc/statuscodes.md) of the gRPC request." examples: [0.0, 1.0] + stability: experimental \ No newline at end of file diff --git a/semantic-conventions/src/tests/data/yaml/errors/enum/enum_with_extra_keys.yaml b/semantic-conventions/src/tests/data/yaml/errors/enum/enum_with_extra_keys.yaml index b58c12be..c12f662f 100644 --- a/semantic-conventions/src/tests/data/yaml/errors/enum/enum_with_extra_keys.yaml +++ b/semantic-conventions/src/tests/data/yaml/errors/enum/enum_with_extra_keys.yaml @@ -11,4 +11,5 @@ groups: allow_custom_values: false members: requirement_level: required - brief: 'test' \ No newline at end of file + brief: 'test' + stability: experimental \ No newline at end of file diff --git a/semantic-conventions/src/tests/data/yaml/errors/events/missing_event.yaml b/semantic-conventions/src/tests/data/yaml/errors/events/missing_event.yaml index 3a1f1940..baa5688f 100644 --- a/semantic-conventions/src/tests/data/yaml/errors/events/missing_event.yaml +++ b/semantic-conventions/src/tests/data/yaml/errors/events/missing_event.yaml @@ -8,6 +8,7 @@ groups: brief: example attributes: - id: flag + stability: experimental type: boolean brief: An attribute. @@ -17,5 +18,6 @@ groups: brief: example attributes: - id: flag + stability: experimental type: boolean brief: An attribute. diff --git a/semantic-conventions/src/tests/data/yaml/errors/events/nameless_event.yaml b/semantic-conventions/src/tests/data/yaml/errors/events/nameless_event.yaml index 60830869..241ab1e4 100644 --- a/semantic-conventions/src/tests/data/yaml/errors/events/nameless_event.yaml +++ b/semantic-conventions/src/tests/data/yaml/errors/events/nameless_event.yaml @@ -4,5 +4,6 @@ groups: brief: eventbrief attributes: - id: eventattr + stability: experimental type: boolean brief: eventattrbrief diff --git a/semantic-conventions/src/tests/data/yaml/errors/events/no_event_type.yaml b/semantic-conventions/src/tests/data/yaml/errors/events/no_event_type.yaml index 4b3b6fd9..4c12f680 100644 --- a/semantic-conventions/src/tests/data/yaml/errors/events/no_event_type.yaml +++ b/semantic-conventions/src/tests/data/yaml/errors/events/no_event_type.yaml @@ -7,6 +7,7 @@ groups: brief: example attributes: - id: flag + stability: experimental type: boolean brief: An attribute. @@ -16,5 +17,6 @@ groups: brief: example attributes: - id: flag + stability: experimental type: boolean brief: An attribute. diff --git a/semantic-conventions/src/tests/data/yaml/errors/examples/example.types.yaml b/semantic-conventions/src/tests/data/yaml/errors/examples/example.types.yaml index 96a9fe3e..31e0e0f1 100644 --- a/semantic-conventions/src/tests/data/yaml/errors/examples/example.types.yaml +++ b/semantic-conventions/src/tests/data/yaml/errors/examples/example.types.yaml @@ -10,16 +10,19 @@ groups: requirement_level: required brief: 'test' examples: [1,asd] + stability: experimental - id: convention_version type: int[] requirement_level: required brief: 'test' examples: [1,3] + stability: experimental - id: url type: string requirement_level: required brief: 'test' examples: ['http://1.2.3.4:5678/'] + stability: experimental - id: value type: allow_custom_values: false @@ -29,8 +32,10 @@ groups: note: 'val' requirement_level: required brief: 'test.' + stability: experimental - id: flag requirement_level: conditionally_required type: boolean brief: 'test' examples: [true] + stability: experimental \ No newline at end of file diff --git a/semantic-conventions/src/tests/data/yaml/errors/examples/example_bool.yaml b/semantic-conventions/src/tests/data/yaml/errors/examples/example_bool.yaml index 3bda4789..20d74d4c 100644 --- a/semantic-conventions/src/tests/data/yaml/errors/examples/example_bool.yaml +++ b/semantic-conventions/src/tests/data/yaml/errors/examples/example_bool.yaml @@ -10,3 +10,4 @@ groups: requirement_level: required brief: 'test' examples: [true, false, yes] + stability: experimental \ No newline at end of file diff --git a/semantic-conventions/src/tests/data/yaml/errors/examples/example_bool_array.yaml b/semantic-conventions/src/tests/data/yaml/errors/examples/example_bool_array.yaml index 75353d99..ceb99ebc 100644 --- a/semantic-conventions/src/tests/data/yaml/errors/examples/example_bool_array.yaml +++ b/semantic-conventions/src/tests/data/yaml/errors/examples/example_bool_array.yaml @@ -10,3 +10,4 @@ groups: requirement_level: required brief: 'test' examples: [[true,false], [true, 1]] + stability: experimental \ No newline at end of file diff --git a/semantic-conventions/src/tests/data/yaml/errors/examples/example_number_array.yaml b/semantic-conventions/src/tests/data/yaml/errors/examples/example_number_array.yaml index ad9a95dd..5f42780a 100644 --- a/semantic-conventions/src/tests/data/yaml/errors/examples/example_number_array.yaml +++ b/semantic-conventions/src/tests/data/yaml/errors/examples/example_number_array.yaml @@ -9,4 +9,5 @@ groups: type: int[] requirement_level: required brief: 'test' - examples: [1, asd] \ No newline at end of file + examples: [1, asd] + stability: experimental \ No newline at end of file diff --git a/semantic-conventions/src/tests/data/yaml/errors/examples/example_number_array_single.yaml b/semantic-conventions/src/tests/data/yaml/errors/examples/example_number_array_single.yaml index 6a7a08f5..36c6c9cd 100644 --- a/semantic-conventions/src/tests/data/yaml/errors/examples/example_number_array_single.yaml +++ b/semantic-conventions/src/tests/data/yaml/errors/examples/example_number_array_single.yaml @@ -9,4 +9,5 @@ groups: type: int[] requirement_level: required brief: 'test' - examples: 1 \ No newline at end of file + examples: 1 + stability: experimental \ No newline at end of file diff --git a/semantic-conventions/src/tests/data/yaml/errors/examples/example_single_string.yaml b/semantic-conventions/src/tests/data/yaml/errors/examples/example_single_string.yaml index a8b6b7c1..31c7f6e2 100644 --- a/semantic-conventions/src/tests/data/yaml/errors/examples/example_single_string.yaml +++ b/semantic-conventions/src/tests/data/yaml/errors/examples/example_single_string.yaml @@ -10,3 +10,4 @@ groups: requirement_level: required brief: 'test' examples: "asd" + stability: experimental \ No newline at end of file diff --git a/semantic-conventions/src/tests/data/yaml/errors/examples/example_string.yaml b/semantic-conventions/src/tests/data/yaml/errors/examples/example_string.yaml index a9ca4b2a..6cf91562 100644 --- a/semantic-conventions/src/tests/data/yaml/errors/examples/example_string.yaml +++ b/semantic-conventions/src/tests/data/yaml/errors/examples/example_string.yaml @@ -10,3 +10,4 @@ groups: requirement_level: required brief: 'test' examples: ["asd", 'dsa', 123] + stability: experimental \ No newline at end of file diff --git a/semantic-conventions/src/tests/data/yaml/errors/examples/example_string_array.yaml b/semantic-conventions/src/tests/data/yaml/errors/examples/example_string_array.yaml index b427aa9c..0de6efc0 100644 --- a/semantic-conventions/src/tests/data/yaml/errors/examples/example_string_array.yaml +++ b/semantic-conventions/src/tests/data/yaml/errors/examples/example_string_array.yaml @@ -10,3 +10,4 @@ groups: requirement_level: required brief: 'test' examples: [["",'',"'",'"'],["asd", 'dsa', 123]] + stability: experimental \ No newline at end of file diff --git a/semantic-conventions/src/tests/data/yaml/errors/examples/example_wrong_type.yaml b/semantic-conventions/src/tests/data/yaml/errors/examples/example_wrong_type.yaml index 8e0a8610..2ebc0794 100644 --- a/semantic-conventions/src/tests/data/yaml/errors/examples/example_wrong_type.yaml +++ b/semantic-conventions/src/tests/data/yaml/errors/examples/example_wrong_type.yaml @@ -10,3 +10,4 @@ groups: requirement_level: required brief: 'test' examples: [1,asd] + stability: experimental \ No newline at end of file diff --git a/semantic-conventions/src/tests/data/yaml/errors/id_clash/http.yaml b/semantic-conventions/src/tests/data/yaml/errors/id_clash/http.yaml index fff4dfa0..9e7ffcc4 100644 --- a/semantic-conventions/src/tests/data/yaml/errors/id_clash/http.yaml +++ b/semantic-conventions/src/tests/data/yaml/errors/id_clash/http.yaml @@ -9,15 +9,19 @@ groups: type: int brief: t examples: 3495 + stability: experimental - id: request_content_length_uncompressed type: int brief: t examples: 3495 + stability: experimental - id: request_content_length type: int brief: t examples: 3495 + stability: experimental - id: response_content_length_uncompressed type: int brief: t - examples: 3495 \ No newline at end of file + examples: 3495 + stability: experimental \ No newline at end of file diff --git a/semantic-conventions/src/tests/data/yaml/errors/id_clash/httpInherited.yaml b/semantic-conventions/src/tests/data/yaml/errors/id_clash/httpInherited.yaml index 31976666..be4cbd56 100644 --- a/semantic-conventions/src/tests/data/yaml/errors/id_clash/httpInherited.yaml +++ b/semantic-conventions/src/tests/data/yaml/errors/id_clash/httpInherited.yaml @@ -6,6 +6,7 @@ groups: note: t attributes: - id: request_content_length + stability: experimental type: int brief: t examples: 3495 @@ -17,12 +18,14 @@ groups: brief: 'Semantic Convention for HTTP Server' attributes: - id: server_name + stability: experimental type: string sampling_relevant: false brief: t note: t examples: ['example.com'] - id: request_content_length + stability: experimental type: int brief: t examples: 3495 \ No newline at end of file diff --git a/semantic-conventions/src/tests/data/yaml/errors/id_clash/resource2_faas.yaml b/semantic-conventions/src/tests/data/yaml/errors/id_clash/resource2_faas.yaml index b51e724e..5a3322fe 100644 --- a/semantic-conventions/src/tests/data/yaml/errors/id_clash/resource2_faas.yaml +++ b/semantic-conventions/src/tests/data/yaml/errors/id_clash/resource2_faas.yaml @@ -6,23 +6,27 @@ groups: Attributes for a serverless instance. attributes: - id: name + stability: experimental type: string requirement_level: required brief: > The name of the function being executed. examples: ['my-function'] - id: id + stability: experimental type: string requirement_level: required brief: > The unique name of the function being executed. examples: ['arn:aws:lambda:us-west-2:123456789012:function:my-function'] - id: version + stability: experimental type: string brief: > The version examples: ['semver:2.0.0'] - id: instance + stability: experimental type: string brief: > The execution environment ID as a string. diff --git a/semantic-conventions/src/tests/data/yaml/errors/id_clash/resource_faas.yaml b/semantic-conventions/src/tests/data/yaml/errors/id_clash/resource_faas.yaml index d84b00af..1ed3fe6c 100644 --- a/semantic-conventions/src/tests/data/yaml/errors/id_clash/resource_faas.yaml +++ b/semantic-conventions/src/tests/data/yaml/errors/id_clash/resource_faas.yaml @@ -6,12 +6,14 @@ groups: Attributes for a serverless instance. attributes: - id: name + stability: experimental type: string requirement_level: required brief: > The name of the function being executed. examples: ['my-function'] - id: id + stability: experimental type: string requirement_level: required brief: > @@ -24,12 +26,14 @@ groups: field. examples: ['arn:aws:lambda:us-west-2:123456789012:function:my-function'] - id: version + stability: experimental type: string brief: > The version string of the function being executed as defined in [Version Attributes](https://github.com/open-telemetry/opentelemetry-specification/tree/master/specification/resource/semantic_conventions#version-attributes). examples: ['semver:2.0.0'] - id: instance + stability: experimental type: string brief: > The execution environment ID as a string. diff --git a/semantic-conventions/src/tests/data/yaml/errors/id_clash/span_faas.yaml b/semantic-conventions/src/tests/data/yaml/errors/id_clash/span_faas.yaml index 91ac2be1..4496d5d1 100644 --- a/semantic-conventions/src/tests/data/yaml/errors/id_clash/span_faas.yaml +++ b/semantic-conventions/src/tests/data/yaml/errors/id_clash/span_faas.yaml @@ -8,6 +8,7 @@ groups: serverless) with spans. attributes: - id: trigger + stability: experimental requirement_level: required brief: 'Type of the trigger on which the function is executed.' type: @@ -28,6 +29,7 @@ groups: - id: other value: 'other' - id: execution + stability: experimental type: string brief: "The execution id of the current function execution." examples: 'af9d5aa4-a685-4c5f-a22b-444f80b3cc28' @@ -39,6 +41,7 @@ groups: Semantic Convention for FaaS scheduled to be executed regularly. attributes: - id: time + stability: experimental type: string requirement_level: required brief: > @@ -47,6 +50,7 @@ groups: format expressed in [UTC](https://www.w3.org/TR/NOTE-datetime). examples: "2020-01-23T13:47:06Z" - id: cron + stability: experimental type: string brief: > A string containing the schedule period as diff --git a/semantic-conventions/src/tests/data/yaml/errors/invalid_type.yaml b/semantic-conventions/src/tests/data/yaml/errors/invalid_type.yaml index 169345ff..1e7a8f94 100644 --- a/semantic-conventions/src/tests/data/yaml/errors/invalid_type.yaml +++ b/semantic-conventions/src/tests/data/yaml/errors/invalid_type.yaml @@ -5,6 +5,7 @@ groups: brief: 'This document defines semantic conventions for remote procedure calls.' attributes: - id: service + stability: experimental type: string requirement_level: required brief: 'The service name, must be equal to the $service part in the span name.' diff --git a/semantic-conventions/src/tests/data/yaml/errors/missing_attr_type.yaml b/semantic-conventions/src/tests/data/yaml/errors/missing_attr_type.yaml index 48cfaf6f..88b90434 100644 --- a/semantic-conventions/src/tests/data/yaml/errors/missing_attr_type.yaml +++ b/semantic-conventions/src/tests/data/yaml/errors/missing_attr_type.yaml @@ -5,5 +5,6 @@ groups: span_kind: client attributes: - id: test + stability: experimental requirement_level: required brief: 'test.' \ No newline at end of file diff --git a/semantic-conventions/src/tests/data/yaml/errors/missing_semconv_id.yaml b/semantic-conventions/src/tests/data/yaml/errors/missing_semconv_id.yaml index 637db591..bf10dbb7 100644 --- a/semantic-conventions/src/tests/data/yaml/errors/missing_semconv_id.yaml +++ b/semantic-conventions/src/tests/data/yaml/errors/missing_semconv_id.yaml @@ -5,6 +5,7 @@ groups: span_kind: client attributes: - id: test + stability: experimental type: allow_custom_values: false members: diff --git a/semantic-conventions/src/tests/data/yaml/errors/resource_spankind.yaml b/semantic-conventions/src/tests/data/yaml/errors/resource_spankind.yaml index 335f22c3..dd46b48a 100644 --- a/semantic-conventions/src/tests/data/yaml/errors/resource_spankind.yaml +++ b/semantic-conventions/src/tests/data/yaml/errors/resource_spankind.yaml @@ -6,6 +6,7 @@ groups: brief: 'This document defines semantic conventions for remote procedure calls.' attributes: - id: service + stability: experimental type: string requirement_level: required brief: 'The service name, must be equal to the $service part in the span name.' diff --git a/semantic-conventions/src/tests/data/yaml/errors/stability/extends_override_stability.yaml b/semantic-conventions/src/tests/data/yaml/errors/stability/extends_override_stability.yaml new file mode 100644 index 00000000..38c61f21 --- /dev/null +++ b/semantic-conventions/src/tests/data/yaml/errors/stability/extends_override_stability.yaml @@ -0,0 +1,16 @@ +groups: + - id: test + type: attribute_group + brief: 'test' + attributes: + - id: test_attr + type: boolean + brief: "" + stability: experimental + - id: test_child_1 + type: attribute_group + brief: 'test child' + extends: test + attributes: + - ref: test_attr + stability: stable diff --git a/semantic-conventions/src/tests/data/yaml/errors/stability/missing_stability_value.yaml b/semantic-conventions/src/tests/data/yaml/errors/stability/missing_stability_value.yaml new file mode 100644 index 00000000..267e337d --- /dev/null +++ b/semantic-conventions/src/tests/data/yaml/errors/stability/missing_stability_value.yaml @@ -0,0 +1,8 @@ +groups: + - id: test + type: attribute_group + brief: 'test' + attributes: + - id: test_attr + type: boolean + brief: "" diff --git a/semantic-conventions/src/tests/data/yaml/errors/stability/multiple_stability_values.yaml b/semantic-conventions/src/tests/data/yaml/errors/stability/multiple_stability_values.yaml new file mode 100644 index 00000000..3cd56d87 --- /dev/null +++ b/semantic-conventions/src/tests/data/yaml/errors/stability/multiple_stability_values.yaml @@ -0,0 +1,10 @@ +groups: + - id: test + type: attribute_group + brief: 'test' + attributes: + - id: test_attr + type: boolean + stability: stable + stability: experimental + brief: "" diff --git a/semantic-conventions/src/tests/data/yaml/errors/stability/ref_override_stability.yaml b/semantic-conventions/src/tests/data/yaml/errors/stability/ref_override_stability.yaml new file mode 100644 index 00000000..d2fe1603 --- /dev/null +++ b/semantic-conventions/src/tests/data/yaml/errors/stability/ref_override_stability.yaml @@ -0,0 +1,15 @@ +groups: + - id: test + type: attribute_group + brief: 'test' + attributes: + - id: test_attr + type: boolean + brief: "" + stability: experimental + - id: test_child_1 + type: attribute_group + brief: 'test child' + attributes: + - ref: test_attr + stability: stable diff --git a/semantic-conventions/src/tests/data/yaml/errors/validate_anyof.yaml b/semantic-conventions/src/tests/data/yaml/errors/validate_anyof.yaml index 7996a33a..0ba2fb52 100644 --- a/semantic-conventions/src/tests/data/yaml/errors/validate_anyof.yaml +++ b/semantic-conventions/src/tests/data/yaml/errors/validate_anyof.yaml @@ -9,6 +9,7 @@ groups: type: string brief: The version of the Node.js runtime. examples: [ '10.19.0' ] + stability: experimental constraints: - any_of: - 'messaging.node_version' diff --git a/semantic-conventions/src/tests/data/yaml/errors/wrong_conditionally_required_no_condition.yaml b/semantic-conventions/src/tests/data/yaml/errors/wrong_conditionally_required_no_condition.yaml index 5dd667c3..4791ea2a 100644 --- a/semantic-conventions/src/tests/data/yaml/errors/wrong_conditionally_required_no_condition.yaml +++ b/semantic-conventions/src/tests/data/yaml/errors/wrong_conditionally_required_no_condition.yaml @@ -10,3 +10,4 @@ groups: brief: 'test' requirement_level: conditionally_required examples: [true, false] + stability: experimental diff --git a/semantic-conventions/src/tests/data/yaml/errors/wrong_double_type.yaml b/semantic-conventions/src/tests/data/yaml/errors/wrong_double_type.yaml index 2cd74fbf..f298330d 100644 --- a/semantic-conventions/src/tests/data/yaml/errors/wrong_double_type.yaml +++ b/semantic-conventions/src/tests/data/yaml/errors/wrong_double_type.yaml @@ -6,6 +6,7 @@ groups: note: 'test' attributes: - id: one + stability: experimental type: double brief: it contains a float number. examples: [12, 1f, 1.0] \ No newline at end of file diff --git a/semantic-conventions/src/tests/data/yaml/errors/wrong_multiple_requirement_level_values.yaml b/semantic-conventions/src/tests/data/yaml/errors/wrong_multiple_requirement_level_values.yaml index 185e2f48..1596b947 100644 --- a/semantic-conventions/src/tests/data/yaml/errors/wrong_multiple_requirement_level_values.yaml +++ b/semantic-conventions/src/tests/data/yaml/errors/wrong_multiple_requirement_level_values.yaml @@ -6,9 +6,10 @@ groups: span_kind: client attributes: - id: convention_version + stability: experimental type: boolean brief: 'test' - requirement_level: + requirement_level: recommended: recommended conditionally_required: condition examples: [true, false] diff --git a/semantic-conventions/src/tests/data/yaml/errors/wrong_multiple_requirement_levels.yaml b/semantic-conventions/src/tests/data/yaml/errors/wrong_multiple_requirement_levels.yaml index b47863e6..ebbb779e 100644 --- a/semantic-conventions/src/tests/data/yaml/errors/wrong_multiple_requirement_levels.yaml +++ b/semantic-conventions/src/tests/data/yaml/errors/wrong_multiple_requirement_levels.yaml @@ -11,3 +11,4 @@ groups: requirement_level: required requirement_level: opt_in examples: [true, false] + stability: experimental \ No newline at end of file diff --git a/semantic-conventions/src/tests/data/yaml/errors/wrong_requirement.yaml b/semantic-conventions/src/tests/data/yaml/errors/wrong_requirement.yaml index 78c4eb62..cfd873d4 100644 --- a/semantic-conventions/src/tests/data/yaml/errors/wrong_requirement.yaml +++ b/semantic-conventions/src/tests/data/yaml/errors/wrong_requirement.yaml @@ -10,3 +10,4 @@ groups: requirement_level: maybe brief: 'test' examples: [true, false] + stability: experimental \ No newline at end of file diff --git a/semantic-conventions/src/tests/data/yaml/errors/wrong_sampling.yaml b/semantic-conventions/src/tests/data/yaml/errors/wrong_sampling.yaml index 88764fcf..39c037da 100644 --- a/semantic-conventions/src/tests/data/yaml/errors/wrong_sampling.yaml +++ b/semantic-conventions/src/tests/data/yaml/errors/wrong_sampling.yaml @@ -10,3 +10,4 @@ groups: brief: 'test' sampling_relevant: maybe examples: [true, false] + stability: experimental \ No newline at end of file diff --git a/semantic-conventions/src/tests/data/yaml/event.yaml b/semantic-conventions/src/tests/data/yaml/event.yaml index d0c69d06..38be388f 100644 --- a/semantic-conventions/src/tests/data/yaml/event.yaml +++ b/semantic-conventions/src/tests/data/yaml/event.yaml @@ -7,15 +7,18 @@ groups: report a single exception associated with a span. attributes: - id: type + stability: experimental type: string brief: > The type of the exception. examples: ["java.net.ConnectException","OSError"] - id: message + stability: experimental type: string brief: The exception message. examples: ["Division by zero","Can't convert 'int' object to str implicitly"] - id: stacktrace + stability: experimental type: string brief: > A stacktrace. @@ -24,6 +27,7 @@ groups: at com.example.GenerateTrace.methodA(GenerateTrace.java:9)\n at com.example.GenerateTrace.main(GenerateTrace.java:5)' - id: escaped + stability: experimental type: boolean brief: > SHOULD be set to true if the exception event is recorded at a point where @@ -33,4 +37,27 @@ groups: constraints: - any_of: - "exception.type" - - "exception.message" \ No newline at end of file + - "exception.message" + - id: experimental_event + type: event + prefix: experimental_event + brief: "" + stability: experimental + attributes: + - id: foo + stability: experimental + type: string + brief: "" + examples: "foo" + - id: stable_event + type: event + prefix: stable_event + brief: "" + stability: stable + - id: deprecated_event + type: event + prefix: deprecated_event + brief: "" + stability: stable + deprecated: "Removed." + diff --git a/semantic-conventions/src/tests/data/yaml/extends/http.yaml b/semantic-conventions/src/tests/data/yaml/extends/http.yaml index ee4f7e50..9599946a 100644 --- a/semantic-conventions/src/tests/data/yaml/extends/http.yaml +++ b/semantic-conventions/src/tests/data/yaml/extends/http.yaml @@ -8,6 +8,7 @@ groups: and various HTTP versions like 1.1, 2 and SPDY. attributes: - id: method + stability: experimental type: string requirement_level: required sampling_relevant: false diff --git a/semantic-conventions/src/tests/data/yaml/faas.yaml b/semantic-conventions/src/tests/data/yaml/faas.yaml index b56be7f4..2376f728 100644 --- a/semantic-conventions/src/tests/data/yaml/faas.yaml +++ b/semantic-conventions/src/tests/data/yaml/faas.yaml @@ -8,6 +8,7 @@ groups: serverless) with spans. attributes: - id: trigger + stability: experimental requirement_level: required brief: 'Type of the trigger on which the function is executed.' type: @@ -28,6 +29,7 @@ groups: - id: other value: 'other' - id: execution + stability: experimental type: string brief: "The execution id of the current function execution." examples: 'af9d5aa4-a685-4c5f-a22b-444f80b3cc28' @@ -40,6 +42,7 @@ groups: source operation such as a database or filesystem read/write. attributes: - id: collection + stability: experimental type: string requirement_level: required brief: 'The name of the source on which the triggering operation was performed.' @@ -48,6 +51,7 @@ groups: and in Cosmos DB to the database name. examples: ['myBucketName', 'myDbName'] - id: operation + stability: experimental requirement_level: required type: allow_custom_values: true @@ -60,6 +64,7 @@ groups: value: 'delete' brief: 'Describes the type of the operation that was performed on the data.' - id: time + stability: experimental type: string requirement_level: required brief: > @@ -68,6 +73,7 @@ groups: format expressed in [UTC](https://www.w3.org/TR/NOTE-datetime). examples: "2020-01-23T13:47:06Z" - id: name + stability: experimental type: string brief: 'The document name/table subjected to the operation.' note: > @@ -96,6 +102,7 @@ groups: Semantic Convention for FaaS scheduled to be executed regularly. attributes: - id: time + stability: experimental type: string requirement_level: required brief: > @@ -104,6 +111,7 @@ groups: format expressed in [UTC](https://www.w3.org/TR/NOTE-datetime). examples: "2020-01-23T13:47:06Z" - id: cron + stability: experimental type: string brief: > A string containing the schedule period as diff --git a/semantic-conventions/src/tests/data/yaml/general.yaml b/semantic-conventions/src/tests/data/yaml/general.yaml index 5e91e7e6..75526142 100644 --- a/semantic-conventions/src/tests/data/yaml/general.yaml +++ b/semantic-conventions/src/tests/data/yaml/general.yaml @@ -6,6 +6,7 @@ groups: These attributes may be used for any network related operation. attributes: - id: transport + stability: experimental type: allow_custom_values: false members: @@ -36,28 +37,34 @@ groups: Transport protocol used. See note below. examples: 'ip.tcp' - id: peer.ip + stability: experimental type: string brief: > Remote address of the peer (dotted decimal for IPv4 or [RFC5952](https://tools.ietf.org/html/rfc5952) for IPv6) examples: '127.0.0.1' - id: peer.port + stability: experimental type: int brief: 'Remote port number.' examples: [80, 8080, 443] - id: peer.name + stability: experimental type: string brief: 'Remote hostname or similar, see note below.' examples: 'example.com' - id: host.ip + stability: experimental type: string brief: 'Like `net.peer.ip` but for the host IP. Useful in case of a multi-IP host.' examples: '192.168.0.1' - id: host.port + stability: experimental type: int brief: 'Like `net.peer.port` but for the host port.' examples: 35555 - id: host.name + stability: experimental type: string brief: 'Local hostname or similar, see note below.' examples: 'localhost' @@ -68,16 +75,19 @@ groups: These attributes may be used for any operation with an authenticated and/or authorized enduser. attributes: - id: id + stability: experimental type: string brief: > Username or client_id extracted from the access token or Authorization header in the inbound request from outside the system. examples: 'username' - id: role + stability: experimental type: string brief: 'Actual/assumed role the client is making the request under extracted from token or application security context.' examples: 'admin' - id: scope + stability: experimental type: string brief: > Scopes or granted authorities the client currently possesses extracted from token diff --git a/semantic-conventions/src/tests/data/yaml/http.yaml b/semantic-conventions/src/tests/data/yaml/http.yaml index 9eaf4e25..7b9c5746 100644 --- a/semantic-conventions/src/tests/data/yaml/http.yaml +++ b/semantic-conventions/src/tests/data/yaml/http.yaml @@ -8,42 +8,50 @@ groups: and various HTTP versions like 1.1, 2 and SPDY. attributes: - id: method + stability: experimental type: string requirement_level: required sampling_relevant: false brief: 'HTTP request method.' examples: ["GET", "POST", "HEAD"] - id: url + stability: experimental type: string brief: > Full HTTP request URL in the form `scheme://host[:port]/path?query[#fragment]`. Usually the fragment is not transmitted over HTTP, but if it is known, it should be included nevertheless. examples: ['https://www.foo.bar/search?q=OpenTelemetry#SemConv'] - id: target + stability: experimental type: string brief: 'The full request target as passed in a HTTP request line or equivalent.' examples: ['/path/12314/?q=ddds#123'] - id: host + stability: experimental type: string brief: > The value of the [HTTP host header](https://tools.ietf.org/html/rfc7230#section-5.4). When the header is empty or not present, this attribute should be the same. examples: ['www.example.org'] - id: scheme + stability: experimental type: string brief: 'The URI scheme identifying the used protocol.' examples: ["http", "https"] - id: status_code + stability: experimental type: int requirement_level: conditionally_required: "if and only if one was received/sent" brief: '[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).' examples: [200] - id: status_text + stability: experimental type: string brief: '[HTTP reason phrase](https://tools.ietf.org/html/rfc7230#section-3.1.2).' examples: ['OK'] - id: flavor + stability: experimental type: # Default value: `true`. If false, it helps the code gen tool to # encode checks that only accept the listed values. @@ -70,6 +78,7 @@ groups: is `QUIC`, in which case `IP.UDP` is assumed. examples: ['1.0'] - id: user_agent + stability: experimental type: string brief: 'Value of the [HTTP User-Agent](https://tools.ietf.org/html/rfc7231#section-5.5.3) header sent by the client.' examples: ['CERN-LineMode/2.15 libwww/2.17b3'] @@ -93,6 +102,7 @@ groups: brief: 'Semantic Convention for HTTP Server' attributes: - id: server_name + stability: experimental type: string requirement_level: conditionally_required: > diff --git a/semantic-conventions/src/tests/data/yaml/imported-inherited.yaml b/semantic-conventions/src/tests/data/yaml/imported-inherited.yaml index b0fa7b43..92e4cc09 100644 --- a/semantic-conventions/src/tests/data/yaml/imported-inherited.yaml +++ b/semantic-conventions/src/tests/data/yaml/imported-inherited.yaml @@ -6,6 +6,7 @@ groups: brief: 'Base' attributes: - id: service + stability: experimental type: string requirement_level: required brief: 'The service name, must be equal to the $service part in the span name.' @@ -22,16 +23,19 @@ groups: brief: 'imported' attributes: - id: peer.ip + stability: experimental type: string brief: > Remote examples: '127.0.0.1' - id: peer.port + stability: experimental type: int brief: 'Remote port number.' note: 'not override' examples: [80, 8080, 443] - id: peer.name + stability: experimental type: string brief: 'Remote hostname or similar, see note below.' examples: 'example.com' @@ -47,6 +51,7 @@ groups: requirement_level: required brief: 'override' - id: name + stability: experimental type: string requirement_level: required brief: 'Name' @@ -60,6 +65,7 @@ groups: brief: 'Imported' attributes: - id: method + stability: experimental type: string brief: 'HTTP Method' examples: 'example.com' @@ -72,6 +78,7 @@ groups: brief: 'Imported extends' attributes: - id: hostname + stability: experimental type: string brief: 'hostname' examples: 'example.com' @@ -84,6 +91,7 @@ groups: brief: 'Extends extends.' attributes: - id: zz.attr + stability: experimental type: string requirement_level: required brief: 'zz attr' diff --git a/semantic-conventions/src/tests/data/yaml/links.yaml b/semantic-conventions/src/tests/data/yaml/links.yaml index 2fc449e9..20ab67a2 100644 --- a/semantic-conventions/src/tests/data/yaml/links.yaml +++ b/semantic-conventions/src/tests/data/yaml/links.yaml @@ -6,17 +6,22 @@ groups: note: test attributes: - id: none + stability: experimental type: boolean brief: 'simple text' - id: single + stability: experimental type: boolean brief: 'text [eg](https://opentelemetry.io/)' - id: double + stability: experimental type: boolean brief: 'text1 [eg](https://opentelemetry.io/) text2 [eg](https://opentelemetry.io/) end' - id: start + stability: experimental type: boolean brief: '[eg](https://opentelemetry.io/) text' - id: multiple_end + stability: experimental type: boolean brief: 'text1 [eg](https://opentelemetry.io/) text2 [eg](https://opentelemetry.io/)' diff --git a/semantic-conventions/src/tests/data/yaml/metrics.yaml b/semantic-conventions/src/tests/data/yaml/metrics.yaml index 5d13f992..9ff2e70f 100644 --- a/semantic-conventions/src/tests/data/yaml/metrics.yaml +++ b/semantic-conventions/src/tests/data/yaml/metrics.yaml @@ -2,11 +2,13 @@ groups: - id: metric.foo prefix: bar type: metric_group + stability: experimental brief: "This document defines foo." note: > Details about foo. - attributes: + attributes: - id: egg.type + stability: experimental type: string brief: 'Type of egg.' examples: ["chicken", "emu", "dragon"] @@ -16,6 +18,7 @@ groups: - id: metric.foo.size prefix: foo type: metric + stability: stable metric_name: foo.size brief: "Measures the size of foo." instrument: histogram @@ -32,13 +35,15 @@ groups: - id: metric.foo.active_eggs prefix: foo type: metric + stability: experimental + deprecated: "Removed." metric_name: foo.active_eggs brief: "Measures how many eggs are currently active." instrument: updowncounter unit: "{cartons}" - attributes: + attributes: - ref: http.method requirement_level: opt_in - ref: bar.egg.type - requirement_level: + requirement_level: conditionally_required: "if available to instrumentation." diff --git a/semantic-conventions/src/tests/data/yaml/numeric_attributes.yml b/semantic-conventions/src/tests/data/yaml/numeric_attributes.yml index 5752370d..c54e2041 100644 --- a/semantic-conventions/src/tests/data/yaml/numeric_attributes.yml +++ b/semantic-conventions/src/tests/data/yaml/numeric_attributes.yml @@ -6,6 +6,7 @@ groups: note: 'test' attributes: - id: one + stability: experimental tag: tag-one type: int brief: > @@ -13,6 +14,7 @@ groups: the first attribute examples: 10 - id: two + stability: experimental tag: tag-two type: double brief: > diff --git a/semantic-conventions/src/tests/data/yaml/rpc.yaml b/semantic-conventions/src/tests/data/yaml/rpc.yaml index 7236bf2c..cc457595 100644 --- a/semantic-conventions/src/tests/data/yaml/rpc.yaml +++ b/semantic-conventions/src/tests/data/yaml/rpc.yaml @@ -5,6 +5,7 @@ groups: brief: 'This document defines semantic conventions for remote procedure calls.' attributes: - id: service + stability: experimental type: string requirement_level: required brief: 'The service name, must be equal to the $service part in the span name.' diff --git a/semantic-conventions/src/tests/data/yaml/scope.yaml b/semantic-conventions/src/tests/data/yaml/scope.yaml index ac691c9f..a9bc8c36 100644 --- a/semantic-conventions/src/tests/data/yaml/scope.yaml +++ b/semantic-conventions/src/tests/data/yaml/scope.yaml @@ -6,6 +6,7 @@ groups: Instrumentation Scope attributes attributes: - id: short_name + stability: experimental type: string requirement_level: recommended brief: > diff --git a/semantic-conventions/src/tests/data/yaml/semantic_attributes.yml b/semantic-conventions/src/tests/data/yaml/semantic_attributes.yml index b31f1ea7..55c0aea8 100644 --- a/semantic-conventions/src/tests/data/yaml/semantic_attributes.yml +++ b/semantic-conventions/src/tests/data/yaml/semantic_attributes.yml @@ -1,5 +1,6 @@ attributes: - id: attribute_one + stability: experimental tag: tag-one type: string brief: > @@ -7,6 +8,7 @@ attributes: the first attribute examples: 'This is a good example of the first attribute' - id: attribute_two + stability: experimental tag: tag-two type: int brief: > @@ -14,6 +16,7 @@ attributes: the second attribute. It's a number. examples: [1000, 10, 1] - id: attribute_three + stability: experimental tag: tag-three type: boolean brief: > diff --git a/semantic-conventions/src/tests/data/yaml/semantic_attributes_deprecated.yml b/semantic-conventions/src/tests/data/yaml/semantic_attributes_deprecated.yml index 962f42cc..c65f2ff1 100644 --- a/semantic-conventions/src/tests/data/yaml/semantic_attributes_deprecated.yml +++ b/semantic-conventions/src/tests/data/yaml/semantic_attributes_deprecated.yml @@ -1,5 +1,6 @@ attributes: - id: deprecated_attribute + stability: experimental tag: tag-one deprecated: don't use this one anymore type: boolean diff --git a/semantic-conventions/src/tests/data/yaml/span_event.yaml b/semantic-conventions/src/tests/data/yaml/span_event.yaml index 3a1f1940..baa5688f 100644 --- a/semantic-conventions/src/tests/data/yaml/span_event.yaml +++ b/semantic-conventions/src/tests/data/yaml/span_event.yaml @@ -8,6 +8,7 @@ groups: brief: example attributes: - id: flag + stability: experimental type: boolean brief: An attribute. @@ -17,5 +18,6 @@ groups: brief: example attributes: - id: flag + stability: experimental type: boolean brief: An attribute. diff --git a/semantic-conventions/src/tests/data/yaml/stability.yaml b/semantic-conventions/src/tests/data/yaml/stability.yaml index 48631cc7..726efada 100644 --- a/semantic-conventions/src/tests/data/yaml/stability.yaml +++ b/semantic-conventions/src/tests/data/yaml/stability.yaml @@ -1,8 +1,8 @@ groups: - - id: test + - id: test_1 type: span brief: 'test' - prefix: http_1 + prefix: test_1 attributes: - id: exp_attr type: boolean @@ -14,36 +14,28 @@ groups: requirement_level: required stability: stable brief: "" - - id: def_stability - type: boolean - requirement_level: required - brief: "" - - id: parent_default - type: span - brief: 'test' - prefix: http_2 - stability: experimental + - id: ref_test_1 + type: attribute_group + brief: 'ref_test' attributes: - - id: test_attr - type: boolean - requirement_level: required - brief: "" - - id: dep - type: boolean - requirement_level: required - deprecated: should not fail. - brief: "" + - ref: test_1.exp_attr + - ref: test_1.stable_attr + + - id: extends_test_1 + type: attribute_group + brief: 'extends_test' + extends: test_1 - id: not_fail type: span brief: 'test' - prefix: http_3 - stability: experimental + prefix: test_2 attributes: - id: test_attr type: boolean requirement_level: required + stability: experimental deprecated: should not fail. brief: "" - id: stable_deprecated_attr @@ -56,7 +48,7 @@ groups: - id: resource_test type: resource brief: 'test' - prefix: http_4 + prefix: test_3 attributes: - id: exp_attr type: boolean @@ -68,34 +60,15 @@ groups: requirement_level: required stability: stable brief: "" - - id: def_stability - type: boolean - requirement_level: required - brief: "" - - - id: resource_parent_default - type: resource - brief: 'test' - prefix: http_5 - stability: experimental - attributes: - - id: test_attr - type: boolean - requirement_level: required - brief: "" - - id: dep - type: boolean - requirement_level: required - deprecated: should not fail. - brief: "" - id: resource_not_fail type: resource brief: 'test' - prefix: http_6 + prefix: test_4 attributes: - id: test_attr type: boolean requirement_level: required + stability: experimental deprecated: should not fail. brief: "" \ No newline at end of file diff --git a/semantic-conventions/src/tests/semconv/model/test_correct_parse.py b/semantic-conventions/src/tests/semconv/model/test_correct_parse.py index e1d0f0f4..44604676 100644 --- a/semantic-conventions/src/tests/semconv/model/test_correct_parse.py +++ b/semantic-conventions/src/tests/semconv/model/test_correct_parse.py @@ -203,7 +203,7 @@ def test_metrics(self): semconv.parse(self.load_file("yaml/http.yaml")) metric_semconvs = cast( - List[MetricSemanticConvention], list(semconv.models.values())[:2] + List[MetricSemanticConvention], list(semconv.models.values()) ) expected = { @@ -211,6 +211,7 @@ def test_metrics(self): "prefix": "bar", "extends": "", "n_constraints": 0, + "stability": StabilityLevel.EXPERIMENTAL, "attributes": ["bar.egg.type"], } self.semantic_convention_check(metric_semconvs[0], expected) @@ -220,6 +221,7 @@ def test_metrics(self): "prefix": "foo", "extends": "", "n_constraints": 0, + "stability": StabilityLevel.STABLE, "metric_name": "foo.size", "unit": "{bars}", "instrument": "histogram", @@ -233,6 +235,26 @@ def test_metrics(self): self.assertEqual(metric_semconvs[1].instrument, expected["instrument"]) self.assertEqual(metric_semconvs[1].metric_name, expected["metric_name"]) + expected = { + "id": "metric.foo.active_eggs", + "prefix": "foo", + "extends": "", + "n_constraints": 0, + "stability": StabilityLevel.EXPERIMENTAL, + "metric_name": "foo.active_eggs", + "unit": "{cartons}", + "deprecated": "Removed.", + "instrument": "updowncounter", + "attributes": [ + "bar.egg.type", + "http.method", + ], + } + self.semantic_convention_check(metric_semconvs[2], expected) + self.assertEqual(metric_semconvs[2].unit, expected["unit"]) + self.assertEqual(metric_semconvs[2].instrument, expected["instrument"]) + self.assertEqual(metric_semconvs[2].metric_name, expected["metric_name"]) + def test_resource(self): semconv = SemanticConventionSet(debug=False) semconv.parse(self.load_file("yaml/cloud.yaml")) @@ -256,7 +278,7 @@ def test_event(self): semconv = SemanticConventionSet(debug=False) semconv.parse(self.load_file("yaml/event.yaml")) semconv.finish() - self.assertEqual(len(semconv.models), 1) + self.assertEqual(len(semconv.models), 4) event = list(semconv.models.values())[0] expected = { "id": "exception", @@ -281,22 +303,61 @@ def test_event(self): constraint.choice_list_attributes[choice_index][attr_index], ) + experimental_event = list(semconv.models.values())[1] + expected = { + "id": "experimental_event", + "prefix": "experimental_event", + "extends": "", + "n_constraints": 0, + "stability": StabilityLevel.EXPERIMENTAL, + "attributes": [ + "experimental_event.foo", + ], + } + self.semantic_convention_check(experimental_event, expected) + + stable_event = list(semconv.models.values())[2] + expected = { + "id": "stable_event", + "prefix": "stable_event", + "extends": "", + "n_constraints": 0, + "stability": StabilityLevel.STABLE, + "attributes": [], + } + self.semantic_convention_check(stable_event, expected) + + deprecated_event = list(semconv.models.values())[3] + expected = { + "id": "deprecated_event", + "prefix": "deprecated_event", + "extends": "", + "n_constraints": 0, + "stability": StabilityLevel.STABLE, + "deprecated": "Removed.", + "attributes": [], + } + self.semantic_convention_check(deprecated_event, expected) + def test_span_with_event(self): semconv = SemanticConventionSet(debug=False) semconv.parse(self.load_file("yaml/event.yaml")) semconv.parse(self.load_file("yaml/span_event.yaml")) semconv.finish() - self.assertEqual(len(semconv.models), 3) + self.assertEqual(len(semconv.models), 6) semconvs = list(semconv.models.values()) self.assertTrue(isinstance(semconvs[0], EventSemanticConvention)) - self.assertTrue(isinstance(semconvs[1], SpanSemanticConvention)) + self.assertTrue(isinstance(semconvs[1], EventSemanticConvention)) self.assertTrue(isinstance(semconvs[2], EventSemanticConvention)) - event_semconv = semconvs[1] - self.assertEqual(2, len(event_semconv.events)) - self.assertTrue(isinstance(event_semconv.events[0], EventSemanticConvention)) - self.assertTrue(isinstance(event_semconv.events[1], EventSemanticConvention)) - self.assertEqual("exception", event_semconv.events[0].semconv_id) - self.assertEqual("random.event", event_semconv.events[1].semconv_id) + self.assertTrue(isinstance(semconvs[3], EventSemanticConvention)) + self.assertTrue(isinstance(semconvs[4], SpanSemanticConvention)) + self.assertTrue(isinstance(semconvs[5], EventSemanticConvention)) + span_semconv = semconvs[4] + self.assertEqual(2, len(span_semconv.events)) + self.assertTrue(isinstance(span_semconv.events[0], EventSemanticConvention)) + self.assertTrue(isinstance(span_semconv.events[1], EventSemanticConvention)) + self.assertEqual("exception", span_semconv.events[0].semconv_id) + self.assertEqual("random.event", span_semconv.events[1].semconv_id) def test_rpc(self): semconv = SemanticConventionSet(debug=False) @@ -457,14 +518,27 @@ def test_deprecation(self): semconv = SemanticConventionSet(debug=False) semconv.parse(self.load_file("yaml/deprecated/http.yaml")) semconv.finish() - self.assertEqual(len(semconv.models), 1) + self.assertEqual(len(semconv.models), 3) - method_attr = list(semconv.models.values())[0].attrs_by_name["http.method"] - self.assertIsNotNone(method_attr.deprecated) + method_attr_original = list(semconv.models.values())[0].attrs_by_name[ + "http.method" + ] + self.assertIsNotNone(method_attr_original.deprecated) self.assertEqual( - method_attr.deprecated, + method_attr_original.deprecated, "Use attribute `nonDepecrated`.", ) + + method_attr_client = list(semconv.models.values())[1].attrs_by_name[ + "http.method" + ] + self.assertEqual(method_attr_client.deprecated, method_attr_original.deprecated) + + method_attr_server = list(semconv.models.values())[2].attrs_by_name[ + "http.method" + ] + self.assertEqual(method_attr_server.deprecated, method_attr_original.deprecated) + self.assertIsNone( list(semconv.models.values())[0].attrs_by_name["http.target"].deprecated ) @@ -476,37 +550,39 @@ def test_stability(self): self.assertEqual(len(semconv.models), 6) model = list(semconv.models.values())[0] - self.assertEqual(len(model.attributes_and_templates), 3) - self.assertEqual(model.stability, StabilityLevel.EXPERIMENTAL) + self.assertEqual(len(model.attributes_and_templates), 2) + self.assertIsNone(model.stability) attr = model.attributes_and_templates[0] - self.assertEqual(attr.attr_id, "def_stability") - self.assertEqual(attr.stability, StabilityLevel.EXPERIMENTAL) - - attr = model.attributes_and_templates[1] self.assertEqual(attr.attr_id, "exp_attr") self.assertEqual(attr.stability, StabilityLevel.EXPERIMENTAL) - attr = model.attributes_and_templates[2] + attr = model.attributes_and_templates[1] self.assertEqual(attr.attr_id, "stable_attr") self.assertEqual(attr.stability, StabilityLevel.STABLE) model = list(semconv.models.values())[1] self.assertEqual(len(model.attributes_and_templates), 2) - self.assertEqual(model.stability, StabilityLevel.EXPERIMENTAL) + self.assertIsNone(model.stability) attr = model.attributes_and_templates[0] - self.assertEqual(attr.attr_id, "dep") + self.assertEqual(attr.attr_id, "exp_attr") self.assertEqual(attr.stability, StabilityLevel.EXPERIMENTAL) attr = model.attributes_and_templates[1] - self.assertEqual(attr.attr_id, "test_attr") - self.assertEqual(attr.stability, StabilityLevel.EXPERIMENTAL) + self.assertEqual(attr.attr_id, "stable_attr") + self.assertEqual(attr.stability, StabilityLevel.STABLE) model = list(semconv.models.values())[2] - self.assertEqual(len(model.attributes_and_templates), 2) - self.assertEqual(model.stability, StabilityLevel.EXPERIMENTAL) + attr = model.attributes_and_templates[0] + self.assertEqual(attr.attr_id, "exp_attr") + self.assertEqual(attr.stability, StabilityLevel.EXPERIMENTAL) + + attr = model.attributes_and_templates[1] + self.assertEqual(attr.attr_id, "stable_attr") + self.assertEqual(attr.stability, StabilityLevel.STABLE) + model = list(semconv.models.values())[3] attr = model.attributes_and_templates[0] self.assertEqual(attr.attr_id, "stable_deprecated_attr") self.assertEqual(attr.stability, StabilityLevel.STABLE) @@ -708,6 +784,8 @@ def test_inherited_imported(self): def semantic_convention_check(self, s, expected): self.assertEqual(expected["prefix"], s.prefix) + self.assertEqual(expected.get("stability"), s.stability) + self.assertEqual(expected.get("deprecated"), s.deprecated) self.assertEqual(expected["extends"], s.extends) self.assertEqual(expected["id"], s.semconv_id) self.assertEqual(len(expected["attributes"]), len(s.attributes)) diff --git a/semantic-conventions/src/tests/semconv/model/test_error_detection.py b/semantic-conventions/src/tests/semconv/model/test_error_detection.py index af1c9132..a37881e2 100644 --- a/semantic-conventions/src/tests/semconv/model/test_error_detection.py +++ b/semantic-conventions/src/tests/semconv/model/test_error_detection.py @@ -141,6 +141,28 @@ def test_invalid_stability(self): self.assertIn("is not allowed as a stability marker", msg) self.assertEqual(e.line, 10) + def test_multiple_stability_values(self): + with self.assertRaises(DuplicateKeyError): + self.open_yaml("yaml/errors/stability/multiple_stability_values.yaml") + + def test_missing_stability_value(self): + with self.assertRaises(ValidationError) as ex: + self.open_yaml("yaml/errors/stability/missing_stability_value.yaml") + self.fail() + e = ex.exception + msg = e.message.lower() + self.assertIn("missing keys: ['stability']", msg) + self.assertEqual(e.line, 6) + + def test_ref_override_stability(self): + with self.assertRaises(ValidationError) as ex: + self.open_yaml("yaml/errors/stability/ref_override_stability.yaml") + self.fail() + e = ex.exception + msg = e.message.lower() + self.assertIn("ref attribute 'test_attr' must not override stability", msg) + self.assertEqual(e.line, 14) + def test_invalid_semconv_stability_with_deprecated(self): with self.assertRaises(ValidationError) as ex: self.open_yaml("yaml/errors/stability/semconv_stability_deprecated.yaml") @@ -162,6 +184,34 @@ def test_invalid_deprecated_empty_string(self): ) self.assertEqual(e.line, 10) + def test_multiple_deprecations(self): + with self.assertRaises(DuplicateKeyError): + self.open_yaml("yaml/errors/deprecated/multiple_deprecations.yaml") + + def test_extends_overrides_deprecation(self): + with self.assertRaises(ValidationError) as ex: + self.open_yaml("yaml/errors/deprecated/extends_overrides_deprecation.yaml") + self.fail() + e = ex.exception + msg = e.message.lower() + self.assertIn( + "ref attribute 'test.convention_version' must not override deprecation status", + msg, + ) + self.assertEqual(e.line, 19) + + def test_ref_overrides_deprecation(self): + with self.assertRaises(ValidationError) as ex: + self.open_yaml("yaml/errors/deprecated/ref_overrides_deprecation.yaml") + self.fail() + e = ex.exception + msg = e.message.lower() + self.assertIn( + "ref attribute 'test.convention_version' must not override deprecation status", + msg, + ) + self.assertEqual(e.line, 17) + def test_invalid_deprecated_boolean(self): with self.assertRaises(ValidationError) as ex: self.open_yaml("yaml/errors/deprecated/deprecation_boolean.yaml") @@ -295,7 +345,7 @@ def test_example_wrong_double_type(self): self.assertIn("example with wrong type", msg) self.assertIn("expected double", msg) self.assertIn("is was ", msg) - self.assertEqual(e.line, 11) + self.assertEqual(e.line, 12) def test_examples_bool(self): with self.assertRaises(ValidationError) as ex: @@ -378,7 +428,7 @@ def test_attribute_id_clash(self): e = ex.exception msg = e.message.lower() self.assertIn("is already present at line 8", msg) - self.assertEqual(e.line, 16) + self.assertEqual(e.line, 18) def test_attribute_id_clash_inherited(self): semconv = SemanticConventionSet(debug=False) @@ -409,7 +459,7 @@ def test_validate_anyof_attributes(self): msg = e.message.lower() self.assertIn("any_of attribute", msg) self.assertIn("does not exists", msg) - self.assertEqual(e.line, 15) + self.assertEqual(e.line, 16) def test_missing_event(self): with self.assertRaises(ValidationError) as ex: @@ -459,7 +509,7 @@ def test_multiple_requirement_level_values(self): e = ex.exception msg = e.message.lower() self.assertIn("multiple requirement_level values are not allowed!", msg) - self.assertEqual(e.line, 11) + self.assertEqual(e.line, 12) def open_yaml(self, path): with open(self.load_file(path), encoding="utf-8") as file: diff --git a/semantic-conventions/src/tests/semconv/templating/test_markdown.py b/semantic-conventions/src/tests/semconv/templating/test_markdown.py index ed6adba4..abeac7fd 100644 --- a/semantic-conventions/src/tests/semconv/templating/test_markdown.py +++ b/semantic-conventions/src/tests/semconv/templating/test_markdown.py @@ -36,12 +36,23 @@ def testInclude(self): def testDeprecated(self): self.check("markdown/deprecated/") - def testStability(self): - self.check("markdown/stability/", expected_name="labels_expected.md") + def testStableBadges(self): self.check( "markdown/stability/", MarkdownOptions(enable_stable=True, use_badge=True), - expected_name="badges_expected.md", + expected_name="stable_badges_expected.md", + ) + + def testExperimentalAndStableBadges(self): + self.check( + "markdown/stability/", + MarkdownOptions( + enable_stable=True, + enable_experimental=True, + enable_deprecated=True, + use_badge=True, + ), + expected_name="all_badges_expected.md", ) def testSingle(self): diff --git a/semantic-conventions/syntax.md b/semantic-conventions/syntax.md index a422b309..3b1ba202 100644 --- a/semantic-conventions/syntax.md +++ b/semantic-conventions/syntax.md @@ -100,7 +100,6 @@ requirement_level ::= "required" | "recommended" [condition] # Default if not specified | "opt_in" -# EXPERIMENTAL: Using this is NOT ALLOWED in the specification currently. sampling_relevant ::= boolean examples ::= {} @@ -160,7 +159,6 @@ The field `semconv` represents a semantic convention and it is made by: It defaults to an empty string. - `extends`, optional string, reference another semantic convention `id`. It inherits the prefix, constraints, and all attributes defined in the specified semantic convention. -- `stability`, optional enum, specifies the stability of the semantic convention. Defaults to `experimental`. - `deprecated`, optional, when present marks the semantic convention as deprecated. The string provided as `` MUST specify why it's deprecated and/or what to use instead. - `attributes`, list of attributes that belong to the semantic convention. @@ -212,8 +210,8 @@ Attribute groups don't have any specific fields and follow the general `semconv` An attribute is defined by: -- `id`, string that uniquely identifies the attribute. -- `type`, either a string literal denoting the type as a primitive or an array type, a template type or an enum definition (See later). +- `id`, string that uniquely identifies the attribute. Required. +- `type`, either a string literal denoting the type as a primitive or an array type, a template type or an enum definition (See later). Required. The accepted string literals are: * _primitive and array types as string literals:_ * `"string"`: String attributes. @@ -225,8 +223,8 @@ An attribute is defined by: * `"double[]"`: Array of double attributes. * `"boolean[]"`: Array of booleans attributes. * _template type as string literal:_ `"template[]"` (See [below](#template-type)) - See the [specification of Attributes](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/common/README.md#attribute) for the definition of the value types. +- `stability`, enum - either `stable` or `experimental`, specifies the stability of the attribute. Required. - `ref`, optional string, reference an existing attribute, see [below](#ref). - `tag`, optional string, associates a tag ("sub-group") to the attribute. It carries no particular semantic meaning but can be used e.g. for filtering @@ -235,10 +233,10 @@ An attribute is defined by: Can be "required", "conditionally_required", "recommended" or "opt_in". When omitted, the attribute is "recommended". When set to "conditionally_required", the string provided as `` MUST specify the conditions under which the attribute is required. -- `sampling_relevant`, optional EXPERIMENTAL boolean, +- `sampling_relevant`, optional boolean, specifies if the attribute is (especially) relevant for sampling and thus should be set at span start. It defaults to `false`. -- `brief`, `note`, `stability`, `deprecated`, same meaning as for the whole +- `brief`, `note`, `deprecated`, same meaning as for the whole [semantic convention](#semantic-convention), but per attribute. - `examples`, sequence of example values for the attribute or single example value. They are required only for string and string array attributes. @@ -326,7 +324,7 @@ examples: #### Ref -`ref` MUST have an id of an existing attribute. When it is set, `id` and `type` MUST NOT be present. +`ref` MUST have an id of an existing attribute. When it is set, `id`, `type`, `stability`, and `deprecation` MUST NOT be present. `ref` is useful for specifying that an existing attribute of another semantic convention is part of the current semantic convention and inherit its `brief`, `note`, and `example` values. However, if these fields are present in the current attribute definition, they override the inherited values. @@ -354,6 +352,7 @@ groups: attributes: - id: http.request.header type: template[string[]] + stability: stable brief: > HTTP request headers, the key being the normalized HTTP header name (lowercase, with `-` characters replaced by `_`), the value being the header values. examples: ['http.request.header.content_type=["application/json"]', 'http.request.header.x_forwarded_for=["1.2.3.4", "1.2.3.5"]']