semantic-conventions/policies/group_stability.rego

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,
}
}