Refactor duplicate code for calling into media controls
[WebKit-https.git] / Websites / perf.webkit.org / tools / sync-os-versions.js
1 #!/usr/local/bin/node
2 'use strict';
3
4
5 let OSBuildFetcher = require('./js/os-build-fetcher.js').OSBuildFetcher;
6 let RemoteAPI = require('./js/remote.js').RemoteAPI;
7 let Subprocess = require('./js/subprocess.js').Subprocess;
8 let fs = require('fs');
9 let parseArguments = require('./js/parse-arguments.js').parseArguments;
10
11 function main(argv)
12 {
13     let options = parseArguments(argv, [
14         {name: '--os-config-json', required: true},
15         {name: '--server-config-json', required: true},
16         {name: '--seconds-to-sleep', type: parseFloat, default: 43200},
17     ]);
18     if (!options)
19         return;
20
21     syncLoop(options);
22 }
23
24 function syncLoop(options)
25 {
26     let osConfigList = JSON.parse(fs.readFileSync(options['--os-config-json'], 'utf8'));
27     let serverConfig = JSON.parse(fs.readFileSync(options['--server-config-json'], 'utf8'));
28
29     const remoteAPI = new RemoteAPI(serverConfig.server);
30
31     const fetchers = osConfigList.map((osConfig) => new OSBuildFetcher(osConfig, remoteAPI, serverConfig.slave, new Subprocess, console));
32     OSBuildFetcher.fetchAndReportAllInOrder(fetchers).catch((error) => {
33         console.error(error);
34         if (typeof(error.stack) == 'string') {
35             for (let line of error.stack.split('\n'))
36                 console.error(line);
37         }
38     }).then(() => {
39         const secondsToSleep = options['--seconds-to-sleep'];
40         console.log(`Sleeping for ${Math.floor(secondsToSleep / 3600)}h ${Math.floor(secondsToSleep / 60) % 60}m ${secondsToSleep % 60}s`);
41         setTimeout(() => syncLoop(options), secondsToSleep * 1000);
42     });
43 }
44
45 main(process.argv);