in code/go/internal/validator/semantic/validate_dimensions_present.go [18:48]
func ValidateDimensionsPresent(fsys fspath.FS) specerrors.ValidationErrors {
dimensionPresent := make(map[string]struct{})
errs := validateFields(fsys, func(metadata fieldFileMetadata, f field) specerrors.ValidationErrors {
if f.Dimension {
dimensionPresent[metadata.dataStream] = struct{}{}
}
return nil
})
if len(errs) > 0 {
return errs
}
dataStreams, err := listDataStreams(fsys)
if err != nil {
return specerrors.ValidationErrors{specerrors.NewStructuredError(err, specerrors.UnassignedCode)}
}
for _, dataStream := range dataStreams {
tsEnabled, err := isTimeSeriesModeEnabled(fsys, dataStream)
if err != nil {
return specerrors.ValidationErrors{specerrors.NewStructuredError(err, specerrors.UnassignedCode)}
}
_, hasDimensions := dimensionPresent[dataStream]
if tsEnabled && !hasDimensions {
errs = append(errs, specerrors.NewStructuredErrorf(
`file "%s" is invalid: time series mode enabled but no dimensions configured`,
fsys.Path("data_stream", dataStream, "manifest.yml"),
))
}
}
return errs
}