mirror of
https://github.com/sourcegraph/sourcegraph.git
synced 2026-02-06 15:51:43 +00:00
codeintel-qa: Fix concurrent map read/write (take 2) (#26604)
This commit is contained in:
parent
4d0dd12229
commit
67482d8f13
@ -38,21 +38,24 @@ func queryGraphQL(ctx context.Context, queryName, query string, variables map[st
|
||||
// formatPercentiles returns a string slice describing latency histograms for each query.
|
||||
func formatPercentiles() []string {
|
||||
names := queryNames()
|
||||
percentiles := make([]string, 0, len(names))
|
||||
lines := make([]string, 0, len(names))
|
||||
sort.Strings(names)
|
||||
|
||||
for _, queryName := range names {
|
||||
percentiles = append(percentiles, fmt.Sprintf(
|
||||
"queryName=%s\trequests=%d\tp50=%s\tp95=%s\tp99=%s",
|
||||
queryName,
|
||||
len(durations[queryName]),
|
||||
percentile(queryName, 0.50),
|
||||
percentile(queryName, 0.95),
|
||||
percentile(queryName, 0.99),
|
||||
))
|
||||
numRequests, percentileValues := percentiles(queryName, 0.50, 0.95, 0.99)
|
||||
|
||||
lines = append(
|
||||
lines,
|
||||
fmt.Sprintf("queryName=%s\trequests=%d\tp50=%s\tp95=%s\tp99=%s",
|
||||
queryName,
|
||||
numRequests,
|
||||
percentileValues[0.50],
|
||||
percentileValues[0.95],
|
||||
percentileValues[0.99],
|
||||
))
|
||||
}
|
||||
|
||||
return percentiles
|
||||
return lines
|
||||
}
|
||||
|
||||
// queryNames returns the keys of the duration map.
|
||||
@ -68,13 +71,19 @@ func queryNames() (names []string) {
|
||||
return names
|
||||
}
|
||||
|
||||
// percentile returns the pth percentile duration of the given query type.
|
||||
func percentile(queryName string, p float64) time.Duration {
|
||||
// percentiles returns the number of samples and the ps[i]th percentile durations of the given query type.
|
||||
func percentiles(queryName string, ps ...float64) (int, map[float64]time.Duration) {
|
||||
m.Lock()
|
||||
defer m.Unlock()
|
||||
|
||||
queryDurations := durations[queryName]
|
||||
sort.Float64s(queryDurations)
|
||||
index := int(float64(len(queryDurations)) * p)
|
||||
return time.Duration(queryDurations[index]) * time.Millisecond
|
||||
|
||||
percentiles := make(map[float64]time.Duration, len(ps))
|
||||
for _, p := range ps {
|
||||
index := int(float64(len(queryDurations)) * p)
|
||||
percentiles[p] = time.Duration(queryDurations[index]) * time.Millisecond
|
||||
}
|
||||
|
||||
return len(queryDurations), percentiles
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user