blob: 8d677788858c09ce624a47539483fdc53fd1f818 [file] [log] [blame]
/**
* @license
* Copyright (C) 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* Heads up! Everything in this file is still in flux. The new reboot checks API
* is still in development. So everything in this file can change. And it is
* expected that the amount of comments and tests is limited for the time being.
*/
export class RebootFetcher {
constructor(restApi) {
this.restApi = restApi;
}
async fetch(changeNumber, patchsetNumber) {
console.log('Issuing REBOOT http call.');
const checks = await this.restApi.get(
'/changes/' + changeNumber + '/revisions/' + patchsetNumber
+ '/checks?o=CHECKER');
console.log('Returning REBOOT response.');
return {
responseCode: 'OK',
runs: checks.map(convert),
};
}
}
/**
* Converts a Checks Plugin CheckInfo object into a Reboot Checks API Run
* object.
*
* TODO(brohlfs): Refine this conversion and add tests.
*/
function convert(check) {
let status = 'RUNNABLE';
if (check.state === 'RUNNING' || check.state === 'SCHEDULED') {
status = 'RUNNING';
} else if (check.state === 'FAILED' || check.state === 'SUCCESSFUL') {
status = 'COMPLETED';
}
const run = {
checkName: check.checker_name,
checkDescription: check.checker_description,
externalId: check.checker_uuid,
status,
};
if (check.started) run.startedTimestamp = new Date(check.started);
if (check.finished) run.finishedTimestamp = new Date(check.finished);
if (status === 'RUNNING') {
run.statusDescription = check.message;
} else if (status === 'COMPLETED') {
run.results = [{
category: check.state === 'FAILED' ? 'ERROR' : 'INFO',
summary: check.message,
}];
if (check.url) {
run.results[0].links = [{
url: check.url,
primary: true,
icon: 'EXTERNAL',
}];
}
}
return run;
}