71 lines
1.5 KiB
Go
71 lines
1.5 KiB
Go
package common
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"gemini-grc/config"
|
|
)
|
|
|
|
type WorkerStatus struct {
|
|
ID int
|
|
Status string
|
|
}
|
|
|
|
func UpdateWorkerStatus(workerID int, status string) {
|
|
if !config.GetConfig().PrintWorkerStatus {
|
|
return
|
|
}
|
|
if config.CONFIG.NumOfWorkers > 1 {
|
|
StatusChan <- WorkerStatus{
|
|
ID: workerID,
|
|
Status: status,
|
|
}
|
|
}
|
|
}
|
|
|
|
func PrintWorkerStatus(totalWorkers int, statusChan chan WorkerStatus) {
|
|
if !config.GetConfig().PrintWorkerStatus {
|
|
return
|
|
}
|
|
|
|
// Create a slice to store current Status of each worker
|
|
statuses := make([]string, totalWorkers)
|
|
|
|
// Initialize empty statuses
|
|
for i := range statuses {
|
|
statuses[i] = ""
|
|
}
|
|
|
|
// Initial print
|
|
var output strings.Builder
|
|
// \033[H moves the cursor to the top left corner of the screen
|
|
// (ie, the first column of the first row in the screen).
|
|
// \033[J clears the part of the screen from the cursor to the end of the screen.
|
|
output.WriteString("\033[H\033[J") // Clear screen and move cursor to top
|
|
for i := range statuses {
|
|
output.WriteString(fmt.Sprintf("[%2d] \n", i))
|
|
}
|
|
fmt.Print(output.String())
|
|
|
|
// Continuously receive Status updates
|
|
for update := range statusChan {
|
|
if update.ID >= totalWorkers {
|
|
continue
|
|
}
|
|
|
|
// Update the Status
|
|
statuses[update.ID] = update.Status
|
|
|
|
// Build the complete output string
|
|
output.Reset()
|
|
output.WriteString("\033[H\033[J") // Clear screen and move cursor to top
|
|
for i, status := range statuses {
|
|
output.WriteString(fmt.Sprintf("[%2d] %.100s\n", i, status))
|
|
}
|
|
|
|
// Print the entire Status
|
|
fmt.Print(output.String())
|
|
}
|
|
}
|