Skip to content

Commit fb80877

Browse files
committed
fix: ignore data for current day for 15 minutes after midnight
fixes akash-network#721
1 parent 3a6b2b9 commit fb80877

File tree

1 file changed

+47
-33
lines changed

1 file changed

+47
-33
lines changed

apps/api/src/services/db/statsService.ts

+47-33
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { AkashBlock as Block } from "@akashnetwork/database/dbSchemas/akash";
22
import { Day } from "@akashnetwork/database/dbSchemas/base";
3-
import { subHours } from "date-fns";
3+
import { format, subHours } from "date-fns";
44
import { Op, QueryTypes } from "sequelize";
55

66
import { cacheKeys, cacheResponse } from "@src/caching/helpers";
@@ -202,40 +202,42 @@ export const getProviderGraphData = async (dataName: ProviderStatsKey) => {
202202

203203
const getter = (block: ProviderStats) => (typeof block[dataName] === "number" ? (block[dataName] as number) : parseInt(block[dataName] as string) || 0);
204204

205-
const result = await cacheResponse(
206-
60 * 5, // 5 minutes
207-
cacheKeys.getProviderGraphData,
208-
async () => {
209-
return await chainDb.query<ProviderStats>(
210-
`SELECT d."date", (SUM("activeCPU") + SUM("pendingCPU") + SUM("availableCPU")) AS "cpu", (SUM("activeGPU") + SUM("pendingGPU") + SUM("availableGPU")) AS "gpu", (SUM("activeMemory") + SUM("pendingMemory") + SUM("availableMemory")) AS memory, (SUM("activeStorage") + SUM("pendingStorage") + SUM("availableStorage")) as storage, COUNT(*) as count
211-
FROM "day" d
212-
INNER JOIN (
213-
SELECT DISTINCT ON("hostUri",DATE("checkDate"))
214-
DATE("checkDate") AS date,
215-
ps."activeCPU", ps."pendingCPU", ps."availableCPU",
216-
ps."activeGPU", ps."pendingGPU", ps."availableGPU",
217-
ps."activeMemory", ps."pendingMemory", ps."availableMemory",
218-
ps."activeEphemeralStorage" + COALESCE(ps."activePersistentStorage", 0) AS "activeStorage", ps."pendingEphemeralStorage" + COALESCE(ps."pendingPersistentStorage", 0) AS "pendingStorage", ps."availableEphemeralStorage" + COALESCE(ps."availablePersistentStorage", 0) AS "availableStorage",
205+
const result = removeLastAroundMidnight(
206+
await cacheResponse(
207+
60 * 5, // 5 minutes
208+
cacheKeys.getProviderGraphData,
209+
async () => {
210+
return await chainDb.query<ProviderStats>(
211+
`SELECT d."date", (SUM("activeCPU") + SUM("pendingCPU") + SUM("availableCPU")) AS "cpu", (SUM("activeGPU") + SUM("pendingGPU") + SUM("availableGPU")) AS "gpu", (SUM("activeMemory") + SUM("pendingMemory") + SUM("availableMemory")) AS memory, (SUM("activeStorage") + SUM("pendingStorage") + SUM("availableStorage")) as storage, COUNT(*) as count
212+
FROM "day" d
213+
INNER JOIN (
214+
SELECT DISTINCT ON("hostUri",DATE("checkDate"))
215+
DATE("checkDate") AS date,
216+
ps."activeCPU", ps."pendingCPU", ps."availableCPU",
217+
ps."activeGPU", ps."pendingGPU", ps."availableGPU",
218+
ps."activeMemory", ps."pendingMemory", ps."availableMemory",
219+
ps."activeEphemeralStorage" + COALESCE(ps."activePersistentStorage", 0) AS "activeStorage", ps."pendingEphemeralStorage" + COALESCE(ps."pendingPersistentStorage", 0) AS "pendingStorage", ps."availableEphemeralStorage" + COALESCE(ps."availablePersistentStorage", 0) AS "availableStorage",
219220
ps."isOnline"
220221
FROM "providerSnapshot" ps
221222
INNER JOIN "day" d ON d."date" = DATE(ps."checkDate")
222223
INNER JOIN "block" b ON b.height=d."lastBlockHeightYet"
223224
INNER JOIN "provider" ON "provider"."owner"=ps."owner"
224225
WHERE ps."isLastSuccessOfDay" = TRUE AND ps."checkDate" >= b."datetime" - (:grace_duration * INTERVAL '1 minutes')
225226
ORDER BY "hostUri",DATE("checkDate"),"checkDate" DESC
226-
) "dailyProviderStats"
227-
ON DATE(d."date")="dailyProviderStats"."date"
228-
GROUP BY d."date"
229-
ORDER BY d."date" ASC`,
230-
{
231-
type: QueryTypes.SELECT,
232-
replacements: {
233-
grace_duration: env.PROVIDER_UPTIME_GRACE_PERIOD_MINUTES
227+
) "dailyProviderStats"
228+
ON DATE(d."date")="dailyProviderStats"."date"
229+
GROUP BY d."date"
230+
ORDER BY d."date" ASC`,
231+
{
232+
type: QueryTypes.SELECT,
233+
replacements: {
234+
grace_duration: env.PROVIDER_UPTIME_GRACE_PERIOD_MINUTES
235+
}
234236
}
235-
}
236-
);
237-
},
238-
true
237+
);
238+
},
239+
true
240+
)
239241
);
240242

241243
if (result.length < 2) {
@@ -280,13 +282,25 @@ export const getProviderGraphData = async (dataName: ProviderStatsKey) => {
280282
};
281283
};
282284

285+
const removeLastAroundMidnight = (stats: ProviderStats[]) => {
286+
const now = new Date();
287+
const isFirstFifteenMinuesOfDay = now.getHours() === 0 && now.getMinutes() < 15;
288+
const dateToday = format(now, "yyyy-MM-dd");
289+
const lastItemIsForToday = stats.length > 0 && stats[stats.length - 1].date.startsWith(dateToday);
290+
if (isFirstFifteenMinuesOfDay && lastItemIsForToday) {
291+
return stats.slice(0, stats.length - 1);
292+
}
293+
294+
return stats;
295+
};
296+
283297
export const getProviderActiveLeasesGraphData = async (providerAddress: string) => {
284298
console.log("getProviderActiveLeasesGraphData");
285299

286300
const result = await chainDb.query<ProviderActiveLeasesStats>(
287301
`SELECT "date" AS date, COUNT(l."id") AS count
288302
FROM "day" d
289-
LEFT JOIN "lease" l
303+
LEFT JOIN "lease" l
290304
ON l."providerAddress" = :providerAddress
291305
AND l."createdHeight" <= d."lastBlockHeightYet"
292306
AND COALESCE(l."closedHeight", l."predictedClosedHeight") > d."lastBlockHeightYet"
@@ -370,7 +384,7 @@ export async function getProviderActiveResourcesAtHeight(provider: string, heigh
370384
SUM("persistentStorageQuantity") AS "persistentStorage",
371385
SUM("gpuUnits") AS "gpu"
372386
FROM lease
373-
WHERE
387+
WHERE
374388
"providerAddress"=:provider
375389
AND "createdHeight" <= :height
376390
AND COALESCE("closedHeight", "predictedClosedHeight") > :height`,
@@ -394,18 +408,18 @@ export async function getProviderEarningsAtHeight(provider: string, providerCrea
394408
FROM lease
395409
WHERE "providerAddress"=:provider
396410
)
397-
SELECT
411+
SELECT
398412
d.date, d."aktPrice",s."totalUAkt",s."totalUUsdc"
399413
FROM day d
400414
LEFT JOIN LATERAL (
401415
WITH active_leases AS (
402-
SELECT
416+
SELECT
403417
l.dseq,
404418
l.price,
405419
l.denom,
406420
(LEAST(d."lastBlockHeightYet", COALESCE(l."closedHeight", l."predictedClosedHeight"), :height) - GREATEST(d."firstBlockHeight", l."createdHeight", :providerCreatedHeight)) AS duration
407421
FROM provider_leases l
408-
WHERE
422+
WHERE
409423
l."createdHeight" <= LEAST(d."lastBlockHeightYet", :height)
410424
AND COALESCE(l."closedHeight", l."predictedClosedHeight") >= GREATEST(d."firstBlockHeight", :providerCreatedHeight)
411425
),
@@ -415,7 +429,7 @@ export async function getProviderEarningsAtHeight(provider: string, providerCrea
415429
(CASE WHEN l.denom='uusdc' THEN l.price*l.duration ELSE 0 END) AS "uusdc_earned"
416430
FROM active_leases l
417431
)
418-
SELECT
432+
SELECT
419433
SUM(l.uakt_earned) AS "totalUAkt",
420434
SUM(l.uusdc_earned) AS "totalUUsdc"
421435
FROM billed_leases l

0 commit comments

Comments
 (0)