Add configurable report module composition

This commit is contained in:
2026-06-09 20:51:22 +00:00
parent eefb0681dc
commit 40639309b1
15 changed files with 586 additions and 19 deletions

View File

@@ -84,6 +84,23 @@ func DefaultRegistry() Registry {
return registry
}
func (r Registry) WithModuleOverrides(overrides map[ID][]module.ConfigItem) (Registry, error) {
next := Registry{definitions: map[ID]Definition{}}
for id, definition := range r.definitions {
definition.Modules = append([]module.ConfigItem(nil), definition.Modules...)
next.definitions[id] = definition
}
for id, items := range overrides {
definition, ok := next.definitions[id]
if !ok {
return Registry{}, fmt.Errorf("unknown report %q", id)
}
definition.Modules = cloneModuleItems(items)
next.definitions[id] = definition
}
return next, nil
}
func dailyTodayModules() []module.ConfigItem {
return moduleItems(
module.Metadata,
@@ -154,6 +171,12 @@ func moduleItems(ids ...module.ID) []module.ConfigItem {
return items
}
func cloneModuleItems(items []module.ConfigItem) []module.ConfigItem {
cloned := make([]module.ConfigItem, len(items))
copy(cloned, items)
return cloned
}
func (r Registry) Lookup(id ID) (Definition, error) {
definition, ok := r.definitions[id]
if !ok {