diff --git a/.github/workflows/managed.yml b/.github/workflows/managed.yml index 95112aa5ef1..084f2ddf582 100644 --- a/.github/workflows/managed.yml +++ b/.github/workflows/managed.yml @@ -118,4 +118,16 @@ jobs: echo "Logs for $service:" docker exec pmm-server supervisorctl tail $service || true fi - done \ No newline at end of file + done + + - name: Download logs.zip from PMM server + run: | + curl -k -u admin:admin -o logs.zip https://127.0.0.1/logs.zip + unzip logs.zip -d sentinel/data + rm logs.zip + + - name: Run Sentinel + run: go run sentinel/main.go sentinel/data + + - name: Clean up Sentinel data + run: rm -rf sentinel/data \ No newline at end of file diff --git a/managed/models/main.go b/managed/models/main.go new file mode 100644 index 00000000000..622ba3c865f --- /dev/null +++ b/managed/models/main.go @@ -0,0 +1,60 @@ +package main + +import ( + "bufio" + "fmt" + "os" + "path/filepath" + "strings" +) + +func main() { + if len(os.Args) < 2 { + fmt.Println("Usage: go run main.go ") + return + } + root := os.Args[1] + results := make(map[string][]string) + err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + if !info.IsDir() && strings.HasSuffix(info.Name(), ".log") { + file, err := os.Open(path) + if err != nil { + fmt.Printf("Failed to open %s: %v\n", path, err) + return nil + } + defer file.Close() + scanner := bufio.NewScanner(file) + lineNum := 1 + for scanner.Scan() { + line := scanner.Text() + lowerLine := strings.ToLower(line) + if strings.Contains(lowerLine, "error") || strings.Contains(lowerLine, "fatal") { + results[path] = append(results[path], fmt.Sprintf("%d: %s", lineNum, line)) + } + lineNum++ + } + if err := scanner.Err(); err != nil { + fmt.Printf("Error reading %s: %v\n", path, err) + } + } + return nil + }) + if err != nil { + fmt.Printf("Walk error: %v\n", err) + } + + if len(results) == 0 { + fmt.Println("No errors found.") + return + } + + for file, lines := range results { + fmt.Printf("\n=== %s ===\n", file) + for _, l := range lines { + fmt.Printf(" %s\n", l) + } + } +} diff --git a/sentinel/main.go b/sentinel/main.go new file mode 100644 index 00000000000..622ba3c865f --- /dev/null +++ b/sentinel/main.go @@ -0,0 +1,60 @@ +package main + +import ( + "bufio" + "fmt" + "os" + "path/filepath" + "strings" +) + +func main() { + if len(os.Args) < 2 { + fmt.Println("Usage: go run main.go ") + return + } + root := os.Args[1] + results := make(map[string][]string) + err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + if !info.IsDir() && strings.HasSuffix(info.Name(), ".log") { + file, err := os.Open(path) + if err != nil { + fmt.Printf("Failed to open %s: %v\n", path, err) + return nil + } + defer file.Close() + scanner := bufio.NewScanner(file) + lineNum := 1 + for scanner.Scan() { + line := scanner.Text() + lowerLine := strings.ToLower(line) + if strings.Contains(lowerLine, "error") || strings.Contains(lowerLine, "fatal") { + results[path] = append(results[path], fmt.Sprintf("%d: %s", lineNum, line)) + } + lineNum++ + } + if err := scanner.Err(); err != nil { + fmt.Printf("Error reading %s: %v\n", path, err) + } + } + return nil + }) + if err != nil { + fmt.Printf("Walk error: %v\n", err) + } + + if len(results) == 0 { + fmt.Println("No errors found.") + return + } + + for file, lines := range results { + fmt.Printf("\n=== %s ===\n", file) + for _, l := range lines { + fmt.Printf(" %s\n", l) + } + } +}