syntax = "proto3"; package nexusrmm; option csharp_namespace = "NexusRMM.Protos"; option go_package = "github.com/nexusrmm/agent/pkg/proto"; // --- Agent Enrollment --- message EnrollRequest { string hostname = 1; string os_type = 2; string os_version = 3; string mac_address = 4; string ip_address = 5; string agent_version = 6; } message EnrollResponse { string agent_id = 1; int32 heartbeat_interval = 2; } // --- Heartbeat / Metriken --- message HeartbeatRequest { string agent_id = 1; SystemMetrics metrics = 2; } message SystemMetrics { double cpu_usage_percent = 1; double memory_usage_percent = 2; int64 memory_total_bytes = 3; int64 memory_available_bytes = 4; repeated DiskInfo disks = 5; repeated NetworkInterfaceInfo network_interfaces = 6; double uptime_seconds = 7; } message DiskInfo { string mount_point = 1; int64 total_bytes = 2; int64 free_bytes = 3; string filesystem = 4; } message NetworkInterfaceInfo { string name = 1; string ip_address = 2; string mac_address = 3; int64 bytes_sent = 4; int64 bytes_recv = 5; } message HeartbeatResponse { repeated AgentCommand pending_commands = 1; } // --- Remote Commands --- message AgentCommand { string command_id = 1; CommandType type = 2; string payload = 3; } enum CommandType { COMMAND_TYPE_UNSPECIFIED = 0; COMMAND_TYPE_SHELL = 1; COMMAND_TYPE_INSTALL_SOFTWARE = 2; COMMAND_TYPE_UNINSTALL_SOFTWARE = 3; COMMAND_TYPE_UPDATE_AGENT = 4; COMMAND_TYPE_NETWORK_SCAN = 5; } message CommandResult { string agent_id = 1; string command_id = 2; int32 exit_code = 3; string stdout = 4; string stderr = 5; bool success = 6; } message CommandResultResponse {} // --- Bidirektionaler Stream --- message AgentStreamMessage { string agent_id = 1; oneof payload { HeartbeatRequest heartbeat = 2; CommandResult command_result = 3; } } message ServerStreamMessage { oneof payload { AgentCommand command = 1; ServerConfig config_update = 2; } } message ServerConfig { int32 heartbeat_interval = 1; int32 metric_collection_interval = 2; } // --- Service Definition --- service AgentService { rpc Enroll(EnrollRequest) returns (EnrollResponse); rpc Heartbeat(HeartbeatRequest) returns (HeartbeatResponse); rpc ReportCommandResult(CommandResult) returns (CommandResultResponse); rpc AgentStream(stream AgentStreamMessage) returns (stream ServerStreamMessage); }