diff --git a/packages/network-support/src/fetch.ts b/packages/network-support/src/fetch.ts index 2ef83bb7..994ba795 100644 --- a/packages/network-support/src/fetch.ts +++ b/packages/network-support/src/fetch.ts @@ -122,6 +122,7 @@ export function createFetch( after - before, Number(_res.headers.get('Content-Length')) || 1 ); + void orderManager.incrSelectCount(runner); return { status: _res.status, diff --git a/packages/network-support/src/orderManager.ts b/packages/network-support/src/orderManager.ts index 9d889589..82daecc9 100644 --- a/packages/network-support/src/orderManager.ts +++ b/packages/network-support/src/orderManager.ts @@ -432,6 +432,10 @@ export class OrderManager { await this.scoreManager.collectLatency(indexer, latency, size); } + async incrSelectCount(indexer: string) { + await this.scoreManager.incrSelectCount(indexer); + } + cleanup() { if (this.timer) { clearInterval(this.timer); diff --git a/packages/network-support/src/scoreManager.ts b/packages/network-support/src/scoreManager.ts index c7df3574..7e193a81 100644 --- a/packages/network-support/src/scoreManager.ts +++ b/packages/network-support/src/scoreManager.ts @@ -162,6 +162,11 @@ export class ScoreManager { } } + async incrSelectCount(indexer: string) { + const key = this.getSelectCountKey(); + await this.scoreStore.hincrby(`${key}:${this.projectId}`, indexer, 1); + } + private getHttpVersionWeight(score: ScoreStoreType) { return score.httpVersion == 2 ? WEIGHT.http2 : 1; } @@ -173,4 +178,8 @@ export class ScoreManager { private getManualScoreKey(): string { return 'score:manual'; } + + private getSelectCountKey(): string { + return 'sample:select'; + } } diff --git a/packages/network-support/src/utils/store.ts b/packages/network-support/src/utils/store.ts index f60b9b15..42e2e614 100644 --- a/packages/network-support/src/utils/store.ts +++ b/packages/network-support/src/utils/store.ts @@ -12,6 +12,8 @@ export interface IStore { lpush(key: string, value: any): Promise; ltrim(key: string, start: number, stop: number): Promise; expire(key: string, ttl: number): Promise; + + hincrby(key: string, field: string, value: number): Promise; } export class BaseStorage implements IStore { @@ -34,6 +36,9 @@ export class BaseStorage implements IStore { expire(key: string, ttl: number): Promise { return Promise.resolve(); } + hincrby(key: string, field: string, value: number): Promise { + return Promise.resolve(0); + } } interface Options {