@@ -269,7 +269,7 @@ type data struct {
269
269
presetParameters []database.TemplateVersionPresetParameter
270
270
}
271
271
272
- func tryPercentile (fs []float64 , p float64 ) float64 {
272
+ func tryPercentileCont (fs []float64 , p float64 ) float64 {
273
273
if len (fs ) == 0 {
274
274
return - 1
275
275
}
@@ -282,6 +282,14 @@ func tryPercentile(fs []float64, p float64) float64 {
282
282
return fs [lower ] + (fs [upper ]- fs [lower ])* (pos - float64 (lower ))
283
283
}
284
284
285
+ func tryPercentileDisc (fs []float64 , p float64 ) float64 {
286
+ if len (fs ) == 0 {
287
+ return - 1
288
+ }
289
+ sort .Float64s (fs )
290
+ return fs [max (int (math .Ceil (float64 (len (fs ))* p / 100 - 1 )), 0 )]
291
+ }
292
+
285
293
func validateDatabaseTypeWithValid (v reflect.Value ) (handled bool , err error ) {
286
294
if v .Kind () == reflect .Struct {
287
295
return false , nil
@@ -2790,8 +2798,8 @@ func (q *FakeQuerier) GetDeploymentWorkspaceAgentStats(_ context.Context, create
2790
2798
latencies = append (latencies , agentStat .ConnectionMedianLatencyMS )
2791
2799
}
2792
2800
2793
- stat .WorkspaceConnectionLatency50 = tryPercentile (latencies , 50 )
2794
- stat .WorkspaceConnectionLatency95 = tryPercentile (latencies , 95 )
2801
+ stat .WorkspaceConnectionLatency50 = tryPercentileCont (latencies , 50 )
2802
+ stat .WorkspaceConnectionLatency95 = tryPercentileCont (latencies , 95 )
2795
2803
2796
2804
return stat , nil
2797
2805
}
@@ -2839,8 +2847,8 @@ func (q *FakeQuerier) GetDeploymentWorkspaceAgentUsageStats(_ context.Context, c
2839
2847
stat .WorkspaceTxBytes += agentStat .TxBytes
2840
2848
latencies = append (latencies , agentStat .ConnectionMedianLatencyMS )
2841
2849
}
2842
- stat .WorkspaceConnectionLatency50 = tryPercentile (latencies , 50 )
2843
- stat .WorkspaceConnectionLatency95 = tryPercentile (latencies , 95 )
2850
+ stat .WorkspaceConnectionLatency50 = tryPercentileCont (latencies , 50 )
2851
+ stat .WorkspaceConnectionLatency95 = tryPercentileCont (latencies , 95 )
2844
2852
2845
2853
for _ , agentStat := range sessions {
2846
2854
stat .SessionCountVSCode += agentStat .SessionCountVSCode
@@ -4987,9 +4995,9 @@ func (q *FakeQuerier) GetTemplateAverageBuildTime(ctx context.Context, arg datab
4987
4995
}
4988
4996
4989
4997
var row database.GetTemplateAverageBuildTimeRow
4990
- row .Delete50 , row .Delete95 = tryPercentile (deleteTimes , 50 ), tryPercentile (deleteTimes , 95 )
4991
- row .Stop50 , row .Stop95 = tryPercentile (stopTimes , 50 ), tryPercentile (stopTimes , 95 )
4992
- row .Start50 , row .Start95 = tryPercentile (startTimes , 50 ), tryPercentile (startTimes , 95 )
4998
+ row .Delete50 , row .Delete95 = tryPercentileDisc (deleteTimes , 50 ), tryPercentileDisc (deleteTimes , 95 )
4999
+ row .Stop50 , row .Stop95 = tryPercentileDisc (stopTimes , 50 ), tryPercentileDisc (stopTimes , 95 )
5000
+ row .Start50 , row .Start95 = tryPercentileDisc (startTimes , 50 ), tryPercentileDisc (startTimes , 95 )
4993
5001
return row , nil
4994
5002
}
4995
5003
@@ -6024,8 +6032,8 @@ func (q *FakeQuerier) GetUserLatencyInsights(_ context.Context, arg database.Get
6024
6032
Username : user .Username ,
6025
6033
AvatarURL : user .AvatarURL ,
6026
6034
TemplateIDs : seenTemplatesByUserID [userID ],
6027
- WorkspaceConnectionLatency50 : tryPercentile (latencies , 50 ),
6028
- WorkspaceConnectionLatency95 : tryPercentile (latencies , 95 ),
6035
+ WorkspaceConnectionLatency50 : tryPercentileCont (latencies , 50 ),
6036
+ WorkspaceConnectionLatency95 : tryPercentileCont (latencies , 95 ),
6029
6037
}
6030
6038
rows = append (rows , row )
6031
6039
}
@@ -6669,8 +6677,8 @@ func (q *FakeQuerier) GetWorkspaceAgentStats(_ context.Context, createdAfter tim
6669
6677
if ! ok {
6670
6678
continue
6671
6679
}
6672
- stat .WorkspaceConnectionLatency50 = tryPercentile (latencies , 50 )
6673
- stat .WorkspaceConnectionLatency95 = tryPercentile (latencies , 95 )
6680
+ stat .WorkspaceConnectionLatency50 = tryPercentileCont (latencies , 50 )
6681
+ stat .WorkspaceConnectionLatency95 = tryPercentileCont (latencies , 95 )
6674
6682
statByAgent [stat .AgentID ] = stat
6675
6683
}
6676
6684
@@ -6807,8 +6815,8 @@ func (q *FakeQuerier) GetWorkspaceAgentUsageStats(_ context.Context, createdAt t
6807
6815
for key , latencies := range latestAgentLatencies {
6808
6816
val , ok := latestAgentStats [key ]
6809
6817
if ok {
6810
- val .WorkspaceConnectionLatency50 = tryPercentile (latencies , 50 )
6811
- val .WorkspaceConnectionLatency95 = tryPercentile (latencies , 95 )
6818
+ val .WorkspaceConnectionLatency50 = tryPercentileCont (latencies , 50 )
6819
+ val .WorkspaceConnectionLatency95 = tryPercentileCont (latencies , 95 )
6812
6820
}
6813
6821
latestAgentStats [key ] = val
6814
6822
}
0 commit comments