Require collected data for report generation

This commit is contained in:
2026-06-17 15:50:04 +00:00
parent 0ef6cd567e
commit f15315f1b9
2 changed files with 179 additions and 85 deletions

View File

@@ -87,7 +87,7 @@ type ReportRequest struct {
Config config.Config
Resolved report.Resolved
OutputPath string
Collector Collector
Collection collect.Result
Renderer Renderer
Store state.Store
Notifier Notifier
@@ -228,6 +228,10 @@ func Generate(ctx context.Context, req GenerateRequest) error {
if now.IsZero() {
now = time.Now()
}
collection, err := collectWeather(ctx, req.Config, req.Collector)
if err != nil {
return err
}
resolved, err := ResolveGenerate(req, now)
if err != nil {
return err
@@ -237,7 +241,7 @@ func Generate(ctx context.Context, req GenerateRequest) error {
Config: req.Config,
Resolved: resolved,
OutputPath: req.OutputPath,
Collector: req.Collector,
Collection: *collection,
Notifier: req.Notifier,
})
return err
@@ -289,12 +293,20 @@ func RunBatchDetailed(ctx context.Context, req BatchRequest) (*BatchResult, erro
item.ReportPath = paths.RenderedReport
item.MetadataPath = paths.Metadata
}
collection, err := collectWeather(ctx, req.Config, req.Collector)
if err != nil {
item.Status = "failed"
item.Error = err.Error()
result.Failed++
result.Reports = append(result.Reports, item)
continue
}
outputPath := batchOutputPath(req.OutputDir, resolved.Definition)
reportResult, err := GenerateReport(ctx, ReportRequest{
Config: req.Config,
Resolved: resolved,
OutputPath: outputPath,
Collector: req.Collector,
Collection: *collection,
Renderer: req.Renderer,
Store: store,
Notifier: req.Notifier,
@@ -409,10 +421,14 @@ func reportRegistry(cfg config.Config) (report.Registry, error) {
}
func FetchBundle(ctx context.Context, req FetchBundleRequest) (*weatherdata.Bundle, error) {
return collectBundle(ctx, req.Config, nil)
result, err := collectWeather(ctx, req.Config, nil)
if err != nil {
return nil, err
}
return result.Bundle, nil
}
func collectBundle(ctx context.Context, cfg config.Config, collector Collector) (*weatherdata.Bundle, error) {
func collectWeather(ctx context.Context, cfg config.Config, collector Collector) (*collect.Result, error) {
if collector == nil {
collector = defaultCollector{}
}
@@ -426,7 +442,7 @@ func collectBundle(ctx context.Context, cfg config.Config, collector Collector)
if result.Bundle == nil {
return nil, fmt.Errorf("collect weather bundle: collector returned nil bundle")
}
return result.Bundle, nil
return result, nil
}
func FetchAndSaveBundle(ctx context.Context, req FetchBundleRequest) (*weatherdata.Bundle, error) {
@@ -444,6 +460,11 @@ func FetchAndSaveBundle(ctx context.Context, req FetchBundleRequest) (*weatherda
}
func GenerateReport(ctx context.Context, req ReportRequest) (*ReportResult, error) {
bundle := req.Collection.Bundle
if bundle == nil {
return nil, fmt.Errorf("collected weather bundle is required")
}
store := req.Store
if store == nil {
defaultStore, err := defaultStore(req.Config)
@@ -461,10 +482,6 @@ func GenerateReport(ctx context.Context, req ReportRequest) (*ReportResult, erro
return nil, err
}
bundle, err := collectBundle(ctx, req.Config, req.Collector)
if err != nil {
return nil, err
}
reportFacts, err := BuildReportFacts(ModuleSnapshotRequest{
Config: req.Config,
Resolved: req.Resolved,