auto-sync: 2026-05-09 20:40:01

This commit is contained in:
Stream
2026-05-09 20:40:01 +03:00
parent d0ec715210
commit 92fd3e6778
6 changed files with 633 additions and 2 deletions

View File

@@ -0,0 +1,85 @@
const { Client } = require('ssh2');
const conn = new Client();
conn.on('ready', () => {
console.log('SSH connected');
const downloadScript = [
'#!/bin/bash',
'set -e',
'SRTM_DIR="/home/slin/enduro-trails/data/srtm"',
'mkdir -p "$SRTM_DIR"',
'BASE_URL="https://s3.amazonaws.com/elevation-tiles-prod/skadi"',
'TILES=(',
' "N55E037" "N55E038" "N55E039" "N55E040"',
' "N54E037" "N54E038" "N54E039" "N54E040"',
' "N53E038" "N53E039" "N53E040" "N53E041"',
' "N52E038" "N52E039" "N52E040" "N52E041"',
' "N56E037" "N56E038" "N56E039" "N56E040"',
' "N57E037" "N57E038" "N57E039" "N57E040"',
' "N58E037" "N58E038" "N58E039" "N58E040"',
' "N59E038" "N59E039" "N59E040" "N59E041"',
' "N60E040" "N60E041" "N60E042"',
' "N54E042" "N54E043" "N54E044" "N54E045"',
' "N53E042" "N53E043" "N53E044" "N53E045"',
' "N52E042" "N52E043" "N52E044" "N52E045"',
' "N51E038" "N51E039" "N51E040" "N51E041"',
' "N50E038" "N50E039" "N50E040" "N50E041"',
' "N55E047" "N55E048" "N55E049" "N55E050"',
' "N54E047" "N54E048" "N54E049" "N54E050"',
' "N56E047" "N56E048" "N56E049" "N56E050"',
')',
'echo "Downloading ${TILES[@]} SRTM tiles..."',
'cd "$SRTM_DIR"',
'for tile in "${TILES[@]}"; do',
' lat=${tile:1:2}',
' fname="${tile}.hgt.gz"',
' url="${BASE_URL}/${lat}/${fname}"',
' if [ -f "${tile}.hgt" ]; then',
' echo "SKIP ${tile} (already have .hgt)"',
' continue',
' fi',
' if [ -f "${fname}" ]; then',
' echo "SKIP ${tile} (already downloaded)"',
' continue',
' fi',
' echo "DOWNLOAD ${tile}..."',
' wget --timeout=60 -q "$url" -O "${fname}"',
' if [ -s "${fname}" ]; then',
' echo "EXTRACT ${tile}..."',
' gunzip -f "${fname}"',
' echo "OK ${tile}"',
' else',
' echo "FAIL ${tile} (empty or error)"',
' rm -f "${fname}"',
' fi',
'done',
'echo ""',
'echo "Download complete. Files:"',
'ls -la *.hgt 2>/dev/null | wc -l',
'echo " .hgt files"',
].join('\n');
conn.exec(downloadScript, (err, stream) => {
if (err) { console.error('Exec error:', err); conn.end(); return; }
stream.on('data', d => process.stdout.write(d));
stream.stderr.on('data', d => process.stderr.write(d));
stream.on('close', (code) => {
console.log('\nDownload script exited:', code);
conn.end();
});
});
});
conn.on('error', (err) => {
console.error('SSH error:', err.message);
process.exit(1);
});
conn.connect({
host: '82.22.50.71',
username: 'slin',
password: 'motoZ@yaz2010',
readyTimeout: 30000
});

View File

@@ -0,0 +1,91 @@
const { Client } = require('ssh2');
const TILES = [
'N55E037','N55E038','N55E039','N55E040',
'N54E037','N54E038','N54E039','N54E040',
'N53E038','N53E039','N53E040','N53E041',
'N52E038','N52E039','N52E040','N52E041',
'N56E037','N56E038','N56E039','N56E040',
'N57E037','N57E038','N57E039','N57E040',
'N58E037','N58E038','N58E039','N58E040',
'N59E038','N59E039','N59E040','N59E041',
'N60E040','N60E041','N60E042',
'N54E042','N54E043','N54E044','N54E045',
'N53E042','N53E043','N53E044','N53E045',
'N52E042','N52E043','N52E044','N52E045',
'N51E038','N51E039','N51E040','N51E041',
'N50E038','N50E039','N50E040','N50E041',
'N55E047','N55E048','N55E049','N55E050',
'N54E047','N54E048','N54E049','N54E050',
'N56E047','N56E048','N56E049','N56E050',
];
const conn = new Client();
conn.on('ready', () => {
console.log('SSH connected. Downloading SRTM tiles...');
let completed = 0;
let failed = 0;
function downloadNext(idx) {
if (idx >= TILES.length) {
console.log(`\nAll done. Completed: ${completed}, Failed: ${failed}`);
conn.end();
return;
}
const tile = TILES[idx];
const lat = tile.substring(1, 3);
const url = `https://s3.amazonaws.com/elevation-tiles-prod/skadi/${lat}/${tile}.hgt.gz`;
const remoteHgt = `/home/slin/enduro-trails/data/srtm/${tile}.hgt`;
const remoteGz = `/home/slin/enduro-trails/data/srtm/${tile}.hgt.gz`;
// Check if already exists
conn.exec(`test -f ${remoteHgt} && echo EXISTS || echo MISSING`, (err, stream) => {
if (err) { failed++; downloadNext(idx + 1); return; }
let out = '';
stream.on('data', d => out += d);
stream.on('close', () => {
if (out.trim() === 'EXISTS') {
completed++;
console.log(`[${idx+1}/${TILES.length}] SKIP ${tile} (exists)`);
downloadNext(idx + 1);
return;
}
// Download
conn.exec(`wget --timeout=60 -q "${url}" -O ${remoteGz} && test -s ${remoteGz} && gunzip -f ${remoteGz} && echo OK || (rm -f ${remoteGz}; echo FAIL)`, (err, stream) => {
if (err) { failed++; downloadNext(idx + 1); return; }
let out2 = '';
stream.on('data', d => out2 += d);
stream.on('close', () => {
const result = out2.trim();
if (result === 'OK') {
completed++;
console.log(`[${idx+1}/${TILES.length}] OK ${tile}`);
} else {
failed++;
console.log(`[${idx+1}/${TILES.length}] FAIL ${tile}`);
}
downloadNext(idx + 1);
});
});
});
});
}
downloadNext(0);
});
conn.on('error', (err) => {
console.error('SSH error:', err.message);
process.exit(1);
});
conn.connect({
host: '82.22.50.71',
username: 'slin',
password: 'motoZ@yaz2010',
readyTimeout: 30000
});

View File

@@ -0,0 +1,94 @@
const { Client } = require('ssh2');
const TILES = [
'N55E037','N55E038','N55E039','N55E040',
'N54E037','N54E038','N54E039','N54E040',
'N53E038','N53E039','N53E040','N53E041',
'N52E038','N52E039','N52E040','N52E041',
'N56E037','N56E038','N56E039','N56E040',
'N57E037','N57E038','N57E039','N57E040',
'N58E037','N58E038','N58E039','N58E040',
'N59E038','N59E039','N59E040','N59E041',
'N60E040','N60E041','N60E042',
'N54E042','N54E043','N54E044','N54E045',
'N53E042','N53E043','N53E044','N53E045',
'N52E042','N52E043','N52E044','N52E045',
'N51E038','N51E039','N51E040','N51E041',
'N50E038','N50E039','N50E040','N50E041',
'N55E047','N55E048','N55E049','N55E050',
'N54E047','N54E048','N54E049','N54E050',
'N56E047','N56E048','N56E049','N56E050',
];
const conn = new Client();
conn.on('ready', () => {
console.log('SSH connected. Downloading SRTM tiles sequentially...');
let completed = 0;
let failed = 0;
let skipped = 0;
function downloadNext(idx) {
if (idx >= TILES.length) {
console.log(`\n=== DONE === Completed: ${completed}, Skipped: ${skipped}, Failed: ${failed}`);
conn.end();
return;
}
const tile = TILES[idx];
const lat = tile.substring(1, 3);
const url = `https://s3.amazonaws.com/elevation-tiles-prod/skadi/${lat}/${tile}.hgt.gz`;
const remoteHgt = `/home/slin/enduro-trails/data/srtm/${tile}.hgt`;
const remoteGz = `/home/slin/enduro-trails/data/srtm/${tile}.hgt.gz`;
// Check if already exists
conn.exec(`test -f ${remoteHgt} && echo EXISTS || echo MISSING`, (err, stream) => {
if (err) { failed++; downloadNext(idx + 1); return; }
let out = '';
stream.on('data', d => out += d);
stream.on('close', () => {
if (out.trim() === 'EXISTS') {
skipped++;
console.log(`[${idx+1}/${TILES.length}] SKIP ${tile} (exists)`);
downloadNext(idx + 1);
return;
}
// Download with wget (no -q to see errors)
const cmd = `cd /home/slin/enduro-trails/data/srtm && wget --timeout=60 "${url}" -O ${remoteGz} 2>&1 && test -s ${remoteGz} && gunzip -f ${remoteGz} && echo OK || (rm -f ${remoteGz}; echo FAIL)`;
conn.exec(cmd, (err, stream) => {
if (err) { failed++; downloadNext(idx + 1); return; }
let out2 = '';
stream.on('data', d => out2 += d);
stream.on('close', () => {
const result = out2.trim().split('\n').pop();
if (result === 'OK') {
completed++;
console.log(`[${idx+1}/${TILES.length}] OK ${tile}`);
} else {
failed++;
console.log(`[${idx+1}/${TILES.length}] FAIL ${tile}`);
}
downloadNext(idx + 1);
});
});
});
});
}
downloadNext(0);
});
conn.on('error', (err) => {
console.error('SSH error:', err.message);
process.exit(1);
});
conn.connect({
host: '82.22.50.71',
username: 'slin',
password: 'motoZ@yaz2010',
readyTimeout: 30000
});