statusmonitor/dumpsys.go

47 lines
881 B
Go

package main
import (
"errors"
"strconv"
"strings"
)
// ErrInvalidOutput represents parsing error.
var ErrInvalidOutput = errors.New("invalid output")
// DumpSysOutput represents data from 'dumpsys package' command output.
type DumpSysOutput struct {
UID int64
}
// NewDumpSysOutput creates new TopOutput from raw stdout data.
func NewDumpSysOutput(data string) (*DumpSysOutput, error) {
lines := strings.Split(data, "\n")
var uid int64
for i := range lines {
if !strings.Contains(lines[i], "userId") {
continue
}
str := strings.TrimSpace(lines[i])
fields := strings.Split(str, "=")
// should be "userID=XXX" format
if len(fields) != 2 {
return nil, ErrInvalidOutput
}
value, err := strconv.ParseInt(fields[1], 10, 0)
if err != nil {
return nil, ErrInvalidOutput
}
uid = value
break
}
return &DumpSysOutput{
UID: uid,
}, nil
}