1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- // Copyright 2021 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- 'use strict';
- const child_process = require('child_process');
- const fs = require('fs');
- const os = require('os');
- const path = require('path');
- // QueryRunner uses the swarming binary to retrieve data from the swarming
- // servers.
- class QueryRunner {
- constructor(server) {
- this.swarming_server_ = server;
- this.bin_ = './tools/luci-go/swarming';
- }
- // Retrieves the list of tasks matching `tag`.
- retrieveTasks(tag, fields = [
- 'task_id', 'run_id', 'failure', 'state', 'tags'
- ]) {
- const cmds = [
- this.bin_, 'tasks', '-S', this.swarming_server_,
- `-field="items(${fields.join(',')})"`, `-tag="${tag}"`
- ];
- const output = child_process.execSync(cmds.join(' '));
- return JSON.parse(output.toString());
- }
- // Returns a promoise for a parsed JSON object from the contents in `filename`
- // for the specified `task_id`.
- retrieveJSONFile(task_id, filename) {
- // This is going to create some temp directory. So put this in a try/finally
- // block so that the temp directory gets cleaned up correctly.
- let temp_dir = undefined;
- try {
- temp_dir = fs.mkdtempSync(path.join(os.tmpdir(), 'cr-fetch'));
- return this.retrieveFile_(task_id, filename, temp_dir);
- } catch (e) {
- console.error(e);
- } finally {
- if (temp_dir) {
- try {
- fs.rmdirSync(temp_dir, {recursive: true, force: false});
- } catch (e) {
- console.error(`Failed to cleanup temp directory at ${temp_dir}.`);
- console.error(e);
- }
- }
- }
- }
- retrieveFile_(task_id, filename, temp_dir) {
- return new Promise((resolve, reject) => {
- const cmds = [
- this.bin_, 'collect', '-S', this.swarming_server_,
- `-output-dir="${temp_dir}"`, task_id
- ];
- const output = child_process.exec(cmds.join(' '), () => {
- const filepath = path.join(temp_dir, task_id, filename);
- resolve(JSON.parse(fs.readFileSync(filepath).toString()));
- });
- });
- }
- };
- module.exports = {
- QueryRunner,
- };
|