// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
'use strict';
const process = require('child_process');
class PinpointJob {
constructor(json) {
this.user_ = json.created_by;
this.timestamp_ = new Date(json.create_time.seconds * 1000);
this.crbug_ = json.job_spec.monorail_issue;
this.url_ = undefined;
this.project_ = undefined;
if (this.crbug_) {
const project = this.crbug_.project;
const num = this.crbug_.issue_id;
this.url_ =
`https://bugs.chromium.org/p/${project}/issues/detail?id=${num}`;
this.project_ = project;
}
}
get url() {
return this.url_;
}
get timestamp() {
return this.timestamp_;
}
get project() {
return this.project_;
}
};
class Pinpoint {
constructor() {}
listJobs(useremail) {
const args =
['pinpoint', 'list-jobs', '--json', '--filter', `user=${useremail}`];
for (let tries = 0; tries < 3; ++tries) {
try {
const stdout = process.execSync(args.join(' ')).toString().trim();
const json = JSON.parse(stdout);
if (json) {
const jobs = json.map(j => new PinpointJob(j));
return jobs;
}
} catch (ex) {
}
}
return [];
}
};
async function test() {
const pinpoint = new Pinpoint();
const jobs = pinpoint.listJobs('[email protected]');
console.log(jobs.filter(j => j.url)
.map(j => `${j.timestamp.toLocaleDateString()},${j.url}`));
}
module.exports = {
Pinpoint,
};