diff --git a/lib/towerops/proto/agent.pb.ex b/lib/towerops/proto/agent.pb.ex index 5fa95be0..39c43ab2 100644 --- a/lib/towerops/proto/agent.pb.ex +++ b/lib/towerops/proto/agent.pb.ex @@ -26,6 +26,8 @@ defmodule Towerops.Agent.Device do field :poll_interval_seconds, 5, type: :uint32, json_name: "pollIntervalSeconds" field :sensors, 6, repeated: true, type: Towerops.Agent.Sensor field :interfaces, 7, repeated: true, type: Towerops.Agent.Interface + field :monitoring_enabled, 8, type: :bool, json_name: "monitoringEnabled" + field :check_interval_seconds, 9, type: :uint32, json_name: "checkIntervalSeconds" end defmodule Towerops.Agent.SnmpConfig do @@ -119,6 +121,11 @@ defmodule Towerops.Agent.Metric do type: Towerops.Agent.NeighborDiscovery, json_name: "neighborDiscovery", oneof: 0 + + field :monitoring_check, 4, + type: Towerops.Agent.MonitoringCheck, + json_name: "monitoringCheck", + oneof: 0 end defmodule Towerops.Agent.SensorReading do @@ -174,6 +181,20 @@ defmodule Towerops.Agent.NeighborDiscovery do field :timestamp, 11, type: :int64 end +defmodule Towerops.Agent.MonitoringCheck do + @moduledoc false + + use Protobuf, + full_name: "towerops.agent.MonitoringCheck", + protoc_gen_elixir_version: "0.16.0", + syntax: :proto3 + + field :device_id, 1, type: :string, json_name: "deviceId" + field :status, 2, type: :string + field :response_time_ms, 3, type: :double, json_name: "responseTimeMs" + field :timestamp, 4, type: :int64 +end + defmodule Towerops.Agent.HeartbeatMetadata do @moduledoc false @@ -262,6 +283,8 @@ defmodule Towerops.Agent.SnmpDevice do field :community, 2, type: :string field :version, 3, type: :string field :port, 4, type: :uint32 + field :monitoring_enabled, 5, type: :bool, json_name: "monitoringEnabled" + field :check_interval_seconds, 6, type: :uint32, json_name: "checkIntervalSeconds" end defmodule Towerops.Agent.SnmpQuery do diff --git a/priv/proto/agent.proto b/priv/proto/agent.proto index c21d89ba..aef4107c 100644 --- a/priv/proto/agent.proto +++ b/priv/proto/agent.proto @@ -17,6 +17,8 @@ message Device { uint32 poll_interval_seconds = 5; repeated Sensor sensors = 6; repeated Interface interfaces = 7; + bool monitoring_enabled = 8; + uint32 check_interval_seconds = 9; } message SnmpConfig { @@ -51,6 +53,7 @@ message Metric { SensorReading sensor_reading = 1; InterfaceStat interface_stat = 2; NeighborDiscovery neighbor_discovery = 3; + MonitoringCheck monitoring_check = 4; } } @@ -86,6 +89,13 @@ message NeighborDiscovery { int64 timestamp = 11; // Unix timestamp in seconds } +message MonitoringCheck { + string device_id = 1; + string status = 2; // "success" or "failure" + double response_time_ms = 3; // Optional - only present on success + int64 timestamp = 4; // Unix timestamp in seconds +} + // Heartbeat metadata message HeartbeatMetadata { string version = 1; @@ -126,6 +136,8 @@ message SnmpDevice { string community = 2; string version = 3; // "1", "2c", or "3" uint32 port = 4; + bool monitoring_enabled = 5; + uint32 check_interval_seconds = 6; } message SnmpQuery {