| // 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('sadrul@google.com'); |
| console.log(jobs.filter(j => j.url) |
| .map(j => `${j.timestamp.toLocaleDateString()},${j.url}`)); |
| } |
| |
| module.exports = { |
| Pinpoint, |
| }; |