55 "encoding/json"
66 "errors"
77 "fmt"
8+ "math"
89 "sort"
910 "sync"
1011 "time"
@@ -108,6 +109,12 @@ func (i *imlMonitorStatisticModule) AIChartOverview(ctx context.Context, service
108109 avgRequestPerSubscriber := 0.0
109110 if consumerNum != 0 {
110111 avgRequestPerSubscriber = float64 (item .StatusTotal ) / float64 (consumerNum )
112+ if avgRequestPerSubscriber > result .MaxRequestPerSubscriber {
113+ result .MaxRequestPerSubscriber = avgRequestPerSubscriber
114+ }
115+ }
116+ if result .MinRequestPerSubscriber == 0 || result .MinRequestPerSubscriber > avgRequestPerSubscriber {
117+ result .MinRequestPerSubscriber = avgRequestPerSubscriber
111118 }
112119 result .AvgRequestPerSubscriberOverview = append (result .AvgRequestPerSubscriberOverview , avgRequestPerSubscriber )
113120 result .RequestOverview = append (result .RequestOverview , & monitor_dto.StatusCodeOverview {
@@ -169,6 +176,12 @@ func (i *imlMonitorStatisticModule) AIChartOverview(ctx context.Context, service
169176 avgTotalPerSubscriber = float64 (item .TotalToken ) / float64 (consumerNum )
170177 avgOutputPerSubscriber = float64 (item .OutputToken ) / float64 (consumerNum )
171178 avgInputPerSubscriber = float64 (item .InputToken ) / float64 (consumerNum )
179+ if avgTotalPerSubscriber > result .MaxTokenPerSubscriber {
180+ result .MaxTokenPerSubscriber = avgTotalPerSubscriber
181+ }
182+ }
183+ if result .MinTokenPerSubscriber == 0 || result .MinTokenPerSubscriber > avgTotalPerSubscriber {
184+ result .MinTokenPerSubscriber = avgTotalPerSubscriber
172185 }
173186
174187 result .AvgTokenPerSubscriberOverview = append (result .AvgTokenPerSubscriberOverview , & monitor_dto.TokenFloatOverview {
@@ -178,13 +191,6 @@ func (i *imlMonitorStatisticModule) AIChartOverview(ctx context.Context, service
178191 })
179192
180193 }
181- //avgTokenPerSubscriber := 0.0
182- //if totalConsumerCount != 0 {
183- // avgTokenPerSubscriber = float64(summary.TotalToken) / float64(totalConsumerCount)
184- //}
185- //result.AvgToken = avgTokenPerSubscriber
186- //result.MaxToken = maxToken
187- //result.MinToken = minToken
188194 result .TokenTotal = summary .TotalToken
189195 result .InputTokenTotal = summary .InputToken
190196 result .OutputTokenTotal = summary .OutputToken
@@ -202,12 +208,14 @@ func (i *imlMonitorStatisticModule) AIChartOverview(ctx context.Context, service
202208 if len (errs ) > 0 {
203209 return nil , fmt .Errorf ("errors occurred: %v" , errs )
204210 }
205- var maxTokenPerSecond , minTokenPerSecond , avgTokenPerSecond float64 = 0 , 0 , 0
211+ sumResponseTime := 0.0
212+ var maxTokenPerSecond , minTokenPerSecond float64 = 0 , 0
213+
206214 for index , token := range totalTokens {
207215 var p float64 = 0
208216 if len (sumResponseTimes ) > index && sumResponseTimes [index ] > 0 {
209- // 由于时间单位是ms,因此需要✖️1000
210- p = float64 ( token ) * 1000 / float64 (sumResponseTimes [index ])
217+ p = math . Round ( float64 ( token ) * 1000 * 100 / float64 ( sumResponseTimes [ index ])) / 100
218+ sumResponseTime += float64 (sumResponseTimes [index ])
211219 }
212220 result .AvgTokenOverview = append (result .AvgTokenOverview , p )
213221 if maxTokenPerSecond < p {
@@ -216,10 +224,9 @@ func (i *imlMonitorStatisticModule) AIChartOverview(ctx context.Context, service
216224 if minTokenPerSecond == 0 || minTokenPerSecond > p {
217225 minTokenPerSecond = p
218226 }
219- avgTokenPerSecond += p
220227 }
221- if len ( sumResponseTimes ) > 0 {
222- result .AvgToken = avgTokenPerSecond / float64 (len ( sumResponseTimes ))
228+ if sumResponseTime > 0 {
229+ result .AvgToken = math . Round ( float64 (result . TokenTotal ) * 1000 * 100 / sumResponseTime ) / 100
223230 }
224231 result .MaxToken = maxTokenPerSecond
225232 result .MinToken = minTokenPerSecond
@@ -258,12 +265,17 @@ func (i *imlMonitorStatisticModule) RestChartOverview(ctx context.Context, servi
258265 result .AvgRequestPerSubscriberOverview = make ([]float64 , 0 , len (items ))
259266 result .RequestOverview = make ([]* monitor_dto.StatusCodeOverview , 0 , len (items ))
260267 for index , item := range items {
261- t := date [index ]
262- log .Infof ("date: %v, item: %v" , t , item )
263268 consumerNum := consumerMap [date [index ]]
264269 avgRequestPerSubscriber := 0.0
265270 if consumerNum != 0 {
266271 avgRequestPerSubscriber = float64 (summary .StatusTotal ) / float64 (consumerNum )
272+ if avgRequestPerSubscriber > result .MaxRequestPerSubscriber {
273+ result .MaxRequestPerSubscriber = avgRequestPerSubscriber
274+ }
275+
276+ }
277+ if result .MinRequestPerSubscriber == 0 || avgRequestPerSubscriber < result .MinRequestPerSubscriber {
278+ result .MinRequestPerSubscriber = avgRequestPerSubscriber
267279 }
268280 result .AvgRequestPerSubscriberOverview = append (result .AvgRequestPerSubscriberOverview , avgRequestPerSubscriber )
269281 result .RequestOverview = append (result .RequestOverview , & monitor_dto.StatusCodeOverview {
@@ -272,10 +284,7 @@ func (i *imlMonitorStatisticModule) RestChartOverview(ctx context.Context, servi
272284 Status5xx : item .Status5xx ,
273285 })
274286 }
275- //avgRequestPerSubscriber := 0.0
276- //if totalConsumerCount != 0 {
277- // avgRequestPerSubscriber = float64(summary.StatusTotal) / float64(totalConsumerCount)
278- //}
287+
279288 result .RequestTotal = summary .StatusTotal
280289 result .Request2xxTotal = summary .Status2xx
281290 result .Request4xxTotal = summary .Status4xx
@@ -318,6 +327,13 @@ func (i *imlMonitorStatisticModule) RestChartOverview(ctx context.Context, servi
318327 avgTrafficPerSubscriber := 0.0
319328 if consumerNum != 0 {
320329 avgTrafficPerSubscriber = float64 (item .StatusTotal ) / float64 (consumerNum )
330+ if avgTrafficPerSubscriber > result .MaxTrafficPerSubscriber {
331+ result .MaxTrafficPerSubscriber = avgTrafficPerSubscriber
332+ }
333+
334+ }
335+ if result .MinTrafficPerSubscriber == 0 || result .MinTrafficPerSubscriber > avgTrafficPerSubscriber {
336+ result .MinTrafficPerSubscriber = avgTrafficPerSubscriber
321337 }
322338 result .AvgTrafficPerSubscriberOverview = append (result .AvgTrafficPerSubscriberOverview , avgTrafficPerSubscriber )
323339 }
@@ -425,10 +441,15 @@ func (i *imlMonitorStatisticModule) Top(ctx context.Context, serviceId string, s
425441 appMap := utils .SliceToMap (apps , func (t * service.Service ) string {
426442 return t .Id
427443 })
444+ appMap ["apipark-global" ] = & service.Service {
445+ Id : "apipark-global" ,
446+ Name : "System Consumer" ,
447+ }
428448 for _ , item := range result {
429449 if v , ok := appMap [item .Key ]; ok {
430450 consumersResult = append (consumersResult , generateTopN (v .Id , v .Name , item , apiKind ))
431451 }
452+
432453 }
433454 }()
434455
0 commit comments