mirror of
https://github.com/cupcakearmy/autorestic.git
synced 2024-11-10 15:44:13 +01:00
73 lines
1.9 KiB
Go
73 lines
1.9 KiB
Go
package metadata
|
|
|
|
import (
|
|
"strings"
|
|
)
|
|
|
|
type BackupLogMetadataChangeset struct {
|
|
Added string
|
|
Changed string
|
|
Unmodified string
|
|
}
|
|
type BackupLogMetadataProcessed struct {
|
|
Files string
|
|
Size string
|
|
Duration string
|
|
}
|
|
type BackupLogMetadata struct {
|
|
ParentSnapshotID string
|
|
Files BackupLogMetadataChangeset
|
|
Dirs BackupLogMetadataChangeset
|
|
AddedSize string
|
|
Processed BackupLogMetadataProcessed
|
|
SnapshotID string
|
|
}
|
|
|
|
type MetadatExtractor interface {
|
|
Matches(line string) bool
|
|
Extract(metadata *BackupLogMetadata, line string)
|
|
}
|
|
|
|
var extractors = []MetadatExtractor{
|
|
NewParentSnapshotIDExtractor(),
|
|
NewFilesExtractor(),
|
|
NewDirsExtractor(),
|
|
NewAddedExtractor(),
|
|
NewProcessedExtractor(),
|
|
NewSnapshotExtractor(),
|
|
}
|
|
|
|
func ExtractMetadataFromBackupLog(log string) BackupLogMetadata {
|
|
var md BackupLogMetadata
|
|
for _, line := range strings.Split(log, "\n") {
|
|
line = strings.TrimSpace(line)
|
|
for _, extractor := range extractors {
|
|
if extractor.Matches(line) {
|
|
extractor.Extract(&md, line)
|
|
continue
|
|
}
|
|
}
|
|
}
|
|
return md
|
|
}
|
|
|
|
func MakeEnvFromMetadata(metadata *BackupLogMetadata) map[string]string {
|
|
env := make(map[string]string)
|
|
var prefix = "AUTORESTIC_"
|
|
|
|
env[prefix+"SNAPSHOT_ID"] = metadata.SnapshotID
|
|
env[prefix+"PARENT_SNAPSHOT_ID"] = metadata.ParentSnapshotID
|
|
env[prefix+"FILES_ADDED"] = metadata.Files.Added
|
|
env[prefix+"FILES_CHANGED"] = metadata.Files.Changed
|
|
env[prefix+"FILES_UNMODIFIED"] = metadata.Files.Unmodified
|
|
env[prefix+"DIRS_ADDED"] = metadata.Dirs.Added
|
|
env[prefix+"DIRS_CHANGED"] = metadata.Dirs.Changed
|
|
env[prefix+"DIRS_UNMODIFIED"] = metadata.Dirs.Unmodified
|
|
env[prefix+"ADDED_SIZE"] = metadata.AddedSize
|
|
env[prefix+"PROCESSED_FILES"] = metadata.Processed.Files
|
|
env[prefix+"PROCESSED_SIZE"] = metadata.Processed.Size
|
|
env[prefix+"PROCESSED_DURATION"] = metadata.Processed.Duration
|
|
|
|
return env
|
|
}
|