You've already forked opentelemetry-go
mirror of
https://github.com/open-telemetry/opentelemetry-go.git
synced 2025-11-29 23:07:45 +02:00
- Add the new metric API package structure prototyped in https://github.com/MrAlias/semconv-go Prototypes of new metric API use: - https://github.com/MrAlias/opentelemetry-go-contrib/pull/6136 - https://github.com/MrAlias/opentelemetry-go-contrib/pull/6135 - https://github.com/MrAlias/opentelemetry-go-contrib/pull/6134 - Generate `semconv/v1.32.0` - Drop the `kestrel` metric namespace as this is a Java specific technology ## [`v1.32.0` semantic convention release notes](https://github.com/open-telemetry/semantic-conventions/releases/tag/v1.32.0): <div data-pjax="true" data-test-selector="body-content" data-view-component="true" class="markdown-body my-3"><p>📣 This release is the second release candidate for the Database Semantic Conventions, with <strong>db conventions stability planned to be declared in the subsequent release</strong>.</p> <h3>🛑 Breaking changes 🛑</h3> <ul> <li><code>device</code>: Change the definition of <code>device.id</code> and make it opt-in. (<a href="https://github.com/open-telemetry/semantic-conventions/issues/1874" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/1874/hovercard">#1874</a>, <a href="https://github.com/open-telemetry/semantic-conventions/issues/1951" data-hovercard-type="pull_request" data-hovercard-url="/open-telemetry/semantic-conventions/pull/1951/hovercard">#1951</a>)</li> <li><code>feature_flag</code>: Rename <code>evaluation</code> to <code>result</code> for feature flag evaluation result attributes (<a href="https://github.com/open-telemetry/semantic-conventions/issues/1989" data-hovercard-type="pull_request" data-hovercard-url="/open-telemetry/semantic-conventions/pull/1989/hovercard">#1989</a>)</li> </ul> <h3>🚀 New components 🚀</h3> <ul> <li><code>app</code>: Create <code>app.installation.id</code> attribute (<a href="https://github.com/open-telemetry/semantic-conventions/issues/1874" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/1874/hovercard">#1874</a>, <a href="https://github.com/open-telemetry/semantic-conventions/issues/1897" data-hovercard-type="pull_request" data-hovercard-url="/open-telemetry/semantic-conventions/pull/1897/hovercard">#1897</a>)</li> <li><code>cpython</code>: Add CPython runtime garbage collector metrics (<a href="https://github.com/open-telemetry/semantic-conventions/issues/1930" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/1930/hovercard">#1930</a>)</li> </ul> <h3>💡 Enhancements 💡</h3> <ul> <li><code>vcs</code>: Add owner and provider name to VCS attribute registry (<a href="https://github.com/open-telemetry/semantic-conventions/issues/1452" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/1452/hovercard">#1452</a>)</li> <li><code>vcs</code>: Remove fallback value for VCS provider name attribute (<a href="https://github.com/open-telemetry/semantic-conventions/issues/2020" data-hovercard-type="pull_request" data-hovercard-url="/open-telemetry/semantic-conventions/pull/2020/hovercard">#2020</a>)</li> <li><code>db</code>: Truncate <code>db.query.summary</code> to 255 characters if parsed from the query (<a href="https://github.com/open-telemetry/semantic-conventions/issues/1978" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/1978/hovercard">#1978</a>)</li> <li><code>db</code>: Normalize spaces in <code>db.operation.name</code> (if any) (<a href="https://github.com/open-telemetry/semantic-conventions/issues/2028" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/2028/hovercard">#2028</a>)</li> <li><code>db</code>: <code>db.operation.parameter.<key></code> should not be captured for batch operations (<a href="https://github.com/open-telemetry/semantic-conventions/issues/2026" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/2026/hovercard">#2026</a>)</li> <li><code>db</code>: Add <code>db.stored_procedure.name</code> (<a href="https://github.com/open-telemetry/semantic-conventions/issues/1491" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/1491/hovercard">#1491</a>)</li> <li><code>gcp</code>: Adds GCP AppHub labels for resource. (<a href="https://github.com/open-telemetry/semantic-conventions/issues/2006" data-hovercard-type="pull_request" data-hovercard-url="/open-telemetry/semantic-conventions/pull/2006/hovercard">#2006</a>)</li> <li><code>error</code>: Add <code>error.message</code> property for human-readable error message on events. (<a href="https://github.com/open-telemetry/semantic-conventions/issues/1992" data-hovercard-type="pull_request" data-hovercard-url="/open-telemetry/semantic-conventions/pull/1992/hovercard">#1992</a>)</li> <li><code>profile</code>: Extend the list of known frame types with a value for Go and Rust (<a href="https://github.com/open-telemetry/semantic-conventions/issues/2003" data-hovercard-type="pull_request" data-hovercard-url="/open-telemetry/semantic-conventions/pull/2003/hovercard">#2003</a>)</li> <li><code>otel</code>: Adds SDK self-monitoring metrics for log processing (<a href="https://github.com/open-telemetry/semantic-conventions/issues/1921" data-hovercard-type="pull_request" data-hovercard-url="/open-telemetry/semantic-conventions/pull/1921/hovercard">#1921</a>)</li> </ul>
183 lines
6.4 KiB
Django/Jinja
183 lines
6.4 KiB
Django/Jinja
{%- macro repl(text) -%}
|
|
{#- Copied from semconvgen: https://github.com/open-telemetry/opentelemetry-go-build-tools/blob/3e69152c51c56213b65c0fc6e5954293b522103c/semconvgen/generator.go#L419-L426 -#}
|
|
{{ text | replace("RedisDatabase", "RedisDB") | replace("IPTCP", "TCP") | replace("IPUDP", "UDP") | replace("Lineno", "LineNumber") }}
|
|
{%- endmacro -%}
|
|
|
|
{%- macro smart_title_case(text) -%}
|
|
{%- for i in range(0, text | length) -%}
|
|
{%- if i == 0 or text[i-1] in ['.', '_'] -%}
|
|
{{ text[i] | upper }}
|
|
{%- elif not text[i] in ['.', '_'] -%}
|
|
{{ text[i] }}
|
|
{%- endif -%}
|
|
{%- endfor -%}
|
|
{%- endmacro -%}
|
|
|
|
{%- macro to_go_name(fqn="", pkg="") -%}
|
|
{%- if pkg != "" -%}
|
|
{%- set n = pkg | length -%}
|
|
{%- if pkg == fqn[:n] -%}
|
|
{%- set fqn = fqn[n:] -%}
|
|
{%- if fqn[0] == "." or fqn[0] == "." -%}
|
|
{%- set fqn = fqn[1:] -%}
|
|
{%- endif -%}
|
|
{%- endif -%}
|
|
{%- endif -%}
|
|
{{ repl(smart_title_case(fqn | replace(" ", "") | replace("_", ".") | acronym)) }}
|
|
{%- endmacro -%}
|
|
|
|
{%- macro deprecated_doc(attr) -%}
|
|
{% if attr is deprecated %}Deprecated: {{ attr.deprecated }}{% endif %}
|
|
{%- endmacro -%}
|
|
|
|
{%- macro notes_doc(attr) -%}
|
|
{% if attr.note %}Note: {{ attr.note }}{% endif %}
|
|
{%- endmacro -%}
|
|
|
|
{%- macro examples_doc(attr) -%}
|
|
{%- if attr.examples is iterable %}
|
|
Examples: {{ attr.examples | trim("[]") }}
|
|
{%- endif %}
|
|
{%- endmacro -%}
|
|
|
|
{%- macro lower_first(line) -%}
|
|
{%- if line[0] is upper and line[1] is upper -%}
|
|
{#- Assume an acronym -#}
|
|
{{ line }}
|
|
{%- else -%}
|
|
{{ line[0]|lower }}{{ line[1:] }}
|
|
{%- endif -%}
|
|
{%- endmacro -%}
|
|
|
|
{%- macro first_word(line, delim=" ") -%}
|
|
{%- for c in line -%}
|
|
{%- if c == delim -%}
|
|
{{ line[:loop.index0] }}
|
|
{%- set line = "" -%}
|
|
{%- endif -%}
|
|
{%- endfor -%}
|
|
{%- endmacro -%}
|
|
|
|
{%- macro prefix_brief(brief, prefix="") -%}
|
|
{%- set norms = [
|
|
"MUST", "REQUIRED", "SHALL",
|
|
"SHOULD", "RECOMMENDED",
|
|
"MAY", "OPTIONAL"
|
|
] -%}
|
|
{%- set brief = brief | trim() -%}
|
|
{%- if first_word(brief) is in norms -%}
|
|
It {{ brief }}.
|
|
{%- else -%}
|
|
{{ prefix }} {% if brief[:2] == "A " or brief[:3] == "An " or brief[:4] == "The " -%}
|
|
{{ lower_first(brief) | trim(".") }}.
|
|
{%- else -%}
|
|
the {{ lower_first(brief) | trim(".") }}.
|
|
{%- endif -%}
|
|
{%- endif -%}
|
|
{%- endmacro -%}
|
|
|
|
{%- macro it_reps(brief) -%}
|
|
{{ prefix_brief(brief, "It represents") }}
|
|
{%- endmacro -%}
|
|
|
|
{%- macro keydoc(attr, pkg="") -%}
|
|
{{ to_go_name(attr.name, pkg) }}Key is the attribute Key conforming to the "{{ attr.name }}" semantic conventions. {{ it_reps(attr.brief) }}
|
|
|
|
{% if attr is enum -%}
|
|
Type: Enum
|
|
{%- else -%}
|
|
Type: {{ attr.type }}
|
|
{%- endif %}
|
|
RequirementLevel: {{ attr.requirement_level | title }}
|
|
Stability: {{ attr.stability | title }}
|
|
{{ examples_doc(attr) }}
|
|
{{ notes_doc(attr) }}
|
|
{{ deprecated_doc(attr) }}
|
|
{%- endmacro -%}
|
|
|
|
{%- macro generate_consts(group, pkg="") -%}
|
|
{#- TODO: generate with group docs (i.e group by registry namespace) #}
|
|
|
|
{{ ["Namespace: " ~ group.root_namespace] | comment(format="go") }}
|
|
const (
|
|
{%- for attribute in group.attributes if not attribute.deprecated %}
|
|
{#- TODO: Handle template attributes. #}
|
|
{%- if not attribute.type is template_type %}
|
|
{{ keydoc(attribute) | comment(format="go_1tab") }}
|
|
{{to_go_name(attribute.name, pkg=pkg)}}Key = attribute.Key("{{attribute.name}}")
|
|
{% endif -%}
|
|
{%- endfor -%}
|
|
)
|
|
{%- endmacro -%}
|
|
|
|
{%- macro generate_funcs(group, pkg="") -%}
|
|
{%- for attribute in group.attributes if not attribute is enum %}
|
|
{#- TODO: Handle template attributes. #}
|
|
{%- if not attribute.type is template_type %}
|
|
|
|
{{ [to_go_name(attribute.name, pkg) ~ " returns an attribute KeyValue conforming to the \"" ~ attribute.name ~ "\" semantic conventions. " ~ it_reps(attribute.brief) ] | comment(format="go") }}
|
|
func {{to_go_name(attribute.name, pkg)}}(val {{attribute.type | instantiated_type | map_text("attribute_type_value")}}) attribute.KeyValue {
|
|
return {{to_go_name(attribute.name, pkg)}}Key.{{attribute.type | instantiated_type | map_text("attribute_type_method")}}(val)
|
|
}
|
|
{%- endif %}
|
|
{%- endfor %}
|
|
{%- endmacro -%}
|
|
|
|
{%- macro generate_vars(group, pkg="") -%}
|
|
{#- Render values for enums #}
|
|
{%- for attribute in group.attributes %}
|
|
{%- if attribute is enum %}
|
|
|
|
{{ ["Enum values for " ~ attribute.name] | comment(format="go") }}
|
|
var (
|
|
{%- for value in attribute.type.members %}
|
|
{%- if value.deprecated %}
|
|
{{ ["Deprecated: " ~ value.deprecated | trim(".") ~ "." ] | comment(format="go_1tab") }}
|
|
{%- else %}
|
|
{{ [value.brief or value.id, "Stability: " ~ value.stability] | comment(format="go_1tab") }}
|
|
{%- endif %}
|
|
{{to_go_name(attribute.name ~ "." ~ value.id, pkg=pkg)}} = {{ to_go_name(attribute.name, pkg=pkg) }}Key.{{attribute.type | instantiated_type | map_text("attribute_type_method")}}({{ value.value | print_member_value }})
|
|
{%- endfor %}
|
|
)
|
|
{%- endif %}
|
|
{%- endfor %}
|
|
{%- endmacro -%}
|
|
|
|
{%- macro metric_keydoc(metric, pkg="") -%}
|
|
{%- if not metric.brief -%}
|
|
{{ to_go_name(metric.metric_name, pkg=pkg) }} is the metric conforming to the "{{ metric.metric_name}}" semantic conventions.
|
|
{%- else -%}
|
|
{{ to_go_name(metric.metric_name, pkg=pkg) }} is the metric conforming to the "{{ metric.metric_name}}" semantic conventions. {{ it_reps(metric.brief)|trim(".") }}.
|
|
{%- endif %}
|
|
{%- endmacro -%}
|
|
|
|
{%- macro metric_typedoc(metric, pkg="") -%}
|
|
{%- if not metric.brief -%}
|
|
{{ to_go_name(metric.metric_name, pkg=pkg) }} is an instrument used to record metric values conforming to the "{{ metric.metric_name}}" semantic conventions.
|
|
{%- else -%}
|
|
{{ to_go_name(metric.metric_name, pkg=pkg) }} is an instrument used to record metric values conforming to the "{{ metric.metric_name}}" semantic conventions. {{ it_reps(metric.brief)|trim(".") }}.
|
|
{%- endif %}
|
|
{%- endmacro -%}
|
|
|
|
{%- macro member_type(member) %}
|
|
{%- if member.value is string %}string{%- endif %}
|
|
{%- if member.value is boolean %}bool{%- endif %}
|
|
{%- if member.value is int %}int64{%- endif %}
|
|
{%- if member.value is float %}float64{%- endif %}
|
|
{%- endmacro %}
|
|
|
|
{%- macro attr_type(attribute) %}
|
|
{%- if attribute.type is mapping %}
|
|
{{- member_type(attribute.type.members[0]) }}
|
|
{%- elif attribute.type == "template[boolean]" %}boolean
|
|
{%- elif attribute.type == "template[int]" %}int
|
|
{%- elif attribute.type == "template[double]" %}double
|
|
{%- elif attribute.type == "template[string]" %}string
|
|
{%- elif attribute.type == "template[boolean[]]" %}boolean[]
|
|
{%- elif attribute.type == "template[int[]]" %}int[]
|
|
{%- elif attribute.type == "template[double[]]" %}double[]
|
|
{%- elif attribute.type == "template[string[]]" %}string[]
|
|
{%- else %}{{ attribute.type | trim }}
|
|
{%- endif %}
|
|
{%- endmacro %}
|