agent/clientreport/commandreport.go (45 lines of code) (raw):
package clientreport
import (
"bytes"
"encoding/json"
"fmt"
"strings"
"github.com/aliyun/aliyun_assist_client/agent/util/process"
)
type executionResult struct {
Command string `json:"command"`
Result string `json:"result"`
ExitCode int `json:"exitCode"`
Output string `json:"output"`
ErrorMessage string `json:"errorMessage,omitempty"`
}
// ReportCommandOutput executes specified command and reports its output
func ReportCommandOutput(reportType string, command string, arguments []string) (string, error) {
var mixedOutput bytes.Buffer
exitCode, _, err := process.NewProcessCmd().SyncRun("", command, arguments, &mixedOutput, &mixedOutput, nil, nil, 120)
exitMessage := "Success"
errorMessage := ""
if err != nil {
exitMessage = "Failed"
errorMessage = err.Error()
} else if exitCode == process.Fail {
exitMessage = "Failed"
} else if exitCode == process.Timeout {
exitMessage = "Timeout"
}
result := executionResult{
Command: fmt.Sprintf("%s %s", command, strings.Join(arguments, " ")),
Result: exitMessage,
ExitCode: exitCode,
Output: mixedOutput.String(),
ErrorMessage: errorMessage,
}
resultJSONBytes, err := json.Marshal(result)
if err != nil {
return "", err
}
report := ClientReport{
ReportType: reportType,
Info: string(resultJSONBytes),
}
return SendReport(report)
}