blob: 2b65d8eb1902f83843e1092693adf19c4fef4091 [file] [log] [blame] [edit]
/**
* @module modules/gold-status-sk
* @description <h2><code>gold-status-sk</code></h2>
*
* @property repo: string - The repository we are currently looking at.
* Custom element to display untriaged Gold iamges.
*/
import { html } from 'lit/html.js';
import { define } from '../../../elements-sk/modules/define';
import { errorMessage } from '../../../elements-sk/modules/errorMessage';
import { jsonOrThrow } from '../../../infra-sk/modules/jsonOrThrow';
import { ElementSk } from '../../../infra-sk/modules/ElementSk';
import { GUICorpusStatus, StatusResponse } from '../../../golden/modules/rpc_types';
const defaultGoldURL = 'https://gold.skia.org';
// The Gold URLs of Skia repos are hardcoded because there is no way
// to compute them based on the repo names.
const repoToGoldURL: Record<string, string> = {
skia: defaultGoldURL,
infra: 'https://skia-infra-gold.skia.org',
eskia: 'https://eskia-gold.skia.org',
lottie: 'https://lottie-gold.skia.org',
};
export class GoldStatusSk extends ElementSk {
private resp?: StatusResponse;
private _repo: string = '';
private static template = (el: GoldStatusSk) => html`
<div class="table">
${el.resp && el.resp.corpStatus
? el.resp!.corpStatus!.map(
(c) => html`
<a
class="tr"
href="${el.getGoldURL()}${`/?corpus=${c!.name}`}"
target="_blank"
rel="noopener noreferrer"
title="Skia Gold: Untriaged ${c!.name} image count">
<div class="td">${c!.name}</div>
<div class="td number">
<span class="value">${c!.untriagedCount}</span>
</div>
</a>
`
)
: html``}
</div>
`;
constructor() {
super(GoldStatusSk.template);
}
connectedCallback(): void {
super.connectedCallback();
this._render();
this.refresh();
}
get repo(): string {
return this._repo;
}
set repo(v: string) {
this._repo = v.toLowerCase();
this._render();
this.refresh();
}
private getGoldURL(): string {
if (repoToGoldURL[this.repo]) {
return repoToGoldURL[this.repo];
}
return defaultGoldURL;
}
private refresh() {
const goldUrl = this.getGoldURL();
fetch(`${goldUrl}/json/v2/trstatus`, { method: 'GET' })
.then(jsonOrThrow)
.then((json: StatusResponse) => {
this.resp = json;
this.resp.corpStatus?.sort(
(a: GUICorpusStatus, b: GUICorpusStatus) => b!.untriagedCount - a!.untriagedCount
);
this._render();
})
.catch(errorMessage)
.finally(() => {
window.setTimeout(() => this.refresh(), 60 * 1000);
});
}
}
define('gold-status-sk', GoldStatusSk);