Rewrite 'pull-os-versions' script in Javascript to add support for reporting os revis...
[WebKit-https.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     // v3 models use the global RemoteAPI to access the perf dashboard.
30     global.RemoteAPI = new RemoteAPI(serverConfig.server);
31
32     Promise.all(osConfigList.map(osConfig => new OSBuildFetcher(osConfig, global.RemoteAPI, new Subprocess, serverConfig.slave, console))).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(function () {
39         setTimeout(syncLoop.bind(global, options), options['--seconds-to-sleep'] * 1000);
40     });
41 }
42
43 main(process.argv);