{"version":3,"file":"deenruv-admin-ui-system.mjs","sources":["../../src/lib/system/src/components/health-check/health-check.component.ts","../../src/lib/system/src/components/health-check/health-check.component.html","../../src/lib/system/src/components/job-state-label/job-state-label.component.ts","../../src/lib/system/src/components/job-state-label/job-state-label.component.html","../../src/lib/system/src/components/job-list/job-list.component.ts","../../src/lib/system/src/components/job-list/job-list.component.html","../../src/lib/system/src/system.routes.ts","../../src/lib/system/src/system.module.ts","../../src/lib/system/src/public_api.ts","../../src/lib/system/src/deenruv-admin-ui-system.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { HealthCheckService } from '@deenruv/admin-ui/core';\n\n@Component({\n    selector: 'vdr-health-check',\n    templateUrl: './health-check.component.html',\n    styleUrls: ['./health-check.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HealthCheckComponent {\n    constructor(public healthCheckService: HealthCheckService) {}\n}\n","<vdr-page-header>\n    <vdr-page-title></vdr-page-title>\n</vdr-page-header>\n<vdr-page-body>\n    <vdr-page-block>\n        <vdr-action-bar>\n            <vdr-ab-left>\n                <div class=\"system-status-header\" *ngIf=\"healthCheckService.status$ | async as status\">\n                    <div class=\"status-icon\">\n                        <clr-icon\n                            [attr.shape]=\"status === 'ok' ? 'check-circle' : 'exclamation-circle'\"\n                            [ngClass]=\"{ 'is-success': status === 'ok', 'is-danger': status !== 'ok' }\"\n                            size=\"48\"\n                        ></clr-icon>\n                    </div>\n                    <div class=\"status-detail\">\n                        <ng-container *ngIf=\"status === 'ok'; else error\">\n                            {{ 'system.health-all-systems-up' | translate }}\n                        </ng-container>\n                        <ng-template #error>\n                            {{ 'system.health-error' | translate }}\n                        </ng-template>\n                        <div class=\"last-checked\">\n                            {{ 'system.health-last-checked' | translate }}:\n                            {{ healthCheckService.lastCheck$ | async | localeDate : 'mediumTime' }}\n                        </div>\n                    </div>\n                </div>\n            </vdr-ab-left>\n            <vdr-ab-right>\n                <vdr-action-bar-items locationId=\"system-status\"></vdr-action-bar-items>\n                <button class=\"btn btn-secondary\" (click)=\"healthCheckService.refresh()\">\n                    <clr-icon shape=\"refresh\"></clr-icon> {{ 'system.health-refresh' | translate }}\n                </button>\n            </vdr-ab-right>\n        </vdr-action-bar>\n    </vdr-page-block>\n    <vdr-page-block>\n        <table class=\"table\">\n            <thead>\n                <tr>\n                    <th class=\"left\">\n                        {{ 'common.name' | translate }}\n                    </th>\n                    <th class=\"left\">\n                        {{ 'system.health-status' | translate }}\n                    </th>\n                    <th class=\"left\">\n                        {{ 'system.health-message' | translate }}\n                    </th>\n                </tr>\n            </thead>\n            <tbody>\n                <tr *ngFor=\"let row of healthCheckService.details$ | async\">\n                    <td class=\"align-middle left\">{{ row.key }}</td>\n                    <td class=\"align-middle left\">\n                        <vdr-chip [colorType]=\"row.result.status === 'up' ? 'success' : 'error'\">\n                            <ng-container *ngIf=\"row.result.status === 'up'; else down\">\n                                <clr-icon shape=\"check-circle\"></clr-icon>\n                                {{ 'system.health-status-up' | translate }}\n                            </ng-container>\n                            <ng-template #down>\n                                <clr-icon shape=\"exclamation-circle\"></clr-icon>\n                                {{ 'system.health-status-down' | translate }}\n                            </ng-template>\n                        </vdr-chip>\n                    </td>\n                    <td class=\"align-middle left\">{{ row.result.message }}</td>\n                </tr>\n            </tbody>\n        </table>\n    </vdr-page-block>\n</vdr-page-body>\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { JobInfoFragment, JobState } from '@deenruv/admin-ui/core';\n\n@Component({\n    selector: 'vdr-job-state-label',\n    templateUrl: './job-state-label.component.html',\n    styleUrls: ['./job-state-label.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class JobStateLabelComponent {\n    @Input()\n    job: JobInfoFragment;\n\n    get iconShape(): string {\n        switch (this.job.state) {\n            case JobState.COMPLETED:\n                return 'check-circle';\n            case JobState.FAILED:\n                return 'exclamation-circle';\n            case JobState.CANCELLED:\n                return 'ban';\n            case JobState.PENDING:\n            case JobState.RETRYING:\n                return 'hourglass';\n            case JobState.RUNNING:\n                return 'sync';\n        }\n    }\n\n    get colorType(): string {\n        switch (this.job.state) {\n            case JobState.COMPLETED:\n                return 'success';\n            case JobState.FAILED:\n            case JobState.CANCELLED:\n                return 'error';\n            case JobState.PENDING:\n            case JobState.RETRYING:\n                return '';\n            case JobState.RUNNING:\n                return 'warning';\n        }\n    }\n}\n","<vdr-chip [colorType]=\"colorType\">\n    <clr-icon [attr.shape]=\"iconShape\" class=\"mr1\"></clr-icon>\n    {{ job.state | titlecase }}\n    <span *ngIf=\"job.state === 'RUNNING'\" class=\"progress\">\n        {{ (job.progress / 100) | percent }}\n    </span>\n</vdr-chip>\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport {\n    BaseListComponent,\n    DataService,\n    GetAllJobsQuery,\n    GetJobQueueListQuery,\n    ItemOf,\n    JobState,\n    SortOrder,\n} from '@deenruv/admin-ui/core';\nimport { Observable, timer } from 'rxjs';\nimport { filter, map, takeUntil } from 'rxjs/operators';\n\n@Component({\n    selector: 'vdr-job-list',\n    templateUrl: './job-list.component.html',\n    styleUrls: ['./job-list.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class JobListComponent\n    extends BaseListComponent<GetAllJobsQuery, ItemOf<GetAllJobsQuery, 'jobs'>>\n    implements OnInit\n{\n    queues$: Observable<GetJobQueueListQuery['jobQueues']>;\n    liveUpdate = new FormControl(true);\n    queueFilter = new FormControl('all');\n    stateFilter = new FormControl<JobState | string>('');\n\n    constructor(\n        private dataService: DataService,\n        router: Router,\n        route: ActivatedRoute,\n    ) {\n        super(router, route);\n        super.setQueryFn(\n            (...args: any[]) => this.dataService.settings.getAllJobs(...args),\n            data => data.jobs,\n            (skip, take) => {\n                const queueFilter =\n                    this.queueFilter.value === 'all' ? null : { queueName: { eq: this.queueFilter.value } };\n                const stateFilter = this.stateFilter.value;\n                return {\n                    options: {\n                        skip,\n                        take,\n                        filter: {\n                            ...queueFilter,\n                            ...(stateFilter ? { state: { eq: stateFilter } } : {}),\n                        },\n                        sort: {\n                            createdAt: SortOrder.DESC,\n                        },\n                    },\n                };\n            },\n        );\n    }\n\n    ngOnInit(): void {\n        super.ngOnInit();\n        timer(5000, 2000)\n            .pipe(\n                takeUntil(this.destroy$),\n                filter(() => !!this.liveUpdate.value),\n            )\n            .subscribe(() => {\n                this.refresh();\n            });\n        this.queues$ = this.dataService.settings\n            .getJobQueues()\n            .mapStream(res => res.jobQueues)\n            .pipe(map(queues => [{ name: 'all', running: true }, ...queues]));\n    }\n\n    hasResult(job: ItemOf<GetAllJobsQuery, 'jobs'>): boolean {\n        const result = job.result;\n        if (result == null) {\n            return false;\n        }\n        if (typeof result === 'object') {\n            return Object.keys(result).length > 0;\n        }\n        return true;\n    }\n\n    cancelJob(id: string) {\n        this.dataService.settings.cancelJob(id).subscribe(() => this.refresh());\n    }\n}\n","<vdr-page-header>\n    <vdr-page-title></vdr-page-title>\n</vdr-page-header>\n<vdr-page-body>\n    <vdr-page-block>\n        <vdr-action-bar>\n            <vdr-ab-left>\n                <clr-checkbox-wrapper class=\"mr-2\">\n                    <input type=\"checkbox\" clrCheckbox [formControl]=\"liveUpdate\" name=\"live-update\" />\n                    <label>{{ 'common.live-update' | translate }}</label>\n                </clr-checkbox-wrapper>\n            </vdr-ab-left>\n            <vdr-ab-right>\n                <vdr-action-bar-items locationId=\"job-list\"></vdr-action-bar-items>\n                <ng-select\n                    class=\"mr-2\"\n                    [addTag]=\"false\"\n                    [hideSelected]=\"true\"\n                    [multiple]=\"false\"\n                    [markFirst]=\"false\"\n                    [clearable]=\"false\"\n                    [searchable]=\"false\"\n                    [formControl]=\"stateFilter\"\n                    (change)=\"refresh()\"\n                >\n                    <ng-option [value]=\"''\">\n                        <vdr-chip>{{ 'system.job-state-all' | translate }}</vdr-chip>\n                    </ng-option>\n                    <ng-option [value]=\"'PENDING'\">\n                        <vdr-chip>{{ 'system.job-state-pending' | translate }}</vdr-chip>\n                    </ng-option>\n                    <ng-option [value]=\"'RUNNING'\">\n                        <vdr-chip colorType=\"warning\">{{ 'system.job-state-running' | translate }}</vdr-chip>\n                    </ng-option>\n                    <ng-option [value]=\"'COMPLETED'\">\n                        <vdr-chip colorType=\"success\">{{ 'system.job-state-completed' | translate }}</vdr-chip>\n                    </ng-option>\n                    <ng-option [value]=\"'FAILED'\">\n                        <vdr-chip colorType=\"error\">{{ 'system.job-state-failed' | translate }}</vdr-chip>\n                    </ng-option>\n                    <ng-option [value]=\"'CANCELLED'\">\n                        <vdr-chip colorType=\"error\">{{ 'system.job-state-cancelled' | translate }}</vdr-chip>\n                    </ng-option>\n                </ng-select>\n                <ng-select\n                    [addTag]=\"false\"\n                    [items]=\"queues$ | async\"\n                    [hideSelected]=\"true\"\n                    [multiple]=\"false\"\n                    [markFirst]=\"false\"\n                    [clearable]=\"false\"\n                    [searchable]=\"false\"\n                    bindValue=\"name\"\n                    [formControl]=\"queueFilter\"\n                    (change)=\"refresh()\"\n                >\n                    <ng-template ng-label-tmp ng-option-tmp let-item=\"item\">\n                        <ng-container *ngIf=\"item.name === 'all'; else others\">\n                            <vdr-chip>{{ 'system.all-job-queues' | translate }}</vdr-chip>\n                        </ng-container>\n                        <ng-template #others>\n                            <vdr-chip [colorFrom]=\"item.name\">{{ item.name }}</vdr-chip>\n                        </ng-template>\n                    </ng-template>\n                </ng-select>\n            </vdr-ab-right>\n        </vdr-action-bar>\n    </vdr-page-block>\n\n    <vdr-data-table-2\n        id=\"job-list\"\n        [items]=\"items$ | async\"\n        [itemsPerPage]=\"itemsPerPage$ | async\"\n        [totalItems]=\"totalItems$ | async\"\n        [currentPage]=\"currentPage$ | async\"\n        (pageChange)=\"setPageNumber($event)\"\n        (itemsPerPageChange)=\"setItemsPerPage($event)\"\n    >\n        <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\">\n            <ng-template let-job=\"item\">\n                {{ job.id }}\n            </ng-template>\n        </vdr-dt2-column>\n        <vdr-dt2-column [heading]=\"'common.created-at' | translate\" id=\"created-at\">\n            <ng-template let-job=\"item\">\n                {{ job.createdAt | timeAgo }}\n            </ng-template>\n        </vdr-dt2-column>\n        <vdr-dt2-column [heading]=\"'system.job-queue-name' | translate\" id=\"job-queue-name\" [optional]=\"false\">\n            <ng-template let-job=\"item\">\n                <vdr-chip [colorFrom]=\"job.queueName\">{{ job.queueName }}</vdr-chip>\n            </ng-template>\n        </vdr-dt2-column>\n        <vdr-dt2-column [heading]=\"'system.job-data' | translate\" id=\"job-data\" [optional]=\"false\">\n            <ng-template let-job=\"item\">\n                <vdr-dropdown *ngIf=\"job.data\">\n                    <button\n                        class=\"button-small\"\n                        vdrDropdownTrigger\n                        [title]=\"'system.job-data' | translate\"\n                    >\n                        <clr-icon shape=\"details\"></clr-icon>\n                    </button>\n                    <vdr-dropdown-menu>\n                        <div class=\"result-detail\">\n                            <vdr-object-tree [value]=\"job.data\"></vdr-object-tree>\n                        </div>\n                    </vdr-dropdown-menu>\n                </vdr-dropdown>\n            </ng-template>\n        </vdr-dt2-column>\n        <vdr-dt2-column [heading]=\"'system.job-state' | translate\" id=\"job-state\">\n            <ng-template let-job=\"item\">\n                <vdr-job-state-label [job]=\"job\"></vdr-job-state-label>\n                <div *ngIf=\"job.state === 'FAILED'\" class=\"retry-info\">after {{ job.attempts }} attempts</div>\n                <div *ngIf=\"job.state === 'RUNNING' || job.state === 'RETRYING'\" class=\"retry-info\">\n                    attempting {{ job.attempts }} of {{ job.retries + 1 }}\n                </div>\n            </ng-template>\n        </vdr-dt2-column>\n        <vdr-dt2-column [heading]=\"'system.job-duration' | translate\" id=\"job-duration\">\n            <ng-template let-job=\"item\">\n                {{ job.duration | duration }}\n            </ng-template>\n        </vdr-dt2-column>\n        <vdr-dt2-column [heading]=\"'system.job-result' | translate\" id=\"job-result\">\n            <ng-template let-job=\"item\">\n                <vdr-dropdown *ngIf=\"hasResult(job)\">\n                    <button class=\"button-small mr-1\" vdrDropdownTrigger>\n                        <clr-icon shape=\"details\"></clr-icon>\n                        {{ 'system.job-result' | translate }}\n                    </button>\n                    <vdr-dropdown-menu>\n                        <div class=\"result-detail\">\n                            <vdr-object-tree [value]=\"job.result\"></vdr-object-tree>\n                        </div>\n                    </vdr-dropdown-menu>\n                </vdr-dropdown>\n                <vdr-dropdown *ngIf=\"job.error\">\n                    <button class=\"button-small\" vdrDropdownTrigger>\n                        <clr-icon shape=\"exclamation-circle\"></clr-icon>\n                        {{ 'system.job-error' | translate }}\n                    </button>\n                    <vdr-dropdown-menu>\n                        <div class=\"result-detail\">\n                            {{ job.error }}\n                        </div>\n                    </vdr-dropdown-menu>\n                </vdr-dropdown>\n                <vdr-dropdown *ngIf=\"!job.isSettled && job.state !== 'FAILED'\">\n                    <button class=\"icon-button\" vdrDropdownTrigger>\n                        <clr-icon shape=\"ellipsis-vertical\" size=\"12\"></clr-icon>\n                    </button>\n                    <vdr-dropdown-menu vdrPosition=\"bottom-right\">\n                        <button\n                            type=\"button\"\n                            class=\"delete-button\"\n                            (click)=\"cancelJob(job.id)\"\n                            [disabled]=\"!(['DeleteSettings', 'DeleteSystem'] | hasPermission)\"\n                            vdrDropdownItem\n                        >\n                            <clr-icon shape=\"ban\" class=\"is-danger\"></clr-icon>\n                            {{ 'common.cancel' | translate }}\n                        </button>\n                    </vdr-dropdown-menu>\n                </vdr-dropdown>\n            </ng-template>\n        </vdr-dt2-column>\n    </vdr-data-table-2>\n</vdr-page-body>\n","import { Route } from '@angular/router';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\n\nimport { HealthCheckComponent } from './components/health-check/health-check.component';\nimport { JobListComponent } from './components/job-list/job-list.component';\n\nexport const systemRoutes: Route[] = [\n    {\n        path: 'jobs',\n        component: JobListComponent,\n        data: {\n            breadcrumb: _('breadcrumb.job-queue'),\n        },\n    },\n    {\n        path: 'system-status',\n        component: HealthCheckComponent,\n        data: {\n            breadcrumb: _('breadcrumb.system-status'),\n        },\n    },\n];\n","import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { SharedModule } from '@deenruv/admin-ui/core';\n\nimport { HealthCheckComponent } from './components/health-check/health-check.component';\nimport { JobListComponent } from './components/job-list/job-list.component';\nimport { JobStateLabelComponent } from './components/job-state-label/job-state-label.component';\nimport { systemRoutes } from './system.routes';\n\n@NgModule({\n    declarations: [HealthCheckComponent, JobListComponent, JobStateLabelComponent],\n    imports: [SharedModule, RouterModule.forChild(systemRoutes)],\n})\nexport class SystemModule {}\n","// This file was generated by the build-public-api.ts script\nexport * from './components/health-check/health-check.component';\nexport * from './components/job-list/job-list.component';\nexport * from './components/job-state-label/job-state-label.component';\nexport * from './system.module';\nexport * from './system.routes';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2","i3","i1","i4","i7.JobStateLabelComponent","i8","_"],"mappings":"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"}