semantic-conventions/policies/deprecation.rego

65 lines
2.0 KiB
Plaintext

package after_resolution
import rego.v1
registry_attribute_names := {attr.name |
some g in input.groups
some attr in g.attributes
not attr.deprecated
}
registry_metric_names := {group.metric_name |
some group in input.groups
group.type == "metric"
not group.deprecated
}
registry_event_names := {group.name |
some group in input.groups
group.type == "event"
not group.deprecated
}
# attribute.deprecated.renamed_to must be another attribute
deny contains deprecation_violation(description, group.id, "") if {
group := input.groups[_]
attr := group.attributes[_]
attr.deprecated != null
attr.deprecated.renamed_to != null
not attr.deprecated.renamed_to in registry_attribute_names
description := sprintf("Attribute '%s' was renamed to '%s', but the new attribute does not exist or is deprecated.", [attr.name, attr.deprecated.renamed_to])
}
# metric.deprecated.renamed_to must be another metric
deny contains deprecation_violation(description, group.id, "") if {
group := input.groups[_]
group.type == "metric"
group.deprecated != null
group.deprecated.renamed_to != null
not group.deprecated.renamed_to in registry_metric_names
description := sprintf("Metric '%s' was renamed to '%s', but the new metric does not exist or is deprecated.", [group.metric_name, group.deprecated.renamed_to])
}
# event.deprecated.renamed_to must be another event
deny contains deprecation_violation(description, group.id, "") if {
group := input.groups[_]
group.type == "event"
group.deprecated != null
group.deprecated.renamed_to != null
not group.deprecated.renamed_to in registry_event_names
description := sprintf("Event '%s' was renamed to '%s', but the new event does not exist or is deprecated.", [group.name, group.deprecated.renamed_to])
}
deprecation_violation(description, group, attr) = violation if {
violation := {
"id": description,
"type": "semconv_attribute",
"category": "deprecation_violation",
"attr": attr,
"group": group,
}
}