feat: define gRPC proto for agent communication
This commit is contained in:
@@ -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>
|
||||
|
||||
|
||||
112
Protos/nexusrmm/agent_service.proto
Normal file
112
Protos/nexusrmm/agent_service.proto
Normal 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);
|
||||
}
|
||||
Reference in New Issue
Block a user