// Copyright 2017-2025 WIT.COM Inc. All rights reserved. // Use of this source code is governed by the GPL 3.0 package main import ( "fmt" "time" "go.wit.com/gui" "go.wit.com/lib/gadgets" "go.wit.com/lib/protobuf/zoopb" "go.wit.com/log" ) func makeZoodWin() { me.zood = new(stdTableWin) me.zood.win = gadgets.NewGenericWindow("zood daemon versions", "todo: add global controls here") me.zood.win.Custom = func() { log.Info("test delete window here") } grid := me.zood.win.Group.RawGrid() grid.NewButton("save machines.pb", func() { saveMachineState() }) grid.NewCheckbox("hide active") grid.NewButton("update", func() { doMachinesUpgradeTable() }) // make a box at the bottom of the window for the protobuf table me.zood.box = me.zood.win.Bottom.Box().SetProgName("TBOX") doMachinesUpgradeTable() } func doMachinesUpgradeTable() { me.zood.Lock() defer me.zood.Unlock() if me.zood.TB != nil { me.zood.TB.Delete() me.zood.TB = nil } // display the protobuf me.zood.TB = AddMachinesPB(me.zood.box, me.machines) f := func(m *zoopb.Machine) { log.Info("upgrade machine", m.Hostname, "memory", m.Memory/(1024*1024*1024)) log.Info("ADD THE CODE TO TRIGGER AN UPGRADE HERE") log.Info("ADD THE CODE TO TRIGGER AN UPGRADE HERE") m.Upgrade = true } me.zood.TB.Custom(f) log.Info("table has uuid", me.zood.TB.GetUuid()) } func AddMachinesPB(tbox *gui.Node, pb *zoopb.Machines) *zoopb.MachinesTable { t := pb.NewTable("MachinesPB") t.NewUuid() t.SetParent(tbox) t.AddHostname() t.AddMemory() t.AddCpus() t.AddStringFunc("sMB", func(m *zoopb.Machine) string { return fmt.Sprintf("%d mb", m.Memory/(1024*1024)) }) t.AddStringFunc("zood", func(m *zoopb.Machine) string { return findVersion(m, "zood") }) // show if the machine needs to be upgraded t.AddStringFunc("triggered?", func(m *zoopb.Machine) string { if m.Upgrade { return "yes" } return "" }) t.AddTimeFunc("age", func(m *zoopb.Machine) time.Time { return m.Laststamp.AsTime() }) f := func(m *zoopb.Machine) string { log.Info("machine =", m.Hostname) return m.Hostname } t.AddButtonFunc("upgrade", f) t.ShowTable() return t } func findVersion(m *zoopb.Machine, pkgname string) string { zood := m.Packages.FindByName(pkgname) if zood == nil { return "n/a" } return zood.Version } func saveMachineState() { cur := zoopb.NewMachines() all := me.machines.SortByHostname() for all.Scan() { m := all.Next() log.Info("have machine:", m.Hostname) cur.Append(m) } cur.ConfigSave() }