package cmd import ( "fmt" "github.com/spf13/cobra" "github.com/david/knox/internal/db" "github.com/david/knox/internal/watch" ) // NewGossipCmd exposes peer status/diff for the gossip protocol. func NewGossipCmd(kdb *db.KnoxDB) *cobra.Command { cmd := &cobra.Command{ Use: "gossip", Short: "Inspect peer-to-peer observation sync", } cmd.AddCommand( &cobra.Command{ Use: "status", Short: "Show known peers and knowledge vectors", RunE: func(c *cobra.Command, args []string) error { peers, err := kdb.ListPeers() if err != nil { return err } vector, err := kdb.KnowledgeVector() if err != nil { return err } fmt.Printf("node_id: %s\n", kdb.NodeID()) fmt.Printf("peers (static: %d configured):\n", len(watch.PeerAddrs())) for _, p := range peers { fmt.Printf(" %-24s %-28s last=%s vector=%d\n", p.PeerID, p.Addr, p.LastHandshake, p.Cursor) } if len(peers) == 0 { fmt.Println(" (none — set KNOX_PEERS to sync with other nodes)") } fmt.Println("knowledge vector (node_id -> max hcl):") for nid, hcl := range vector { if nid == kdb.NodeID() { continue } fmt.Printf(" %-24s -> %d\n", nid, hcl) } return nil }, }, ) return cmd }