X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/3979c83819a07b544aa4a0510bbeb58d1c92905a..a74c81b035c67d299e2a7298f8db3d368a578510:/services/crunchstat/crunchstat.go diff --git a/services/crunchstat/crunchstat.go b/services/crunchstat/crunchstat.go index 1a22e264f1..6bce3258d9 100644 --- a/services/crunchstat/crunchstat.go +++ b/services/crunchstat/crunchstat.go @@ -86,11 +86,19 @@ var reportedStatFile = map[string]string{} // cgroup root for the given statgroup. (This will avoid falling back // to host-level stats during container setup and teardown.) func OpenStatFile(cgroup Cgroup, statgroup string, stat string) (*os.File, error) { - var paths = []string{ - fmt.Sprintf("%s/%s/%s/%s/%s", cgroup.root, statgroup, cgroup.parent, cgroup.cid, stat), - fmt.Sprintf("%s/%s/%s/%s", cgroup.root, cgroup.parent, cgroup.cid, stat), - fmt.Sprintf("%s/%s/%s", cgroup.root, statgroup, stat), - fmt.Sprintf("%s/%s", cgroup.root, stat), + var paths []string + if cgroup.cid != "" { + // Collect container's stats + paths = []string{ + fmt.Sprintf("%s/%s/%s/%s/%s", cgroup.root, statgroup, cgroup.parent, cgroup.cid, stat), + fmt.Sprintf("%s/%s/%s/%s", cgroup.root, cgroup.parent, cgroup.cid, stat), + } + } else { + // Collect this host's stats + paths = []string{ + fmt.Sprintf("%s/%s/%s", cgroup.root, statgroup, stat), + fmt.Sprintf("%s/%s", cgroup.root, stat), + } } var path string var file *os.File @@ -110,12 +118,14 @@ func OpenStatFile(cgroup Cgroup, statgroup string, stat string) (*os.File, error // whether we happen to collect stats [a] before any // processes have been created in the container and // [b] after all contained processes have exited. - reportedStatFile[stat] = path if path == "" { - statLog.Printf("error finding stats file: stat %s, statgroup %s, cid %s, parent %s, root %s\n", stat, statgroup, cgroup.cid, cgroup.parent, cgroup.root) + statLog.Printf("notice: stats not available: stat %s, statgroup %s, cid %s, parent %s, root %s\n", stat, statgroup, cgroup.cid, cgroup.parent, cgroup.root) + } else if ok { + statLog.Printf("notice: stats moved from %s to %s\n", reportedStatFile[stat], path) } else { - statLog.Printf("error reading stats from %s\n", path) + statLog.Printf("notice: reading stats from %s\n", path) } + reportedStatFile[stat] = path } return file, err } @@ -132,7 +142,7 @@ func GetContainerNetStats(cgroup Cgroup) (io.Reader, error) { statsFilename := fmt.Sprintf("/proc/%s/net/dev", taskPid) stats, err := ioutil.ReadFile(statsFilename) if err != nil { - statLog.Printf("read %s: %s\n", statsFilename, err) + statLog.Printf("error reading %s: %s\n", statsFilename, err) continue } return strings.NewReader(string(stats)), nil @@ -399,7 +409,7 @@ func run(logger *log.Logger) error { if cmd.Process != nil { cmd.Process.Signal(catch) } - statLog.Println("caught signal:", catch) + statLog.Println("notice: caught signal:", catch) }(sigChan) signal.Notify(sigChan, syscall.SIGTERM) signal.Notify(sigChan, syscall.SIGINT)