@@ -849,6 +849,9 @@ Combined validator get, performance, attestation efficency, sync committee stati
849
849
Not public documented
850
850
*/
851
851
func ApiDashboard (w http.ResponseWriter , r * http.Request ) {
852
+ obs := utils .NewTimingsObserver ("ApiDashboard" )
853
+ defer obs .End (time .Second * 10 )
854
+
852
855
w .Header ().Set ("Content-Type" , "application/json" )
853
856
854
857
j := json .NewEncoder (w )
@@ -895,128 +898,83 @@ func ApiDashboard(w http.ResponseWriter, r *http.Request) {
895
898
896
899
if len (queryIndices ) > 0 {
897
900
g .Go (func () error {
898
- start := time . Now ()
901
+ defer obs . Timer ( "getGeneralValidatorInfoForAppDashboard" ) ()
899
902
var err error
900
903
validatorsData , err = getGeneralValidatorInfoForAppDashboard (queryIndices )
901
- elapsed := time .Since (start )
902
- if elapsed > 10 * time .Second {
903
- logger .Warnf ("getGeneralValidatorInfoForAppDashboard(%v) took longer than 10 sec" , queryIndices )
904
- }
905
904
return err
906
905
})
907
906
908
907
g .Go (func () error {
909
- start := time . Now ()
908
+ defer obs . Timer ( "getValidatorEffectiveness" ) ()
910
909
var err error
911
910
validatorEffectivenessData , err = getValidatorEffectiveness (epoch - 1 , queryIndices )
912
- elapsed := time .Since (start )
913
- if elapsed > 10 * time .Second {
914
- logger .Warnf ("getValidatorEffectiveness(%v, %v) took longer than 10 sec" , epoch - 1 , queryIndices )
915
- }
916
911
return err
917
912
})
918
913
919
914
g .Go (func () error {
920
- start := time . Now ()
915
+ defer obs . Timer ( "getRocketpoolValidators" ) ()
921
916
var err error
922
917
rocketpoolData , err = getRocketpoolValidators (queryIndices )
923
- elapsed := time .Since (start )
924
- if elapsed > 10 * time .Second {
925
- logger .Warnf ("getRocketpoolValidators(%v) took longer than 10 sec" , queryIndices )
926
- }
927
918
return err
928
919
})
929
920
930
921
g .Go (func () error {
931
- start := time . Now ()
922
+ defer obs . Timer ( "getValidatorExecutionPerformance" ) ()
932
923
var err error
933
924
executionPerformance , err = getValidatorExecutionPerformance (queryIndices )
934
- elapsed := time .Since (start )
935
- if elapsed > 10 * time .Second {
936
- logger .Warnf ("getValidatorExecutionPerformance(%v) took longer than 10 sec" , queryIndices )
937
- }
938
925
return err
939
926
})
940
927
941
928
g .Go (func () error {
942
- start := time . Now ()
929
+ defer obs . Timer ( "getSyncCommitteeInfoForValidators" ) ()
943
930
var err error
944
931
period := utils .SyncPeriodOfEpoch (epoch )
945
932
currentSyncCommittee , err = getSyncCommitteeInfoForValidators (queryIndices , period )
946
- elapsed := time .Since (start )
947
- if elapsed > 10 * time .Second {
948
- logger .Warnf ("getSyncCommitteeInfoForValidators(%v, %v) took longer than 10 sec" , queryIndices , period )
949
- }
950
933
return err
951
934
})
952
935
953
936
g .Go (func () error {
954
- start := time . Now ()
937
+ defer obs . Timer ( fmt . Sprintf ( "getSyncCommitteeInfoForValidators+1" )) ()
955
938
var err error
956
939
period := utils .SyncPeriodOfEpoch (epoch ) + 1
957
940
nextSyncCommittee , err = getSyncCommitteeInfoForValidators (queryIndices , period )
958
- elapsed := time .Since (start )
959
- if elapsed > 10 * time .Second {
960
- logger .Warnf ("SyncPeriodOfEpoch(%v) + 1 took longer than 10 sec" , epoch )
961
- logger .Warnf ("getSyncCommitteeInfoForValidators(%v, %v) took longer than 10 sec" , queryIndices , period )
962
- }
963
941
return err
964
942
})
965
943
966
944
g .Go (func () error {
967
- start := time . Now ()
945
+ defer obs . Timer ( fmt . Sprintf ( "getSyncCommitteeStatistics" )) ()
968
946
var err error
969
947
syncCommitteeStats , err = getSyncCommitteeStatistics (queryIndices , epoch )
970
- elapsed := time .Since (start )
971
- if elapsed > 10 * time .Second {
972
- logger .Warnf ("getSyncCommitteeStatistics(%v, %v) took longer than 10 sec" , queryIndices , epoch )
973
- }
974
948
return err
975
949
})
976
950
977
951
g .Go (func () error {
978
- start := time . Now ()
952
+ defer obs . Timer ( fmt . Sprintf ( "getProposalLuckStats+1" )) ()
979
953
var err error
980
954
proposalLuckStats , err = getProposalLuckStats (queryIndices )
981
- elapsed := time .Since (start )
982
- if elapsed > 10 * time .Second {
983
- logger .Warnf ("getProposalLuck(%v, %v) took longer than 10 sec" , queryIndices , epoch )
984
- }
985
955
return err
986
956
})
987
957
}
988
958
}
989
959
990
960
g .Go (func () error {
991
- start := time . Now ()
961
+ defer obs . Timer ( fmt . Sprintf ( "getEpoch-1" )) ()
992
962
var err error
993
963
currentEpochData , err = getEpoch (int64 (epoch ) - 1 )
994
- elapsed := time .Since (start )
995
- if elapsed > 10 * time .Second {
996
- logger .Warnf ("getEpoch(%v) took longer than 10 sec" , int64 (epoch )- 1 )
997
- }
998
964
return err
999
965
})
1000
966
1001
967
g .Go (func () error {
1002
- start := time . Now ()
968
+ defer obs . Timer ( fmt . Sprintf ( "getEpoch-10" )) ()
1003
969
var err error
1004
970
olderEpochData , err = getEpoch (int64 (epoch ) - 10 )
1005
- elapsed := time .Since (start )
1006
- if elapsed > 10 * time .Second {
1007
- logger .Warnf ("getEpoch(%v) took longer than 10 sec" , int64 (epoch )- 10 )
1008
- }
1009
971
return err
1010
972
})
1011
973
1012
974
g .Go (func () error {
1013
- start := time . Now ()
975
+ defer obs . Timer ( fmt . Sprintf ( "getRocketpoolStats" )) ()
1014
976
var err error
1015
977
rocketpoolStats , err = getRocketpoolStats ()
1016
- elapsed := time .Since (start )
1017
- if elapsed > 10 * time .Second {
1018
- logger .Warnf ("getRocketpoolStats() took longer than 10 sec" )
1019
- }
1020
978
return err
1021
979
})
1022
980
@@ -1074,6 +1032,9 @@ func getSyncCommitteeInfoForValidators(validators []uint64, period uint64) ([]in
1074
1032
}
1075
1033
1076
1034
func getSyncCommitteeStatistics (validators []uint64 , epoch uint64 ) (* SyncCommitteesInfo , error ) {
1035
+ obs := utils .NewTimingsObserver ("getSyncCommitteeStatistics" )
1036
+ defer obs .End (time .Second * 10 )
1037
+
1077
1038
if epoch < utils .Config .Chain .ClConfig .AltairForkEpoch {
1078
1039
// no sync committee duties before altair fork
1079
1040
return & SyncCommitteesInfo {}, nil
@@ -1084,12 +1045,31 @@ func getSyncCommitteeStatistics(validators []uint64, epoch uint64) (*SyncCommitt
1084
1045
return & SyncCommitteesInfo {}, nil
1085
1046
}
1086
1047
1087
- expectedSlots , err := getExpectedSyncCommitteeSlots (validators , epoch )
1088
- if err != nil {
1089
- return nil , err
1090
- }
1048
+ g := errgroup.Group {}
1049
+
1050
+ var expectedSlots uint64
1051
+ g .Go (func () error {
1052
+ defer obs .Timer ("getExpectedSyncCommitteeSlots" )()
1053
+ var err error
1054
+ expectedSlots , err = getExpectedSyncCommitteeSlots (validators , epoch )
1055
+ if err != nil {
1056
+ return err
1057
+ }
1058
+ return nil
1059
+ })
1091
1060
1092
- stats , err := getSyncCommitteeSlotsStatistics (validators , epoch )
1061
+ var stats types.SyncCommitteesStats
1062
+ g .Go (func () error {
1063
+ defer obs .Timer ("getSyncCommitteeSlotsStatistics" )()
1064
+ var err error
1065
+ stats , err = getSyncCommitteeSlotsStatistics (validators , epoch )
1066
+ if err != nil {
1067
+ return err
1068
+ }
1069
+ return nil
1070
+ })
1071
+
1072
+ err := g .Wait ()
1093
1073
if err != nil {
1094
1074
return nil , err
1095
1075
}
@@ -1397,8 +1377,16 @@ func getRocketpoolValidators(queryIndices []uint64) ([]interface{}, error) {
1397
1377
}
1398
1378
1399
1379
func getGeneralValidatorInfoForAppDashboard (queryIndices []uint64 ) ([]interface {}, error ) {
1400
- // we use MAX(validatorindex)+1 instead of COUNT(*) for querying the rank_count for performance-reasons
1401
- rows , err := db .ReaderDb .Query (`
1380
+ obs := utils .NewTimingsObserver ("getGeneralValidatorInfoForAppDashboard" )
1381
+ defer obs .End (time .Second * 10 )
1382
+
1383
+ g := new (errgroup.Group )
1384
+
1385
+ var data []interface {}
1386
+ g .Go (func () error {
1387
+ defer obs .Timer ("getValidators" )()
1388
+ // we use MAX(validatorindex)+1 instead of COUNT(*) for querying the rank_count for performance-reasons
1389
+ rows , err := db .ReaderDb .Query (`
1402
1390
WITH maxValidatorIndex AS (
1403
1391
SELECT MAX(validatorindex)+1 as total_count
1404
1392
FROM validator_performance
@@ -1427,20 +1415,21 @@ func getGeneralValidatorInfoForAppDashboard(queryIndices []uint64) ([]interface{
1427
1415
LEFT JOIN validator_names ON validator_names.publickey = validators.pubkey
1428
1416
WHERE validators.validatorindex = ANY($1)
1429
1417
ORDER BY validators.validatorindex` , pq .Array (queryIndices ))
1430
- if err != nil {
1431
- return nil , fmt .Errorf ("error querying validators: %w" , err )
1432
- }
1433
- defer rows .Close ()
1434
-
1435
- data , err := utils .SqlRowsToJSON (rows )
1436
- if err != nil {
1437
- return nil , fmt .Errorf ("error converting validators to json: %w" , err )
1438
- }
1418
+ if err != nil {
1419
+ return fmt .Errorf ("error querying validators: %w" , err )
1420
+ }
1421
+ defer rows .Close ()
1439
1422
1440
- g := new (errgroup.Group )
1423
+ data , err = utils .SqlRowsToJSON (rows )
1424
+ if err != nil {
1425
+ return fmt .Errorf ("error converting validators to json: %w" , err )
1426
+ }
1427
+ return nil
1428
+ })
1441
1429
1442
1430
var balances map [uint64 ][]* types.ValidatorBalance
1443
1431
g .Go (func () error {
1432
+ defer obs .Timer ("GetValidatorBalanceHistory" )()
1444
1433
var err error
1445
1434
balances , err = db .BigtableClient .GetValidatorBalanceHistory (queryIndices , services .LatestEpoch (), services .LatestEpoch ())
1446
1435
if err != nil {
@@ -1451,6 +1440,7 @@ func getGeneralValidatorInfoForAppDashboard(queryIndices []uint64) ([]interface{
1451
1440
1452
1441
var currentDayIncome map [uint64 ]int64
1453
1442
g .Go (func () error {
1443
+ defer obs .Timer ("GetCurrentDayClIncome" )()
1454
1444
var err error
1455
1445
currentDayIncome , err = db .GetCurrentDayClIncome (queryIndices )
1456
1446
if err != nil {
@@ -1461,6 +1451,7 @@ func getGeneralValidatorInfoForAppDashboard(queryIndices []uint64) ([]interface{
1461
1451
1462
1452
var lastAttestationSlots map [uint64 ]uint64
1463
1453
g .Go (func () error {
1454
+ defer obs .Timer ("GetLastAttestationSlots" )()
1464
1455
var err error
1465
1456
lastAttestationSlots , err = db .BigtableClient .GetLastAttestationSlots (queryIndices )
1466
1457
if err != nil {
@@ -1469,11 +1460,12 @@ func getGeneralValidatorInfoForAppDashboard(queryIndices []uint64) ([]interface{
1469
1460
return nil
1470
1461
})
1471
1462
1472
- err = g .Wait ()
1463
+ err : = g .Wait ()
1473
1464
if err != nil {
1474
1465
return nil , fmt .Errorf ("error in validator errgroup: %w" , err )
1475
1466
}
1476
1467
1468
+ obsAggreate := obs .Timer ("aggregate" )
1477
1469
for _ , entry := range data {
1478
1470
eMap , ok := entry .(map [string ]interface {})
1479
1471
if ! ok {
@@ -1505,6 +1497,7 @@ func getGeneralValidatorInfoForAppDashboard(queryIndices []uint64) ([]interface{
1505
1497
}
1506
1498
}
1507
1499
}
1500
+ obsAggreate ()
1508
1501
1509
1502
return data , nil
1510
1503
}
0 commit comments