github.com/grafana/pyroscope@v1.18.0/pkg/operations/model.go (about) 1 package operations 2 3 import ( 4 "net/http" 5 "slices" 6 "strings" 7 "time" 8 9 "github.com/grafana/pyroscope/pkg/phlaredb/block" 10 ) 11 12 type blockQuery struct { 13 From string 14 To string 15 IncludeDeleted bool 16 View string 17 18 parsedFrom time.Time 19 parsedTo time.Time 20 } 21 22 func readQuery(r *http.Request) *blockQuery { 23 queryFrom := r.URL.Query().Get("queryFrom") 24 if queryFrom == "" { 25 queryFrom = "now-24h" 26 } 27 parsedFrom, _ := ParseTime(queryFrom) 28 queryTo := r.URL.Query().Get("queryTo") 29 if queryTo == "" { 30 queryTo = "now" 31 } 32 parsedTo, _ := ParseTime(queryTo) 33 includeDeleted := r.URL.Query().Get("includeDeleted") 34 view := r.URL.Query().Get("view") 35 if view == "" { 36 view = "table" 37 } 38 return &blockQuery{ 39 From: queryFrom, 40 To: queryTo, 41 IncludeDeleted: includeDeleted != "", 42 View: view, 43 parsedFrom: parsedFrom, 44 parsedTo: parsedTo, 45 } 46 } 47 48 type blockDetails struct { 49 ID string 50 MinTime string 51 MaxTime string 52 Duration int 53 FormattedDuration string 54 UploadedAt string 55 CompactorShardID string 56 CompactionLevel int 57 Size string 58 Stats block.BlockStats 59 Labels map[string]string 60 } 61 62 type blockGroup struct { 63 MinTime time.Time 64 FormattedMinTime string 65 Blocks []*blockDetails 66 MinTimeAge string 67 MaxBlockDurationMinutes int 68 } 69 70 type blockListResult struct { 71 BlockGroups []*blockGroup 72 MaxBlocksPerGroup int 73 GroupDurationMinutes int 74 } 75 76 // Sorts a slice of block groups by MinTime in descending order. 77 func sortBlockGroupsByMinTimeDec(bg []*blockGroup) { 78 slices.SortFunc(bg, func(a, b *blockGroup) int { 79 return b.MinTime.Compare(a.MinTime) 80 }) 81 } 82 83 // Sorts a slice of block details by MinTime in descending order. 84 func sortBlockDetailsByMinTimeDec(bd []*blockDetails) { 85 slices.SortFunc(bd, func(a, b *blockDetails) int { 86 return strings.Compare(b.MinTime, a.MinTime) 87 }) 88 }