blob: 4af9f2c5c4d014bd38b951425aa36926091ca639 [file] [log] [blame]
Serge Bazanskicfbbbdb2023-03-22 17:48:08 +01001package main
2
3import (
4 "fmt"
5 "sort"
6 "strings"
7
Serge Bazanskie0c06172023-09-19 12:28:16 +00008 "source.monogon.dev/go/clitable"
Serge Bazanskicfbbbdb2023-03-22 17:48:08 +01009 "source.monogon.dev/metropolis/node/core/identity"
10 apb "source.monogon.dev/metropolis/proto/api"
Serge Bazanskie4a4ce12023-03-22 18:29:54 +010011 cpb "source.monogon.dev/metropolis/proto/common"
Serge Bazanski0ccc85b2023-11-20 12:59:20 +010012 "source.monogon.dev/version"
Serge Bazanskicfbbbdb2023-03-22 17:48:08 +010013)
14
Serge Bazanskie0c06172023-09-19 12:28:16 +000015func nodeEntry(n *apb.Node) clitable.Entry {
16 res := clitable.Entry{}
Serge Bazanskicfbbbdb2023-03-22 17:48:08 +010017
Serge Bazanskie0c06172023-09-19 12:28:16 +000018 res.Add("node id", identity.NodeID(n.Pubkey))
Serge Bazanskicfbbbdb2023-03-22 17:48:08 +010019 state := n.State.String()
20 state = strings.ReplaceAll(state, "NODE_STATE_", "")
Serge Bazanskie0c06172023-09-19 12:28:16 +000021 res.Add("state", state)
Tim Windelschmidt634a3cf2023-06-14 20:01:33 +020022 address := "unknown"
23 if n.Status != nil && n.Status.ExternalAddress != "" {
24 address = n.Status.ExternalAddress
25 }
Serge Bazanskie0c06172023-09-19 12:28:16 +000026 res.Add("address", address)
27 res.Add("health", n.Health.String())
Serge Bazanskicfbbbdb2023-03-22 17:48:08 +010028
29 var roles []string
30 if n.Roles.ConsensusMember != nil {
31 roles = append(roles, "ConsensusMember")
32 }
33 if n.Roles.KubernetesController != nil {
34 roles = append(roles, "KubernetesController")
35 }
36 if n.Roles.KubernetesWorker != nil {
37 roles = append(roles, "KubernetesWorker")
38 }
39 sort.Strings(roles)
Serge Bazanskie0c06172023-09-19 12:28:16 +000040 res.Add("roles", strings.Join(roles, ","))
Serge Bazanskicfbbbdb2023-03-22 17:48:08 +010041
Serge Bazanskie4a4ce12023-03-22 18:29:54 +010042 tpm := "unk"
43 switch n.TpmUsage {
44 case cpb.NodeTPMUsage_NODE_TPM_PRESENT_AND_USED:
45 tpm = "yes"
46 case cpb.NodeTPMUsage_NODE_TPM_PRESENT_BUT_UNUSED:
47 tpm = "unused"
48 case cpb.NodeTPMUsage_NODE_TPM_NOT_PRESENT:
49 tpm = "no"
50 }
Serge Bazanskie0c06172023-09-19 12:28:16 +000051 res.Add("tpm", tpm)
Serge Bazanskie4a4ce12023-03-22 18:29:54 +010052
Tim Windelschmidt240faa42024-03-04 20:03:32 +010053 if n.Status != nil && n.Status.Version != nil {
Serge Bazanski0ccc85b2023-11-20 12:59:20 +010054 res.Add("version", version.Semver(n.Status.Version))
55 }
56
Serge Bazanskicfbbbdb2023-03-22 17:48:08 +010057 tshs := n.TimeSinceHeartbeat.GetSeconds()
Serge Bazanskie0c06172023-09-19 12:28:16 +000058 res.Add("heartbeat", fmt.Sprintf("%ds", tshs))
Serge Bazanskicfbbbdb2023-03-22 17:48:08 +010059
60 return res
61}