@@ -269,7 +269,7 @@ type data struct {
269269 presetParameters []database.TemplateVersionPresetParameter
270270}
271271
272- func tryPercentile (fs []float64 , p float64 ) float64 {
272+ func tryPercentileCont (fs []float64 , p float64 ) float64 {
273273 if len (fs ) == 0 {
274274 return - 1
275275 }
@@ -282,6 +282,14 @@ func tryPercentile(fs []float64, p float64) float64 {
282282 return fs [lower ] + (fs [upper ]- fs [lower ])* (pos - float64 (lower ))
283283}
284284
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+
285293func validateDatabaseTypeWithValid (v reflect.Value ) (handled bool , err error ) {
286294 if v .Kind () == reflect .Struct {
287295 return false , nil
@@ -2790,8 +2798,8 @@ func (q *FakeQuerier) GetDeploymentWorkspaceAgentStats(_ context.Context, create
27902798 latencies = append (latencies , agentStat .ConnectionMedianLatencyMS )
27912799 }
27922800
2793- stat .WorkspaceConnectionLatency50 = tryPercentile (latencies , 50 )
2794- stat .WorkspaceConnectionLatency95 = tryPercentile (latencies , 95 )
2801+ stat .WorkspaceConnectionLatency50 = tryPercentileCont (latencies , 50 )
2802+ stat .WorkspaceConnectionLatency95 = tryPercentileCont (latencies , 95 )
27952803
27962804 return stat , nil
27972805}
@@ -2839,8 +2847,8 @@ func (q *FakeQuerier) GetDeploymentWorkspaceAgentUsageStats(_ context.Context, c
28392847 stat .WorkspaceTxBytes += agentStat .TxBytes
28402848 latencies = append (latencies , agentStat .ConnectionMedianLatencyMS )
28412849 }
2842- stat .WorkspaceConnectionLatency50 = tryPercentile (latencies , 50 )
2843- stat .WorkspaceConnectionLatency95 = tryPercentile (latencies , 95 )
2850+ stat .WorkspaceConnectionLatency50 = tryPercentileCont (latencies , 50 )
2851+ stat .WorkspaceConnectionLatency95 = tryPercentileCont (latencies , 95 )
28442852
28452853 for _ , agentStat := range sessions {
28462854 stat .SessionCountVSCode += agentStat .SessionCountVSCode
@@ -4987,9 +4995,9 @@ func (q *FakeQuerier) GetTemplateAverageBuildTime(ctx context.Context, arg datab
49874995 }
49884996
49894997 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 )
49935001 return row , nil
49945002}
49955003
@@ -6024,8 +6032,8 @@ func (q *FakeQuerier) GetUserLatencyInsights(_ context.Context, arg database.Get
60246032 Username : user .Username ,
60256033 AvatarURL : user .AvatarURL ,
60266034 TemplateIDs : seenTemplatesByUserID [userID ],
6027- WorkspaceConnectionLatency50 : tryPercentile (latencies , 50 ),
6028- WorkspaceConnectionLatency95 : tryPercentile (latencies , 95 ),
6035+ WorkspaceConnectionLatency50 : tryPercentileCont (latencies , 50 ),
6036+ WorkspaceConnectionLatency95 : tryPercentileCont (latencies , 95 ),
60296037 }
60306038 rows = append (rows , row )
60316039 }
@@ -6669,8 +6677,8 @@ func (q *FakeQuerier) GetWorkspaceAgentStats(_ context.Context, createdAfter tim
66696677 if ! ok {
66706678 continue
66716679 }
6672- stat .WorkspaceConnectionLatency50 = tryPercentile (latencies , 50 )
6673- stat .WorkspaceConnectionLatency95 = tryPercentile (latencies , 95 )
6680+ stat .WorkspaceConnectionLatency50 = tryPercentileCont (latencies , 50 )
6681+ stat .WorkspaceConnectionLatency95 = tryPercentileCont (latencies , 95 )
66746682 statByAgent [stat .AgentID ] = stat
66756683 }
66766684
@@ -6807,8 +6815,8 @@ func (q *FakeQuerier) GetWorkspaceAgentUsageStats(_ context.Context, createdAt t
68076815 for key , latencies := range latestAgentLatencies {
68086816 val , ok := latestAgentStats [key ]
68096817 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 )
68126820 }
68136821 latestAgentStats [key ] = val
68146822 }
0 commit comments