|
@@ -1,62 +0,0 @@
|
|
|
-package daemon
|
|
|
-
|
|
|
-import (
|
|
|
- "fmt"
|
|
|
- "os"
|
|
|
- "path/filepath"
|
|
|
- "strings"
|
|
|
- "time"
|
|
|
-
|
|
|
- "github.com/davecgh/go-spew/spew"
|
|
|
- "github.com/pkg/errors"
|
|
|
-)
|
|
|
-
|
|
|
-const dataStructuresLogNameTemplate = "daemon-data-%s.log"
|
|
|
-
|
|
|
-// dumpDaemon appends the daemon datastructures into file in dir and returns full path
|
|
|
-// to that file.
|
|
|
-func (d *Daemon) dumpDaemon(dir string) (string, error) {
|
|
|
- // Ensure we recover from a panic as we are doing this without any locking
|
|
|
- defer func() {
|
|
|
- recover()
|
|
|
- }()
|
|
|
-
|
|
|
- path := filepath.Join(dir, fmt.Sprintf(dataStructuresLogNameTemplate, strings.Replace(time.Now().Format(time.RFC3339), ":", "", -1)))
|
|
|
- f, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY, 0666)
|
|
|
- if err != nil {
|
|
|
- return "", errors.Wrap(err, "failed to open file to write the daemon datastructure dump")
|
|
|
- }
|
|
|
- defer f.Close()
|
|
|
-
|
|
|
- dump := struct {
|
|
|
- containers interface{}
|
|
|
- names interface{}
|
|
|
- links interface{}
|
|
|
- execs interface{}
|
|
|
- volumes interface{}
|
|
|
- images interface{}
|
|
|
- layers interface{}
|
|
|
- imageReferences interface{}
|
|
|
- downloads interface{}
|
|
|
- uploads interface{}
|
|
|
- registry interface{}
|
|
|
- plugins interface{}
|
|
|
- }{
|
|
|
- containers: d.containers,
|
|
|
- execs: d.execCommands,
|
|
|
- volumes: d.volumes,
|
|
|
- images: d.imageStore,
|
|
|
- layers: d.layerStore,
|
|
|
- imageReferences: d.referenceStore,
|
|
|
- downloads: d.downloadManager,
|
|
|
- uploads: d.uploadManager,
|
|
|
- registry: d.RegistryService,
|
|
|
- plugins: d.PluginStore,
|
|
|
- names: d.nameIndex,
|
|
|
- links: d.linkIndex,
|
|
|
- }
|
|
|
-
|
|
|
- spew.Fdump(f, dump) // Does not return an error
|
|
|
- f.Sync()
|
|
|
- return path, nil
|
|
|
-}
|