Files
epg/scripts/commands/load-cluster.js

53 lines
1.6 KiB
JavaScript
Raw Normal View History

2022-01-06 16:01:23 +03:00
const grabber = require('epg-grabber')
const { program } = require('commander')
const { db, logger, timer, file, parser } = require('../core')
const options = program
.requiredOption('-c, --cluster-id <cluster-id>', 'The ID of cluster to load', parser.parseNumber)
2022-01-09 16:09:19 +03:00
.option('-d, --days <days>', 'Number of days for which to grab the program', parser.parseNumber)
2022-01-06 16:01:23 +03:00
.parse(process.argv)
.opts()
2022-01-09 20:14:41 +03:00
const LOGS_DIR = process.env.LOGS_DIR || 'scripts/logs'
2022-01-06 16:01:23 +03:00
async function main() {
logger.info('Starting...')
timer.start()
2022-01-09 20:14:41 +03:00
const clusterLog = `${LOGS_DIR}/load-cluster/cluster_${options.clusterId}.log`
2022-01-06 16:01:23 +03:00
logger.info(`Loading cluster: ${options.clusterId}`)
logger.info(`Creating '${clusterLog}'...`)
await file.create(clusterLog)
2022-01-09 18:15:38 +03:00
const items = await db.channels.find({ cluster_id: options.clusterId })
2022-01-09 16:09:19 +03:00
const days = options.days || 1
2022-01-06 17:55:25 +03:00
const total = days * items.length
logger.info(`Total ${total} requests`)
2022-01-06 16:01:23 +03:00
logger.info('Loading...')
const results = {}
let i = 1
for (const item of items) {
const config = require(file.resolve(item.configPath))
2022-01-06 17:55:25 +03:00
config.days = config.days || days
2022-01-06 16:01:23 +03:00
const programs = await grabber.grab(item, config, (data, err) => {
logger.info(
`[${i}/${total}] ${config.site} - ${data.channel.xmltv_id} - ${data.date.format(
'MMM D, YYYY'
)} (${data.programs.length} programs)`
)
if (err) logger.error(err.message)
if (i < total) i++
})
2022-01-09 16:09:19 +03:00
await file.append(
clusterLog,
JSON.stringify({ _id: item._id, site: config.site, programs }) + '\n'
)
2022-01-06 16:01:23 +03:00
}
logger.info(`Done in ${timer.format('HH[h] mm[m] ss[s]')}`)
}
main()