@@ -33,6 +33,8 @@ type Metadata struct {
33
33
Attributes map [AttributeName ]Attribute `mapstructure:"attributes"`
34
34
// Metrics that can be emitted by the component.
35
35
Metrics map [MetricName ]Metric `mapstructure:"metrics"`
36
+ // Events that can be emitted by the component.
37
+ Events map [EventName ]Event `mapstructure:"events"`
36
38
// GithubProject is the project where the component README lives in the format of org/repo, defaults to open-telemetry/opentelemetry-collector-contrib
37
39
GithubProject string `mapstructure:"github_project"`
38
40
// ScopeName of the metrics emitted by the component.
@@ -62,9 +64,10 @@ func (md *Metadata) Validate() error {
62
64
errs = errors .Join (errs , err )
63
65
}
64
66
65
- if err := md .validateMetrics (); err != nil {
67
+ if err := md .validateMetricsAndEvents (); err != nil {
66
68
errs = errors .Join (errs , err )
67
69
}
70
+
68
71
return errs
69
72
}
70
73
@@ -105,11 +108,13 @@ func (md *Metadata) validateResourceAttributes() error {
105
108
return errs
106
109
}
107
110
108
- func (md * Metadata ) validateMetrics () error {
111
+ func (md * Metadata ) validateMetricsAndEvents () error {
109
112
var errs error
110
113
usedAttrs := map [AttributeName ]bool {}
111
- errs = errors .Join (errs , validateMetrics (md .Metrics , md .Attributes , usedAttrs ),
114
+ errs = errors .Join (errs ,
115
+ validateMetrics (md .Metrics , md .Attributes , usedAttrs ),
112
116
validateMetrics (md .Telemetry .Metrics , md .Attributes , usedAttrs ),
117
+ validateEvents (md .Events , md .Attributes , usedAttrs ),
113
118
md .validateAttributes (usedAttrs ))
114
119
return errs
115
120
}
@@ -173,6 +178,28 @@ func validateMetrics(metrics map[MetricName]Metric, attributes map[AttributeName
173
178
return errs
174
179
}
175
180
181
+ func validateEvents (events map [EventName ]Event , attributes map [AttributeName ]Attribute , usedAttrs map [AttributeName ]bool ) error {
182
+ var errs error
183
+ for en , e := range events {
184
+ if err := e .validate (); err != nil {
185
+ errs = errors .Join (errs , fmt .Errorf (`event "%v": %w` , en , err ))
186
+ continue
187
+ }
188
+ unknownAttrs := make ([]AttributeName , 0 , len (e .Attributes ))
189
+ for _ , attr := range e .Attributes {
190
+ if _ , ok := attributes [attr ]; ok {
191
+ usedAttrs [attr ] = true
192
+ } else {
193
+ unknownAttrs = append (unknownAttrs , attr )
194
+ }
195
+ }
196
+ if len (unknownAttrs ) > 0 {
197
+ errs = errors .Join (errs , fmt .Errorf (`event "%v" refers to undefined attributes: %v` , en , unknownAttrs ))
198
+ }
199
+ }
200
+ return errs
201
+ }
202
+
176
203
type AttributeName string
177
204
178
205
func (mn AttributeName ) Render () (string , error ) {
0 commit comments