Code to generate manifest entries
Uses random data for most fields.
This commit is contained in:
parent
0e74d15259
commit
e02cbfdb73
@ -3,7 +3,6 @@ package common
|
|||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"math/rand"
|
|
||||||
"runtime"
|
"runtime"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|||||||
177
src/cmd/jsondebug/manifestgen/gen.go
Normal file
177
src/cmd/jsondebug/manifestgen/gen.go
Normal file
@ -0,0 +1,177 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"compress/gzip"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"math/rand"
|
||||||
|
"os"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/pkg/errors"
|
||||||
|
"golang.org/x/exp/maps"
|
||||||
|
|
||||||
|
"github.com/alcionai/corso/src/cmd/jsondebug/common"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
hostName = "host-name"
|
||||||
|
userName = "user-name"
|
||||||
|
)
|
||||||
|
|
||||||
|
func generateManifestEntry() (*common.ManifestEntry, error) {
|
||||||
|
snapMan := generateSnapManifest()
|
||||||
|
|
||||||
|
// Base tag set for all snapshots.
|
||||||
|
tags := map[string]string{
|
||||||
|
"type": "snapshot",
|
||||||
|
"hostname": snapMan.Source.Host,
|
||||||
|
"username": snapMan.Source.UserName,
|
||||||
|
"path": snapMan.Source.Path,
|
||||||
|
}
|
||||||
|
|
||||||
|
maps.Copy(tags, snapMan.Tags)
|
||||||
|
|
||||||
|
serializedSnapMan, err := json.Marshal(snapMan)
|
||||||
|
if err != nil {
|
||||||
|
return nil, errors.Wrap(err, "serializing inner struct")
|
||||||
|
}
|
||||||
|
|
||||||
|
res := &common.ManifestEntry{
|
||||||
|
ID: randStringLen(32),
|
||||||
|
ModTime: time.Now(),
|
||||||
|
Deleted: rand.Uint32()&1 != 0,
|
||||||
|
Labels: tags,
|
||||||
|
Content: serializedSnapMan,
|
||||||
|
}
|
||||||
|
|
||||||
|
return res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func generateSnapManifest() common.SnapManifest {
|
||||||
|
var incomplete string
|
||||||
|
|
||||||
|
// Roughly 1/4 incomplete.
|
||||||
|
if rand.Intn(100) < 25 {
|
||||||
|
incomplete = "checkpoint"
|
||||||
|
}
|
||||||
|
|
||||||
|
path := randString()
|
||||||
|
|
||||||
|
res := common.SnapManifest{
|
||||||
|
Source: common.SourceInfo{
|
||||||
|
Host: hostName,
|
||||||
|
UserName: userName,
|
||||||
|
Path: path,
|
||||||
|
},
|
||||||
|
StartTime: rand.Int63(),
|
||||||
|
EndTime: rand.Int63(),
|
||||||
|
Stats: common.StatsS{
|
||||||
|
TotalFileSize: rand.Int63(),
|
||||||
|
ExcludedTotalFileSize: int64(rand.Uint32()),
|
||||||
|
TotalFileCount: rand.Int31(),
|
||||||
|
CachedFiles: rand.Int31(),
|
||||||
|
NonCachedFiles: rand.Int31(),
|
||||||
|
TotalDirectoryCount: rand.Int31(),
|
||||||
|
ExcludedFileCount: rand.Int31(),
|
||||||
|
ExcludedDirCount: rand.Int31(),
|
||||||
|
IgnoredErrorCount: rand.Int31(),
|
||||||
|
ErrorCount: rand.Int31(),
|
||||||
|
},
|
||||||
|
IncompleteReason: incomplete,
|
||||||
|
RootEntry: &common.DirEntry{
|
||||||
|
Name: path,
|
||||||
|
EntryType: randStringLen(1),
|
||||||
|
Permissions: rand.Intn(512),
|
||||||
|
FileSize: rand.Int63(),
|
||||||
|
ModTime: rand.Int63(),
|
||||||
|
UserID: rand.Int31(),
|
||||||
|
GroupID: rand.Int31(),
|
||||||
|
ObjectID: randStringLen(32),
|
||||||
|
DirSummary: &common.DirectorySummary{
|
||||||
|
TotalFileSize: rand.Int63(),
|
||||||
|
TotalFileCount: rand.Int63(),
|
||||||
|
TotalSymlinkCount: rand.Int63(),
|
||||||
|
TotalDirCount: rand.Int63(),
|
||||||
|
MaxModTime: rand.Int63(),
|
||||||
|
IncompleteReason: incomplete,
|
||||||
|
FatalErrorCount: rand.Int(),
|
||||||
|
IgnoredErrorCount: rand.Int(),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Tags: map[string]string{
|
||||||
|
// User stand-in.
|
||||||
|
"tag:" + randStringLen(40): "0",
|
||||||
|
"tag:backup-id": randStringLen(36),
|
||||||
|
"tag:is-canon-backup": "0",
|
||||||
|
// Service/data type stand-in.
|
||||||
|
"tag:" + randStringLen(20): "0",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
|
var charSet = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789")
|
||||||
|
|
||||||
|
func randString() string {
|
||||||
|
// String lengths between [10, 128] bytes.
|
||||||
|
return randStringLen(rand.Intn(119) + 10)
|
||||||
|
}
|
||||||
|
|
||||||
|
func randStringLen(length int) string {
|
||||||
|
res := make([]rune, length)
|
||||||
|
|
||||||
|
for i := range res {
|
||||||
|
res[i] = charSet[rand.Intn(len(charSet))]
|
||||||
|
}
|
||||||
|
|
||||||
|
return string(res)
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
data := &common.Manifest{
|
||||||
|
Entries: make([]*common.ManifestEntry, 0, common.NumItems),
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := 0; i < common.NumItems; i++ {
|
||||||
|
entry, err := generateManifestEntry()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("Error generating random entry: %v\n", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
data.Entries = append(data.Entries, entry)
|
||||||
|
}
|
||||||
|
|
||||||
|
f, err := os.Create(common.FileName)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("Error making regular output file: %v\n", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
|
enc := json.NewEncoder(f)
|
||||||
|
if err := enc.Encode(data); err != nil {
|
||||||
|
fmt.Printf("Error writing json to regular file: %v\n", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
fgz, err := os.Create(common.FileName + common.GzipSuffix)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("Error making gzip output file: %v\n", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
defer fgz.Close()
|
||||||
|
|
||||||
|
gz := gzip.NewWriter(fgz)
|
||||||
|
defer gz.Close()
|
||||||
|
|
||||||
|
enc = json.NewEncoder(gz)
|
||||||
|
if err := enc.Encode(data); err != nil {
|
||||||
|
fmt.Printf("Error writing json to regular file: %v\n", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user