Skip to content

Commit

Permalink
Merge pull request containers#14383 from jwhonce/wip/info_todo
Browse files Browse the repository at this point in the history
Add Authorization field to Plugins for Info
  • Loading branch information
openshift-merge-robot authored May 27, 2022
2 parents f48bf58 + e13c5f3 commit a550af2
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 44 deletions.
12 changes: 5 additions & 7 deletions libpod/define/info.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ type Info struct {
Version Version `json:"version"`
}

// HostInfo describes the libpod host
// SecurityInfo describes the libpod host
type SecurityInfo struct {
AppArmorEnabled bool `json:"apparmorEnabled"`
DefaultCapabilities string `json:"capabilities"`
Expand Down Expand Up @@ -64,8 +64,7 @@ type RemoteSocket struct {
Exists bool `json:"exists,omitempty"`
}

// SlirpInfo describes the slirp executable that
// is being being used.
// SlirpInfo describes the slirp executable that is being used
type SlirpInfo struct {
Executable string `json:"executable"`
Package string `json:"package"`
Expand All @@ -78,8 +77,7 @@ type IDMappings struct {
UIDMap []idtools.IDMap `json:"uidmap"`
}

// DistributionInfo describes the host distribution
// for libpod
// DistributionInfo describes the host distribution for libpod
type DistributionInfo struct {
Distribution string `json:"distribution"`
Variant string `json:"variant,omitempty"`
Expand Down Expand Up @@ -141,8 +139,8 @@ type Plugins struct {
Volume []string `json:"volume"`
Network []string `json:"network"`
Log []string `json:"log"`
// FIXME what should we do with Authorization, docker seems to return nothing by default
// Authorization []string `json:"authorization"`
// Authorization is provided for compatibility, will always be nil as Podman has no daemon
Authorization []string `json:"authorization"`
}

type CPUUsage struct {
Expand Down
63 changes: 26 additions & 37 deletions libpod/info.go
Original file line number Diff line number Diff line change
Expand Up @@ -199,50 +199,38 @@ func (r *Runtime) hostInfo() (*define.HostInfo, error) {
info.OCIRuntime = ociruntimeInfo
}

up, err := readUptime()
duration, err := procUptime()
if err != nil {
return nil, errors.Wrapf(err, "error reading up time")
}
// Convert uptime in seconds to a human-readable format
upSeconds := up + "s"
upDuration, err := time.ParseDuration(upSeconds)
if err != nil {
return nil, errors.Wrapf(err, "error parsing system uptime")
}

// TODO Isn't there a simple lib for this, something like humantime?
hoursFound := false
var timeBuffer bytes.Buffer
var hoursBuffer bytes.Buffer
for _, elem := range upDuration.String() {
timeBuffer.WriteRune(elem)
if elem == 'h' || elem == 'm' {
timeBuffer.WriteRune(' ')
if elem == 'h' {
hoursFound = true
}
}
if !hoursFound {
hoursBuffer.WriteRune(elem)
}

uptime := struct {
hours float64
minutes float64
seconds float64
}{
hours: duration.Truncate(time.Hour).Hours(),
minutes: duration.Truncate(time.Minute).Minutes(),
seconds: duration.Truncate(time.Second).Seconds(),
}

info.Uptime = timeBuffer.String()
if hoursFound {
hours, err := strconv.ParseFloat(hoursBuffer.String(), 64)
if err == nil {
days := hours / 24
info.Uptime = fmt.Sprintf("%s (Approximately %.2f days)", info.Uptime, days)
}
// Could not find a humanize-formatter for time.Duration
var buffer bytes.Buffer
buffer.WriteString(fmt.Sprintf("%.0fh %.0fm %.2fs",
uptime.hours,
math.Mod(uptime.seconds, 3600)/60,
math.Mod(uptime.seconds, 60),
))
if int64(uptime.hours) > 0 {
buffer.WriteString(fmt.Sprintf(" (Approximately %.2f days)", uptime.hours/24))
}
info.Uptime = buffer.String()

return &info, nil
}

func (r *Runtime) getContainerStoreInfo() (define.ContainerStore, error) {
var (
paused, running, stopped int
)
var paused, running, stopped int
cs := define.ContainerStore{}
cons, err := r.GetAllContainers()
if err != nil {
Expand Down Expand Up @@ -353,16 +341,17 @@ func readKernelVersion() (string, error) {
return string(f[2]), nil
}

func readUptime() (string, error) {
func procUptime() (time.Duration, error) {
var zero time.Duration
buf, err := ioutil.ReadFile("/proc/uptime")
if err != nil {
return "", err
return zero, err
}
f := bytes.Fields(buf)
if len(f) < 1 {
return "", fmt.Errorf("invalid uptime")
return zero, errors.New("unable to parse uptime from /proc/uptime")
}
return string(f[0]), nil
return time.ParseDuration(string(f[0]) + "s")
}

// GetHostDistributionInfo returns a map containing the host's distribution and version
Expand Down

0 comments on commit a550af2

Please sign in to comment.