diff --git a/api/src/app/app.module.ts b/api/src/app/app.module.ts index 74661f86..abad4e2c 100644 --- a/api/src/app/app.module.ts +++ b/api/src/app/app.module.ts @@ -14,7 +14,6 @@ import { GraphQLModule } from '../graphql/graphql.module.js'; import { StatsModule } from '../stats/stats.module.js'; import { WalletSubscriptionModule } from '../wallet-subscription/wallet-subscription.module.js'; import { NatsModule } from '../nats/nats.module.js'; -import { OlSwapModule } from '../ol-swap/OlSwapModule.js'; import { MultiSigModule } from '../multi-sig/multi-sig.module.js'; @Module({ @@ -44,7 +43,6 @@ import { MultiSigModule } from '../multi-sig/multi-sig.module.js'; NodeWatcherModule, StatsModule, WalletSubscriptionModule, - OlSwapModule, NodeWatcherModule, MultiSigModule, ], diff --git a/api/src/ol-swap/OlSwapModule.ts b/api/src/ol-swap/OlSwapModule.ts deleted file mode 100644 index f7489d82..00000000 --- a/api/src/ol-swap/OlSwapModule.ts +++ /dev/null @@ -1,29 +0,0 @@ -import process from 'node:process'; - -import { BullModule } from '@nestjs/bullmq'; -import { Module, Type } from '@nestjs/common'; - -import { redisConnectionOptions } from '../redis/redis.service.js'; - -import { ClickhouseModule } from '../clickhouse/clickhouse.module.js'; -import { OlSwapProcessor } from './OlSwapProcessor.js'; - -const roles = process.env.ROLES!.split(','); - -const workers: Type[] = []; -if (roles.includes('swap-processor')) { - workers.push(OlSwapProcessor); -} - -@Module({ - imports: [ - ClickhouseModule, - - BullModule.registerQueue({ - name: 'ol-swap', - connection: redisConnectionOptions, - }), - ], - providers: workers, -}) -export class OlSwapModule {} diff --git a/api/src/ol-swap/OlSwapProcessor.ts b/api/src/ol-swap/OlSwapProcessor.ts deleted file mode 100644 index 63e985df..00000000 --- a/api/src/ol-swap/OlSwapProcessor.ts +++ /dev/null @@ -1,103 +0,0 @@ -import { InjectQueue, Processor, WorkerHost } from '@nestjs/bullmq'; -import { OnModuleInit } from '@nestjs/common'; -import { Job, Queue } from 'bullmq'; -import axios from 'axios'; -import { stringify as csvStringify } from 'csv-stringify/sync'; -import { ClickhouseService } from '../clickhouse/clickhouse.service.js'; -import Bluebird from 'bluebird'; - -interface ChartData { - date: number; - open: string; - high: number; - low: number; - close: string; - volume: number; -} - -@Processor('ol-swap') -export class OlSwapProcessor extends WorkerHost implements OnModuleInit { - public constructor( - private readonly clickhouseService: ClickhouseService, - - @InjectQueue('ol-swap') - private readonly olVersionQueue: Queue, - ) { - super(); - } - - public async process(job: Job): Promise { - switch (job.name) { - case 'getHistory': - try { - await Promise.race([ - this.getHistory(), - // 1m timeout to avoid blocking the queue - Bluebird.delay(60 * 60 * 1_000), - ]); - } catch (error) { - // fail silently to avoid accumulating failed repeating jobs - } - break; - - default: - throw new Error(`invalid job name ${job.name}`); - } - } - - public async onModuleInit() { - await this.olVersionQueue.add('getHistory', undefined, { - repeat: { - every: 30 * 60 * 1_000, // 30 minutes - }, - }); - await this.getHistory(); - } - - private async getHistory() { - const res = await axios({ - url: 'https://api.0lswap.com/orders/getChartData?interval=1h&market=OLUSDT', - signal: AbortSignal.timeout(5 * 60 * 1_000), // 5 minutes - }); - await this.insertHistory(res.data); - } - - private async insertHistory(data: ChartData[]) { - const payload = csvStringify( - data.map((it) => [it.date, it.volume, it.open, it.high, it.low, it.close]), - ); - - await this.clickhouseService.client.command({ - query: ` - INSERT INTO "ol_swap_1h" ( - "timestamp", - "volume", - "open", - "high", - "low", - "close" - ) - SELECT - "timestamp", - "volume", - "open", - "high", - "low", - "close" - FROM - format( - CSV, - $$ - "timestamp" UInt64, - "volume" Decimal64(6), - "open" Decimal64(6), - "high" Decimal64(6), - "low" Decimal64(6), - "close" Decimal64(6) - $$, - $$${payload}$$ - ) - `, - }); - } -} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..6c8cd6cf --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "libra-explorer", + "lockfileVersion": 3, + "requires": true, + "packages": {} +}