From d5c5a90aa6db5f1fd371026b08da5af5797a656e Mon Sep 17 00:00:00 2001 From: Ben Date: Sun, 21 Jun 2026 00:02:34 -0400 Subject: [PATCH] Count recent clients in miner report --- ...iveClientReportRecentIndex1781312000000.ts | 27 +++++++++++++++++++ .../user-agent-report.service.spec.ts | 1 - .../user-agent-report.service.ts | 1 - 3 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 src/ORM/_migrations/ActiveClientReportRecentIndex1781312000000.ts diff --git a/src/ORM/_migrations/ActiveClientReportRecentIndex1781312000000.ts b/src/ORM/_migrations/ActiveClientReportRecentIndex1781312000000.ts new file mode 100644 index 0000000..dbb4303 --- /dev/null +++ b/src/ORM/_migrations/ActiveClientReportRecentIndex1781312000000.ts @@ -0,0 +1,27 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; + +export class ActiveClientReportRecentIndex1781312000000 implements MigrationInterface { + public name = 'ActiveClientReportRecentIndex1781312000000'; + public transaction = false; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + CREATE INDEX CONCURRENTLY IF NOT EXISTS "IDX_client_active_report_updated_user_agent" + ON "client_entity" ("updatedAt" DESC, "userAgent") + INCLUDE ("hashRate", "bestDifficulty") + WHERE "deletedAt" IS NULL + `); + await queryRunner.query(`DROP INDEX CONCURRENTLY IF EXISTS "IDX_client_working_report_updated_user_agent"`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + CREATE INDEX CONCURRENTLY IF NOT EXISTS "IDX_client_working_report_updated_user_agent" + ON "client_entity" ("updatedAt" DESC, "userAgent") + INCLUDE ("hashRate", "bestDifficulty") + WHERE "deletedAt" IS NULL + AND "hashRate" > 0 + `); + await queryRunner.query(`DROP INDEX CONCURRENTLY IF EXISTS "IDX_client_active_report_updated_user_agent"`); + } +} diff --git a/src/ORM/_views/user-agent-report/user-agent-report.service.spec.ts b/src/ORM/_views/user-agent-report/user-agent-report.service.spec.ts index 2c2225d..cd9d664 100644 --- a/src/ORM/_views/user-agent-report/user-agent-report.service.spec.ts +++ b/src/ORM/_views/user-agent-report/user-agent-report.service.spec.ts @@ -55,7 +55,6 @@ describe('UserAgentReportService', () => { 'client.updatedAt > :activeSince', expect.objectContaining({ activeSince: expect.any(Date) }), ); - expect(clientRepository.queryBuilder.andWhere).toHaveBeenCalledWith('client.hashRate > 0'); }); it('falls back to the materialized view when no active database clients exist', async () => { diff --git a/src/ORM/_views/user-agent-report/user-agent-report.service.ts b/src/ORM/_views/user-agent-report/user-agent-report.service.ts index 28d1e02..c494a3d 100644 --- a/src/ORM/_views/user-agent-report/user-agent-report.service.ts +++ b/src/ORM/_views/user-agent-report/user-agent-report.service.ts @@ -72,7 +72,6 @@ export class UserAgentReportService { .addSelect('COALESCE(SUM(client.hashRate), 0)', 'totalHashRate') .where('client.deletedAt IS NULL') .andWhere('client.updatedAt > :activeSince', { activeSince }) - .andWhere('client.hashRate > 0') .groupBy('COALESCE(NULLIF(client.userAgent, \'\'), \'Other\')') .orderBy('"totalHashRate"', 'DESC') .getRawMany();