feat: define gRPC proto for agent communication

This commit is contained in:
Claude Agent
2026-03-19 11:31:33 +01:00
parent b2b07a2808
commit 863612e7cb
2 changed files with 118 additions and 9 deletions

View File

@@ -1,19 +1,16 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<Protobuf Include="../../../Protos/nexusrmm/*.proto" GrpcServices="Both" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Google.Protobuf" Version="3.34.0" />
<PackageReference Include="Grpc.Net.Client" Version="2.76.0" />
<PackageReference Include="Grpc.Tools" Version="2.78.0">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Grpc.Tools" Version="2.78.0" PrivateAssets="All" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,112 @@
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);
}