From 0234bce8ce584c62490902992b2c0ad85e4a853d Mon Sep 17 00:00:00 2001 From: Bram Kelchtermans Date: Sat, 19 Apr 2025 21:28:41 +0200 Subject: [PATCH] update to latest version --- Dockers/iptv-epg/Dockerfile | 10 ++-- Dockers/iptv-epg/entrypoint.sh | 103 +++++++++++++++++++++++++++------ 2 files changed, 89 insertions(+), 24 deletions(-) diff --git a/Dockers/iptv-epg/Dockerfile b/Dockers/iptv-epg/Dockerfile index e484026..a6b3cea 100644 --- a/Dockers/iptv-epg/Dockerfile +++ b/Dockers/iptv-epg/Dockerfile @@ -6,14 +6,14 @@ RUN apk add --no-cache git curl unzip coreutils # Set working directory WORKDIR /app -# Download and extract the EPG repository -RUN curl -L https://github.com/iptv-org/epg/archive/refs/tags/2023.12.1.zip -o epg.zip && \ - unzip epg.zip && \ - mv epg-2023.12.1/* ./ && \ - rm -rf epg.zip epg-2023.12.1 && \ +# Clone the latest EPG repository code +RUN git clone --depth 1 -b master https://github.com/iptv-org/epg.git . && \ npm install && \ npm install pm2 serve -g +# Create output directory +RUN mkdir -p /app/output + # Copy entrypoint script COPY entrypoint.sh /app/entrypoint.sh RUN chmod +x /app/entrypoint.sh diff --git a/Dockers/iptv-epg/entrypoint.sh b/Dockers/iptv-epg/entrypoint.sh index ca3a8f1..761a1de 100644 --- a/Dockers/iptv-epg/entrypoint.sh +++ b/Dockers/iptv-epg/entrypoint.sh @@ -30,22 +30,64 @@ grab_epg() { eval $cmd } -# Function to grab EPG data for all sites +# Function to grab EPG data for all sites concurrently grab_all_sites() { # Split the SITES environment variable by comma - POSIX sh compatible echo "$SITES" | tr ',' '\n' >/tmp/sites.txt - # Process each site - while read site; do - grab_epg "$site" - done /tmp/grab_all.sh </app/grab-sites.js < site.trim() !== ''); +console.log(\`Starting scheduled EPG grab at \${new Date().toISOString()}\`); + +// Track running processes +const processes = []; +let completedCount = 0; sites.forEach(site => { try { - console.log(\`Grabbing EPG data for site: \${site}\`); - let cmd = \`npm run grab -- --site=\${site} --output=output/\${site}.xml --maxConnections=\${process.env.MAX_CONNECTIONS || 1}\`; + console.log(\`Starting grab for site: \${site}\`); + let cmd = 'npm'; + let args = ['run', 'grab', '--', \`--site=\${site}\`, \`--output=output/\${site}.xml\`, \`--maxConnections=\${process.env.MAX_CONNECTIONS || 1}\`]; // Add optional parameters - if (process.env.DAYS) cmd += \` --days=\${process.env.DAYS}\`; - if (process.env.DELAY) cmd += \` --delay=\${process.env.DELAY}\`; - if (process.env.LANG) cmd += \` --lang=\${process.env.LANG}\`; - if (process.env.GZIP === 'true') cmd += \` --gzip\`; + if (process.env.DAYS) args.push(\`--days=\${process.env.DAYS}\`); + if (process.env.DELAY) args.push(\`--delay=\${process.env.DELAY}\`); + if (process.env.LANG) args.push(\`--lang=\${process.env.LANG}\`); + if (process.env.GZIP === 'true') args.push('--gzip'); - execSync(cmd, { stdio: 'inherit' }); + const process = spawn(cmd, args, { stdio: 'inherit' }); + + process.on('close', (code) => { + completedCount++; + if (code === 0) { + console.log(\`Successfully grabbed EPG data for site: \${site}\`); + } else { + console.error(\`Error grabbing EPG data for site: \${site}, exit code: \${code}\`); + } + + if (completedCount === sites.length) { + console.log(\`Completed scheduled EPG grab at \${new Date().toISOString()}\`); + } + }); + + processes.push(process); } catch (error) { - console.error(\`Error grabbing EPG data for site: \${site}\`, error); + console.error(\`Error starting EPG grab for site: \${site}\`, error); + completedCount++; } }); EOL @@ -81,12 +146,12 @@ EOL # Start the cron job pm2 start --name epg-grabber /app/grab-sites.js --no-autorestart --cron-restart="$CRON_SCHEDULE" + pm2 logs epg-grabber & fi # Start the server to serve the guide files -cd /app -echo "Starting server on port 3000" -npx serve -p 3000 +echo "Starting server on port 3000 to serve EPG files from /app/output" +npx serve -p 3000 /app/output & # Keep the container running tail -f /dev/null