Fix unit test and bug fix for 'pull-os-versions.js' script.
[WebKit.git] / Websites / perf.webkit.org / tools / pull-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     Promise.all(osConfigList.map(osConfig => new OSBuildFetcher(osConfig, remoteAPI, serverConfig.slave, new Subprocess, console))).then((fetchers) => {
32         return fetchers.reduce((promise, fetcher) => {
33             return promise.then(() => fetcher.fetchAndReportNewBuilds());
34         }, Promise.resolve());
35     }).catch((error) => {
36         console.error(error);
37         if (typeof(error.stack) == 'string') {
38             for (let line of error.stack.split('\n'))
39                 console.error(line);
40         }
41     }).then(function () {
42         setTimeout(syncLoop.bind(global, options), options['--seconds-to-sleep'] * 1000);
43     });
44 }
45
46 main(process.argv);