refactor(agent): error handling
This commit is contained in:
+14
-22
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user