blob: 07f994ce53eca995e24524539fc4af0db26e91e8 [file] [log] [blame]
package main
import (
"fmt"
"sort"
"strings"
"source.monogon.dev/go/clitable"
"source.monogon.dev/metropolis/node/core/identity"
apb "source.monogon.dev/metropolis/proto/api"
cpb "source.monogon.dev/metropolis/proto/common"
)
func nodeEntry(n *apb.Node) clitable.Entry {
res := clitable.Entry{}
res.Add("node id", identity.NodeID(n.Pubkey))
state := n.State.String()
state = strings.ReplaceAll(state, "NODE_STATE_", "")
res.Add("state", state)
address := "unknown"
if n.Status != nil && n.Status.ExternalAddress != "" {
address = n.Status.ExternalAddress
}
res.Add("address", address)
res.Add("health", n.Health.String())
var roles []string
if n.Roles.ConsensusMember != nil {
roles = append(roles, "ConsensusMember")
}
if n.Roles.KubernetesController != nil {
roles = append(roles, "KubernetesController")
}
if n.Roles.KubernetesWorker != nil {
roles = append(roles, "KubernetesWorker")
}
sort.Strings(roles)
res.Add("roles", strings.Join(roles, ","))
tpm := "unk"
switch n.TpmUsage {
case cpb.NodeTPMUsage_NODE_TPM_PRESENT_AND_USED:
tpm = "yes"
case cpb.NodeTPMUsage_NODE_TPM_PRESENT_BUT_UNUSED:
tpm = "unused"
case cpb.NodeTPMUsage_NODE_TPM_NOT_PRESENT:
tpm = "no"
}
res.Add("tpm", tpm)
tshs := n.TimeSinceHeartbeat.GetSeconds()
res.Add("heartbeat", fmt.Sprintf("%ds", tshs))
return res
}