Mandate that all MetricParts have valid default_encoding_ids
The 1.0 FIDL API depends on default encoding ids for deciding how to
encode MetricParts so mandate that all configs specify this value.
Change-Id: Ic835b2cfe0e429c611a7fbf183a4ae58ebede481
diff --git a/config/config_parser/src/config_validator/metrics.go b/config/config_parser/src/config_validator/metrics.go
index 6cc8724..e94e90f 100644
--- a/config/config_parser/src/config_validator/metrics.go
+++ b/config/config_parser/src/config_validator/metrics.go
@@ -20,9 +20,16 @@
var validMetricPartName = regexp.MustCompile("^[a-zA-Z][_a-zA-Z0-9\\- ]+$")
func validateConfiguredMetrics(config *config.CobaltConfig) (err error) {
+ // Set of encodingIds. Used to check that the Metric only refers to valid encodingIds.
+ encodingIds := map[string]bool{}
+
// Set of metric ids. Used to detect duplicates.
metricIds := map[string]bool{}
+ for _, encoding := range config.EncodingConfigs {
+ encodingIds[formatId(encoding.CustomerId, encoding.ProjectId, encoding.Id)] = true
+ }
+
for i, metric := range config.MetricConfigs {
metricKey := formatId(metric.CustomerId, metric.ProjectId, metric.Id)
@@ -31,14 +38,14 @@
}
metricIds[metricKey] = true
- if err = validateMetric(metric); err != nil {
+ if err = validateMetric(metric, encodingIds); err != nil {
return fmt.Errorf("Error validating metric %v (%v, %v, %v): %v", metric.Name, metric.CustomerId, metric.ProjectId, metric.Id, err)
}
}
return nil
}
-func validateMetric(m *config.Metric) (err error) {
+func validateMetric(m *config.Metric, encodingIds map[string]bool) (err error) {
if m.Id == 0 {
return fmt.Errorf("Metric id '0' is invalid.")
}
@@ -74,6 +81,11 @@
if !validMetricPartName.MatchString(name) {
return fmt.Errorf("Metric part name '%v' is invalid. Metric part names must match the regular expression '%v'.", name, validMetricPartName)
}
+
+ encodingId := formatId(m.CustomerId, m.ProjectId, v.DefaultEncodingId)
+ if !encodingIds[encodingId] {
+ return fmt.Errorf("Metric part '%v' is invalid. There is no encoding id %v.", name, encodingId)
+ }
}
return nil
}
diff --git a/third_party/config b/third_party/config
index 2da4f62..c90a6a7 160000
--- a/third_party/config
+++ b/third_party/config
@@ -1 +1 @@
-Subproject commit 2da4f626c4097d1b3cfb818697c9c2f079f03284
+Subproject commit c90a6a7134e162dd8bd6ca629a45f53a436edd69