@@ -268,7 +268,7 @@ type data struct {
268
268
presetParameters []database.TemplateVersionPresetParameter
269
269
}
270
270
271
- func tryPercentile (fs []float64 , p float64 ) float64 {
271
+ func tryPercentileCont (fs []float64 , p float64 ) float64 {
272
272
if len (fs ) == 0 {
273
273
return - 1
274
274
}
@@ -281,6 +281,14 @@ func tryPercentile(fs []float64, p float64) float64 {
281
281
return fs [lower ] + (fs [upper ]- fs [lower ])* (pos - float64 (lower ))
282
282
}
283
283
284
+ func tryPercentileDisc (fs []float64 , p float64 ) float64 {
285
+ if len (fs ) == 0 {
286
+ return - 1
287
+ }
288
+ sort .Float64s (fs )
289
+ return fs [max (int (math .Ceil (float64 (len (fs ))* p / 100 - 1 )), 0 )]
290
+ }
291
+
284
292
func validateDatabaseTypeWithValid (v reflect.Value ) (handled bool , err error ) {
285
293
if v .Kind () == reflect .Struct {
286
294
return false , nil
@@ -2802,8 +2810,8 @@ func (q *FakeQuerier) GetDeploymentWorkspaceAgentStats(_ context.Context, create
2802
2810
latencies = append (latencies , agentStat .ConnectionMedianLatencyMS )
2803
2811
}
2804
2812
2805
- stat .WorkspaceConnectionLatency50 = tryPercentile (latencies , 50 )
2806
- stat .WorkspaceConnectionLatency95 = tryPercentile (latencies , 95 )
2813
+ stat .WorkspaceConnectionLatency50 = tryPercentileCont (latencies , 50 )
2814
+ stat .WorkspaceConnectionLatency95 = tryPercentileCont (latencies , 95 )
2807
2815
2808
2816
return stat , nil
2809
2817
}
@@ -2851,8 +2859,8 @@ func (q *FakeQuerier) GetDeploymentWorkspaceAgentUsageStats(_ context.Context, c
2851
2859
stat .WorkspaceTxBytes += agentStat .TxBytes
2852
2860
latencies = append (latencies , agentStat .ConnectionMedianLatencyMS )
2853
2861
}
2854
- stat .WorkspaceConnectionLatency50 = tryPercentile (latencies , 50 )
2855
- stat .WorkspaceConnectionLatency95 = tryPercentile (latencies , 95 )
2862
+ stat .WorkspaceConnectionLatency50 = tryPercentileCont (latencies , 50 )
2863
+ stat .WorkspaceConnectionLatency95 = tryPercentileCont (latencies , 95 )
2856
2864
2857
2865
for _ , agentStat := range sessions {
2858
2866
stat .SessionCountVSCode += agentStat .SessionCountVSCode
@@ -4989,9 +4997,9 @@ func (q *FakeQuerier) GetTemplateAverageBuildTime(ctx context.Context, arg datab
4989
4997
}
4990
4998
4991
4999
var row database.GetTemplateAverageBuildTimeRow
4992
- row .Delete50 , row .Delete95 = tryPercentile (deleteTimes , 50 ), tryPercentile (deleteTimes , 95 )
4993
- row .Stop50 , row .Stop95 = tryPercentile (stopTimes , 50 ), tryPercentile (stopTimes , 95 )
4994
- row .Start50 , row .Start95 = tryPercentile (startTimes , 50 ), tryPercentile (startTimes , 95 )
5000
+ row .Delete50 , row .Delete95 = tryPercentileDisc (deleteTimes , 50 ), tryPercentileDisc (deleteTimes , 95 )
5001
+ row .Stop50 , row .Stop95 = tryPercentileDisc (stopTimes , 50 ), tryPercentileDisc (stopTimes , 95 )
5002
+ row .Start50 , row .Start95 = tryPercentileDisc (startTimes , 50 ), tryPercentileDisc (startTimes , 95 )
4995
5003
return row , nil
4996
5004
}
4997
5005
@@ -6026,8 +6034,8 @@ func (q *FakeQuerier) GetUserLatencyInsights(_ context.Context, arg database.Get
6026
6034
Username : user .Username ,
6027
6035
AvatarURL : user .AvatarURL ,
6028
6036
TemplateIDs : seenTemplatesByUserID [userID ],
6029
- WorkspaceConnectionLatency50 : tryPercentile (latencies , 50 ),
6030
- WorkspaceConnectionLatency95 : tryPercentile (latencies , 95 ),
6037
+ WorkspaceConnectionLatency50 : tryPercentileCont (latencies , 50 ),
6038
+ WorkspaceConnectionLatency95 : tryPercentileCont (latencies , 95 ),
6031
6039
}
6032
6040
rows = append (rows , row )
6033
6041
}
@@ -6671,8 +6679,8 @@ func (q *FakeQuerier) GetWorkspaceAgentStats(_ context.Context, createdAfter tim
6671
6679
if ! ok {
6672
6680
continue
6673
6681
}
6674
- stat .WorkspaceConnectionLatency50 = tryPercentile (latencies , 50 )
6675
- stat .WorkspaceConnectionLatency95 = tryPercentile (latencies , 95 )
6682
+ stat .WorkspaceConnectionLatency50 = tryPercentileCont (latencies , 50 )
6683
+ stat .WorkspaceConnectionLatency95 = tryPercentileCont (latencies , 95 )
6676
6684
statByAgent [stat .AgentID ] = stat
6677
6685
}
6678
6686
@@ -6809,8 +6817,8 @@ func (q *FakeQuerier) GetWorkspaceAgentUsageStats(_ context.Context, createdAt t
6809
6817
for key , latencies := range latestAgentLatencies {
6810
6818
val , ok := latestAgentStats [key ]
6811
6819
if ok {
6812
- val .WorkspaceConnectionLatency50 = tryPercentile (latencies , 50 )
6813
- val .WorkspaceConnectionLatency95 = tryPercentile (latencies , 95 )
6820
+ val .WorkspaceConnectionLatency50 = tryPercentileCont (latencies , 50 )
6821
+ val .WorkspaceConnectionLatency95 = tryPercentileCont (latencies , 95 )
6814
6822
}
6815
6823
latestAgentStats [key ] = val
6816
6824
}
0 commit comments