From 57becf1048fbdf10e932aadb69fcba17bdc7c979 Mon Sep 17 00:00:00 2001 From: David Newhall II Date: Mon, 12 Aug 2024 09:18:19 -0700 Subject: [PATCH] reset cmd buffer --- pkg/snapshot/snapshot.go | 2 +- pkg/snapshot/synology.go | 12 +++++++++--- pkg/website/hostinfo.go | 2 +- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/pkg/snapshot/snapshot.go b/pkg/snapshot/snapshot.go index ce30d9832..fadbcbbf0 100644 --- a/pkg/snapshot/snapshot.go +++ b/pkg/snapshot/snapshot.go @@ -162,7 +162,7 @@ func (c *Config) getSnapshot(ctx context.Context, snap *Snapshot) ([]error, []er } var err error - if snap.Synology, err = GetSynology(); err != nil && !errors.Is(err, ErrNotSynology) { + if snap.Synology, err = GetSynology(true); err != nil && !errors.Is(err, ErrNotSynology) { errs = append(errs, err) } else if snap.Synology != nil { snap.Synology.SetInfo(snap.System.InfoStat) diff --git a/pkg/snapshot/synology.go b/pkg/snapshot/synology.go index f8c42dada..7960c34cc 100644 --- a/pkg/snapshot/synology.go +++ b/pkg/snapshot/synology.go @@ -35,12 +35,12 @@ type Synology struct { */ // GetSynology checks if the app is running on a Synology, and gets system info. -func GetSynology() (*Synology, error) { //nolint:cyclop +func GetSynology(snapshot bool) (*Synology, error) { //nolint:cyclop if !mnd.IsSynology { return nil, ErrNotSynology } - synoHA, err := getSynoHAStats() + synoHA, err := getSynoHAStats(snapshot) if err != nil { return nil, err } @@ -90,7 +90,11 @@ func GetSynology() (*Synology, error) { //nolint:cyclop // getSynoHAStats uses `sudo synoha` to pull high-availability disk statuses. // This package is not installed on most systems, // this function ends at the LookPath in that case. -func getSynoHAStats() (map[string]string, error) { +func getSynoHAStats(run bool) (map[string]string, error) { + if !run { + return nil, nil //nolint:nilnil + } + synoha, err := exec.LookPath("synoha") if err != nil { // If the tool doesn't exist, bail without an error. @@ -106,6 +110,8 @@ func getSynoHAStats() (map[string]string, error) { cmdout := bytes.Buffer{} // Reuse buffer for every command. for _, arg := range cmds { + cmdout.Reset() + cmd := exec.Command("sudo", synoha, "--"+arg) cmd.Stderr = io.Discard // Do not care about error output. cmd.Stdout = &cmdout // Use buffer for command output. diff --git a/pkg/website/hostinfo.go b/pkg/website/hostinfo.go index b645c9801..9d9da41dc 100644 --- a/pkg/website/hostinfo.go +++ b/pkg/website/hostinfo.go @@ -44,7 +44,7 @@ func (s *Server) GetHostInfo(ctx context.Context) (*host.InfoStat, error) { //no return nil, fmt.Errorf("getting host info: %w", err) } - syn, err := snapshot.GetSynology() + syn, err := snapshot.GetSynology(false) // false makes it not do snapshot data, just get syno info. if err == nil { // This method writes synology data into hostInfo. syn.SetInfo(hostInfo)