fix errors of Degraded Operations Visibility
This commit is contained in:
@@ -16,34 +16,39 @@ public class OperationsService : IOperationsService
|
||||
public async Task<IReadOnlyList<GatewayFleetItem>> GetGatewayFleetAsync(
|
||||
GatewayFleetFilter filter, CancellationToken ct)
|
||||
{
|
||||
await using var conn = new NpgsqlConnection(_db.Database.GetConnectionString());
|
||||
await conn.OpenAsync(ct);
|
||||
var query = _db.WardGateways
|
||||
.AsNoTracking()
|
||||
.Include(g => g.Site)
|
||||
.AsQueryable();
|
||||
|
||||
const string sql = """
|
||||
SELECT
|
||||
g.id,
|
||||
g.gateway_code AS GatewayCode,
|
||||
g.department AS Department,
|
||||
s.site_code AS SiteCode,
|
||||
s.name AS SiteName,
|
||||
g.status AS Status,
|
||||
g.reported_buffer_depth AS ReportedBufferDepth,
|
||||
g.last_heartbeat_at AS LastHeartbeatAt,
|
||||
g.last_sync_at AS LastSyncAt,
|
||||
EXTRACT(EPOCH FROM (NOW() - g.last_heartbeat_at)) / 60 AS MinutesSinceHeartbeat
|
||||
FROM ward_gateways g
|
||||
JOIN clinical_sites s ON s.id = g.site_id
|
||||
WHERE (@Status IS NULL OR g.status = @Status)
|
||||
AND (@SiteId IS NULL OR g.site_id = @SiteId)
|
||||
ORDER BY g.status DESC, MinutesSinceHeartbeat DESC NULLS LAST
|
||||
""";
|
||||
|
||||
var rows = await conn.QueryAsync<GatewayFleetItem>(sql, new
|
||||
if (!string.IsNullOrEmpty(filter.Status))
|
||||
{
|
||||
Status = filter.Status,
|
||||
SiteId = filter.SiteId
|
||||
});
|
||||
return rows.ToList();
|
||||
var status = GatewayStatusExtensions.FromDbString(filter.Status);
|
||||
query = query.Where(g => g.Status == status);
|
||||
}
|
||||
|
||||
if (filter.SiteId is Guid siteId)
|
||||
query = query.Where(g => g.SiteId == siteId);
|
||||
|
||||
var now = DateTimeOffset.UtcNow;
|
||||
return await query
|
||||
.OrderByDescending(g => g.Status)
|
||||
.ThenByDescending(g => g.LastHeartbeatAt == null)
|
||||
.ThenByDescending(g => g.LastHeartbeatAt)
|
||||
.Select(g => new GatewayFleetItem(
|
||||
g.Id,
|
||||
g.GatewayCode,
|
||||
g.Department,
|
||||
g.Site.SiteCode,
|
||||
g.Site.Name,
|
||||
g.Status.ToDbString(),
|
||||
g.ReportedBufferDepth,
|
||||
g.LastHeartbeatAt,
|
||||
g.LastSyncAt,
|
||||
g.LastHeartbeatAt == null
|
||||
? null
|
||||
: (double?)(now - g.LastHeartbeatAt.Value).TotalMinutes))
|
||||
.ToListAsync(ct);
|
||||
}
|
||||
|
||||
public async Task<GatewayDetailResponse> GetGatewayDetailAsync(Guid gatewayId, CancellationToken ct)
|
||||
|
||||
Reference in New Issue
Block a user