mirror of
https://github.com/cloudflare/cloudflared.git
synced 2026-06-23 04:10:20 +00:00
7585e38948
Check / check (1.22.x, macos-latest) (push) Has been cancelled
Check / check (1.22.x, ubuntu-latest) (push) Has been cancelled
Check / check (1.22.x, windows-latest) (push) Has been cancelled
Semgrep config / semgrep/ci (push) Has been cancelled
Fixing warnings in cloudflared log collector. This attempts to fix errors like the ones shown below: ``` diagnostic/diagnostic.go:132:23: Error return value of `logHandle.Close` is not checked (errcheck) defer logHandle.Close() diagnostic/diagnostic.go:134:26: G303: File creation in shared tmp directory without using ioutil.Tempfile (gosec) outputLogHandle, err := os.Create(filepath.Join(os.TempDir(), logFilename)) ```
104 lines
2.4 KiB
Go
104 lines
2.4 KiB
Go
package diagnostic
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"os"
|
|
"os/exec"
|
|
"path/filepath"
|
|
"runtime"
|
|
)
|
|
|
|
const (
|
|
linuxManagedLogsPath = "/var/log/cloudflared.err"
|
|
darwinManagedLogsPath = "/Library/Logs/com.cloudflare.cloudflared.err.log"
|
|
linuxServiceConfigurationPath = "/etc/systemd/system/cloudflared.service"
|
|
)
|
|
|
|
type HostLogCollector struct {
|
|
client HTTPClient
|
|
}
|
|
|
|
func NewHostLogCollector(client HTTPClient) *HostLogCollector {
|
|
return &HostLogCollector{
|
|
client,
|
|
}
|
|
}
|
|
|
|
func extractLogsFromJournalCtl(ctx context.Context) (*LogInformation, error) {
|
|
// nolint: gosec
|
|
outputHandle, err := os.Create(filepath.Join(os.TempDir(), logFilename))
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error opening output file: %w", err)
|
|
}
|
|
|
|
defer func() { _ = outputHandle.Close() }()
|
|
|
|
command := exec.CommandContext(
|
|
ctx,
|
|
"journalctl",
|
|
"--since",
|
|
"2 weeks ago",
|
|
"-u",
|
|
"cloudflared.service",
|
|
)
|
|
|
|
return PipeCommandOutputToFile(command, outputHandle)
|
|
}
|
|
|
|
func getServiceLogPath() (string, error) {
|
|
switch runtime.GOOS {
|
|
case "darwin":
|
|
{
|
|
path := darwinManagedLogsPath
|
|
if _, err := os.Stat(path); err == nil {
|
|
return path, nil
|
|
}
|
|
|
|
userHomeDir, err := os.UserHomeDir()
|
|
if err != nil {
|
|
return "", fmt.Errorf("error getting user home: %w", err)
|
|
}
|
|
|
|
return filepath.Join(userHomeDir, darwinManagedLogsPath), nil
|
|
}
|
|
case "linux":
|
|
{
|
|
return linuxManagedLogsPath, nil
|
|
}
|
|
default:
|
|
return "", ErrManagedLogNotFound
|
|
}
|
|
}
|
|
|
|
func (collector *HostLogCollector) Collect(ctx context.Context) (*LogInformation, error) {
|
|
logConfiguration, err := collector.client.GetLogConfiguration(ctx)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error getting log configuration: %w", err)
|
|
}
|
|
|
|
if logConfiguration.uid == 0 {
|
|
_, statSystemdErr := os.Stat(linuxServiceConfigurationPath)
|
|
|
|
_, statServiceConfigurationErr := os.Stat(linuxServiceConfigurationPath)
|
|
if statSystemdErr == nil && statServiceConfigurationErr == nil && runtime.GOOS == "linux" {
|
|
return extractLogsFromJournalCtl(ctx)
|
|
}
|
|
|
|
path, err := getServiceLogPath()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return NewLogInformation(path, false, false), nil
|
|
}
|
|
|
|
if logConfiguration.logFile != "" {
|
|
return NewLogInformation(logConfiguration.logFile, false, false), nil
|
|
} else if logConfiguration.logDirectory != "" {
|
|
return NewLogInformation(logConfiguration.logDirectory, false, true), nil
|
|
}
|
|
|
|
return nil, ErrLogConfigurationIsInvalid
|
|
}
|