feat: add CVM ID to gRPC metadata and implement log-forwarder stream receiving (#611)
CI / lint (push) Has been cancelled
CI / test (agent) (push) Has been cancelled
CI / test (cli) (push) Has been cancelled
CI / test (cmd) (push) Has been cancelled
CI / test (internal) (push) Has been cancelled
CI / test (manager, true) (push) Has been cancelled
CI / test (pkg) (push) Has been cancelled
CI / upload-coverage (push) Has been cancelled

Signed-off-by: Sammy Oina <sammyoina@gmail.com>
This commit is contained in:
Sammy Kerata Oina
2026-07-14 13:51:01 +03:00
committed by GitHub
parent 13f7e97d82
commit 412472943d
2 changed files with 26 additions and 2 deletions
+9 -1
View File
@@ -39,6 +39,7 @@ import (
runnerclient "github.com/ultravioletrs/cocos/pkg/clients/grpc/runner" runnerclient "github.com/ultravioletrs/cocos/pkg/clients/grpc/runner"
"github.com/ultravioletrs/cocos/pkg/ingress" "github.com/ultravioletrs/cocos/pkg/ingress"
"golang.org/x/sync/errgroup" "golang.org/x/sync/errgroup"
"google.golang.org/grpc/metadata"
) )
const ( const (
@@ -170,6 +171,9 @@ func main() {
} }
// Don't defer close here as we want to keep the connection open // Don't defer close here as we want to keep the connection open
if cfg.CVMId != "" {
ctx = metadata.AppendToOutgoingContext(ctx, "job-id", cfg.CVMId)
}
pc, err := newClient.Process(ctx) pc, err := newClient.Process(ctx)
if err != nil { if err != nil {
grpcClient.Close() grpcClient.Close()
@@ -236,7 +240,11 @@ func main() {
} }
ingressProxy := ingress.NewProxyServer(logger, backendURL, certProvider) ingressProxy := ingress.NewProxyServer(logger, backendURL, certProvider)
pc, err := cvmsClient.Process(ctx) agentCtx := ctx
if cfg.CVMId != "" {
agentCtx = metadata.AppendToOutgoingContext(ctx, "job-id", cfg.CVMId)
}
pc, err := cvmsClient.Process(agentCtx)
if err != nil { if err != nil {
logger.Error(fmt.Sprintf("failed to connect to cvm server: %s", err)) logger.Error(fmt.Sprintf("failed to connect to cvm server: %s", err))
exitCode = 1 exitCode = 1
+17 -1
View File
@@ -20,6 +20,7 @@ import (
cvmsgrpc "github.com/ultravioletrs/cocos/pkg/clients/grpc/cvm" cvmsgrpc "github.com/ultravioletrs/cocos/pkg/clients/grpc/cvm"
"golang.org/x/sync/errgroup" "golang.org/x/sync/errgroup"
"google.golang.org/grpc" "google.golang.org/grpc"
"google.golang.org/grpc/metadata"
) )
const ( const (
@@ -30,6 +31,7 @@ const (
type config struct { type config struct {
LogLevel string `env:"LOG_FORWARDER_LOG_LEVEL" envAlternate:"AGENT_LOG_LEVEL" envDefault:"debug"` LogLevel string `env:"LOG_FORWARDER_LOG_LEVEL" envAlternate:"AGENT_LOG_LEVEL" envDefault:"debug"`
CVMId string `env:"AGENT_CVM_ID" envDefault:""`
} }
func main() { func main() {
@@ -100,6 +102,9 @@ func main() {
defer cvmClient.Close() defer cvmClient.Close()
// Create stream to Manager // Create stream to Manager
if cfg.CVMId != "" {
ctx = metadata.AppendToOutgoingContext(ctx, "job-id", cfg.CVMId, "connection-type", "log-forwarder")
}
stream, err := cvmsClient.Process(ctx) stream, err := cvmsClient.Process(ctx)
if err != nil { if err != nil {
logger.Error(fmt.Sprintf("failed to create stream to manager: %s", err)) logger.Error(fmt.Sprintf("failed to create stream to manager: %s", err))
@@ -122,12 +127,23 @@ func main() {
case msg := <-logQueue: case msg := <-logQueue:
if err := stream.Send(msg); err != nil { if err := stream.Send(msg); err != nil {
logger.Error(fmt.Sprintf("failed to send log to manager: %s", err)) logger.Error(fmt.Sprintf("failed to send log to manager: %s", err))
// Reconnect logic would go here return err
} }
} }
} }
}) })
// Stream Receiver Goroutine
g.Go(func() error {
for {
_, err := stream.Recv()
if err != nil {
logger.Error(fmt.Sprintf("stream connection lost: %s", err))
return err
}
}
})
g.Go(func() error { g.Go(func() error {
ch := make(chan os.Signal, 1) ch := make(chan os.Signal, 1)
signal.Notify(ch, syscall.SIGINT, syscall.SIGTERM) signal.Notify(ch, syscall.SIGINT, syscall.SIGTERM)