refactor(agent): error handling

This commit is contained in:
2026-04-04 15:15:33 +03:00
parent 7e54d62170
commit e721cff3f8
+14 -22
View File
@@ -97,37 +97,31 @@ func main() {
wg := &errgroup.Group{} wg := &errgroup.Group{}
// Start command executor
wg.Go(func() error {
cmdexe := new(commander.CommandExecutor)
ccli := client.New(cmdexe, cfg.Label, cfg.Label)
grpcAddr := cfg.GRPCURL grpcAddr := cfg.GRPCURL
if grpcAddr == "" { if grpcAddr == "" {
grpcAddr = cfg.BackendURL grpcAddr = cfg.BackendURL
} }
grpcAddr = strings.TrimPrefix(grpcAddr, "http://") grpcAddr = strings.TrimPrefix(grpcAddr, "http://")
grpcAddr = strings.TrimPrefix(grpcAddr, "https://") grpcAddr = strings.TrimPrefix(grpcAddr, "https://")
// Start command executor
wg.Go(func() error {
cmdexe := new(commander.CommandExecutor)
ccli := client.New(cmdexe, cfg.Label, cfg.Label)
return ccli.HandleCommands(ctx, grpcAddr, creds) return ccli.HandleCommands(ctx, grpcAddr, creds)
}) })
// Start log collectors // Start log collectors
if len(cfg.Services) > 0 { if len(cfg.Services) > 0 {
grpcAddr := cfg.GRPCURL wg.Go(func() error {
if grpcAddr == "" {
grpcAddr = cfg.BackendURL
}
grpcAddr = strings.TrimPrefix(grpcAddr, "http://")
grpcAddr = strings.TrimPrefix(grpcAddr, "https://")
conn, err := grpc.NewClient(grpcAddr, grpc.WithTransportCredentials(creds)) conn, err := grpc.NewClient(grpcAddr, grpc.WithTransportCredentials(creds))
if err != nil { if err != nil {
lgr.Error("Failed to connect to gRPC", "err", err) return fmt.Errorf("failed to connect to gRPC: %w", err)
os.Exit(1)
} }
defer func() { _ = conn.Close() }() defer func() { _ = conn.Close() }()
ccli := proto.NewCollectorClient(conn) ccli := proto.NewCollectorClient(conn)
svcWg := new(errgroup.Group)
for _, svc := range cfg.Services { for _, svc := range cfg.Services {
svc := svc svc := svc
var src logsource.LogSource var src logsource.LogSource
@@ -135,25 +129,21 @@ func main() {
case "journald": case "journald":
src, err = journald.New(svc, os.Getenv("JOURNALD_LOGDIR")) src, err = journald.New(svc, os.Getenv("JOURNALD_LOGDIR"))
if err != nil { if err != nil {
lgr.Error("Failed to create journald source", "service", svc.Name, "err", err) return fmt.Errorf("failed to create journald source %q: %w", svc.Name, err)
os.Exit(1)
} }
case "file": case "file":
if svc.Path == nil { if svc.Path == nil {
lgr.Error("Path is required for file log source", "service", svc.Name) return fmt.Errorf("path is required for file log source %q", svc.Name)
os.Exit(1)
} }
src, err = file.New(*svc.Path) src, err = file.New(*svc.Path)
if err != nil { if err != nil {
lgr.Error("Failed to create file source", "service", svc.Name, "err", err) return fmt.Errorf("failed to create file source %q: %w", svc.Name, err)
os.Exit(1)
} }
default: default:
lgr.Error("Unknown log source type", "type", svc.Type, "service", svc.Name) return fmt.Errorf("unknown log source type %q for service %q", svc.Type, svc.Name)
os.Exit(1)
} }
wg.Go(func() error { svcWg.Go(func() error {
lgr.Info("Starting log stream", "service", svc.Name) lgr.Info("Starting log stream", "service", svc.Name)
// First, flush any buffered logs from offline period // First, flush any buffered logs from offline period
@@ -199,6 +189,8 @@ func main() {
} }
}) })
} }
return svcWg.Wait()
})
} }
if err := wg.Wait(); err != nil { if err := wg.Wait(); err != nil {