@versatiledatakit/data-pipelines
Version:
Data Pipelines help Data Engineers develop, deploy, run, and manage data processing workloads (called 'Data Job')
102 lines • 14.4 kB
JavaScript
/*
* Copyright 2023-2025 Broadcom
* SPDX-License-Identifier: Apache-2.0
*/
import { Component, Input } from '@angular/core';
import { Chart, registerables } from 'chart.js';
import ChartDataLabels from 'chartjs-plugin-datalabels';
import { DataJobExecutionToGridDataJobExecution } from '../model/data-job-execution';
import * as i0 from "@angular/core";
export class ExecutionStatusChartComponent {
constructor() {
Chart.register(...registerables, ChartDataLabels);
}
getDoughnutLabels() {
return this.jobExecutions.map((execution) => execution.status).filter((item, i, ar) => ar.indexOf(item) === i);
}
getDoughnutData() {
const data = [];
this.getDoughnutLabels().forEach((label) => data.push(this.jobExecutions.filter((execution) => execution.status === label).length));
return data;
}
getDoughnutLabelColors() {
const colors = [];
const statusColorMap = DataJobExecutionToGridDataJobExecution.getStatusColorsMap();
this.getDoughnutLabels().forEach((label) => {
colors.push(statusColorMap[label]);
});
return colors;
}
ngOnChanges(changes) {
if (!changes['jobExecutions'].isFirstChange()) {
this.totalExecutions = this.jobExecutions.length;
this.chart.data.labels = this.getDoughnutLabels();
this.chart.data.datasets[0].backgroundColor = this.getDoughnutLabelColors();
this.chart.data.datasets[0].data = this.getDoughnutData();
this.chart.update();
}
}
ngOnInit() {
this.totalExecutions = this.jobExecutions.length;
const data = {
labels: this.getDoughnutLabels(),
datasets: [
{
data: this.getDoughnutData(),
backgroundColor: this.getDoughnutLabelColors(),
hoverOffset: 4
}
]
};
this.chart = new Chart('statusChart', {
type: 'doughnut',
data,
options: {
spacing: 1,
elements: {
arc: {
borderWidth: 0
}
},
cutout: 70,
maintainAspectRatio: false,
plugins: {
legend: {
display: false,
position: 'left'
},
datalabels: {
color: 'black',
font: {
size: 16
}
},
tooltip: {
xAlign: 'center',
yAlign: 'center'
}
}
}
});
}
}
ExecutionStatusChartComponent.ɵfac = function ExecutionStatusChartComponent_Factory(t) { return new (t || ExecutionStatusChartComponent)(); };
ExecutionStatusChartComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ExecutionStatusChartComponent, selectors: [["lib-execution-status-chart"]], inputs: { jobExecutions: "jobExecutions" }, features: [i0.ɵɵNgOnChangesFeature], decls: 7, vars: 1, consts: [[1, "card", 2, "height", "230px", "margin-top", "0"], [1, "status-chart"], ["id", "statusChart", "data-cy", "data-pipelines-job-executions-status-chart"], [1, "inner-text"]], template: function ExecutionStatusChartComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "div", 0)(1, "div", 1);
i0.ɵɵelement(2, "canvas", 2);
i0.ɵɵelementStart(3, "div", 3);
i0.ɵɵtext(4);
i0.ɵɵelement(5, "br");
i0.ɵɵtext(6, " Executions ");
i0.ɵɵelementEnd()()();
} if (rf & 2) {
i0.ɵɵadvance(4);
i0.ɵɵtextInterpolate1(" ", ctx.totalExecutions, " ");
} }, styles: ["div.status-chart[_ngcontent-%COMP%]{height:200px;position:relative;margin-top:15px}div.status-chart[_ngcontent-%COMP%] div.inner-text[_ngcontent-%COMP%]{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center;font-size:18px}"] });
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ExecutionStatusChartComponent, [{
type: Component,
args: [{ selector: 'lib-execution-status-chart', template: "<!--\n ~ Copyright 2023-2025 Broadcom\n ~ SPDX-License-Identifier: Apache-2.0\n -->\n\n<div class=\"card\" style=\"height: 230px; margin-top: 0\">\n <div class=\"status-chart\">\n <canvas\n id=\"statusChart\"\n data-cy=\"data-pipelines-job-executions-status-chart\"\n ></canvas>\n <div class=\"inner-text\">\n {{ totalExecutions }} <br />\n Executions\n </div>\n </div>\n</div>\n", styles: ["/*!\n * Copyright 2023-2025 Broadcom\n * SPDX-License-Identifier: Apache-2.0\n */div.status-chart{height:200px;position:relative;margin-top:15px}div.status-chart div.inner-text{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center;font-size:18px}\n"] }]
}], function () { return []; }, { jobExecutions: [{
type: Input
}] }); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0aW9uLXN0YXR1cy1jaGFydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhLXBpcGVsaW5lcy9zcmMvbGliL2NvbXBvbmVudHMvZGF0YS1qb2IvcGFnZXMvZXhlY3V0aW9ucy9leGVjdXRpb24tc3RhdHVzLWNoYXJ0L2V4ZWN1dGlvbi1zdGF0dXMtY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1waXBlbGluZXMvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtam9iL3BhZ2VzL2V4ZWN1dGlvbnMvZXhlY3V0aW9uLXN0YXR1cy1jaGFydC9leGVjdXRpb24tc3RhdHVzLWNoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFvQyxNQUFNLGVBQWUsQ0FBQztBQUVuRixPQUFPLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNoRCxPQUFPLGVBQWUsTUFBTSwyQkFBMkIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsc0NBQXNDLEVBQXdCLE1BQU0sNkJBQTZCLENBQUM7O0FBTzNHLE1BQU0sT0FBTyw2QkFBNkI7SUFNdEM7UUFDSSxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsYUFBYSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxpQkFBaUI7UUFDYixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBZ0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FB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NkI7Z0ZBQTdCLDZCQUE2QjtRQ1oxQyw4QkFBdUQsYUFBQTtRQUUvQyw0QkFHVTtRQUNWLDhCQUF3QjtRQUNwQixZQUFzQjtRQUFBLHFCQUFNO1FBQzVCLDRCQUNKO1FBQUEsaUJBQU0sRUFBQSxFQUFBOztRQUZGLGVBQXNCO1FBQXRCLG9EQUFzQjs7dUZES3JCLDZCQUE2QjtjQUx6QyxTQUFTOzJCQUNJLDRCQUE0QjtzQ0FLN0IsYUFBYTtrQkFBckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAyMy0yMDI1IEJyb2FkY29tXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICovXG5cbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IENoYXJ0LCByZWdpc3RlcmFibGVzIH0gZnJvbSAnY2hhcnQuanMnO1xuaW1wb3J0IENoYXJ0RGF0YUxhYmVscyBmcm9tICdjaGFydGpzLXBsdWdpbi1kYXRhbGFiZWxzJztcblxuaW1wb3J0IHsgRGF0YUpvYkV4ZWN1dGlvblRvR3JpZERhdGFKb2JFeGVjdXRpb24sIEdyaWREYXRhSm9iRXhlY3V0aW9uIH0gZnJvbSAnLi4vbW9kZWwvZGF0YS1qb2ItZXhlY3V0aW9uJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdsaWItZXhlY3V0aW9uLXN0YXR1cy1jaGFydCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2V4ZWN1dGlvbi1zdGF0dXMtY2hhcnQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2V4ZWN1dGlvbi1zdGF0dXMtY2hhcnQuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBFeGVjdXRpb25TdGF0dXNDaGFydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgICBASW5wdXQoKSBqb2JFeGVjdXRpb25zOiBHcmlkRGF0YUpvYkV4ZWN1dGlvbltdO1xuXG4gICAgdG90YWxFeGVjdXRpb25zOiBudW1iZXI7XG4gICAgY2hhcnQ6IENoYXJ0O1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIENoYXJ0LnJlZ2lzdGVyKC4uLnJlZ2lzdGVyYWJsZXMsIENoYXJ0RGF0YUxhYmVscyk7XG4gICAgfVxuXG4gICAgZ2V0RG91Z2hudXRMYWJlbHMoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5qb2JFeGVjdXRpb25zLm1hcCgoZXhlY3V0aW9uKSA9PiBleGVjdXRpb24uc3RhdHVzIGFzIHN0cmluZykuZmlsdGVyKChpdGVtLCBpLCBhcikgPT4gYXIuaW5kZXhPZihpdGVtKSA9PT0gaSk7XG4gICAgfVxuXG4gICAgZ2V0RG91Z2hudXREYXRhKCk6IG51bWJlcltdIHtcbiAgICAgICAgY29uc3QgZGF0YTogbnVtYmVyW10gPSBbXTtcblxuICAgICAgICB0aGlzLmdldERvdWdobnV0TGFiZWxzKCkuZm9yRWFjaCgobGFiZWwpID0+XG4gICAgICAgICAgICBkYXRhLnB1c2godGhpcy5qb2JFeGVjdXRpb25zLmZpbHRlcigoZXhlY3V0aW9uKSA9PiAoZXhlY3V0aW9uLnN0YXR1cyBhcyBzdHJpbmcpID09PSBsYWJlbCkubGVuZ3RoKVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGdldERvdWdobnV0TGFiZWxDb2xvcnMoKTogc3RyaW5nW10ge1xuICAgICAgICBjb25zdCBjb2xvcnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGNvbnN0IHN0YXR1c0NvbG9yTWFwID0gRGF0YUpvYkV4ZWN1dGlvblRvR3JpZERhdGFKb2JFeGVjdXRpb24uZ2V0U3RhdHVzQ29sb3JzTWFwKCk7XG5cbiAgICAgICAgdGhpcy5nZXREb3VnaG51dExhYmVscygpLmZvckVhY2goKGxhYmVsKSA9PiB7XG4gICAgICAgICAgICBjb2xvcnMucHVzaChzdGF0dXNDb2xvck1hcFtsYWJlbF0gYXMgc3RyaW5nKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGNvbG9ycztcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmICghY2hhbmdlc1snam9iRXhlY3V0aW9ucyddLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgICAgICAgdGhpcy50b3RhbEV4ZWN1dGlvbnMgPSB0aGlzLmpvYkV4ZWN1dGlvbnMubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy5jaGFydC5kYXRhLmxhYmVscyA9IHRoaXMuZ2V0RG91Z2hudXRMYWJlbHMoKTtcbiAgICAgICAgICAgIHRoaXMuY2hhcnQuZGF0YS5kYXRhc2V0c1swXS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmdldERvdWdobnV0TGFiZWxDb2xvcnMoKTtcbiAgICAgICAgICAgIHRoaXMuY2hhcnQuZGF0YS5kYXRhc2V0c1swXS5kYXRhID0gdGhpcy5nZXREb3VnaG51dERhdGEoKTtcbiAgICAgICAgICAgIHRoaXMuY2hhcnQudXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50b3RhbEV4ZWN1dGlvbnMgPSB0aGlzLmpvYkV4ZWN1dGlvbnMubGVuZ3RoO1xuXG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICBsYWJlbHM6IHRoaXMuZ2V0RG91Z2hudXRMYWJlbHMoKSxcbiAgICAgICAgICAgIGRhdGFzZXRzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLmdldERvdWdobnV0RGF0YSgpLFxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoaXMuZ2V0RG91Z2hudXRMYWJlbENvbG9ycygpLFxuICAgICAgICAgICAgICAgICAgICBob3Zlck9mZnNldDogNFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmNoYXJ0ID0gbmV3IENoYXJ0KCdzdGF0dXNDaGFydCcsIHtcbiAgICAgICAgICAgIHR5cGU6ICdkb3VnaG51dCcsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICAgIHNwYWNpbmc6IDEsXG4gICAgICAgICAgICAgICAgZWxlbWVudHM6IHtcbiAgICAgICAgICAgICAgICAgICAgYXJjOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJXaWR0aDogMFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjdXRvdXQ6IDcwLFxuICAgICAgICAgICAgICAgIG1haW50YWluQXNwZWN0UmF0aW86IGZhbHNlLFxuICAgICAgICAgICAgICAgIHBsdWdpbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgbGVnZW5kOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnbGVmdCdcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YWxhYmVsczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdibGFjaycsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogMTZcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgeEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHlBbGlnbjogJ2NlbnRlcidcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiPCEtLVxuICAgfiBDb3B5cmlnaHQgMjAyMy0yMDI1IEJyb2FkY29tXG4gICB+IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4gIC0tPlxuXG48ZGl2IGNsYXNzPVwiY2FyZFwiIHN0eWxlPVwiaGVpZ2h0OiAyMzBweDsgbWFyZ2luLXRvcDogMFwiPlxuICAgIDxkaXYgY2xhc3M9XCJzdGF0dXMtY2hhcnRcIj5cbiAgICAgICAgPGNhbnZhc1xuICAgICAgICAgICAgaWQ9XCJzdGF0dXNDaGFydFwiXG4gICAgICAgICAgICBkYXRhLWN5PVwiZGF0YS1waXBlbGluZXMtam9iLWV4ZWN1dGlvbnMtc3RhdHVzLWNoYXJ0XCJcbiAgICAgICAgPjwvY2FudmFzPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5uZXItdGV4dFwiPlxuICAgICAgICAgICAge3sgdG90YWxFeGVjdXRpb25zIH19IDxiciAvPlxuICAgICAgICAgICAgRXhlY3V0aW9uc1xuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19