63 lines
2.0 KiB
Go
63 lines
2.0 KiB
Go
package app
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
"gitea.maximumdirect.net/eric/weatherreporter/internal/config"
|
|
"gitea.maximumdirect.net/eric/weatherreporter/internal/timeutil"
|
|
)
|
|
|
|
const runIDTimestampLayout = "20060102T150405.000000000Z"
|
|
|
|
type batchNotificationIdentity struct {
|
|
PipelineID string
|
|
BundleID string
|
|
IdempotencyKey string
|
|
}
|
|
|
|
func batchRunID(startedAt time.Time, batch BatchKind) string {
|
|
return startedAt.UTC().Format(runIDTimestampLayout) + "_" + string(batch)
|
|
}
|
|
|
|
func renderBatchNotificationIdentity(cfg config.Config, batch BatchKind, runID string, startedAt time.Time) (batchNotificationIdentity, error) {
|
|
values, err := batchNotificationTemplateValues(cfg, batch, runID, startedAt)
|
|
if err != nil {
|
|
return batchNotificationIdentity{}, err
|
|
}
|
|
|
|
bundleID, err := config.RenderDistributorBatchBundleID(cfg.Notify.Distributor.Batch.BundleIDTemplate, values)
|
|
if err != nil {
|
|
return batchNotificationIdentity{}, err
|
|
}
|
|
values.BundleID = bundleID
|
|
|
|
pipelineID, err := config.RenderDistributorBatchPipelineID(cfg.Notify.Distributor.Batch.PipelineIDTemplate, values)
|
|
if err != nil {
|
|
return batchNotificationIdentity{}, err
|
|
}
|
|
idempotencyKey, err := config.RenderDistributorBatchIdempotencyKey(cfg.Notify.Distributor.Batch.IdempotencyKeyTemplate, values)
|
|
if err != nil {
|
|
return batchNotificationIdentity{}, err
|
|
}
|
|
|
|
return batchNotificationIdentity{
|
|
PipelineID: pipelineID,
|
|
BundleID: bundleID,
|
|
IdempotencyKey: idempotencyKey,
|
|
}, nil
|
|
}
|
|
|
|
func batchNotificationTemplateValues(cfg config.Config, batch BatchKind, runID string, startedAt time.Time) (config.DistributorBatchTemplateValues, error) {
|
|
location, err := timeutil.LoadLocation(cfg.WeatherAPI.Timezone)
|
|
if err != nil {
|
|
return config.DistributorBatchTemplateValues{}, fmt.Errorf("load batch notification timezone: %w", err)
|
|
}
|
|
return config.DistributorBatchTemplateValues{
|
|
LocationID: cfg.Location.ID,
|
|
Batch: string(batch),
|
|
BatchRunID: runID,
|
|
BatchStartedDate: startedAt.In(location).Format(timeutil.DateLayout),
|
|
}, nil
|
|
}
|