UNPKG

@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
/* * 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