From 418f1204180aef5178010dcc7a540d6e9573bacf Mon Sep 17 00:00:00 2001 From: sandwich <299465+dskvr@users.noreply.github.com> Date: Tue, 23 Jan 2024 15:51:45 +0000 Subject: [PATCH] containerization debugging #2 --- apps/trawler/Dockerfile | 2 +- apps/trawler/package.json | 2 +- apps/trawler/src/daemon.js | 2 -- apps/trawler/src/queue.js | 17 +++++++++-------- .../default/WebsocketAdapterDefault/index.js | 8 +++++++- packages/nocap/package.json | 2 +- packages/nocap/src/classes/Base.js | 12 ++++++------ 7 files changed, 25 insertions(+), 20 deletions(-) diff --git a/apps/trawler/Dockerfile b/apps/trawler/Dockerfile index 23c3b1c6..09a24475 100644 --- a/apps/trawler/Dockerfile +++ b/apps/trawler/Dockerfile @@ -18,4 +18,4 @@ RUN yarn install --network-timeout 1000000 # EXPOSE 3000 # Run the app when the container launches -CMD ["node", "src/index.js"] \ No newline at end of file +CMD yarn launch \ No newline at end of file diff --git a/apps/trawler/package.json b/apps/trawler/package.json index 085443d0..1d44cb76 100644 --- a/apps/trawler/package.json +++ b/apps/trawler/package.json @@ -9,7 +9,7 @@ }, "dependencies": { "@nostr-fetch/adapter-nostr-tools": "0.13.1", - "@nostrwatch/controlflow": "^0.0.1", + "@nostrwatch/controlflow": "^0.0.2", "@nostrwatch/logger": "^0.0.1", "@nostrwatch/nocap": "^0.1.3", "@nostrwatch/nwcache": "^0.0.1", diff --git a/apps/trawler/src/daemon.js b/apps/trawler/src/daemon.js index a3529ad9..b170d6ee 100644 --- a/apps/trawler/src/daemon.js +++ b/apps/trawler/src/daemon.js @@ -11,8 +11,6 @@ import { configureQueues } from './queue.js' import { bootstrap } from '@nostrwatch/seed' import { chunkArray, msToCronTime } from '@nostrwatch/utils' -import { RedisConnectionDetails } from '@nostrwatch/utils' - const {trawlQueue, trawlWorker} = await configureQueues() const logger = new Logger('daemon') let busy = false diff --git a/apps/trawler/src/queue.js b/apps/trawler/src/queue.js index 4bd951fe..ccbc043b 100644 --- a/apps/trawler/src/queue.js +++ b/apps/trawler/src/queue.js @@ -1,14 +1,15 @@ -import { Worker } from 'bullmq'; -import Redis from 'ioredis'; - import { trawl } from './trawler.js'; import Logger from '@nostrwatch/logger' -import { TrawlQueue } from '@nostrwatch/controlflow' +import { TrawlQueue, BullMQ } from '@nostrwatch/controlflow' + +const { Worker } = BullMQ + +import { RedisConnectionDetails } from '@nostrwatch/utils' export const configureQueues = async function(){ - const connection = new Redis() + const connection = RedisConnectionDetails() /********** * Trawler @@ -21,6 +22,7 @@ export const configureQueues = async function(){ const trawler = TrawlQueue({ removeOnComplete: { age: 30*60*1000 }, removeOnFail: { age: 30*60*1000 }, timeout: 1000*60*10 }) const trawlJobProgress = async ($job, progress) => { + console.log("progress") if(!(progress instanceof Object)) return trawlLogger.warn(`Progress data is not an object, it's a ${typeof progress}`) const { type, source } = progress if(type === 'found'){ @@ -50,14 +52,13 @@ export const configureQueues = async function(){ trawlLogger.warn(`trawlJob ${$job.id} failed: ${err}`) } - const trawlWorker = new Worker(trawler.$Queue.name, trawl, { concurrency: 1, maxStalledCount: 1 }) + const trawlWorker = new Worker(trawler.$Queue.name, trawl, { concurrency: 1, maxStalledCount: 1, connection }) trawlWorker.on('completed', trawlJobCompleted) trawlWorker.on('failed', trawlJobFailed) trawlWorker.on('progress', trawlJobProgress) return { trawlQueue: trawler.$Queue, - trawlWorker, - connection + trawlWorker } } diff --git a/packages/nocap/adapters/default/WebsocketAdapterDefault/index.js b/packages/nocap/adapters/default/WebsocketAdapterDefault/index.js index 11251cfe..c750bc22 100644 --- a/packages/nocap/adapters/default/WebsocketAdapterDefault/index.js +++ b/packages/nocap/adapters/default/WebsocketAdapterDefault/index.js @@ -81,7 +81,13 @@ class WebsocketAdapterDefault { * @returns null */ handle_nostr_event(buffer){ - const ev = JSON.parse(buffer.toString()) + try{ + const ev = JSON.parse(buffer.toString()) + } + catch(e){ + this.$.logger.error(`${this.$.url} responded with invalid JSON: ${e}`) + return this.$.on_error(e) + } if(ev[0] === 'EVENT') { if(this.$.subid('read') === ev[1]) this.$.on_event(ev[1], ev[2]) diff --git a/packages/nocap/package.json b/packages/nocap/package.json index fc250ad6..5d5a013c 100644 --- a/packages/nocap/package.json +++ b/packages/nocap/package.json @@ -1,6 +1,6 @@ { "name": "@nostrwatch/nocap", - "version": "0.1.3", + "version": "0.1.4", "main": "src/index.js", "type": "module", "license": "MIT", diff --git a/packages/nocap/src/classes/Base.js b/packages/nocap/src/classes/Base.js index 1cbe81e6..b9a7da83 100644 --- a/packages/nocap/src/classes/Base.js +++ b/packages/nocap/src/classes/Base.js @@ -525,12 +525,12 @@ export default class { * @private * @returns null */ - handle_error(){ - // this.unsubscribe() - // this.close() - this.websocket_hard_fail() - // this.finish(this.current, { [this.current]: false, duration: -1 }, this.promises.get(this.current).reject) - } + handle_error(){ + // this.unsubscribe() + // this.close() + this.websocket_hard_fail() + // this.finish(this.current, { [this.current]: false, duration: -1 }, this.promises.get(this.current).reject) + } /**