blob: 5fcdb259a1e4ba8fa47c4779996a7553dbc54d80 [file] [log] [blame]
Tim Windelschmidt6d33a432025-02-04 14:34:25 +01001// Copyright The Monogon Project Authors.
2// SPDX-License-Identifier: Apache-2.0
3
Serge Bazanskicfbbbdb2023-03-22 17:48:08 +01004package main
5
6import (
7 "fmt"
8 "sort"
9 "strings"
10
Serge Bazanskie0c06172023-09-19 12:28:16 +000011 "source.monogon.dev/go/clitable"
Serge Bazanskicfbbbdb2023-03-22 17:48:08 +010012 apb "source.monogon.dev/metropolis/proto/api"
Serge Bazanskie4a4ce12023-03-22 18:29:54 +010013 cpb "source.monogon.dev/metropolis/proto/common"
Serge Bazanski0ccc85b2023-11-20 12:59:20 +010014 "source.monogon.dev/version"
Serge Bazanskicfbbbdb2023-03-22 17:48:08 +010015)
16
Serge Bazanskie0c06172023-09-19 12:28:16 +000017func nodeEntry(n *apb.Node) clitable.Entry {
Serge Bazanski1f789542024-05-22 14:01:50 +020018 res := clitable.Entry{}
Serge Bazanskicfbbbdb2023-03-22 17:48:08 +010019
Jan Schär39d9c242024-09-24 13:49:55 +020020 res.Add("node id", n.Id)
Serge Bazanskicfbbbdb2023-03-22 17:48:08 +010021 state := n.State.String()
22 state = strings.ReplaceAll(state, "NODE_STATE_", "")
Serge Bazanskie0c06172023-09-19 12:28:16 +000023 res.Add("state", state)
Tim Windelschmidt634a3cf2023-06-14 20:01:33 +020024 address := "unknown"
25 if n.Status != nil && n.Status.ExternalAddress != "" {
26 address = n.Status.ExternalAddress
27 }
Serge Bazanskie0c06172023-09-19 12:28:16 +000028 res.Add("address", address)
Tim Windelschmidta10d0cb2025-01-13 14:44:15 +010029
30 health := n.Health.String()
31 health = strings.ReplaceAll(health, "HEALTH_", "")
32 res.Add("health", health)
Serge Bazanskicfbbbdb2023-03-22 17:48:08 +010033
34 var roles []string
35 if n.Roles.ConsensusMember != nil {
36 roles = append(roles, "ConsensusMember")
37 }
38 if n.Roles.KubernetesController != nil {
39 roles = append(roles, "KubernetesController")
40 }
41 if n.Roles.KubernetesWorker != nil {
42 roles = append(roles, "KubernetesWorker")
43 }
44 sort.Strings(roles)
Serge Bazanskie0c06172023-09-19 12:28:16 +000045 res.Add("roles", strings.Join(roles, ","))
Serge Bazanskicfbbbdb2023-03-22 17:48:08 +010046
Serge Bazanskie4a4ce12023-03-22 18:29:54 +010047 tpm := "unk"
48 switch n.TpmUsage {
Tim Windelschmidta10d0cb2025-01-13 14:44:15 +010049 case cpb.NodeTPMUsage_NODE_TPM_USAGE_PRESENT_AND_USED:
Serge Bazanskie4a4ce12023-03-22 18:29:54 +010050 tpm = "yes"
Tim Windelschmidta10d0cb2025-01-13 14:44:15 +010051 case cpb.NodeTPMUsage_NODE_TPM_USAGE_PRESENT_BUT_UNUSED:
Serge Bazanskie4a4ce12023-03-22 18:29:54 +010052 tpm = "unused"
Tim Windelschmidta10d0cb2025-01-13 14:44:15 +010053 case cpb.NodeTPMUsage_NODE_TPM_USAGE_NOT_PRESENT:
Serge Bazanskie4a4ce12023-03-22 18:29:54 +010054 tpm = "no"
55 }
Serge Bazanskie0c06172023-09-19 12:28:16 +000056 res.Add("tpm", tpm)
Serge Bazanskie4a4ce12023-03-22 18:29:54 +010057
Tim Windelschmidt240faa42024-03-04 20:03:32 +010058 if n.Status != nil && n.Status.Version != nil {
Serge Bazanski0ccc85b2023-11-20 12:59:20 +010059 res.Add("version", version.Semver(n.Status.Version))
60 }
61
Serge Bazanskicfbbbdb2023-03-22 17:48:08 +010062 tshs := n.TimeSinceHeartbeat.GetSeconds()
Serge Bazanskie0c06172023-09-19 12:28:16 +000063 res.Add("heartbeat", fmt.Sprintf("%ds", tshs))
Serge Bazanskicfbbbdb2023-03-22 17:48:08 +010064
Serge Bazanski41113932024-05-22 14:02:17 +020065 if l := n.Labels; l != nil {
66 var labels []string
67 for _, pair := range l.Pairs {
68 labels = append(labels, fmt.Sprintf("%s:%s", pair.Key, pair.Value))
69 }
70 res.Add("labels", strings.Join(labels, ","))
71 }
72
Serge Bazanskicfbbbdb2023-03-22 17:48:08 +010073 return res
74}