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() spew.Fdump(f, d) // Does not return an error f.Sync() return path, nil }