From 78530029efd31c52d2aae61647819fb04419de1b Mon Sep 17 00:00:00 2001 From: Jan Eitzinger Date: Wed, 3 Dec 2025 14:54:48 +0100 Subject: [PATCH] Reformat --- pkg/archive/archive.go | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/pkg/archive/archive.go b/pkg/archive/archive.go index bfcb38a..ca6373f 100644 --- a/pkg/archive/archive.go +++ b/pkg/archive/archive.go @@ -238,6 +238,46 @@ func GetHandle() ArchiveBackend { return ar } +// InitBackend creates and initializes a new archive backend instance +// without affecting the global singleton. This is useful for archive migration +// tools that need to work with multiple archive backends simultaneously. +// +// Parameters: +// - rawConfig: JSON configuration for the archive backend +// +// Returns the initialized backend instance or an error if initialization fails. +// Does not validate the configuration against the schema. +func InitBackend(rawConfig json.RawMessage) (ArchiveBackend, error) { + var cfg struct { + Kind string `json:"kind"` + } + + if err := json.Unmarshal(rawConfig, &cfg); err != nil { + cclog.Warn("Error while unmarshaling raw config json") + return nil, err + } + + var backend ArchiveBackend + switch cfg.Kind { + case "file": + backend = &FsArchive{} + case "s3": + backend = &S3Archive{} + case "sqlite": + backend = &SqliteArchive{} + default: + return nil, fmt.Errorf("ARCHIVE/ARCHIVE > unknown archive backend '%s'", cfg.Kind) + } + + _, err := backend.Init(rawConfig) + if err != nil { + return nil, fmt.Errorf("error while initializing archive backend: %w", err) + } + + return backend, nil +} + + // LoadAveragesFromArchive loads average metric values for a job from the archive. // This is a helper function that extracts average values from job statistics. //