blob: 0ef23d80a8678f8dd30010897bae07a4e8610586 [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 apb "source.monogon.dev/metropolis/proto/api"
Serge Bazanskie4a4ce12023-03-22 18:29:54 +010010 cpb "source.monogon.dev/metropolis/proto/common"
Serge Bazanski0ccc85b2023-11-20 12:59:20 +010011 "source.monogon.dev/version"
Serge Bazanskicfbbbdb2023-03-22 17:48:08 +010012)
13
Serge Bazanskie0c06172023-09-19 12:28:16 +000014func nodeEntry(n *apb.Node) clitable.Entry {
Serge Bazanski1f789542024-05-22 14:01:50 +020015 res := clitable.Entry{}
Serge Bazanskicfbbbdb2023-03-22 17:48:08 +010016
Jan Schär39d9c242024-09-24 13:49:55 +020017 res.Add("node id", n.Id)
Serge Bazanskicfbbbdb2023-03-22 17:48:08 +010018 state := n.State.String()
19 state = strings.ReplaceAll(state, "NODE_STATE_", "")
Serge Bazanskie0c06172023-09-19 12:28:16 +000020 res.Add("state", state)
Tim Windelschmidt634a3cf2023-06-14 20:01:33 +020021 address := "unknown"
22 if n.Status != nil && n.Status.ExternalAddress != "" {
23 address = n.Status.ExternalAddress
24 }
Serge Bazanskie0c06172023-09-19 12:28:16 +000025 res.Add("address", address)
Tim Windelschmidta10d0cb2025-01-13 14:44:15 +010026
27 health := n.Health.String()
28 health = strings.ReplaceAll(health, "HEALTH_", "")
29 res.Add("health", health)
Serge Bazanskicfbbbdb2023-03-22 17:48:08 +010030
31 var roles []string
32 if n.Roles.ConsensusMember != nil {
33 roles = append(roles, "ConsensusMember")
34 }
35 if n.Roles.KubernetesController != nil {
36 roles = append(roles, "KubernetesController")
37 }
38 if n.Roles.KubernetesWorker != nil {
39 roles = append(roles, "KubernetesWorker")
40 }
41 sort.Strings(roles)
Serge Bazanskie0c06172023-09-19 12:28:16 +000042 res.Add("roles", strings.Join(roles, ","))
Serge Bazanskicfbbbdb2023-03-22 17:48:08 +010043
Serge Bazanskie4a4ce12023-03-22 18:29:54 +010044 tpm := "unk"
45 switch n.TpmUsage {
Tim Windelschmidta10d0cb2025-01-13 14:44:15 +010046 case cpb.NodeTPMUsage_NODE_TPM_USAGE_PRESENT_AND_USED:
Serge Bazanskie4a4ce12023-03-22 18:29:54 +010047 tpm = "yes"
Tim Windelschmidta10d0cb2025-01-13 14:44:15 +010048 case cpb.NodeTPMUsage_NODE_TPM_USAGE_PRESENT_BUT_UNUSED:
Serge Bazanskie4a4ce12023-03-22 18:29:54 +010049 tpm = "unused"
Tim Windelschmidta10d0cb2025-01-13 14:44:15 +010050 case cpb.NodeTPMUsage_NODE_TPM_USAGE_NOT_PRESENT:
Serge Bazanskie4a4ce12023-03-22 18:29:54 +010051 tpm = "no"
52 }
Serge Bazanskie0c06172023-09-19 12:28:16 +000053 res.Add("tpm", tpm)
Serge Bazanskie4a4ce12023-03-22 18:29:54 +010054
Tim Windelschmidt240faa42024-03-04 20:03:32 +010055 if n.Status != nil && n.Status.Version != nil {
Serge Bazanski0ccc85b2023-11-20 12:59:20 +010056 res.Add("version", version.Semver(n.Status.Version))
57 }
58
Serge Bazanskicfbbbdb2023-03-22 17:48:08 +010059 tshs := n.TimeSinceHeartbeat.GetSeconds()
Serge Bazanskie0c06172023-09-19 12:28:16 +000060 res.Add("heartbeat", fmt.Sprintf("%ds", tshs))
Serge Bazanskicfbbbdb2023-03-22 17:48:08 +010061
Serge Bazanski41113932024-05-22 14:02:17 +020062 if l := n.Labels; l != nil {
63 var labels []string
64 for _, pair := range l.Pairs {
65 labels = append(labels, fmt.Sprintf("%s:%s", pair.Key, pair.Value))
66 }
67 res.Add("labels", strings.Join(labels, ","))
68 }
69
Serge Bazanskicfbbbdb2023-03-22 17:48:08 +010070 return res
71}