Add app collection seam

This commit is contained in:
2026-06-17 15:46:01 +00:00
parent b308ff4d6b
commit 0ef6cd567e
2 changed files with 133 additions and 2 deletions

View File

@@ -53,6 +53,7 @@ type GenerateRequest struct {
Date time.Time
StormStart time.Time
StormEnd time.Time
Collector Collector
Notifier Notifier
}
@@ -61,6 +62,7 @@ type BatchRequest struct {
Batch BatchKind
Now time.Time
OutputDir string
Collector Collector
Renderer Renderer
Store state.Store
Notifier Notifier
@@ -85,6 +87,7 @@ type ReportRequest struct {
Config config.Config
Resolved report.Resolved
OutputPath string
Collector Collector
Renderer Renderer
Store state.Store
Notifier Notifier
@@ -161,6 +164,16 @@ type Renderer interface {
StructuredRun(context.Context, scriptorium.StructuredRunRequest) (*scriptorium.StructuredRunResult, error)
}
type Collector interface {
Run(context.Context, collect.Request) (*collect.Result, error)
}
type defaultCollector struct{}
func (defaultCollector) Run(ctx context.Context, req collect.Request) (*collect.Result, error) {
return collect.Run(ctx, req)
}
type Notifier interface {
Notify(context.Context, NotificationRequest) (*NotificationResult, error)
}
@@ -224,6 +237,7 @@ func Generate(ctx context.Context, req GenerateRequest) error {
Config: req.Config,
Resolved: resolved,
OutputPath: req.OutputPath,
Collector: req.Collector,
Notifier: req.Notifier,
})
return err
@@ -280,6 +294,7 @@ func RunBatchDetailed(ctx context.Context, req BatchRequest) (*BatchResult, erro
Config: req.Config,
Resolved: resolved,
OutputPath: outputPath,
Collector: req.Collector,
Renderer: req.Renderer,
Store: store,
Notifier: req.Notifier,
@@ -394,10 +409,23 @@ func reportRegistry(cfg config.Config) (report.Registry, error) {
}
func FetchBundle(ctx context.Context, req FetchBundleRequest) (*weatherdata.Bundle, error) {
result, err := collect.Run(ctx, collect.Request{Config: req.Config})
return collectBundle(ctx, req.Config, nil)
}
func collectBundle(ctx context.Context, cfg config.Config, collector Collector) (*weatherdata.Bundle, error) {
if collector == nil {
collector = defaultCollector{}
}
result, err := collector.Run(ctx, collect.Request{Config: cfg})
if err != nil {
return nil, err
}
if result == nil {
return nil, fmt.Errorf("collect weather bundle: collector returned nil result")
}
if result.Bundle == nil {
return nil, fmt.Errorf("collect weather bundle: collector returned nil bundle")
}
return result.Bundle, nil
}
@@ -433,7 +461,7 @@ func GenerateReport(ctx context.Context, req ReportRequest) (*ReportResult, erro
return nil, err
}
bundle, err := FetchBundle(ctx, FetchBundleRequest{Config: req.Config})
bundle, err := collectBundle(ctx, req.Config, req.Collector)
if err != nil {
return nil, err
}