diff --git a/go.mod b/go.mod index df4f2dd..dd91e7d 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/gnacho/netgrip go 1.25.0 require ( - github.com/gnacho/netpulse/agent v1.2.1 + github.com/gnacho/netpulse/agent v1.3.0 gopkg.in/yaml.v3 v3.0.1 ) diff --git a/go.sum b/go.sum index de160da..7fa8b1a 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,7 @@ github.com/gnacho/netpulse/agent v1.2.1 h1:L9LFF0HzAV3XD16Wx1X9ELEOo3LC/NG+sqj7h+P0SqE= github.com/gnacho/netpulse/agent v1.2.1/go.mod h1:jJxa2W2PR3BKIFI/GxnUHC9caOwhYM0wobbsoHitV6I= +github.com/gnacho/netpulse/agent v1.3.0 h1:fi5CGvXGxiflEf1EPhwPEMm89iMICtvPGpIRVSv1u2k= +github.com/gnacho/netpulse/agent v1.3.0/go.mod h1:jJxa2W2PR3BKIFI/GxnUHC9caOwhYM0wobbsoHitV6I= github.com/gonzalop/mq v0.9.10 h1:7uaSKq/m/n0ElV3SJtXQTZnI5HyHtgoNIL/ufsxFU+8= github.com/gonzalop/mq v0.9.10/go.mod h1:chaGtxnueekistsTKhDnLOoNdJPKEI6vadlUBRQS2ok= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= diff --git a/internal/modules/netpulse_agent.go b/internal/modules/netpulse_agent.go index c7992ff..589747b 100644 --- a/internal/modules/netpulse_agent.go +++ b/internal/modules/netpulse_agent.go @@ -511,6 +511,7 @@ func applyNetPulseAgent(p netpulsePaths) { EnvFile: p.env, Version: version, Kind: "netgrip", + SelfMQTT: netPulseSelfMQTT, OnStatus: storeNetPulseStatus, OnUpgrade: netPulseUpgradeTrigger, } @@ -572,6 +573,22 @@ func parseNetPulseScanInterval(v string) time.Duration { return 0 } +// netPulseMQTTEnvPath es la ruta del env MQTT que lee el hook; inyectable en +// tests. +var netPulseMQTTEnvPath = mqttEnvFile + +// netPulseSelfMQTT informa al agente embebido de si el MQTT propio de NetGrip +// está activado (#407): así el servidor sabe que este router se expone solo a +// Home Assistant y no duplica su dispositivo por router. Se lee en caliente en +// cada push, de modo que el toggle se refleja sin reiniciar el agente. +func netPulseSelfMQTT() (bool, string) { + cfg, err := ReadMQTTConfig(netPulseMQTTEnvPath) + if err != nil || !cfg.Enabled { + return false, "" + } + return true, mqttNodeID(cfg) +} + func storeNetPulseStatus(st runtime.Status) { npMu.Lock() npStatus = st diff --git a/internal/modules/netpulse_agent_test.go b/internal/modules/netpulse_agent_test.go index 05a6803..ebdec21 100644 --- a/internal/modules/netpulse_agent_test.go +++ b/internal/modules/netpulse_agent_test.go @@ -483,3 +483,33 @@ func TestRecheckCleansReinstalledStandalone(t *testing.T) { t.Fatal("el env de netgrip debe conservarse") } } + +func TestNetPulseSelfMQTT(t *testing.T) { + dir := t.TempDir() + old := netPulseMQTTEnvPath + defer func() { netPulseMQTTEnvPath = old }() + netPulseMQTTEnvPath = filepath.Join(dir, "mqtt.env") + + // Sin fichero: no se expone. + if en, node := netPulseSelfMQTT(); en || node != "" { + t.Fatalf("sin fichero: got (%v, %q)", en, node) + } + // Desactivado. + if err := os.WriteFile(netPulseMQTTEnvPath, []byte("MQTT_ENABLED=0\nMQTT_HOST=10.0.0.10\n"), 0o600); err != nil { + t.Fatal(err) + } + if en, _ := netPulseSelfMQTT(); en { + t.Fatal("MQTT_ENABLED=0 debe reportar false") + } + // Activado: se reporta enabled y el nodo (hostname por defecto). + if err := os.WriteFile(netPulseMQTTEnvPath, []byte("MQTT_ENABLED=1\nMQTT_HOST=10.0.0.10\n"), 0o600); err != nil { + t.Fatal(err) + } + en, node := netPulseSelfMQTT() + if !en { + t.Fatal("MQTT_ENABLED=1 debe reportar true") + } + if node == "" { + t.Fatal("node vacío con MQTT activado") + } +}