mirror of
https://github.com/DeBrosOfficial/orama.git
synced 2026-03-17 16:06:58 +00:00
201 lines
4.8 KiB
Go
201 lines
4.8 KiB
Go
package monitorcmd
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"time"
|
|
|
|
"github.com/DeBrosOfficial/network/pkg/cli/monitor"
|
|
"github.com/DeBrosOfficial/network/pkg/cli/monitor/display"
|
|
"github.com/DeBrosOfficial/network/pkg/cli/monitor/tui"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
// Cmd is the root monitor command.
|
|
var Cmd = &cobra.Command{
|
|
Use: "monitor",
|
|
Short: "Monitor cluster health from your local machine",
|
|
Long: `SSH into cluster nodes and display real-time health data.
|
|
Runs 'orama node report --json' on each node and aggregates results.
|
|
|
|
Without a subcommand, launches the interactive TUI.`,
|
|
RunE: runLive,
|
|
}
|
|
|
|
// Shared persistent flags.
|
|
var (
|
|
flagEnv string
|
|
flagJSON bool
|
|
flagNode string
|
|
flagConfig string
|
|
)
|
|
|
|
func init() {
|
|
Cmd.PersistentFlags().StringVar(&flagEnv, "env", "", "Environment: devnet, testnet, mainnet (required)")
|
|
Cmd.PersistentFlags().BoolVar(&flagJSON, "json", false, "Machine-readable JSON output")
|
|
Cmd.PersistentFlags().StringVar(&flagNode, "node", "", "Filter to specific node host/IP")
|
|
Cmd.PersistentFlags().StringVar(&flagConfig, "config", "scripts/remote-nodes.conf", "Path to remote-nodes.conf")
|
|
Cmd.MarkPersistentFlagRequired("env")
|
|
|
|
Cmd.AddCommand(liveCmd)
|
|
Cmd.AddCommand(clusterCmd)
|
|
Cmd.AddCommand(nodeCmd)
|
|
Cmd.AddCommand(serviceCmd)
|
|
Cmd.AddCommand(meshCmd)
|
|
Cmd.AddCommand(dnsCmd)
|
|
Cmd.AddCommand(namespacesCmd)
|
|
Cmd.AddCommand(alertsCmd)
|
|
Cmd.AddCommand(reportCmd)
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// Subcommands
|
|
// ---------------------------------------------------------------------------
|
|
|
|
var liveCmd = &cobra.Command{
|
|
Use: "live",
|
|
Short: "Interactive TUI monitor",
|
|
RunE: runLive,
|
|
}
|
|
|
|
var clusterCmd = &cobra.Command{
|
|
Use: "cluster",
|
|
Short: "Cluster overview (one-shot)",
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
snap, err := collectSnapshot()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if flagJSON {
|
|
return display.ClusterJSON(snap, os.Stdout)
|
|
}
|
|
return display.ClusterTable(snap, os.Stdout)
|
|
},
|
|
}
|
|
|
|
var nodeCmd = &cobra.Command{
|
|
Use: "node",
|
|
Short: "Per-node health details (one-shot)",
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
snap, err := collectSnapshot()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if flagJSON {
|
|
return display.NodeJSON(snap, os.Stdout)
|
|
}
|
|
return display.NodeTable(snap, os.Stdout)
|
|
},
|
|
}
|
|
|
|
var serviceCmd = &cobra.Command{
|
|
Use: "service",
|
|
Short: "Service status across the cluster (one-shot)",
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
snap, err := collectSnapshot()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if flagJSON {
|
|
return display.ServiceJSON(snap, os.Stdout)
|
|
}
|
|
return display.ServiceTable(snap, os.Stdout)
|
|
},
|
|
}
|
|
|
|
var meshCmd = &cobra.Command{
|
|
Use: "mesh",
|
|
Short: "Mesh connectivity status (one-shot)",
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
snap, err := collectSnapshot()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if flagJSON {
|
|
return display.MeshJSON(snap, os.Stdout)
|
|
}
|
|
return display.MeshTable(snap, os.Stdout)
|
|
},
|
|
}
|
|
|
|
var dnsCmd = &cobra.Command{
|
|
Use: "dns",
|
|
Short: "DNS health overview (one-shot)",
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
snap, err := collectSnapshot()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if flagJSON {
|
|
return display.DNSJSON(snap, os.Stdout)
|
|
}
|
|
return display.DNSTable(snap, os.Stdout)
|
|
},
|
|
}
|
|
|
|
var namespacesCmd = &cobra.Command{
|
|
Use: "namespaces",
|
|
Short: "Namespace usage summary (one-shot)",
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
snap, err := collectSnapshot()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if flagJSON {
|
|
return display.NamespacesJSON(snap, os.Stdout)
|
|
}
|
|
return display.NamespacesTable(snap, os.Stdout)
|
|
},
|
|
}
|
|
|
|
var alertsCmd = &cobra.Command{
|
|
Use: "alerts",
|
|
Short: "Active alerts and warnings (one-shot)",
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
snap, err := collectSnapshot()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if flagJSON {
|
|
return display.AlertsJSON(snap, os.Stdout)
|
|
}
|
|
return display.AlertsTable(snap, os.Stdout)
|
|
},
|
|
}
|
|
|
|
var reportCmd = &cobra.Command{
|
|
Use: "report",
|
|
Short: "Full cluster report (JSON)",
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
snap, err := collectSnapshot()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return display.FullReport(snap, os.Stdout)
|
|
},
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// Helpers
|
|
// ---------------------------------------------------------------------------
|
|
|
|
func collectSnapshot() (*monitor.ClusterSnapshot, error) {
|
|
cfg := newConfig()
|
|
return monitor.CollectOnce(context.Background(), cfg)
|
|
}
|
|
|
|
func newConfig() monitor.CollectorConfig {
|
|
return monitor.CollectorConfig{
|
|
ConfigPath: flagConfig,
|
|
Env: flagEnv,
|
|
NodeFilter: flagNode,
|
|
Timeout: 30 * time.Second,
|
|
}
|
|
}
|
|
|
|
func runLive(cmd *cobra.Command, args []string) error {
|
|
cfg := newConfig()
|
|
return tui.Run(cfg)
|
|
}
|
|
|