perf(monitor): aggregate realtime workspace
This commit is contained in:
@@ -488,6 +488,10 @@ func (s *Service) MonitorSummary(ctx context.Context, query url.Values) (Monitor
|
||||
if err != nil {
|
||||
return MonitorSummary{}, err
|
||||
}
|
||||
return s.buildMonitorSummary(ctx, query, vehicles)
|
||||
}
|
||||
|
||||
func (s *Service) buildMonitorSummary(ctx context.Context, query url.Values, vehicles Page[VehicleRealtimeRow]) (MonitorSummary, error) {
|
||||
dashboard, err := s.store.DashboardSummary(ctx)
|
||||
if err != nil {
|
||||
return MonitorSummary{}, err
|
||||
@@ -533,6 +537,34 @@ func (s *Service) MonitorSummary(ctx context.Context, query url.Values) (Monitor
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (s *Service) MonitorWorkspace(ctx context.Context, query url.Values) (MonitorWorkspaceResponse, error) {
|
||||
vehicles, err := s.store.VehicleRealtime(ctx, normalizeMonitorQuery(query))
|
||||
if err != nil {
|
||||
return MonitorWorkspaceResponse{}, err
|
||||
}
|
||||
summary, err := s.buildMonitorSummary(ctx, query, vehicles)
|
||||
if err != nil {
|
||||
return MonitorWorkspaceResponse{}, err
|
||||
}
|
||||
monitorMap, err := buildMonitorMapResponse(vehicles, query)
|
||||
if err != nil {
|
||||
return MonitorWorkspaceResponse{}, err
|
||||
}
|
||||
railLimit := parsePositive(query.Get("railLimit"), 200)
|
||||
if railLimit > 200 {
|
||||
railLimit = 200
|
||||
}
|
||||
if railLimit > len(vehicles.Items) {
|
||||
railLimit = len(vehicles.Items)
|
||||
}
|
||||
railItems := append([]VehicleRealtimeRow(nil), vehicles.Items[:railLimit]...)
|
||||
return MonitorWorkspaceResponse{
|
||||
Summary: summary,
|
||||
Vehicles: Page[VehicleRealtimeRow]{Items: railItems, Total: vehicles.Total, Limit: railLimit, Offset: 0},
|
||||
Map: monitorMap,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *Service) MonitorMap(ctx context.Context, query url.Values) (MonitorMapResponse, error) {
|
||||
vehicles, err := s.store.VehicleRealtime(ctx, normalizeMonitorQuery(query))
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user