diff --git a/internal/grpc/client.go b/internal/grpc/client.go index f5e4746..9f07404 100644 --- a/internal/grpc/client.go +++ b/internal/grpc/client.go @@ -133,6 +133,23 @@ func (c *Client) ReportInventory(report *pb.InventoryReport) error { return err } +func (c *Client) SyncMonitors(serverID, agentToken string) ([]pb.MonitorSpec, error) { + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + resp, err := c.client.SyncMonitors(ctx, &pb.SyncMonitorsRequest{ServerId: serverID, AgentToken: agentToken}) + if err != nil { + return nil, err + } + return resp.Monitors, nil +} + +func (c *Client) ReportChecks(serverID, agentToken string, results []pb.CheckResult) error { + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + _, err := c.client.ReportChecks(ctx, &pb.ReportChecksRequest{ServerId: serverID, AgentToken: agentToken, Results: results}) + return err +} + // CommandStream opens a long-lived bidirectional stream for server-pushed commands. // The caller controls the stream lifetime via ctx. func (c *Client) CommandStream(ctx context.Context) (pb.Vantage_CommandStreamClient, error) { diff --git a/internal/grpc/pb/vantage.pb.go b/internal/grpc/pb/vantage.pb.go index bcbd19b..723b59e 100644 --- a/internal/grpc/pb/vantage.pb.go +++ b/internal/grpc/pb/vantage.pb.go @@ -92,6 +92,42 @@ type InventoryReport struct { } type InventoryReportResponse struct{} +// Monitor sync / check report message types + +type MonitorSpec struct { + MonitorId string `json:"monitor_id"` + Type string `json:"type"` + URL string `json:"url,omitempty"` + Host string `json:"host,omitempty"` + Port int `json:"port,omitempty"` + Method string `json:"method,omitempty"` + ExpectedStatus int `json:"expected_status,omitempty"` + Keyword string `json:"keyword,omitempty"` + TLSWarnDays int `json:"tls_warn_days,omitempty"` + IntervalSec int `json:"interval_sec"` + Retries int `json:"retries"` +} +type SyncMonitorsRequest struct { + ServerId string `json:"server_id"` + AgentToken string `json:"agent_token"` +} +type SyncMonitorsResponse struct { + Monitors []MonitorSpec `json:"monitors,omitempty"` +} +type CheckResult struct { + MonitorId string `json:"monitor_id"` + Up bool `json:"up"` + LatencyMs int `json:"latency_ms"` + Message string `json:"message,omitempty"` + CertExpiryUnix int64 `json:"cert_expiry_unix,omitempty"` +} +type ReportChecksRequest struct { + ServerId string `json:"server_id"` + AgentToken string `json:"agent_token"` + Results []CheckResult `json:"results,omitempty"` +} +type ReportChecksResponse struct{} + type ApplyUpdatesCmd struct{} type ServerCommand struct { @@ -223,6 +259,8 @@ type VantageClient interface { UploadGeneratedKey(ctx context.Context, in *UploadKeyRequest, opts ...grpc.CallOption) (*UploadKeyResponse, error) ReportUpdates(ctx context.Context, in *ReportUpdatesRequest, opts ...grpc.CallOption) (*ReportUpdatesResponse, error) ReportInventory(ctx context.Context, in *InventoryReport, opts ...grpc.CallOption) (*InventoryReportResponse, error) + SyncMonitors(ctx context.Context, in *SyncMonitorsRequest, opts ...grpc.CallOption) (*SyncMonitorsResponse, error) + ReportChecks(ctx context.Context, in *ReportChecksRequest, opts ...grpc.CallOption) (*ReportChecksResponse, error) CommandStream(ctx context.Context, opts ...grpc.CallOption) (Vantage_CommandStreamClient, error) } @@ -286,6 +324,22 @@ func (c *keyManagerClient) ReportInventory(ctx context.Context, in *InventoryRep return out, nil } +func (c *keyManagerClient) SyncMonitors(ctx context.Context, in *SyncMonitorsRequest, opts ...grpc.CallOption) (*SyncMonitorsResponse, error) { + out := new(SyncMonitorsResponse) + if err := c.cc.Invoke(ctx, "/vantage.v1.Vantage/SyncMonitors", in, out, opts...); err != nil { + return nil, err + } + return out, nil +} + +func (c *keyManagerClient) ReportChecks(ctx context.Context, in *ReportChecksRequest, opts ...grpc.CallOption) (*ReportChecksResponse, error) { + out := new(ReportChecksResponse) + if err := c.cc.Invoke(ctx, "/vantage.v1.Vantage/ReportChecks", in, out, opts...); err != nil { + return nil, err + } + return out, nil +} + func (c *keyManagerClient) CommandStream(ctx context.Context, opts ...grpc.CallOption) (Vantage_CommandStreamClient, error) { desc := &grpc.StreamDesc{StreamName: "CommandStream", ServerStreams: true, ClientStreams: true} stream, err := c.cc.NewStream(ctx, desc, "/vantage.v1.Vantage/CommandStream", opts...)