diff --git a/scripts/commands/update-guides.js b/scripts/commands/update-guides.js index d37cf781..b17c6b3d 100644 --- a/scripts/commands/update-guides.js +++ b/scripts/commands/update-guides.js @@ -2,9 +2,12 @@ const { db, logger, file, xml } = require('../core') const _ = require('lodash') const DB_DIR = process.env.DB_DIR || 'scripts/database' +const LOGS_DIR = process.env.LOGS_DIR || 'scripts/logs' const PUBLIC_DIR = process.env.PUBLIC_DIR || '.gh-pages' async function main() { + await setUp() + await generateGuides() } @@ -15,11 +18,12 @@ async function generateGuides() { const channels = await db.channels.find({}).sort({ xmltv_id: 1 }) const programs = await loadPrograms() - const grouped = _.groupBy(programs, i => `${i.gid}/${i.site}.epg.xml`) + const grouped = _.groupBy(programs, i => `${i.gid}_${i.site}`) - for (let relativePath in grouped) { - const filepath = `${PUBLIC_DIR}/guides/${relativePath}` - const groupProgs = grouped[relativePath] + for (let key in grouped) { + const [gid, site] = key.split('_') || [null, null] + const filepath = `${PUBLIC_DIR}/guides/${gid}/${site}.epg.xml` + const groupProgs = grouped[key] const groupChannels = Object.keys(_.groupBy(groupProgs, i => `${i.site}_${i.channel}`)).map( key => { let [site, channel] = key.split('_') @@ -31,6 +35,12 @@ async function generateGuides() { const output = xml.create({ channels: groupChannels, programs: groupProgs }) await file.create(filepath, output) + + await log({ + gid, + filepath, + count: groupChannels.length + }) } } @@ -56,3 +66,14 @@ async function loadPrograms() { return programs } + +async function setUp() { + const logPath = `${LOGS_DIR}/update-guides.log` + + logger.info(`Creating '${logPath}'...`) + await file.create(logPath) +} + +async function log(data) { + await file.append(`${LOGS_DIR}/update-guides.log`, JSON.stringify(data) + '\n') +} diff --git a/tests/commands/update-guides.test.js b/tests/commands/update-guides.test.js index 418bd360..d9113b4c 100644 --- a/tests/commands/update-guides.test.js +++ b/tests/commands/update-guides.test.js @@ -16,7 +16,7 @@ beforeEach(() => { ) execSync( - 'DB_DIR=tests/__data__/temp/database PUBLIC_DIR=tests/__data__/output node scripts/commands/update-guides.js', + 'DB_DIR=tests/__data__/temp/database PUBLIC_DIR=tests/__data__/output LOGS_DIR=tests/__data__/output/logs node scripts/commands/update-guides.js', { encoding: 'utf8' } ) }) @@ -35,6 +35,11 @@ it('can generate /guides', () => { const expected2 = content('tests/__data__/expected/guides/za/dstv.com.epg.xml') expect(output2).toBe(expected2) + + const output3 = content('tests/__data__/output/logs/update-guides.log') + const expected3 = content('tests/__data__/expected/logs/update-guides.log') + + expect(output3).toBe(expected3) }) function content(filepath) {