diff --git a/_webi/builds-cacher-test.js b/_webi/builds-cacher-test.js new file mode 100644 index 0000000..3c43350 --- /dev/null +++ b/_webi/builds-cacher-test.js @@ -0,0 +1,73 @@ +'use strict'; + +let Path = require('node:path'); + +let BuildsCacher = require('./builds-cacher.js'); +// let Parallel = require('./parallel.js'); + +var INSTALLERS_DIR = Path.join(__dirname, '..'); +var CACHE_DIR = Path.join(__dirname, '../_cache'); + +async function main() { + let bc = BuildsCacher.create({ + caches: CACHE_DIR, + installers: INSTALLERS_DIR, + }); + bc.freshenRandomPackage(600 * 1000); + + // let dirs = await bc.getProjectsByType(); + // let projNames = Object.keys(dirs.valid); + + let lastUpdate; + + let projName = 'k9s'; + { + let packages = await bc.getPackages({ + //Releases: Releases, + name: projName, + date: new Date(), + }); + lastUpdate = packages.updated; + console.info( + `Last update for '${projName}': ${packages.updated} (${packages.releases.length} assets)`, + ); + } + + console.info('Waiting 5s'); + { + setTimeout(async function () { + let packages = await bc.getPackages({ + //Releases: Releases, + name: projName, + date: new Date(), + }); + console.info( + `Last update for '${projName}': ${packages.updated} (${packages.releases.length} assets)`, + ); + if (lastUpdate < packages.updated) { + console.info(`PASS`); + } else { + console.info(`MAYBE fail`); + } + }, 5 * 1000); + } + + //let parallel = 25; + //await Parallel.run(parallel, projNames, getAll); + //async function getAll(name) { + // void (await bc.getPackages({ + // //Releases: Releases, + // name: name, + // date: new Date(), + // })); + //} +} + +main() + .then(function () { + console.log('Done'); + }) + .catch(function (e) { + console.error(e.stack || e); + process.exit(1); + }); diff --git a/_webi/builds-cacher.js b/_webi/builds-cacher.js index 166eef0..620fa38 100644 --- a/_webi/builds-cacher.js +++ b/_webi/builds-cacher.js @@ -130,6 +130,8 @@ async function readFirstBytes(path) { let promises = {}; async function getLatestBuilds(Releases, installersDir, cacheDir, name, date) { + console.info(`[INFO] getLatestBuilds: ${name}`); + if (!Releases) { Releases = require(`${installersDir}/${name}/releases.js`); } @@ -323,17 +325,21 @@ BuildsCacher.create = function ({ ALL_TERMS, installers, caches }) { let isoDate = date.toISOString(); let yearMonth = isoDate.slice(0, 7); let dataFile = `${cacheDir}/${yearMonth}/${name}.json`; + let tsFile = `${cacheDir}/${yearMonth}/${name}.updated.txt`; - // let secondsStr = await Fs.readFile(tsFile, 'ascii').catch(function (err) { - // if (err.code !== 'ENOENT') { - // throw err; - // } - // return '0'; - // }); - // secondsStr = secondsStr.trim(); - // let seconds = parseFloat(secondsStr) || 0; - - // let age = now - seconds; + let tsDate; + { + let secondsStr = await Fs.readFile(tsFile, 'ascii').catch(function (err) { + if (err.code !== 'ENOENT') { + throw err; + } + return '0'; + }); + secondsStr = secondsStr.trim(); + let seconds = parseFloat(secondsStr) || 0; + let ms = seconds * 1000; + tsDate = new Date(ms); + } let projInfo = bc._caches[name]; @@ -375,11 +381,14 @@ BuildsCacher.create = function ({ ALL_TERMS, installers, caches }) { if (!projInfo) { projInfo = await getLatestBuilds(Releases, installersDir, cacheDir, name); } + transformAndUpdate(name, projInfo, meta, tsDate); process.nextTick(async function () { let now = date.valueOf(); let age = now - projInfo.updated; - if (age < bc._staleAge) { + + let fresh = age < bc._staleAge; + if (fresh) { return; } @@ -387,7 +396,6 @@ BuildsCacher.create = function ({ ALL_TERMS, installers, caches }) { transformAndUpdate(name, projInfo, meta, date); }); - transformAndUpdate(name, projInfo, meta, date); return projInfo; }; @@ -395,6 +403,7 @@ BuildsCacher.create = function ({ ALL_TERMS, installers, caches }) { meta.packages = []; let updated = date.valueOf(); + Object.assign(projInfo, { name, updated }, meta); for (let build of projInfo.releases) { let buildTarget = bc.classify(projInfo, build); @@ -503,6 +512,7 @@ BuildsCacher.create = function ({ ALL_TERMS, installers, caches }) { name: name, date: new Date(), })); + console.info(`[INFO] freshenRandomPackage: ${name}`); let hour = 60 * 60 * 1000; let delay = minDelay; diff --git a/_webi/builds.js b/_webi/builds.js index 989b9e0..5b1ec1b 100644 --- a/_webi/builds.js +++ b/_webi/builds.js @@ -20,7 +20,7 @@ bc.freshenRandomPackage(600 * 1000); Builds.init = async function () { bc.freshenRandomPackage(600 * 1000); - let dirs = await bc.getProjects(); + let dirs = await bc.getProjectsByType(); let projNames = Object.keys(dirs.valid); let parallel = 25;