39 lines
1.3 KiB
Plaintext
39 lines
1.3 KiB
Plaintext
package after_resolution
|
|
import rego.v1
|
|
# checks that stable group does not have experimental attributes with requirement levels other than opt_in
|
|
deny contains group_stability_violation(description, group.id, name) if {
|
|
group := input.groups[_]
|
|
# ignore attribute_groups
|
|
group.type != "attribute_group"
|
|
group.stability == "stable"
|
|
|
|
exceptions = {
|
|
# TODO: https://github.com/open-telemetry/semantic-conventions/issues/1514
|
|
"metric.kestrel.connection.duration", "metric.kestrel.tls_handshake.duration",
|
|
# TODO: https://github.com/open-telemetry/semantic-conventions/issues/1519
|
|
"entity.service",
|
|
# TODO: https://github.com/open-telemetry/semantic-conventions/issues/1616
|
|
"metric.dotnet.process.cpu.time",
|
|
}
|
|
not exceptions[group.id]
|
|
|
|
attr := group.attributes[_]
|
|
|
|
attr.stability != "stable"
|
|
attr.requirement_level != "opt_in"
|
|
|
|
name := attr.name
|
|
|
|
description := sprintf("Stable group '%s' references experimental attribute with requirement level '%s', only 'opt_in' level is allowed", [group.id, name])
|
|
}
|
|
|
|
group_stability_violation(description, group, attr) = violation if {
|
|
violation := {
|
|
"id": description,
|
|
"type": "semconv_attribute",
|
|
"category": "group_stability_violation",
|
|
"attr": attr,
|
|
"group": group,
|
|
}
|
|
}
|