@@ -213,6 +213,14 @@ class SlsMonitor {
213
213
} ) . doCloudApiRequest ( data )
214
214
}
215
215
216
+ static sleep ( ms ) {
217
+ return new Promise ( ( resolve ) => {
218
+ setTimeout ( ( ) => {
219
+ resolve ( )
220
+ } , ms )
221
+ } )
222
+ }
223
+
216
224
mergeCustomByPeriod ( datas , period ) {
217
225
const len = datas . length
218
226
const newValues = [ ]
@@ -542,6 +550,7 @@ class SlsMonitor {
542
550
}
543
551
544
552
async getCustomMetrics ( region , announceInstance , rangeTime , period ) {
553
+ const apiQPSLimit = 8
545
554
const metricsRule = [
546
555
/ ^ ( G E T | P O S T | D E L | D E L E T E | P U T | O P T I O N S | H E A D ) _ ( [ a - z A - Z 0 - 9 ] + ) _ l a t e n c y $ / i,
547
556
/ ^ ( G E T | P O S T | D E L | D E L E T E | P U T | O P T I O N S | H E A D ) _ ( [ a - z A - Z 0 - 9 ] + ) _ ( \d + ) $ / i,
@@ -553,43 +562,67 @@ class SlsMonitor {
553
562
/ ^ 5 x x $ / i
554
563
]
555
564
565
+ const getMetricsResponse = ( promiseHandlers ) => {
566
+ return new Promise ( ( resolve , reject ) => {
567
+ Promise . all ( promiseHandlers )
568
+ . then ( ( results ) => {
569
+ resolve ( results )
570
+ } )
571
+ . catch ( ( error ) => {
572
+ reject ( error )
573
+ } )
574
+ } )
575
+ }
576
+
556
577
const filterAttributeName = function ( name , mRule ) {
557
578
const len = mRule . length
558
579
for ( var i = 0 ; i < len ; i ++ ) {
559
580
if ( name . match ( mRule [ i ] ) ) {
560
581
return true
561
582
}
562
583
}
584
+ return false
563
585
}
586
+
564
587
const metricAttributeHash = { }
565
- const requestHandlers = [ ]
588
+ let requestHandlers = [ ]
589
+ let responses = [ ]
590
+ let results
566
591
const attributes = await this . describeAttributes ( 0 , 100 )
567
592
for ( var i = 0 ; i < attributes . Response . Data . TotalCount ; i ++ ) {
568
593
const metricAttribute = attributes . Response . Data . Data [ i ]
569
594
570
- if ( filterAttributeName ( metricAttribute . AttributeName , metricsRule ) ) {
571
- metricAttributeHash [ metricAttribute . AttributeId ] = metricAttribute
572
- requestHandlers . push (
573
- this . describeCCMInstanceDatas (
574
- metricAttribute . AttributeId ,
575
- announceInstance ,
576
- rangeTime . rangeStart ,
577
- rangeTime . rangeEnd
578
- )
595
+ if ( ! filterAttributeName ( metricAttribute . AttributeName , metricsRule ) ) {
596
+ continue
597
+ }
598
+ metricAttributeHash [ metricAttribute . AttributeId ] = metricAttribute
599
+ requestHandlers . push (
600
+ this . describeCCMInstanceDatas (
601
+ metricAttribute . AttributeId ,
602
+ announceInstance ,
603
+ rangeTime . rangeStart ,
604
+ rangeTime . rangeEnd
579
605
)
606
+ )
607
+
608
+ if ( i > 0 && ! ( i % apiQPSLimit ) ) {
609
+ if ( i != apiQPSLimit ) {
610
+ await SlsMonitor . sleep ( 1000 )
611
+ }
612
+ results = await getMetricsResponse ( requestHandlers )
613
+ responses = responses . concat ( results )
614
+ requestHandlers = [ ]
580
615
}
581
616
}
582
-
583
- return new Promise ( ( resolve , reject ) => {
584
- Promise . all ( requestHandlers )
585
- . then ( ( results ) => {
586
- this . aggrCustomDatas ( results , period , metricAttributeHash )
587
- resolve ( results )
588
- } )
589
- . catch ( ( error ) => {
590
- reject ( error )
591
- } )
592
- } )
617
+ if ( requestHandlers . length == 0 ) {
618
+ this . aggrCustomDatas ( responses , period , metricAttributeHash )
619
+ return responses
620
+ }
621
+ await SlsMonitor . sleep ( 600 )
622
+ results = await getMetricsResponse ( requestHandlers )
623
+ responses = responses . concat ( results )
624
+ this . aggrCustomDatas ( responses , period , metricAttributeHash )
625
+ return responses
593
626
}
594
627
595
628
async getScfMetrics ( region , rangeTime , period , funcName , ns , version ) {
0 commit comments