Compare commits

...

2 Commits

Author SHA1 Message Date
ycc
756ba40fbb fix bin cleaning and run logs 2024-10-15 17:37:37 +02:00
ycc
f674e6856f fix bin cleaning and run logs 2024-10-15 17:37:35 +02:00
4 changed files with 47 additions and 16 deletions

2
.vscode/launch.json vendored
View File

@ -10,7 +10,7 @@
"request": "launch", "request": "launch",
"mode": "auto", "mode": "auto",
"program": "main.go", "program": "main.go",
"args": ["localbuild"] "args": ["localbuild", "-p"]
}, },
{ {
"name": "localrun", "name": "localrun",

View File

@ -37,7 +37,7 @@ to quickly create a Cobra application.`,
} else { } else {
fmt.Println("Repository deleted successfully") fmt.Println("Repository deleted successfully")
} }
//err := deleteFolderIfExists(binPath) err = deleteFolderIfExists(binPath)
if err != nil { if err != nil {
fmt.Println("Error:", err) fmt.Println("Error:", err)
} else { } else {

View File

@ -1,7 +1,7 @@
package cmd package cmd
import ( import (
"bytes" "bufio"
"context" "context"
"fmt" "fmt"
"io" "io"
@ -29,9 +29,8 @@ func walkFolder(folderPath string, ctx context.Context, wg *sync.WaitGroup) {
for _, file := range files { for _, file := range files {
// Check if filename starts with "oc-" // Check if filename starts with "oc-"
if strings.HasPrefix(file.Name(), "oc-") { if strings.HasPrefix(file.Name(), "oc-") && (!strings.Contains(file.Name(), ".") || strings.Contains(file.Name(), ".exe")) {
// Prepare the command to start the process // Prepare the command to start the process
wg.Add(1) wg.Add(1)
go startProcess(ctx, file.Name(), wg) go startProcess(ctx, file.Name(), wg)
} }
@ -47,38 +46,70 @@ func walkFolder(folderPath string, ctx context.Context, wg *sync.WaitGroup) {
} }
} }
// startProcess runs the given program and stores a reference to it for later control
func startProcess(ctx context.Context, program string, wg *sync.WaitGroup, args ...string) { func startProcess(ctx context.Context, program string, wg *sync.WaitGroup, args ...string) {
defer wg.Done() defer wg.Done()
// Create log file
logFile, err := os.Create(program + ".log")
if err != nil {
log.Printf("Failed to create log file: %v", err)
return
}
cmd := exec.CommandContext(ctx, program, args...) cmd := exec.CommandContext(ctx, program, args...)
mu.Lock() mu.Lock()
processes = append(processes, cmd) processes = append(processes, cmd)
mu.Unlock() mu.Unlock()
var outBuf, errBuf bytes.Buffer // Create pipes to capture the output in real-time
cmd.Stdout = &outBuf stdoutPipe, err := cmd.StdoutPipe()
cmd.Stderr = &errBuf
err := cmd.Start()
if err != nil { if err != nil {
log.Printf("Failed to get stdout pipe: %v", err)
return
}
stderrPipe, err := cmd.StderrPipe()
if err != nil {
log.Printf("Failed to get stderr pipe: %v", err)
return
}
// Start the command
if err := cmd.Start(); err != nil {
log.Printf("Failed to start process: %s", program) log.Printf("Failed to start process: %s", program)
return return
} }
log.Printf("Started process: %s", program) log.Printf("Started process: %s", program)
fmt.Print(outBuf.String()) // Create goroutines to read stdout and stderr concurrently
fmt.Print(errBuf.String()) go func() {
scanner := bufio.NewScanner(stdoutPipe)
for scanner.Scan() {
fmt.Fprintln(logFile, scanner.Text()) // Print each line from stdout as it arrives
}
if err := scanner.Err(); err != nil {
log.Printf("Error reading stdout: %v", err)
}
}()
err = cmd.Wait() go func() {
if err != nil { scanner := bufio.NewScanner(stderrPipe)
for scanner.Scan() {
fmt.Fprintln(logFile, scanner.Text()) // Print each line from stderr as it arrives
}
if err := scanner.Err(); err != nil {
log.Printf("Error reading stderr: %v", err)
}
}()
// Wait for the process to finish
if err := cmd.Wait(); err != nil {
log.Printf("Process finished with error: %v", err) log.Printf("Process finished with error: %v", err)
} else { } else {
log.Printf("Process finished successfully: %s", program) log.Printf("Process finished successfully: %s", program)
} }
fmt.Print(outBuf.String())
fmt.Print(errBuf.String())
} }
// stopAllProcesses stops all the started processes // stopAllProcesses stops all the started processes

BIN
oc-local

Binary file not shown.