package main
import (
"context"
"log/slog"
"github.com/tilebox/tilebox-go/observability"
"github.com/tilebox/tilebox-go/observability/logger"
"github.com/tilebox/tilebox-go/observability/tracer"
"github.com/tilebox/tilebox-go/workflows/v1"
"go.opentelemetry.io/otel"
)
type ProcessScene struct{}
func (t *ProcessScene) Execute(ctx context.Context) error {
slog.InfoContext(ctx, "processing scene")
return nil
}
func main() {
ctx := context.Background()
service := &observability.Service{Name: "sentinel-2-runner"}
apiKey := "<axiom-api-key>"
traceProvider, shutdownTracer, err := tracer.NewAxiomProvider(ctx, service, "workflow-traces", apiKey)
if err != nil {
slog.ErrorContext(ctx, "failed to configure Axiom tracing", slog.Any("error", err))
return
}
defer shutdownTracer(ctx)
otel.SetTracerProvider(traceProvider)
logHandler, shutdownLogger, err := logger.NewAxiomHandler(ctx, service, "workflow-logs", apiKey,
logger.WithLevel(slog.LevelInfo),
)
if err != nil {
slog.ErrorContext(ctx, "failed to configure Axiom logging", slog.Any("error", err))
return
}
defer shutdownLogger(ctx)
slog.SetDefault(logger.New(logHandler))
client := workflows.NewClient()
runner, err := client.NewTaskRunner(ctx)
if err != nil {
slog.ErrorContext(ctx, "failed to create runner", slog.Any("error", err))
return
}
if err := runner.RegisterTasks(&ProcessScene{}); err != nil {
slog.ErrorContext(ctx, "failed to register tasks", slog.Any("error", err))
return
}
runner.Run(ctx)
}