internal/agentdeployer/logs.go (44 lines of code) (raw):
// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
// or more contributor license agreements. Licensed under the Elastic License;
// you may not use this file except in compliance with the Elastic License.
package agentdeployer
import (
"context"
"fmt"
"os"
"path/filepath"
"time"
"github.com/elastic/elastic-package/internal/builder"
"github.com/elastic/elastic-package/internal/compose"
"github.com/elastic/elastic-package/internal/logger"
)
func processAgentContainerLogs(ctx context.Context, p *compose.Project, opts compose.CommandOptions, agentName string) {
content, err := p.Logs(ctx, opts)
if err != nil {
logger.Errorf("can't export service logs: %v", err)
return
}
if len(content) == 0 {
logger.Info("service container hasn't written anything logs.")
return
}
err = writeAgentContainerLogs(agentName, content)
if err != nil {
logger.Errorf("can't write service container logs: %v", err)
}
}
func writeAgentContainerLogs(agentName string, content []byte) error {
buildDir, err := builder.BuildDirectory()
if err != nil {
return fmt.Errorf("locating build directory failed: %w", err)
}
containerLogsDir := filepath.Join(buildDir, "container-logs")
err = os.MkdirAll(containerLogsDir, 0o755)
if err != nil {
return fmt.Errorf("can't create directory for agent container logs (path: %s): %w", containerLogsDir, err)
}
containerLogsFilepath := filepath.Join(containerLogsDir, fmt.Sprintf("%s-%d.log", agentName, time.Now().UnixNano()))
logger.Infof("Write container logs to file: %s", containerLogsFilepath)
err = os.WriteFile(containerLogsFilepath, content, 0o644)
if err != nil {
return fmt.Errorf("can't write container logs to file (path: %s): %w", containerLogsFilepath, err)
}
return nil
}