Refactor duplicate code for calling into media controls
[WebKit-https.git] / Websites / perf.webkit.org / tools / sync-buildbot.js
1 #!/usr/local/bin/node
2 'use strict';
3
4 let BuildbotTriggerable = require('./js/buildbot-triggerable.js').BuildbotTriggerable;
5 let RemoteAPI = require('./js/remote.js').RemoteAPI;
6 let fs = require('fs');
7 let parseArguments = require('./js/parse-arguments.js').parseArguments;
8
9 function main(argv)
10 {
11     let options = parseArguments(argv, [
12         {name: '--server-config-json', required: true},
13         {name: '--buildbot-config-json', required: true},
14         {name: '--seconds-to-sleep', type: parseFloat, default: 120},
15     ]);
16     if (!options)
17         return;
18
19     syncLoop(options);
20 }
21
22 function syncLoop(options)
23 {
24     let serverConfig = JSON.parse(fs.readFileSync(options['--server-config-json'], 'utf8'));
25     let buildbotConfig = JSON.parse(fs.readFileSync(options['--buildbot-config-json'], 'utf8'));
26     let buildbotRemote = new RemoteAPI(buildbotConfig.server);
27
28     // v3 models use the global RemoteAPI to access the perf dashboard.
29     global.RemoteAPI = new RemoteAPI(serverConfig.server);
30
31     console.log(`Fetching the manifest...`);
32
33     const makeTriggerable = function () {
34         return new BuildbotTriggerable(buildbotConfig, global.RemoteAPI, buildbotRemote, serverConfig.slave, console)
35     };
36
37     Manifest.fetch().then(() => {
38         const triggerable = makeTriggerable();
39         return triggerable.initSyncers().then(() => triggerable.updateTriggerable());
40     }).then(() => {
41         return Manifest.fetch();
42     }).then(() => {
43         const triggerable = makeTriggerable();
44         return triggerable.initSyncers().then(() => triggerable.syncOnce());
45     }).catch((error) => {
46         console.error(error);
47         if (typeof(error.stack) == 'string') {
48             for (let line of error.stack.split('\n'))
49                 console.error(line);
50         }
51     }).then(() => {
52         setTimeout(syncLoop.bind(global, options), options['--seconds-to-sleep'] * 1000);
53     });
54 }
55
56 main(process.argv);