mirror of
https://github.com/truewhile/MeBox.git
synced 2026-09-28 11:16:37 +08:00
split task tracker organize helpers
This commit is contained in:
@@ -1,7 +1,6 @@
|
|||||||
package service
|
package service
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"strings"
|
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@@ -239,131 +238,3 @@ func cloneTaskMetrics(metrics map[string]int64) map[string]int64 {
|
|||||||
}
|
}
|
||||||
return out
|
return out
|
||||||
}
|
}
|
||||||
|
|
||||||
func OrganizeTaskMetrics(res *OrganizeResult) map[string]int64 {
|
|
||||||
if res == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
metrics := map[string]int64{
|
|
||||||
"organized": int64(res.Organized),
|
|
||||||
"replaced": int64(res.Replaced),
|
|
||||||
"reclassified": int64(res.Reclassified),
|
|
||||||
"skipped": int64(res.Skipped),
|
|
||||||
"errors": int64(len(res.Errors)),
|
|
||||||
}
|
|
||||||
var scanVisited, scanAdded, scanUpdated, scanRemoved int64
|
|
||||||
for _, scan := range res.Scans {
|
|
||||||
scanVisited += int64(scan.Visited)
|
|
||||||
scanAdded += int64(scan.Added)
|
|
||||||
scanUpdated += int64(scan.Updated)
|
|
||||||
scanRemoved += scan.Removed
|
|
||||||
if scan.Error != "" {
|
|
||||||
metrics["scan_errors"]++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if len(res.Scans) > 0 {
|
|
||||||
metrics["scans"] = int64(len(res.Scans))
|
|
||||||
metrics["scan_visited"] = scanVisited
|
|
||||||
metrics["scan_added"] = scanAdded
|
|
||||||
metrics["scan_updated"] = scanUpdated
|
|
||||||
metrics["scan_removed"] = scanRemoved
|
|
||||||
}
|
|
||||||
for reason, count := range OrganizeSkipReasonCounts(res) {
|
|
||||||
metrics["skip_"+organizeMetricKey(reason)] = int64(count)
|
|
||||||
}
|
|
||||||
var scrapeMatched, scrapeProcessed int64
|
|
||||||
for _, scrape := range res.Scrapes {
|
|
||||||
scrapeMatched += int64(scrape.Matched)
|
|
||||||
scrapeProcessed += int64(scrape.Processed)
|
|
||||||
if scrape.Error != "" {
|
|
||||||
metrics["scrape_errors"]++
|
|
||||||
}
|
|
||||||
if scrape.Skipped {
|
|
||||||
metrics["scrape_skipped"]++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if len(res.Scrapes) > 0 {
|
|
||||||
metrics["scrapes"] = int64(len(res.Scrapes))
|
|
||||||
metrics["scrape_matched"] = scrapeMatched
|
|
||||||
metrics["scrape_processed"] = scrapeProcessed
|
|
||||||
}
|
|
||||||
return metrics
|
|
||||||
}
|
|
||||||
|
|
||||||
func OrganizeTaskDetails(res *OrganizeResult, limit int) []string {
|
|
||||||
if res == nil || limit <= 0 {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
out := make([]string, 0, limit)
|
|
||||||
for _, line := range res.Errors {
|
|
||||||
line = strings.TrimSpace(line)
|
|
||||||
if line == "" {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
out = append(out, "错误: "+line)
|
|
||||||
if len(out) >= limit {
|
|
||||||
return out
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, item := range res.Items {
|
|
||||||
if item.Action != "error" && item.Action != "skip" && item.Action != "reclassify" && item.Action != "cleanup" {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
line := strings.TrimSpace(item.Source)
|
|
||||||
if item.Reason != "" {
|
|
||||||
line += ": " + strings.TrimSpace(item.Reason)
|
|
||||||
}
|
|
||||||
if line == "" {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
out = append(out, item.Action+": "+line)
|
|
||||||
if len(out) >= limit {
|
|
||||||
return out
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if len(out) == 0 {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return out
|
|
||||||
}
|
|
||||||
|
|
||||||
func OrganizeSkipReasonCounts(res *OrganizeResult) map[string]int {
|
|
||||||
if res == nil || len(res.Items) == 0 {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
counts := map[string]int{}
|
|
||||||
for _, item := range res.Items {
|
|
||||||
if item.Action != "skip" {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
reason := strings.TrimSpace(item.Reason)
|
|
||||||
if reason == "" {
|
|
||||||
reason = "unknown"
|
|
||||||
}
|
|
||||||
counts[reason]++
|
|
||||||
}
|
|
||||||
if len(counts) == 0 {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return counts
|
|
||||||
}
|
|
||||||
|
|
||||||
func organizeMetricKey(value string) string {
|
|
||||||
value = strings.ToLower(strings.TrimSpace(value))
|
|
||||||
if value == "" {
|
|
||||||
return "unknown"
|
|
||||||
}
|
|
||||||
replacer := strings.NewReplacer(" ", "_", "-", "_", "/", "_", "\\", "_")
|
|
||||||
value = replacer.Replace(value)
|
|
||||||
var b strings.Builder
|
|
||||||
for _, r := range value {
|
|
||||||
if (r >= 'a' && r <= 'z') || (r >= '0' && r <= '9') || r == '_' {
|
|
||||||
b.WriteRune(r)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
out := strings.Trim(b.String(), "_")
|
|
||||||
if out == "" {
|
|
||||||
return "unknown"
|
|
||||||
}
|
|
||||||
return out
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -0,0 +1,131 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import "strings"
|
||||||
|
|
||||||
|
func OrganizeTaskMetrics(res *OrganizeResult) map[string]int64 {
|
||||||
|
if res == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
metrics := map[string]int64{
|
||||||
|
"organized": int64(res.Organized),
|
||||||
|
"replaced": int64(res.Replaced),
|
||||||
|
"reclassified": int64(res.Reclassified),
|
||||||
|
"skipped": int64(res.Skipped),
|
||||||
|
"errors": int64(len(res.Errors)),
|
||||||
|
}
|
||||||
|
var scanVisited, scanAdded, scanUpdated, scanRemoved int64
|
||||||
|
for _, scan := range res.Scans {
|
||||||
|
scanVisited += int64(scan.Visited)
|
||||||
|
scanAdded += int64(scan.Added)
|
||||||
|
scanUpdated += int64(scan.Updated)
|
||||||
|
scanRemoved += scan.Removed
|
||||||
|
if scan.Error != "" {
|
||||||
|
metrics["scan_errors"]++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(res.Scans) > 0 {
|
||||||
|
metrics["scans"] = int64(len(res.Scans))
|
||||||
|
metrics["scan_visited"] = scanVisited
|
||||||
|
metrics["scan_added"] = scanAdded
|
||||||
|
metrics["scan_updated"] = scanUpdated
|
||||||
|
metrics["scan_removed"] = scanRemoved
|
||||||
|
}
|
||||||
|
for reason, count := range OrganizeSkipReasonCounts(res) {
|
||||||
|
metrics["skip_"+organizeMetricKey(reason)] = int64(count)
|
||||||
|
}
|
||||||
|
var scrapeMatched, scrapeProcessed int64
|
||||||
|
for _, scrape := range res.Scrapes {
|
||||||
|
scrapeMatched += int64(scrape.Matched)
|
||||||
|
scrapeProcessed += int64(scrape.Processed)
|
||||||
|
if scrape.Error != "" {
|
||||||
|
metrics["scrape_errors"]++
|
||||||
|
}
|
||||||
|
if scrape.Skipped {
|
||||||
|
metrics["scrape_skipped"]++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(res.Scrapes) > 0 {
|
||||||
|
metrics["scrapes"] = int64(len(res.Scrapes))
|
||||||
|
metrics["scrape_matched"] = scrapeMatched
|
||||||
|
metrics["scrape_processed"] = scrapeProcessed
|
||||||
|
}
|
||||||
|
return metrics
|
||||||
|
}
|
||||||
|
|
||||||
|
func OrganizeTaskDetails(res *OrganizeResult, limit int) []string {
|
||||||
|
if res == nil || limit <= 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
out := make([]string, 0, limit)
|
||||||
|
for _, line := range res.Errors {
|
||||||
|
line = strings.TrimSpace(line)
|
||||||
|
if line == "" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
out = append(out, "错误: "+line)
|
||||||
|
if len(out) >= limit {
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for _, item := range res.Items {
|
||||||
|
if item.Action != "error" && item.Action != "skip" && item.Action != "reclassify" && item.Action != "cleanup" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
line := strings.TrimSpace(item.Source)
|
||||||
|
if item.Reason != "" {
|
||||||
|
line += ": " + strings.TrimSpace(item.Reason)
|
||||||
|
}
|
||||||
|
if line == "" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
out = append(out, item.Action+": "+line)
|
||||||
|
if len(out) >= limit {
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(out) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
|
func OrganizeSkipReasonCounts(res *OrganizeResult) map[string]int {
|
||||||
|
if res == nil || len(res.Items) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
counts := map[string]int{}
|
||||||
|
for _, item := range res.Items {
|
||||||
|
if item.Action != "skip" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
reason := strings.TrimSpace(item.Reason)
|
||||||
|
if reason == "" {
|
||||||
|
reason = "unknown"
|
||||||
|
}
|
||||||
|
counts[reason]++
|
||||||
|
}
|
||||||
|
if len(counts) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return counts
|
||||||
|
}
|
||||||
|
|
||||||
|
func organizeMetricKey(value string) string {
|
||||||
|
value = strings.ToLower(strings.TrimSpace(value))
|
||||||
|
if value == "" {
|
||||||
|
return "unknown"
|
||||||
|
}
|
||||||
|
replacer := strings.NewReplacer(" ", "_", "-", "_", "/", "_", "\\", "_")
|
||||||
|
value = replacer.Replace(value)
|
||||||
|
var b strings.Builder
|
||||||
|
for _, r := range value {
|
||||||
|
if (r >= 'a' && r <= 'z') || (r >= '0' && r <= '9') || r == '_' {
|
||||||
|
b.WriteRune(r)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
out := strings.Trim(b.String(), "_")
|
||||||
|
if out == "" {
|
||||||
|
return "unknown"
|
||||||
|
}
|
||||||
|
return out
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user