From 67ef5aa13eab9bb12d7188928ce62e80a69e7014 Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Thu, 12 Jan 2023 10:53:22 +0300 Subject: [PATCH] Update cluster/load.js Process will be terminated if programs not found --- scripts/commands/cluster/load.js | 42 ++++++++++++++++++----------- tests/commands/cluster/load.test.js | 23 +++++++++------- 2 files changed, 41 insertions(+), 24 deletions(-) diff --git a/scripts/commands/cluster/load.js b/scripts/commands/cluster/load.js index 160b0e1b..5622bee0 100644 --- a/scripts/commands/cluster/load.js +++ b/scripts/commands/cluster/load.js @@ -35,8 +35,8 @@ async function main() { const total = items.length logger.info('Loading...') - const results = {} let i = 1 + let totalPrograms = 0 let config = require(file.resolve(items[0].configPath)) config = _.merge(config, { debug: options.debug, @@ -48,30 +48,42 @@ async function main() { const grabber = new EPGGrabber(config) for (const item of items) { const channel = new Channel(item.channel) - await grabber.grab(channel, item.date, async (data, err) => { - logger.info( - `[${i}/${total}] ${channel.site} (${channel.lang}) - ${channel.id} - ${dayjs - .utc(data.date) - .format('MMM D, YYYY')} (${data.programs.length} programs)` - ) - if (err) logger.error(err.message) + await new Promise(resolve => { + grabber.grab(channel, item.date, async (data, err) => { + logger.info( + `[${i}/${total}] ${channel.site} (${channel.lang}) - ${channel.id} - ${dayjs + .utc(data.date) + .format('MMM D, YYYY')} (${data.programs.length} programs)` + ) - const result = { - _qid: item._id, - programs: data.programs, - error: err ? err.message : null - } + if (err) logger.error(err.message) - await file.append(CLUSTER_PATH, JSON.stringify(result) + '\n') + const result = { + _qid: item._id, + programs: data.programs, + error: err ? err.message : null + } - if (i < total) i++ + await file.append(CLUSTER_PATH, JSON.stringify(result) + '\n') + + totalPrograms += data.programs.length + + if (i < total) i++ + + resolve() + }) }) } db.queue.compact() logger.info(`Done in ${timer.format('HH[h] mm[m] ss[s]')}`) + + if (totalPrograms === 0) { + logger.error('\nError: No programs found') + process.exit(1) + } } main() diff --git a/tests/commands/cluster/load.test.js b/tests/commands/cluster/load.test.js index 6b8af69a..cbce0c5f 100644 --- a/tests/commands/cluster/load.test.js +++ b/tests/commands/cluster/load.test.js @@ -5,17 +5,22 @@ const path = require('path') beforeEach(() => { fs.emptyDirSync('tests/__data__/output') fs.copyFileSync('tests/__data__/input/database/queue.db', 'tests/__data__/output/queue.db') - - execSync( - 'DB_DIR=tests/__data__/output LOGS_DIR=tests/__data__/output/logs npm run cluster:load -- --cluster-id=1 --timeout=10000', - { encoding: 'utf8' } - ) }) -it('can load cluster', () => { - expect(content('tests/__data__/output/logs/cluster/load/cluster_1.log')).toEqual( - content('tests/__data__/expected/logs/cluster/load/cluster_1.log') - ) +it('can load cluster and will terminate process if programs not found', () => { + try { + execSync( + 'DB_DIR=tests/__data__/output LOGS_DIR=tests/__data__/output/logs npm run cluster:load -- --cluster-id=1 --timeout=10000', + { encoding: 'utf8' } + ) + process.exit(1) + } catch (err) { + expect(err.status).toBe(1) + expect(err.stdout.includes('Error: No programs found')).toBe(true) + expect(content('tests/__data__/output/logs/cluster/load/cluster_1.log')).toEqual( + content('tests/__data__/expected/logs/cluster/load/cluster_1.log') + ) + } }) function content(filepath) {