pkg/server/metrics.go (65 lines of code) (raw):

package server import ( "context" "net/http" "github.com/JetBrains/ij-perf-report-aggregator/pkg/data-query" "github.com/valyala/bytebufferpool" "github.com/valyala/quicktemplate" ) func (t *StatsServer) handleLoadRequestV2(request *http.Request) (*bytebufferpool.ByteBuffer, bool, error) { dataQueries, wrappedAsArray, err := data_query.ReadQueryV2(request) if err != nil { return nil, false, err } return t.load(request, dataQueries, wrappedAsArray) } func (t *StatsServer) handleLoadRequest(request *http.Request) (*bytebufferpool.ByteBuffer, bool, error) { dataQueries, wrappedAsArray, err := data_query.ReadQuery(request) if err != nil { return nil, false, err } return t.load(request, dataQueries, wrappedAsArray) } func (t *StatsServer) load(request *http.Request, dataQueries []data_query.Query, wrappedAsArray bool) (*bytebufferpool.ByteBuffer, bool, error) { buffer := byteBufferPool.Get() isOk := false defer func() { if !isOk { byteBufferPool.Put(buffer) } }() templateWriter := quicktemplate.AcquireWriter(buffer) defer quicktemplate.ReleaseWriter(templateWriter) jsonWriter := templateWriter.N() if len(dataQueries) > 1 || wrappedAsArray { jsonWriter.S("[") } for index, dataQuery := range dataQueries { if index != 0 { jsonWriter.S(",") } err := t.computeMeasureResponse(request.Context(), dataQuery, jsonWriter) if err != nil { return nil, false, err } } if len(dataQueries) > 1 || wrappedAsArray { jsonWriter.S("]") } isOk = true if len(buffer.B) == 0 { jsonWriter.S("[]") } return buffer, true, nil } func (t *StatsServer) computeMeasureResponse(ctx context.Context, query data_query.Query, jsonWriter *quicktemplate.QWriter) error { table := query.Table if table == "" { table = "report" } err := data_query.SelectRows(ctx, query, table, t, jsonWriter) if err != nil { return err } return nil }