@@ -271,7 +271,7 @@ type data struct {
271
271
presetParameters []database.TemplateVersionPresetParameter
272
272
}
273
273
274
- func tryPercentile (fs []float64 , p float64 ) float64 {
274
+ func tryPercentileCont (fs []float64 , p float64 ) float64 {
275
275
if len (fs ) == 0 {
276
276
return - 1
277
277
}
@@ -284,6 +284,14 @@ func tryPercentile(fs []float64, p float64) float64 {
284
284
return fs [lower ] + (fs [upper ]- fs [lower ])* (pos - float64 (lower ))
285
285
}
286
286
287
+ func tryPercentileDisc (fs []float64 , p float64 ) float64 {
288
+ if len (fs ) == 0 {
289
+ return - 1
290
+ }
291
+ sort .Float64s (fs )
292
+ return fs [max (int (math .Ceil (float64 (len (fs ))* p / 100 - 1 )), 0 )]
293
+ }
294
+
287
295
func validateDatabaseTypeWithValid (v reflect.Value ) (handled bool , err error ) {
288
296
if v .Kind () == reflect .Struct {
289
297
return false , nil
@@ -2791,8 +2799,8 @@ func (q *FakeQuerier) GetDeploymentWorkspaceAgentStats(_ context.Context, create
2791
2799
latencies = append (latencies , agentStat .ConnectionMedianLatencyMS )
2792
2800
}
2793
2801
2794
- stat .WorkspaceConnectionLatency50 = tryPercentile (latencies , 50 )
2795
- stat .WorkspaceConnectionLatency95 = tryPercentile (latencies , 95 )
2802
+ stat .WorkspaceConnectionLatency50 = tryPercentileCont (latencies , 50 )
2803
+ stat .WorkspaceConnectionLatency95 = tryPercentileCont (latencies , 95 )
2796
2804
2797
2805
return stat , nil
2798
2806
}
@@ -2840,8 +2848,8 @@ func (q *FakeQuerier) GetDeploymentWorkspaceAgentUsageStats(_ context.Context, c
2840
2848
stat .WorkspaceTxBytes += agentStat .TxBytes
2841
2849
latencies = append (latencies , agentStat .ConnectionMedianLatencyMS )
2842
2850
}
2843
- stat .WorkspaceConnectionLatency50 = tryPercentile (latencies , 50 )
2844
- stat .WorkspaceConnectionLatency95 = tryPercentile (latencies , 95 )
2851
+ stat .WorkspaceConnectionLatency50 = tryPercentileCont (latencies , 50 )
2852
+ stat .WorkspaceConnectionLatency95 = tryPercentileCont (latencies , 95 )
2845
2853
2846
2854
for _ , agentStat := range sessions {
2847
2855
stat .SessionCountVSCode += agentStat .SessionCountVSCode
@@ -4988,9 +4996,9 @@ func (q *FakeQuerier) GetTemplateAverageBuildTime(ctx context.Context, arg datab
4988
4996
}
4989
4997
4990
4998
var row database.GetTemplateAverageBuildTimeRow
4991
- row .Delete50 , row .Delete95 = tryPercentile (deleteTimes , 50 ), tryPercentile (deleteTimes , 95 )
4992
- row .Stop50 , row .Stop95 = tryPercentile (stopTimes , 50 ), tryPercentile (stopTimes , 95 )
4993
- row .Start50 , row .Start95 = tryPercentile (startTimes , 50 ), tryPercentile (startTimes , 95 )
4999
+ row .Delete50 , row .Delete95 = tryPercentileDisc (deleteTimes , 50 ), tryPercentileDisc (deleteTimes , 95 )
5000
+ row .Stop50 , row .Stop95 = tryPercentileDisc (stopTimes , 50 ), tryPercentileDisc (stopTimes , 95 )
5001
+ row .Start50 , row .Start95 = tryPercentileDisc (startTimes , 50 ), tryPercentileDisc (startTimes , 95 )
4994
5002
return row , nil
4995
5003
}
4996
5004
@@ -6039,8 +6047,8 @@ func (q *FakeQuerier) GetUserLatencyInsights(_ context.Context, arg database.Get
6039
6047
Username : user .Username ,
6040
6048
AvatarURL : user .AvatarURL ,
6041
6049
TemplateIDs : seenTemplatesByUserID [userID ],
6042
- WorkspaceConnectionLatency50 : tryPercentile (latencies , 50 ),
6043
- WorkspaceConnectionLatency95 : tryPercentile (latencies , 95 ),
6050
+ WorkspaceConnectionLatency50 : tryPercentileCont (latencies , 50 ),
6051
+ WorkspaceConnectionLatency95 : tryPercentileCont (latencies , 95 ),
6044
6052
}
6045
6053
rows = append (rows , row )
6046
6054
}
@@ -6684,8 +6692,8 @@ func (q *FakeQuerier) GetWorkspaceAgentStats(_ context.Context, createdAfter tim
6684
6692
if ! ok {
6685
6693
continue
6686
6694
}
6687
- stat .WorkspaceConnectionLatency50 = tryPercentile (latencies , 50 )
6688
- stat .WorkspaceConnectionLatency95 = tryPercentile (latencies , 95 )
6695
+ stat .WorkspaceConnectionLatency50 = tryPercentileCont (latencies , 50 )
6696
+ stat .WorkspaceConnectionLatency95 = tryPercentileCont (latencies , 95 )
6689
6697
statByAgent [stat .AgentID ] = stat
6690
6698
}
6691
6699
@@ -6822,8 +6830,8 @@ func (q *FakeQuerier) GetWorkspaceAgentUsageStats(_ context.Context, createdAt t
6822
6830
for key , latencies := range latestAgentLatencies {
6823
6831
val , ok := latestAgentStats [key ]
6824
6832
if ok {
6825
- val .WorkspaceConnectionLatency50 = tryPercentile (latencies , 50 )
6826
- val .WorkspaceConnectionLatency95 = tryPercentile (latencies , 95 )
6833
+ val .WorkspaceConnectionLatency50 = tryPercentileCont (latencies , 50 )
6834
+ val .WorkspaceConnectionLatency95 = tryPercentileCont (latencies , 95 )
6827
6835
}
6828
6836
latestAgentStats [key ] = val
6829
6837
}
0 commit comments