diff --git a/cmd/main.go b/cmd/main.go index d1bbc6d..f26bfa1 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -7,8 +7,8 @@ import ( "os/signal" "syscall" - "github.com/mrhid6/vantage/agent/internal/config" - agentsync "github.com/mrhid6/vantage/agent/internal/sync" + "gitea.hostxtra.co.uk/mrhid6/vantage/agent/internal/config" + agentsync "gitea.hostxtra.co.uk/mrhid6/vantage/agent/internal/sync" ) var Version = "dev" diff --git a/go.mod b/go.mod index b2d64ed..275f341 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/mrhid6/vantage/agent +module gitea.hostxtra.co.uk/mrhid6/vantage/agent go 1.26 diff --git a/internal/exec/exec.go b/internal/exec/exec.go index 979ecbd..a68f967 100644 --- a/internal/exec/exec.go +++ b/internal/exec/exec.go @@ -11,12 +11,9 @@ import ( "sync" "time" - "github.com/mrhid6/vantage/agent/internal/grpc/pb" + "gitea.hostxtra.co.uk/mrhid6/vantage/agent/internal/grpc/pb" ) - - - type streamWriter struct { mu sync.Mutex seq uint64 @@ -35,21 +32,10 @@ func (w *streamWriter) Write(p []byte) (int, error) { return len(p), nil } - - func WorkspacePath(workspaceID string) string { return filepath.Join(os.TempDir(), "vantage-run-"+workspaceID) } - - - - - - - - - func RunStep(cmd *pb.RunStepCmd, emit func(seq uint64, data []byte)) *pb.StepResult { res := &pb.StepResult{CommandId: "", OutputEnv: map[string]string{}} @@ -102,7 +88,7 @@ func RunStep(cmd *pb.RunStepCmd, emit func(seq uint64, data []byte)) *pb.StepRes } } c = exec.CommandContext(ctx, shell, "-NoProfile", "-NonInteractive", "-File", scriptPath) - default: + default: scriptPath = filepath.Join(dir, "step.sh") if err := os.WriteFile(scriptPath, []byte(cmd.Script), 0700); err != nil { res.ExitCode = 1 @@ -126,7 +112,6 @@ func RunStep(cmd *pb.RunStepCmd, emit func(seq uint64, data []byte)) *pb.StepRes c.Stderr = sw runErr := c.Run() - if ctx.Err() == context.DeadlineExceeded { res.ExitCode = 124 res.Stderr = "[vantage] step timed out" @@ -141,8 +126,6 @@ func RunStep(cmd *pb.RunStepCmd, emit func(seq uint64, data []byte)) *pb.StepRes return res } - - func parseEnvFile(path string) map[string]string { out := map[string]string{} f, err := os.Open(path) diff --git a/internal/grpc/client.go b/internal/grpc/client.go index 9f872fb..10171e4 100644 --- a/internal/grpc/client.go +++ b/internal/grpc/client.go @@ -6,7 +6,7 @@ import ( "strings" "time" - "github.com/mrhid6/vantage/agent/internal/grpc/pb" + "gitea.hostxtra.co.uk/mrhid6/vantage/agent/internal/grpc/pb" "google.golang.org/grpc" "google.golang.org/grpc/credentials" "google.golang.org/grpc/credentials/insecure" @@ -27,8 +27,6 @@ func New(serverURL string, useTLS bool) (*Client, error) { serverURL = strings.TrimPrefix(serverURL, "https://") serverURL = strings.TrimPrefix(serverURL, "http://") - - dialOpts := []grpc.DialOption{ grpc.WithKeepaliveParams(keepalive.ClientParameters{ Time: 30 * time.Second, @@ -150,8 +148,6 @@ func (c *Client) ReportChecks(serverID, agentToken string, results []pb.CheckRes return err } - - func (c *Client) CommandStream(ctx context.Context) (pb.Vantage_CommandStreamClient, error) { return c.client.CommandStream(ctx) } diff --git a/internal/inventory/collect_linux.go b/internal/inventory/collect_linux.go index 58f9797..7601d04 100644 --- a/internal/inventory/collect_linux.go +++ b/internal/inventory/collect_linux.go @@ -1,5 +1,3 @@ - - package inventory import ( @@ -10,7 +8,7 @@ import ( "syscall" "time" - "github.com/mrhid6/vantage/agent/internal/grpc/pb" + "gitea.hostxtra.co.uk/mrhid6/vantage/agent/internal/grpc/pb" ) func collect(r *pb.InventoryReport, includeStatic bool) { @@ -42,11 +40,11 @@ func cpuSample() (idle, total uint64) { defer f.Close() sc := bufio.NewScanner(f) if sc.Scan() { - fields := strings.Fields(sc.Text()) + fields := strings.Fields(sc.Text()) for i, v := range fields[1:] { n, _ := strconv.ParseUint(v, 10, 64) total += n - if i == 3 { + if i == 3 { idle = n } } diff --git a/internal/inventory/inventory.go b/internal/inventory/inventory.go index fbb898f..8875d40 100644 --- a/internal/inventory/inventory.go +++ b/internal/inventory/inventory.go @@ -1,8 +1,6 @@ package inventory -import "github.com/mrhid6/vantage/agent/internal/grpc/pb" - - +import "gitea.hostxtra.co.uk/mrhid6/vantage/agent/internal/grpc/pb" func Collect(includeStatic bool) *pb.InventoryReport { r := &pb.InventoryReport{IncludeStatic: includeStatic, CPU: &pb.CPUReport{}, Memory: &pb.MemReport{}} diff --git a/internal/monitors/monitors.go b/internal/monitors/monitors.go index 77ec420..62ddb81 100644 --- a/internal/monitors/monitors.go +++ b/internal/monitors/monitors.go @@ -1,6 +1,3 @@ - - - package monitors import ( @@ -9,13 +6,12 @@ import ( "sync" "time" - "github.com/mrhid6/vantage/agent/internal/checker" - "github.com/mrhid6/vantage/agent/internal/config" - grpcclient "github.com/mrhid6/vantage/agent/internal/grpc" - "github.com/mrhid6/vantage/agent/internal/grpc/pb" + "gitea.hostxtra.co.uk/mrhid6/vantage/agent/internal/checker" + "gitea.hostxtra.co.uk/mrhid6/vantage/agent/internal/config" + grpcclient "gitea.hostxtra.co.uk/mrhid6/vantage/agent/internal/grpc" + "gitea.hostxtra.co.uk/mrhid6/vantage/agent/internal/grpc/pb" ) - const syncInterval = 30 * time.Second type runner struct { @@ -23,13 +19,10 @@ type runner struct { cancel context.CancelFunc } - func Run(ctx context.Context, cfg *config.Config) { active := map[string]*runner{} var mu sync.Mutex - - results := make(chan pb.CheckResult, 64) go reporter(ctx, cfg, results) @@ -128,7 +121,6 @@ func runSpec(ctx context.Context, s pb.MonitorSpec, out chan<- pb.CheckResult) { } } - func reporter(ctx context.Context, cfg *config.Config, in <-chan pb.CheckResult) { t := time.NewTicker(5 * time.Second) defer t.Stop() diff --git a/internal/sync/sync.go b/internal/sync/sync.go index 8a31683..0a7213f 100644 --- a/internal/sync/sync.go +++ b/internal/sync/sync.go @@ -17,14 +17,14 @@ import ( "sync" "time" - "github.com/mrhid6/vantage/agent/internal/config" - agentexec "github.com/mrhid6/vantage/agent/internal/exec" - grpcclient "github.com/mrhid6/vantage/agent/internal/grpc" - "github.com/mrhid6/vantage/agent/internal/grpc/pb" - "github.com/mrhid6/vantage/agent/internal/inventory" - "github.com/mrhid6/vantage/agent/internal/keys" - "github.com/mrhid6/vantage/agent/internal/monitors" - "github.com/mrhid6/vantage/agent/internal/updates" + "gitea.hostxtra.co.uk/mrhid6/vantage/agent/internal/config" + agentexec "gitea.hostxtra.co.uk/mrhid6/vantage/agent/internal/exec" + grpcclient "gitea.hostxtra.co.uk/mrhid6/vantage/agent/internal/grpc" + "gitea.hostxtra.co.uk/mrhid6/vantage/agent/internal/grpc/pb" + "gitea.hostxtra.co.uk/mrhid6/vantage/agent/internal/inventory" + "gitea.hostxtra.co.uk/mrhid6/vantage/agent/internal/keys" + "gitea.hostxtra.co.uk/mrhid6/vantage/agent/internal/monitors" + "gitea.hostxtra.co.uk/mrhid6/vantage/agent/internal/updates" ) func Run(ctx context.Context, cfg *config.Config, version string) error { @@ -34,7 +34,6 @@ func Run(ctx context.Context, cfg *config.Config, version string) error { } defer client.Close() - if cfg.PreRegToken != "" { log.Println("registering with server...") hostname, _ := os.Hostname() @@ -64,22 +63,17 @@ func Run(ctx context.Context, cfg *config.Config, version string) error { return fmt.Errorf("no agent token available registration required") } - go runCommandStream(ctx, cfg) - go runUpdateCheck(ctx, cfg) - go runInventory(ctx, cfg) - go monitors.Run(ctx, cfg) ticker := time.NewTicker(cfg.PollInterval) defer ticker.Stop() - if err := poll(client, cfg, version); err != nil { log.Printf("poll error: %v", err) } @@ -123,8 +117,6 @@ func poll(client *grpcclient.Client, cfg *config.Config, version string) error { return nil } - - func runCommandStream(ctx context.Context, cfg *config.Config) { backoff := time.Second const maxBackoff = 2 * time.Minute @@ -177,9 +169,6 @@ func connectAndHandleStream(ctx context.Context, cfg *config.Config) error { log.Println("command stream connected") - - - var sendMu sync.Mutex send := func(msg *pb.AgentMessage) error { sendMu.Lock() @@ -219,7 +208,7 @@ func connectAndHandleStream(ctx context.Context, cfg *config.Config) error { } res := agentexec.RunStep(rc, emit) res.CommandId = cid - + _ = send(&pb.AgentMessage{ ServerId: cfg.ServerID, AgentToken: cfg.AgentToken, @@ -279,8 +268,6 @@ func runUpdateCheck(ctx context.Context, cfg *config.Config) { } } - - func runInventory(ctx context.Context, cfg *config.Config) { client, err := grpcclient.New(cfg.ServerURL, cfg.TLS) if err != nil { @@ -298,7 +285,7 @@ func runInventory(ctx context.Context, cfg *config.Config) { } } - report(true) + report(true) ticker := time.NewTicker(30 * time.Second) defer ticker.Stop() tick := 0 @@ -308,7 +295,7 @@ func runInventory(ctx context.Context, cfg *config.Config) { return case <-ticker.C: tick++ - report(tick%30 == 0) + report(tick%30 == 0) } } } @@ -321,7 +308,6 @@ func handleApplyUpdates(cfg *config.Config, cmd *pb.ServerCommand) { } log.Printf("OS updates applied successfully (cmd=%s)", cmd.CommandId) - client, err := grpcclient.New(cfg.ServerURL, cfg.TLS) if err != nil { return @@ -363,21 +349,19 @@ func handleUpdateAgent(cmd *pb.ServerCommand) { } u := cmd.UpdateAgent - arch := runtime.GOARCH + arch := runtime.GOARCH tag := "agent%2Fv" + u.Version binaryURL := fmt.Sprintf("%s/mrhid6/vantage/releases/download/%s/vantage-agent-linux-%s", u.GiteaBaseURL, tag, arch) checksumURL := fmt.Sprintf("%s/mrhid6/vantage/releases/download/%s/checksums.txt", u.GiteaBaseURL, tag) log.Printf("updating agent to v%s from %s (cmd=%s)", u.Version, u.GiteaBaseURL, cmd.CommandId) - tmpBin := "/tmp/vantage-agent-update" if err := downloadFile(binaryURL, tmpBin); err != nil { log.Printf("update download failed (cmd=%s): %v", cmd.CommandId, err) return } - checksumData, err := httpGetBytes(checksumURL) if err != nil { log.Printf("update checksum fetch failed (cmd=%s): %v", cmd.CommandId, err) @@ -402,11 +386,6 @@ func handleUpdateAgent(cmd *pb.ServerCommand) { exec.Command("systemctl", "restart", "vantage-agent").Run() } - - - - - func handleUpdateAgentWindows(cmd *pb.ServerCommand) { u := cmd.UpdateAgent tag := "agent%2Fv" + u.Version @@ -434,8 +413,7 @@ func handleUpdateAgentWindows(cmd *pb.ServerCommand) { logPath := filepath.Join(os.TempDir(), "vantage-agent-msi.log") log.Printf("launching msiexec for upgrade to v%s (cmd=%s)", u.Version, cmd.CommandId) - - + up := exec.Command("cmd", "/c", "start", "", "/wait", "msiexec", "/i", msiPath, "/qn", "/norestart", "/l*v", logPath) if err := up.Start(); err != nil { log.Printf("failed to launch msiexec (cmd=%s): %v", cmd.CommandId, err) @@ -444,7 +422,7 @@ func handleUpdateAgentWindows(cmd *pb.ServerCommand) { } func downloadFile(url, dest string) error { - resp, err := http.Get(url) + resp, err := http.Get(url) if err != nil { return err } @@ -462,7 +440,7 @@ func downloadFile(url, dest string) error { } func httpGetBytes(url string) ([]byte, error) { - resp, err := http.Get(url) + resp, err := http.Get(url) if err != nil { return nil, err } @@ -554,7 +532,6 @@ func localIP() string { return "" } - func GenerateAndUpload(cfg *config.Config, label string) error { client, err := grpcclient.New(cfg.ServerURL, cfg.TLS) if err != nil {