diff --git a/db/package.json b/db/package.json index 18cca58..11f504e 100644 --- a/db/package.json +++ b/db/package.json @@ -12,7 +12,7 @@ "standard": "^17.1.2" }, "dependencies": { - "@filecoin-station/spark-evaluate": "^1.0.4", + "@filecoin-station/spark-evaluate": "^1.2.0", "pg": "^8.13.3", "postgrator": "^8.0.0" }, diff --git a/observer/package.json b/observer/package.json index 393611a..1a05fb8 100644 --- a/observer/package.json +++ b/observer/package.json @@ -10,7 +10,7 @@ "test": "mocha" }, "devDependencies": { - "@filecoin-station/spark-evaluate": "^1.0.4", + "@filecoin-station/spark-evaluate": "^1.2.0", "mocha": "^11.1.0", "standard": "^17.1.2" }, diff --git a/package-lock.json b/package-lock.json index f97d4fe..1dfed06 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,7 +21,7 @@ "name": "@filecoin-station/spark-stats-db", "version": "1.0.0", "dependencies": { - "@filecoin-station/spark-evaluate": "^1.0.4", + "@filecoin-station/spark-evaluate": "^1.2.0", "pg": "^8.13.3", "postgrator": "^8.0.0" }, @@ -328,9 +328,9 @@ } }, "node_modules/@filecoin-station/spark-evaluate": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@filecoin-station/spark-evaluate/-/spark-evaluate-1.1.0.tgz", - "integrity": "sha512-e857IGRJK4OZET4EhvRHxl6M3Do9WzR4VsbJnrVZhdvF/2P60wBS0PaX8651Ou6iKY4hS2zThxh7MvfVXPuF/g==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@filecoin-station/spark-evaluate/-/spark-evaluate-1.2.0.tgz", + "integrity": "sha512-5pVy7KoEk3SsQ/D3FHy0ZR9iPuBe54XpwAOVX/7f6+melHAN/rjWIVDTRyYWJvao9nQVF2GRrnq/Pc/L7EBI+g==", "dependencies": { "@filecoin-station/spark-impact-evaluator": "^1.2.4", "@glif/filecoin-address": "^3.0.12", @@ -338,7 +338,7 @@ "@ipld/car": "^5.4.0", "@ipld/dag-json": "^10.2.3", "@sentry/node": "^9.2.0", - "@ucanto/core": "^10.3.0", + "@ucanto/core": "^10.3.1", "@ucanto/principal": "^9.0.2", "@web3-storage/car-block-validator": "^1.2.1", "@web3-storage/w3up-client": "^16.5.2", @@ -1810,9 +1810,9 @@ } }, "node_modules/@ucanto/core": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@ucanto/core/-/core-10.3.0.tgz", - "integrity": "sha512-hPJDuGKSzQdfe0ZrRzNRGz+AeEeVd3ed+St8LUn6/mJMncsqOGzqUbHNVc6sOMGAI4incSGKAO7AXOKd6DRObw==", + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/@ucanto/core/-/core-10.3.1.tgz", + "integrity": "sha512-P4McvR1T7a+FJknWgn8B62WZs/tnL5qTpZWkaRI4dL85AICjfGmnns4ebAq0R0rkz2wrcGuBZEOB7/mwnxbH9w==", "license": "(Apache-2.0 AND MIT)", "dependencies": { "@ipld/car": "^5.1.0", @@ -7524,7 +7524,7 @@ "slug": "^10.0.0" }, "devDependencies": { - "@filecoin-station/spark-evaluate": "^1.0.4", + "@filecoin-station/spark-evaluate": "^1.2.0", "mocha": "^11.1.0", "standard": "^17.1.2" } @@ -7543,7 +7543,7 @@ "pg": "^8.13.3" }, "devDependencies": { - "@filecoin-station/spark-evaluate": "^1.1.0", + "@filecoin-station/spark-evaluate": "^1.2.0", "mocha": "^11.1.0", "standard": "^17.1.2" } diff --git a/stats/lib/stats-fetchers.js b/stats/lib/stats-fetchers.js index 8cc3056..cc99db8 100644 --- a/stats/lib/stats-fetchers.js +++ b/stats/lib/stats-fetchers.js @@ -11,7 +11,8 @@ export const fetchRetrievalSuccessRate = async (pgPools, filter) => { day::text, SUM(total) as total, SUM(successful) as successful, - SUM(successful_http) as successful_http + SUM(successful_http) as successful_http, + SUM(successful_http_head) as successful_http_head FROM retrieval_stats WHERE day >= $1 AND day <= $2 ${filter.nonZero === 'true' ? 'AND successful > 0' : ''} GROUP BY day @@ -27,7 +28,9 @@ export const fetchRetrievalSuccessRate = async (pgPools, filter) => { success_rate: r.total > 0 ? r.successful / r.total : null, successful_http: r.successful_http ?? null, // successful_http might be null because the column was added later - success_rate_http: r.total > 0 && r.successful_http !== null ? r.successful_http / r.total : null + success_rate_http: r.total > 0 && r.successful_http !== null ? r.successful_http / r.total : null, + // successful_http_head might be null because the column was added later + success_rate_http_head: r.total > 0 && r.successful_http_head !== null ? r.successful_http_head / r.total : null })) return stats } @@ -218,7 +221,8 @@ export const fetchMinersRSRSummary = async (pgPools, filter) => { miner_id, SUM(total) as total, SUM(successful) as successful, - SUM(successful_http) as successful_http + SUM(successful_http) as successful_http, + SUM(successful_http_head) as successful_http_head FROM retrieval_stats WHERE day >= $1 AND day <= $2 GROUP BY miner_id @@ -233,7 +237,9 @@ export const fetchMinersRSRSummary = async (pgPools, filter) => { success_rate: r.total > 0 ? r.successful / r.total : null, successful_http: r.successful_http ?? null, // successful_http might be null because the column was added later - success_rate_http: r.total > 0 && r.successful_http !== null ? r.successful_http / r.total : null + success_rate_http: r.total > 0 && r.successful_http !== null ? r.successful_http / r.total : null, + // successful_http_head might be null because the column was added later + success_rate_http_head: r.total > 0 && r.successful_http_head !== null ? r.successful_http_head / r.total : null })) return stats } @@ -249,7 +255,8 @@ export const fetchDailyMinerRSRSummary = async (pgPools, { from, to }, minerId) SELECT day::TEXT, SUM(total) as total, SUM(successful) as successful, - SUM(successful_http) as successful_http + SUM(successful_http) as successful_http, + SUM(successful_http_head) as successful_http_head FROM retrieval_stats WHERE miner_id = $1 AND day >= $2 AND day <= $3 GROUP BY day @@ -266,7 +273,9 @@ export const fetchDailyMinerRSRSummary = async (pgPools, { from, to }, minerId) success_rate: r.total > 0 ? r.successful / r.total : null, successful_http: r.successful_http ?? null, // successful_http might be null because the column was added later - success_rate_http: r.total > 0 && r.successful_http !== null ? r.successful_http / r.total : null + success_rate_http: r.total > 0 && r.successful_http !== null ? r.successful_http / r.total : null, + // successful_http_head might be null because the column was added later + success_rate_http_head: r.total > 0 && r.successful_http_head !== null ? r.successful_http_head / r.total : null })) return stats } diff --git a/stats/package.json b/stats/package.json index 9482f65..cb6b31f 100644 --- a/stats/package.json +++ b/stats/package.json @@ -9,7 +9,7 @@ "test": "mocha" }, "devDependencies": { - "@filecoin-station/spark-evaluate": "^1.1.0", + "@filecoin-station/spark-evaluate": "^1.2.0", "mocha": "^11.1.0", "standard": "^17.1.2" }, diff --git a/stats/test/app.test.js b/stats/test/app.test.js index bbe385f..408c657 100644 --- a/stats/test/app.test.js +++ b/stats/test/app.test.js @@ -67,12 +67,12 @@ describe('HTTP request handler', () => { it('returns today stats for no query string', async () => { const day = today() - await givenRetrievalStats(pgPools.evaluate, { day, total: 10, successful: 1, successfulHttp: 0 }) + await givenRetrievalStats(pgPools.evaluate, { day, total: 10, successful: 1, successfulHttp: 0, successfulHttpHead: 0 }) const res = await fetch(new URL('/retrieval-success-rate', baseUrl), { redirect: 'follow' }) await assertResponseStatus(res, 200) const stats = await res.json() assert.deepStrictEqual(stats, [ - { day, success_rate: 0.1, successful: '1', total: '10', successful_http: '0', success_rate_http: 0 } + { day, success_rate: 0.1, successful: '1', total: '10', successful_http: '0', success_rate_http: 0, success_rate_http_head: 0 } ]) }) @@ -93,8 +93,8 @@ describe('HTTP request handler', () => { await assertResponseStatus(res, 200) const stats = await res.json() assert.deepStrictEqual(stats, [ - { day: '2024-01-11', success_rate: 0.05, successful: '1', total: '20', successful_http: '0', success_rate_http: 0 }, - { day: '2024-01-12', success_rate: 0.1, successful: '3', total: '30', successful_http: '3', success_rate_http: 0.1 } + { day: '2024-01-11', success_rate: 0.05, successful: '1', total: '20', successful_http: '0', success_rate_http: 0, success_rate_http_head: null }, + { day: '2024-01-12', success_rate: 0.1, successful: '3', total: '30', successful_http: '3', success_rate_http: 0.1, success_rate_http_head: null } ]) }) @@ -137,10 +137,10 @@ describe('HTTP request handler', () => { }) it('sums daily retrievals from all miners', async () => { - await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-10', minerId: 'f1one', total: 10, successful: 1, successfulHttp: 1 }) - await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-10', minerId: 'f1two', total: 100, successful: 50, successfulHttp: 35 }) - await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-11', minerId: 'f1one', total: 20, successful: 1, successfulHttp: 0 }) - await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-11', minerId: 'f1two', total: 200, successful: 60, successfulHttp: 50 }) + await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-10', minerId: 'f1one', total: 10, successful: 1, successfulHttp: 1, successfulHttpHead: 1 }) + await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-10', minerId: 'f1two', total: 100, successful: 50, successfulHttp: 35, successfulHttpHead: 35 }) + await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-11', minerId: 'f1one', total: 20, successful: 1, successfulHttp: 0, successfulHttpHead: 0 }) + await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-11', minerId: 'f1two', total: 200, successful: 60, successfulHttp: 50, successfulHttpHead: 50 }) const res = await fetch( new URL( @@ -156,14 +156,14 @@ describe('HTTP request handler', () => { await res.json() ) assert.deepStrictEqual(stats, [ - { day: '2024-01-10', success_rate: 51 / 110, total: '110', successful: '51', successful_http: '36', success_rate_http: 36 / 110 }, - { day: '2024-01-11', success_rate: 61 / 220, total: '220', successful: '61', successful_http: '50', success_rate_http: 50 / 220 } + { day: '2024-01-10', success_rate: 51 / 110, total: '110', successful: '51', successful_http: '36', success_rate_http: 36 / 110, success_rate_http_head: 36 / 110 }, + { day: '2024-01-11', success_rate: 61 / 220, total: '220', successful: '61', successful_http: '50', success_rate_http: 50 / 220, success_rate_http_head: 50 / 220 } ]) }) it('sorts items by date ascending', async () => { - await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-20', total: 10, successful: 1, successfulHttp: 1 }) - await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-10', total: 10, successful: 5, successfulHttp: 3 }) + await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-20', total: 10, successful: 1, successfulHttp: 1, successfulHttpHead: 1 }) + await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-10', total: 10, successful: 5, successfulHttp: 3, successfulHttpHead: 3 }) const res = await fetch( new URL( @@ -178,14 +178,14 @@ describe('HTTP request handler', () => { await res.json() ) assert.deepStrictEqual(stats, [ - { day: '2024-01-10', success_rate: 5 / 10, total: '10', successful: '5', successful_http: '3', success_rate_http: 3 / 10 }, - { day: '2024-01-20', success_rate: 1 / 10, total: '10', successful: '1', successful_http: '1', success_rate_http: 1 / 10 } + { day: '2024-01-10', success_rate: 5 / 10, total: '10', successful: '5', successful_http: '3', success_rate_http: 3 / 10, success_rate_http_head: 3 / 10 }, + { day: '2024-01-20', success_rate: 1 / 10, total: '10', successful: '1', successful_http: '1', success_rate_http: 1 / 10, success_rate_http_head: 1 / 10 } ]) }) it('filters out miners with zero RSR when asked', async () => { - await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-20', total: 10, successful: 1, minerId: 'f1one', successfulHttp: 1 }) - await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-20', total: 10, successful: 0, minerId: 'f1two', successfulHttp: 0 }) + await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-20', total: 10, successful: 1, minerId: 'f1one', successfulHttp: 1, successfulHttpHead: 1 }) + await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-20', total: 10, successful: 0, minerId: 'f1two', successfulHttp: 0, successfulHttpHead: 0 }) const res = await fetch( new URL( @@ -200,19 +200,19 @@ describe('HTTP request handler', () => { await res.json() ) assert.deepStrictEqual(stats, [ - { day: '2024-01-20', success_rate: 1 / 10, successful: '1', total: '10', successful_http: '1', success_rate_http: 1 / 10 } + { day: '2024-01-20', success_rate: 1 / 10, successful: '1', total: '10', successful_http: '1', success_rate_http: 1 / 10, success_rate_http_head: 1 / 10 } ]) }) it('preserves additional query string arguments when redirecting', async () => { const day = today() - await givenRetrievalStats(pgPools.evaluate, { day, total: 10, successful: 1, minerId: 'f1one', successfulHttp: 1 }) - await givenRetrievalStats(pgPools.evaluate, { day, total: 10, successful: 0, minerId: 'f1two', successfulHttp: 0 }) + await givenRetrievalStats(pgPools.evaluate, { day, total: 10, successful: 1, minerId: 'f1one', successfulHttp: 1, successfulHttpHead: 1 }) + await givenRetrievalStats(pgPools.evaluate, { day, total: 10, successful: 0, minerId: 'f1two', successfulHttp: 0, successfulHttpHead: 0 }) const res = await fetch(new URL('/retrieval-success-rate?nonZero=true', baseUrl), { redirect: 'follow' }) await assertResponseStatus(res, 200) const stats = await res.json() assert.deepStrictEqual(stats, [ - { day, success_rate: 0.1, successful: '1', total: '10', successful_http: '1', success_rate_http: 0.1 } + { day, success_rate: 0.1, successful: '1', total: '10', successful_http: '1', success_rate_http: 0.1, success_rate_http_head: 0.1 } ]) }) it('handles successful_http values 0, null, undefined', async () => { @@ -231,9 +231,9 @@ describe('HTTP request handler', () => { await assertResponseStatus(res, 200) const stats = await res.json() assert.deepStrictEqual(stats, [ - { day: '2024-01-20', success_rate: 0.1, successful: '1', total: '10', successful_http: '0', success_rate_http: 0 }, - { day: '2024-01-21', success_rate: 0.1, successful: '1', total: '10', successful_http: null, success_rate_http: null }, - { day: '2024-01-22', success_rate: 0.1, successful: '1', total: '10', successful_http: null, success_rate_http: null } + { day: '2024-01-20', success_rate: 0.1, successful: '1', total: '10', successful_http: '0', success_rate_http: 0, success_rate_http_head: null }, + { day: '2024-01-21', success_rate: 0.1, successful: '1', total: '10', successful_http: null, success_rate_http: null, success_rate_http_head: null }, + { day: '2024-01-22', success_rate: 0.1, successful: '1', total: '10', successful_http: null, success_rate_http: null, success_rate_http_head: null } ]) }) }) @@ -422,14 +422,14 @@ describe('HTTP request handler', () => { describe('GET /miners/retrieval-success-rate/summary', () => { it('returns a summary of miners RSR for the given date range', async () => { // before the range - await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-10', minerId: 'f1one', total: 10, successful: 1, successfulHttp: 1 }) - await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-10', minerId: 'f1two', total: 100, successful: 20, successfulHttp: 10 }) + await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-10', minerId: 'f1one', total: 10, successful: 1, successfulHttp: 1, successfulHttpHead: 1 }) + await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-10', minerId: 'f1two', total: 100, successful: 20, successfulHttp: 10, successfulHttpHead: 10 }) // in the range - await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-11', minerId: 'f1one', total: 20, successful: 1, successfulHttp: 0 }) - await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-11', minerId: 'f1two', total: 200, successful: 150, successfulHttp: 100 }) + await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-11', minerId: 'f1one', total: 20, successful: 1, successfulHttp: 0, successfulHttpHead: 0 }) + await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-11', minerId: 'f1two', total: 200, successful: 150, successfulHttp: 100, successfulHttpHead: 100 }) // after the range - await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-12', minerId: 'f1one', total: 30, successful: 1, successfulHttp: 1 }) - await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-12', minerId: 'f1two', total: 300, successful: 60, successfulHttp: 60 }) + await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-12', minerId: 'f1one', total: 30, successful: 1, successfulHttp: 1, successfulHttpHead: 1 }) + await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-12', minerId: 'f1two', total: 300, successful: 60, successfulHttp: 60, successfulHttpHead: 60 }) const res = await fetch( new URL( @@ -442,8 +442,8 @@ describe('HTTP request handler', () => { await assertResponseStatus(res, 200) const stats = await res.json() assert.deepStrictEqual(stats, [ - { miner_id: 'f1one', success_rate: 0.05, total: '20', successful: '1', successful_http: '0', success_rate_http: 0 }, - { miner_id: 'f1two', success_rate: 0.75, total: '200', successful: '150', successful_http: '100', success_rate_http: 100 / 200 } + { miner_id: 'f1one', success_rate: 0.05, total: '20', successful: '1', successful_http: '0', success_rate_http: 0, success_rate_http_head: 0 }, + { miner_id: 'f1two', success_rate: 0.75, total: '200', successful: '150', successful_http: '100', success_rate_http: 100 / 200, success_rate_http_head: 100 / 200 } ]) }) it('handles successful_http values 0, null, undefined', async () => { @@ -465,7 +465,7 @@ describe('HTTP request handler', () => { let stats = await res.json() assert.deepStrictEqual(stats, [ // If there is a single number we expect any undefined or null values to be converted to 0 by Postgres - { miner_id: 'f1one', total: '30', successful: '3', success_rate: 0.1, successful_http: '0', success_rate_http: 0 } + { miner_id: 'f1one', total: '30', successful: '3', success_rate: 0.1, successful_http: '0', success_rate_http: 0, success_rate_http_head: null } ]) res = await fetch( @@ -479,8 +479,8 @@ describe('HTTP request handler', () => { await assertResponseStatus(res, 200) stats = await res.json() assert.deepStrictEqual(stats, [ - { miner_id: 'f2two', total: '10', successful: '1', success_rate: 0.1, successful_http: null, success_rate_http: null }, - { miner_id: 'f3three', total: '20', successful: '2', success_rate: 0.1, successful_http: null, success_rate_http: null } + { miner_id: 'f2two', total: '10', successful: '1', success_rate: 0.1, successful_http: null, success_rate_http: null, success_rate_http_head: null }, + { miner_id: 'f3three', total: '20', successful: '2', success_rate: 0.1, successful_http: null, success_rate_http: null, success_rate_http_head: null } ] ) }) @@ -729,16 +729,16 @@ describe('HTTP request handler', () => { describe('GET /miner/{id}/retrieval-success-rate/summary', () => { it('lists daily retrieval stats summary for specified miner in given date range', async () => { // before the range - await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-09', minerId: 'f1one', total: 10, successful: 1, successfulHttp: 1 }) - await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-09', minerId: 'f1two', total: 100, successful: 20, successfulHttp: 10 }) + await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-09', minerId: 'f1one', total: 10, successful: 1, successfulHttp: 1, successfulHttpHead: 1 }) + await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-09', minerId: 'f1two', total: 100, successful: 20, successfulHttp: 10, successfulHttpHead: 10 }) // in the range - await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-20', minerId: 'f1one', total: 20, successful: 1, successfulHttp: 0 }) - await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-20', minerId: 'f1two', total: 200, successful: 60, successfulHttp: 50 }) - await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-10', minerId: 'f1one', total: 10, successful: 1, successfulHttp: 1 }) - await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-10', minerId: 'f1two', total: 100, successful: 50, successfulHttp: 35 }) + await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-20', minerId: 'f1one', total: 20, successful: 1, successfulHttp: 0, successfulHttpHead: 0 }) + await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-20', minerId: 'f1two', total: 200, successful: 60, successfulHttp: 50, successfulHttpHead: 50 }) + await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-10', minerId: 'f1one', total: 10, successful: 1, successfulHttp: 1, successfulHttpHead: 1 }) + await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-10', minerId: 'f1two', total: 100, successful: 50, successfulHttp: 35, successfulHttpHead: 35 }) // after the range - await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-21', minerId: 'f1one', total: 30, successful: 1, successfulHttp: 1 }) - await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-21', minerId: 'f1two', total: 300, successful: 60, successfulHttp: 60 }) + await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-21', minerId: 'f1one', total: 30, successful: 1, successfulHttp: 1, successfulHttpHead: 1 }) + await givenRetrievalStats(pgPools.evaluate, { day: '2024-01-21', minerId: 'f1two', total: 300, successful: 60, successfulHttp: 60, successfulHttpHead: 60 }) const res = await fetch( new URL( @@ -754,8 +754,8 @@ describe('HTTP request handler', () => { await res.json() ) assert.deepStrictEqual(stats, [ - { day: '2024-01-10', success_rate: 1 / 10, total: '10', successful: '1', successful_http: '1', success_rate_http: 1 / 10 }, - { day: '2024-01-20', success_rate: 1 / 20, total: '20', successful: '1', successful_http: '0', success_rate_http: 0 } + { day: '2024-01-10', success_rate: 1 / 10, total: '10', successful: '1', successful_http: '1', success_rate_http: 1 / 10, success_rate_http_head: 1 / 10 }, + { day: '2024-01-20', success_rate: 1 / 20, total: '20', successful: '1', successful_http: '0', success_rate_http: 0, success_rate_http_head: 0 } ]) }) }) @@ -933,11 +933,12 @@ describe('HTTP request handler', () => { * @param {number | bigint} data.total * @param {number | bigint } data.successful * @param {number | bigint} [data.successfulHttp] + * @param {number | bigint} [data.successfulHttpHead] */ -const givenRetrievalStats = async (pgPool, { day, minerId, total, successful, successfulHttp }) => { +const givenRetrievalStats = async (pgPool, { day, minerId, total, successful, successfulHttp, successfulHttpHead }) => { await pgPool.query( - 'INSERT INTO retrieval_stats (day, miner_id, total, successful, successful_http) VALUES ($1, $2, $3, $4, $5)', - [day, minerId ?? 'f1test', total, successful, successfulHttp] + 'INSERT INTO retrieval_stats (day, miner_id, total, successful, successful_http, successful_http_head) VALUES ($1, $2, $3, $4, $5, $6)', + [day, minerId ?? 'f1test', total, successful, successfulHttp, successfulHttpHead] ) }