Skip to content

Commit 80d1637

Browse files
committed
refactor: returning null on missing values
1 parent e7e3566 commit 80d1637

File tree

8 files changed

+39
-35
lines changed

8 files changed

+39
-35
lines changed

backend/pkg/api/data_access/dummy.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -379,8 +379,8 @@ func (*DummyService) GetValidatorDashboardGroupSummary(ctx context.Context, dash
379379
return getDummyStruct[t.VDBGroupSummaryData](ctx)
380380
}
381381

382-
func (*DummyService) GetValidatorDashboardSummaryChart(ctx context.Context, dashboardId t.VDBId, groupIds []int64, efficiency enums.VDBSummaryChartEfficiencyType, aggregation enums.ChartAggregation, afterTs uint64, beforeTs uint64) (*t.ChartData[int, float64], error) {
383-
return getDummyStruct[t.ChartData[int, float64]](ctx)
382+
func (*DummyService) GetValidatorDashboardSummaryChart(ctx context.Context, dashboardId t.VDBId, groupIds []int64, efficiency enums.VDBSummaryChartEfficiencyType, aggregation enums.ChartAggregation, afterTs uint64, beforeTs uint64) (*t.ChartData[int, *float64], error) {
383+
return getDummyStruct[t.ChartData[int, *float64]](ctx)
384384
}
385385

386386
func (*DummyService) GetValidatorDashboardSummaryValidators(ctx context.Context, dashboardId t.VDBId, groupId int64) (*t.VDBGeneralSummaryValidators, error) {

backend/pkg/api/data_access/vdb.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ type ValidatorDashboardRepository interface {
4848

4949
GetValidatorDashboardSummary(ctx context.Context, dashboardId t.VDBId, period enums.TimePeriod, cursor string, colSort t.Sort[enums.VDBSummaryColumn], search string, limit uint64, protocolModes t.VDBProtocolModes) ([]t.VDBSummaryTableRow, *t.Paging, error)
5050
GetValidatorDashboardGroupSummary(ctx context.Context, dashboardId t.VDBId, groupId int64, period enums.TimePeriod, protocolModes t.VDBProtocolModes) (*t.VDBGroupSummaryData, error)
51-
GetValidatorDashboardSummaryChart(ctx context.Context, dashboardId t.VDBId, groupIds []int64, efficiencyType enums.VDBSummaryChartEfficiencyType, aggregation enums.ChartAggregation, afterTs uint64, beforeTs uint64) (*t.ChartData[int, float64], error)
51+
GetValidatorDashboardSummaryChart(ctx context.Context, dashboardId t.VDBId, groupIds []int64, efficiencyType enums.VDBSummaryChartEfficiencyType, aggregation enums.ChartAggregation, afterTs uint64, beforeTs uint64) (*t.ChartData[int, *float64], error)
5252
GetValidatorDashboardSummaryValidators(ctx context.Context, dashboardId t.VDBId, groupId int64) (*t.VDBGeneralSummaryValidators, error)
5353
GetValidatorDashboardSyncSummaryValidators(ctx context.Context, dashboardId t.VDBId, groupId int64, period enums.TimePeriod) (*t.VDBSyncSummaryValidators, error)
5454
GetValidatorDashboardSlashingsSummaryValidators(ctx context.Context, dashboardId t.VDBId, groupId int64, period enums.TimePeriod) (*t.VDBSlashingsSummaryValidators, error)

backend/pkg/api/data_access/vdb_summary.go

Lines changed: 28 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -813,17 +813,30 @@ func (d *DataAccessService) GetValidatorDashboardGroupSummary(ctx context.Contex
813813
return ret, nil
814814
}
815815

816+
func calcEfficiencyNulled(dividend, divisor decimal.Decimal) *float64 {
817+
if divisor.IsZero() {
818+
return nil
819+
}
820+
efficiency := calcEfficiency(dividend, divisor)
821+
return &efficiency
822+
}
823+
816824
func calcEfficiency(dividend, divisor decimal.Decimal) float64 {
817825
if divisor.IsZero() {
818-
return 0
826+
return 100
827+
}
828+
eff := dividend.Div(divisor).InexactFloat64() * 100
829+
if eff > 100 {
830+
log.Error(nil, "efficiency is greater than 100%", 1, map[string]interface{}{"efficiency": eff})
831+
eff = 100
819832
}
820-
return dividend.Div(divisor).InexactFloat64() * 100
833+
return eff
821834
}
822835

823836
// for summary charts: series id is group id, no stack
824837

825-
func (d *DataAccessService) GetValidatorDashboardSummaryChart(ctx context.Context, dashboardId t.VDBId, groupIds []int64, efficiency enums.VDBSummaryChartEfficiencyType, aggregation enums.ChartAggregation, afterTs uint64, beforeTs uint64) (*t.ChartData[int, float64], error) {
826-
ret := &t.ChartData[int, float64]{}
838+
func (d *DataAccessService) GetValidatorDashboardSummaryChart(ctx context.Context, dashboardId t.VDBId, groupIds []int64, efficiency enums.VDBSummaryChartEfficiencyType, aggregation enums.ChartAggregation, afterTs uint64, beforeTs uint64) (*t.ChartData[int, *float64], error) {
839+
ret := &t.ChartData[int, *float64]{}
827840

828841
if len(groupIds) == 0 { // short circuit if no groups are selected
829842
return ret, nil
@@ -929,26 +942,22 @@ func (d *DataAccessService) GetValidatorDashboardSummaryChart(ctx context.Contex
929942

930943
// convert the returned data to the expected return type (not pretty)
931944
tsMap := make(map[time.Time]bool)
932-
data := make(map[time.Time]map[int64]float64)
945+
data := make(map[time.Time]map[int64]*float64)
933946
groupMap := make(map[int64]bool)
934947

935948
totalEfficiencyMap := make(map[time.Time]*t.VDBValidatorSummaryChartRow)
936949
for _, row := range queryResults {
937950
tsMap[row.Timestamp] = true
938-
939951
if data[row.Timestamp] == nil {
940-
data[row.Timestamp] = make(map[int64]float64)
952+
data[row.Timestamp] = make(map[int64]*float64)
941953
}
942954

943955
if !dashboardId.AggregateGroups && requestedGroupsMap[row.GroupId] {
944-
data[row.Timestamp][row.GroupId] = calcEfficiency(row.EfficiencyDividend, row.EfficiencyDivisor)
945-
if data[row.Timestamp][row.GroupId] == 0 {
956+
eff := calcEfficiencyNulled(row.EfficiencyDividend, row.EfficiencyDivisor)
957+
if eff == nil {
946958
continue
947959
}
948-
if data[row.Timestamp][row.GroupId] > 100 {
949-
log.Error(nil, "efficiency is greater than 100%", 0, map[string]interface{}{"efficiency": efficiency})
950-
data[row.Timestamp][row.GroupId] = 100
951-
}
960+
data[row.Timestamp][row.GroupId] = eff
952961
groupMap[row.GroupId] = true
953962
}
954963

@@ -975,7 +984,7 @@ func (d *DataAccessService) GetValidatorDashboardSummaryChart(ctx context.Contex
975984
}
976985

977986
for ts := range tsMap {
978-
data[ts][int64(t.NetworkAverage)] = averageNetworkEfficiency
987+
data[ts][int64(t.NetworkAverage)] = &averageNetworkEfficiency
979988
}
980989
groupMap[t.NetworkAverage] = true
981990
}
@@ -986,14 +995,7 @@ func (d *DataAccessService) GetValidatorDashboardSummaryChart(ctx context.Contex
986995
totalLineGroupId = t.DefaultGroupId
987996
}
988997
for _, row := range totalEfficiencyMap {
989-
data[row.Timestamp][totalLineGroupId] = calcEfficiency(row.EfficiencyDividend, row.EfficiencyDivisor)
990-
if data[row.Timestamp][totalLineGroupId] == 0 {
991-
continue
992-
}
993-
if data[row.Timestamp][totalLineGroupId] > 100 {
994-
log.Error(nil, "efficiency is greater than 100%", 0, map[string]interface{}{"efficiency": efficiency})
995-
data[row.Timestamp][totalLineGroupId] = 100
996-
}
998+
data[row.Timestamp][totalLineGroupId] = calcEfficiencyNulled(row.EfficiencyDividend, row.EfficiencyDivisor)
997999
}
9981000
groupMap[totalLineGroupId] = true
9991001
}
@@ -1013,13 +1015,13 @@ func (d *DataAccessService) GetValidatorDashboardSummaryChart(ctx context.Contex
10131015
for _, ts := range tsArray {
10141016
ret.Categories = append(ret.Categories, uint64(ts.Unix()))
10151017
}
1016-
ret.Series = make([]t.ChartSeries[int, float64], 0, len(groupsArray))
1018+
ret.Series = make([]t.ChartSeries[int, *float64], 0, len(groupsArray))
10171019

1018-
seriesMap := make(map[int64]*t.ChartSeries[int, float64])
1020+
seriesMap := make(map[int64]*t.ChartSeries[int, *float64])
10191021
for _, group := range groupsArray {
1020-
series := t.ChartSeries[int, float64]{
1022+
series := t.ChartSeries[int, *float64]{
10211023
Id: int(group),
1022-
Data: make([]float64, 0, len(tsMap)),
1024+
Data: make([]*float64, 0, len(tsMap)),
10231025
}
10241026
seriesMap[group] = &series
10251027
}

backend/pkg/api/types/common.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,13 +72,13 @@ type PercentageDetails[T any] struct {
7272
MaxValue T `json:"max_value"`
7373
}
7474

75-
type ChartSeries[I int | string, D float64 | decimal.Decimal] struct {
75+
type ChartSeries[I int | string, D *float64 | float64 | decimal.Decimal] struct {
7676
Id I `json:"id"` // id may be a string or an int
7777
Property string `json:"property,omitempty" tstype:"'el' | 'cl'"` // for stacking bar charts
7878
Data []D `json:"data"` // y-axis values
7979
}
8080

81-
type ChartData[I int | string, D float64 | decimal.Decimal] struct {
81+
type ChartData[I int | string, D *float64 | float64 | decimal.Decimal] struct {
8282
Categories []uint64 `json:"categories"` // x-axis
8383
Series []ChartSeries[I, D] `json:"series"`
8484
}

backend/pkg/api/types/validator_dashboard.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ type VDBGroupSummaryData struct {
114114
}
115115
type GetValidatorDashboardGroupSummaryResponse ApiDataResponse[VDBGroupSummaryData]
116116

117-
type GetValidatorDashboardSummaryChartResponse ApiDataResponse[ChartData[int, float64]] // line chart, series id is group id
117+
type GetValidatorDashboardSummaryChartResponse ApiDataResponse[ChartData[int, *float64]] // line chart, series id is group id
118118

119119
// ------------------------------------------------------------
120120
// Summary Validators

frontend/components/dashboard/chart/DashboardChartSummary.vue

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,9 +208,11 @@ const loadData = async () => {
208208
name = getGroupLabel($t, element.id, groups.value, allGroups)
209209
}
210210
const newObj: SeriesOption = {
211+
connectNulls: false,
211212
data: element.data,
212213
name,
213214
smooth: false,
215+
step: 'end',
214216
symbol: 'none',
215217
type: 'line',
216218
}

frontend/types/api/common.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,12 @@ export interface PercentageDetails<T extends any> {
5959
min_value: T;
6060
max_value: T;
6161
}
62-
export interface ChartSeries<I extends number /* int */ | string, D extends number /* float64 */ | string /* decimal.Decimal */> {
62+
export interface ChartSeries<I extends number /* int */ | string, D extends number /* float64 */ | undefined | number /* float64 */ | string /* decimal.Decimal */> {
6363
id: I; // id may be a string or an int
6464
property?: 'el' | 'cl'; // for stacking bar charts
6565
data: D[]; // y-axis values
6666
}
67-
export interface ChartData<I extends number /* int */ | string, D extends number /* float64 */ | string /* decimal.Decimal */> {
67+
export interface ChartData<I extends number /* int */ | string, D extends number /* float64 */ | undefined | number /* float64 */ | string /* decimal.Decimal */> {
6868
categories: number /* uint64 */[]; // x-axis
6969
series: ChartSeries<I, D>[];
7070
}

frontend/types/api/validator_dashboard.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ export interface VDBGroupSummaryData {
9494
};
9595
}
9696
export type GetValidatorDashboardGroupSummaryResponse = ApiDataResponse<VDBGroupSummaryData>;
97-
export type GetValidatorDashboardSummaryChartResponse = ApiDataResponse<ChartData<number /* int */, number /* float64 */>>; // line chart, series id is group id
97+
export type GetValidatorDashboardSummaryChartResponse = ApiDataResponse<ChartData<number /* int */, number /* float64 */ | undefined>>; // line chart, series id is group id
9898
/**
9999
* ------------------------------------------------------------
100100
* Summary Validators

0 commit comments

Comments
 (0)