feat(platform): add online vehicle statistics detail
This commit is contained in:
@@ -909,6 +909,56 @@ func (s *Service) OnlineStatisticsSummary(ctx context.Context, query url.Values)
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *Service) OnlineVehicleStatuses(ctx context.Context, query url.Values) (Page[OnlineVehicleStatusRow], error) {
|
||||
resolvedQuery, err := s.resolveVehicleQuery(ctx, query)
|
||||
if err != nil {
|
||||
return Page[OnlineVehicleStatusRow]{}, err
|
||||
}
|
||||
coverage, err := s.store.VehicleCoverage(ctx, resolvedQuery)
|
||||
if err != nil {
|
||||
return Page[OnlineVehicleStatusRow]{}, err
|
||||
}
|
||||
now := time.Now()
|
||||
items := make([]OnlineVehicleStatusRow, 0, len(coverage.Items))
|
||||
for _, row := range coverage.Items {
|
||||
items = append(items, OnlineVehicleStatusRow{
|
||||
VIN: row.VIN,
|
||||
Plate: row.Plate,
|
||||
Phone: row.Phone,
|
||||
OEM: row.OEM,
|
||||
Protocols: append([]string(nil), row.Protocols...),
|
||||
Online: row.Online,
|
||||
LastSeen: row.LastSeen,
|
||||
OfflineDurationMinutes: offlineDurationMinutes(row.Online, row.LastSeen, now),
|
||||
SourceCount: row.SourceCount,
|
||||
OnlineSourceCount: row.OnlineSourceCount,
|
||||
BindingStatus: row.BindingStatus,
|
||||
})
|
||||
}
|
||||
return Page[OnlineVehicleStatusRow]{
|
||||
Items: items,
|
||||
Total: coverage.Total,
|
||||
Limit: coverage.Limit,
|
||||
Offset: coverage.Offset,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func offlineDurationMinutes(online bool, lastSeen string, now time.Time) *int {
|
||||
if online {
|
||||
value := 0
|
||||
return &value
|
||||
}
|
||||
parsed, ok := parseVehicleServiceTime(lastSeen)
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
minutes := int(now.Sub(parsed).Minutes())
|
||||
if minutes < 0 {
|
||||
minutes = 0
|
||||
}
|
||||
return &minutes
|
||||
}
|
||||
|
||||
func (s *Service) QualitySummary(ctx context.Context, query url.Values) (QualitySummary, error) {
|
||||
return s.store.QualitySummary(ctx, query)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user