You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
1.9 KiB
73 lines
1.9 KiB
3 years ago
|
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
|
||
|
}
|