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  }