@firestitch/system 18.0.32 → 18.0.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"firestitch-system.mjs","sources":["../../src/app/modules/system/enums/cron-state.enum.ts","../../src/app/modules/system/enums/setting-interface-type.enum.ts","../../src/app/modules/system/enums/api-log-state.enum.ts","../../src/app/modules/system/enums/process-state.enum.ts","../../src/app/modules/system/enums/cron-log-state.enum.ts","../../src/app/modules/system/consts/api-log-states.const.ts","../../src/app/modules/system/consts/cron-log-states.const.ts","../../src/app/modules/system/consts/cron-process-states.const.ts","../../src/app/modules/system/consts/cron-states.const.ts","../../src/app/modules/system/consts/process-process-states.const.ts","../../src/app/modules/system/consts/process-states.const.ts","../../src/app/modules/system/consts/setting-interface-types.const.ts","../../src/app/modules/system/helpers/index-name-value.ts","../../src/app/modules/system/components/api-log/api-log.component.ts","../../src/app/modules/system/components/api-log/api-log.component.html","../../src/app/modules/system/components/api-logs/api-logs.component.ts","../../src/app/modules/system/components/api-logs/api-logs.component.html","../../src/app/modules/system/data/cron.data.ts","../../src/app/modules/system/components/cron-log/cron-log.component.ts","../../src/app/modules/system/components/cron-log/cron-log.component.html","../../src/app/modules/system/components/cron-logs/cron-logs.component.ts","../../src/app/modules/system/components/cron-logs/cron-logs.component.html","../../src/app/modules/system/components/cron/cron.component.ts","../../src/app/modules/system/components/cron/cron.component.html","../../src/app/modules/system/components/cron-next-run/cron-next-run.component.ts","../../src/app/modules/system/components/cron-next-run/cron-next-run.component.html","../../src/app/modules/system/components/crons/crons.component.ts","../../src/app/modules/system/components/crons/crons.component.html","../../src/app/modules/system/components/dashboard/dashboard.component.ts","../../src/app/modules/system/components/dashboard/dashboard.component.html","../../src/app/modules/system/components/info/info.component.ts","../../src/app/modules/system/components/info/info.component.html","../../src/app/modules/system/data/process.data.ts","../../src/app/modules/system/components/process/process.component.ts","../../src/app/modules/system/components/process/process.component.html","../../src/app/modules/system/components/processes/processes.component.ts","../../src/app/modules/system/components/processes/processes.component.html","../../src/app/consts/log-types.const.ts","../../src/app/modules/system/components/server-logs/components/server-log/server-log.component.ts","../../src/app/modules/system/components/server-logs/components/server-log/server-log.component.html","../../src/app/modules/system/components/server-logs/server-logs.component.ts","../../src/app/modules/system/components/server-logs/server-logs.component.html","../../src/app/modules/system/pipes/key-name-value.pipe.ts","../../src/app/modules/system/components/settings/settings.component.ts","../../src/app/modules/system/components/settings/settings.component.html","../../src/app/modules/system/components/upgrade-logs/upgrade-logs.component.ts","../../src/app/modules/system/components/upgrade-logs/upgrade-logs.component.html","../../src/app/modules/system/injectors/system-config.injector.ts","../../src/app/modules/system/fs-system.module.ts","../../src/app/modules/query-logs/components/explain/explain.component.ts","../../src/app/modules/query-logs/components/explain/explain.component.html","../../src/app/modules/query-logs/components/query-log/query-log.component.ts","../../src/app/modules/query-logs/components/query-log/query-log.component.html","../../src/app/modules/query-logs/components/query-logs/query-logs.component.ts","../../src/app/modules/query-logs/components/query-logs/query-logs.component.html","../../src/firestitch-system.ts"],"sourcesContent":["export enum CronState {\n Running = 'running',\n Idle = 'idle',\n Failed = 'failed',\n Queued = 'queued',\n Disabled = 'disabled',\n Enabled = 'enabled',\n SystemDisabled = 'systemDisabled',\n Killing = 'killing',\n}\n","export enum SettingInterfaceType {\n RadioButton = 'R',\n InputBox = 'I',\n Textarea = 'T',\n Select = 'D',\n SelectMultiple = 'W',\n Date = 'A',\n File = 'F',\n Static = 'S',\n Password = 'P',\n Time = 'M',\n None = 'N',\n Color = 'C',\n}\n","export enum ApiLogState {\n Success = 'success',\n Failed = 'failed',\n Deleted = 'deleted'\n}","export enum ProcessState {\n Queued = 'Q',\n Running = 'R',\n Completed = 'C',\n Killed = 'K',\n Deleted = 'D',\n Failed = 'F'\n}\n","export enum CronLogState {\n Message = 'message',\n Disabled = 'disabled',\n Enabled = 'enabled',\n Started = 'started',\n Running = 'running',\n Completed = 'completed',\n Failed = 'failed',\n Killed = 'killed',\n Queued = 'queued',\n Reset = 'reset',\n Stagnant = 'stagnant',\n LongRunning = 'long_running',\n}\n","import { ApiLogState } from '../enums';\n\nexport const ApiLogStates = [\n { name: 'Success', value: ApiLogState.Success },\n { name: 'Failed', value: ApiLogState.Failed },\n { name: 'Deleted', value: ApiLogState.Deleted }\n];\n","import { CronLogState } from '../enums';\n\nexport const CronLogStates = [\n { name: 'Message', value: CronLogState.Message, color: '#29B7FF' },\n { name: 'Disabled', value: CronLogState.Disabled, color: '#29B7FF' },\n { name: 'Reset', value: CronLogState.Reset, color: '#29B7FF' },\n { name: 'Enabled', value: CronLogState.Enabled, color: '#29B7FF' },\n { name: 'Queued', value: CronLogState.Queued, color: '#29B7FF' },\n { name: 'Started', value: CronLogState.Started, color: '#D17333' },\n { name: 'Running', value: CronLogState.Running, color: '#34BD43' },\n { name: 'Completed', value: CronLogState.Completed, color: '#34BD43' },\n { name: 'Failed', value: CronLogState.Failed, color: '#FA7567' },\n { name: 'Killed', value: CronLogState.Killed, color: '#FA7567' },\n { name: 'Stagnant', value: CronLogState.Stagnant, color: '#FA7567' },\n { name: 'Long Running', value: CronLogState.LongRunning, color: '#FA7567' },\n];\n","\nexport const CronProcessStates = [\n { name: 'Running', value: 'running' },\n { name: 'Stopped', value: 'stopped' },\n];\n","import { CronState } from '../enums';\n\nexport const CronStates = [\n { name: 'Running', value: CronState.Running },\n { name: 'Idle', value: CronState.Idle },\n { name: 'Failed', value: CronState.Failed },\n { name: 'Queued', value: CronState.Queued },\n { name: 'Disabled', value: CronState.Disabled },\n { name: 'Killing', value: CronState.Killing },\n { name: 'Enabled', value: CronState.Enabled },\n { name: 'System disabled', value: CronState.SystemDisabled },\n];\n","\nexport const ProcessProcessStates = [\n { name: 'Missing', value: 'missing' },\n { name: 'Running', value: 'running' },\n { name: 'Stopped', value: 'stopped' },\n];\n","import { ProcessState } from '../enums';\n\nexport const ProcessStates = [\n { name: 'Queued', value: ProcessState.Queued },\n { name: 'Running', value: ProcessState.Running },\n { name: 'Completed', value: ProcessState.Completed },\n { name: 'Killed', value: ProcessState.Killed },\n { name: 'Failed', value: ProcessState.Failed },\n { name: 'Deleted', value: ProcessState.Deleted }\n];\n","import { SettingInterfaceType } from '../enums';\n\nexport const SettingInterfaceTypes = [\n { name: 'RadioButton', value: SettingInterfaceType.RadioButton },\n { name: 'InputBox', value: SettingInterfaceType.InputBox },\n { name: 'Textarea', value: SettingInterfaceType.Textarea },\n { name: 'DropDown', value: SettingInterfaceType.Select },\n { name: 'File', value: SettingInterfaceType.File },\n { name: 'Static', value: SettingInterfaceType.Static },\n { name: 'Password', value: SettingInterfaceType.Password },\n { name: 'Color', value: SettingInterfaceType.Color }\n];\n","\nexport function indexNameValue(arry) {\n const obj = {};\n arry.forEach(item => {\n obj[item.value] = item.name;\n });\n\n return obj;\n}\n","import { Component, OnInit, inject } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\nimport { ApiLogStates } from '../../consts';\nimport { indexNameValue } from '../../helpers/index-name-value';\nimport { FsSkeletonModule } from '@firestitch/skeleton';\nimport { FsDialogModule } from '@firestitch/dialog';\nimport { CdkScrollable } from '@angular/cdk/scrolling';\nimport { FsLabelModule } from '@firestitch/label';\nimport { MatButton } from '@angular/material/button';\nimport { JsonPipe } from '@angular/common';\nimport { FsDateModule } from '@firestitch/date';\n\n\n@Component({\n templateUrl: './api-log.component.html',\n styleUrls: ['./api-log.component.scss'],\n standalone: true,\n imports: [FsSkeletonModule, FsDialogModule, MatDialogTitle, CdkScrollable, MatDialogContent, FsLabelModule, MatDialogActions, MatButton, MatDialogClose, JsonPipe, FsDateModule]\n})\nexport class ApiLogComponent implements OnInit {\n private _dialogRef = inject<MatDialogRef<ApiLogComponent>>(MatDialogRef);\n data = inject(MAT_DIALOG_DATA);\n\n\n public apiLog;\n public apiLogStates;\n\n public ngOnInit() {\n\n this.apiLogStates = indexNameValue(ApiLogStates);\n\n if (this.data.apiLog) {\n this.apiLog = this.data.apiLog;\n }\n }\n}\n","<fs-dialog *fsSkeleton=\"apiLog\">\n\n <div mat-dialog-title>API Log</div>\n\n <mat-dialog-content>\n <div class=\"fs-row.gap-lg.wrap.align-start\">\n <fs-label-field>\n <fs-label>\n Type\n </fs-label>\n {{apiLog.type}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>\n Status\n </fs-label>\n {{apiLogStates[apiLog.state]}}\n </fs-label-field>\n\n @if (apiLog.code) {\n <fs-label-field>\n <fs-label>\n Code\n </fs-label>\n {{apiLog.code}}\n </fs-label-field>\n }\n\n <fs-label-field>\n <fs-label>\n Date\n </fs-label>\n {{apiLog.createDate|fsDateFormat: 'full-date-time'}}\n </fs-label-field>\n\n @if (apiLog.direction) {\n <fs-label-field>\n <fs-label>\n Direction\n </fs-label>\n {{apiLog.direction}}\n </fs-label-field>\n }\n\n @if (apiLog.length) {\n <fs-label-field>\n <fs-label>\n Duration\n </fs-label>\n {{ apiLog.length | fsDateDuration }}\n </fs-label-field>\n }\n\n @if (apiLog.method) {\n @if (apiLog.method) {\n <fs-label-field>\n <fs-label>\n Method\n </fs-label>\n {{apiLog.method}}\n </fs-label-field>\n }\n }\n\n @if (apiLog.url) {\n <fs-label-field>\n <fs-label>\n URL\n </fs-label>\n {{apiLog.url}}\n </fs-label-field>\n }\n </div>\n\n @if (apiLog.message) {\n <fs-label-field>\n <fs-label>\n Message\n </fs-label>\n {{apiLog.message}}\n </fs-label-field>\n }\n\n <div>\n @if (apiLog.request) {\n <fs-label-field>\n <fs-label>\n Request\n </fs-label>\n <pre>{{apiLog.request|json}}</pre>\n </fs-label-field>\n }\n\n @if (apiLog.response) {\n <fs-label-field>\n <fs-label>\n Response\n </fs-label>\n <pre>{{apiLog.response|json}}</pre>\n </fs-label-field>\n }\n </div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n [mat-dialog-close]=\"true\"\n color=\"primary\">\n Done\n </button>\n </mat-dialog-actions>\n</fs-dialog>\n","import { ChangeDetectionStrategy, Component, Input, OnInit, ViewChild, inject } from '@angular/core';\n\nimport { MatDialog } from '@angular/material/dialog';\n\nimport { ItemType } from '@firestitch/filter';\nimport { FsListComponent, FsListConfig, PaginationStrategy, FsListModule } from '@firestitch/list';\n\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { ApiLogStates } from '../../consts';\nimport { indexNameValue } from '../../helpers/index-name-value';\nimport { ApiLogComponent } from '../api-log/api-log.component';\nimport { MatIcon } from '@angular/material/icon';\nimport { NgClass } from '@angular/common';\nimport { FsDateModule } from '@firestitch/date';\n\n\n@Component({\n selector: 'fs-system-api-logs',\n templateUrl: './api-logs.component.html',\n styleUrls: ['./api-logs.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n FsListModule,\n MatIcon,\n NgClass,\n FsDateModule,\n ],\n})\nexport class ApiLogsComponent implements OnInit {\n private _dialog = inject(MatDialog);\n\n\n @ViewChild(FsListComponent, { static: true })\n public list: FsListComponent;\n\n @Input() public loadApiLogs: (data: any) => Observable<{ data: any[]; paging: any }>;\n\n public config: FsListConfig = null;\n public apiLogStates = indexNameValue(ApiLogStates);\n\n public ngOnInit() {\n this._configList();\n }\n\n public open(apiLog) {\n this._dialog.open(ApiLogComponent, {\n data: { apiLog },\n width: '85%',\n });\n }\n\n private _configList() {\n this.config = {\n paging: {\n strategy: PaginationStrategy.Many,\n },\n filters: [\n {\n type: ItemType.Keyword,\n name: 'keyword',\n label: 'Search',\n },\n {\n type: ItemType.Select,\n name: 'state',\n label: 'Status',\n values: ApiLogStates,\n },\n {\n name: 'createDate',\n type: ItemType.DateRange,\n label: ['From Date', 'To Date'],\n },\n ],\n fetch: (query) => {\n Object.assign(query, { });\n\n return this.loadApiLogs(query)\n .pipe(\n map((response: any) => ({ data: response.data, paging: response.paging })),\n );\n },\n };\n }\n}\n","<fs-list [config]=\"config\">\n <fs-list-column>\n <ng-template fs-list-header>Name</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n <a href=\"javascript:;\" (click)=\"open(row)\">\n {{row.type || 'Unknown'}}\n @if (row.direction=='outgoing') {\n <mat-icon class=\"direction\">arrow_upward</mat-icon>\n }\n @if (row.direction=='incoming') {\n <mat-icon class=\"direction\">arrow_downward</mat-icon>\n }\n </a>\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>Status</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n {{apiLogStates[row.state]}}\n @if (row.code) {\n <span class=\"code\" [ngClass]=\"{'success': row.code==200,'error': row.code!=200 }\">[{{row.code}}]</span>\n }\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>Message</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n {{row.message}}\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>Date</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n <fs-date-ago [date]=\"row.createDate\"></fs-date-ago>\n <div>@if (row.length) {\n <small>Duration: {{ row.length | fsDateDuration }}</small>\n }</div>\n </ng-template>\n </fs-list-column>\n</fs-list>\n","import { Injectable, inject } from '@angular/core';\n\nimport { FsApi } from '@firestitch/api';\n\nimport { Observable } from 'rxjs';\n\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CronData {\n private _fsApi = inject(FsApi);\n\n\n public create(data = { id: null }) {\n return data;\n }\n\n public get(cronId: number | string, query = {}): Observable<any> {\n return this._fsApi.get(`system/crons/${cronId}`, query, { key: 'cron' });\n }\n\n public gets(data = {}, config = {}): Observable<any> {\n return this._fsApi.request('GET', 'system/crons', data, { key: 'cron', ...config });\n }\n\n public cronLogGets(data = {}, config = {}): Observable<any> {\n return this._fsApi.request('GET', 'system/cronlogs', data, { key: 'cronLogs', ...config });\n }\n\n public enable(cron, config = {}): Observable<any> {\n return this._fsApi.put(`system/crons/${cron.id}/enable`, cron, { key: 'cron', ...config });\n }\n\n public disable(cron, config = {}): Observable<any> {\n return this._fsApi.put(`system/crons/${cron.id}/disable`, cron, { key: 'cron', ...config });\n }\n\n public kill(cron, config = {}): Observable<any> {\n return this._fsApi.put(`system/crons/${cron.id}/kill`, cron, { key: 'cron', ...config });\n }\n\n public queue(cron, config = {}): Observable<any> {\n return this._fsApi.put(`system/crons/${cron.id}/queue`, cron, { key: 'cron', ...config });\n }\n\n public run(cron, config = {}): Observable<any> {\n return this._fsApi.put(`system/crons/${cron.id}/run`, cron, { key: 'cron', ...config });\n }\n\n public bulk(action, processes, config = {}): Observable<any> {\n return this._fsApi.put('system/crons/bulk', {\n action,\n processes,\n }, { key: 'cron', ...config });\n }\n}\n","import { ChangeDetectionStrategy, Component, OnInit, inject } from '@angular/core';\n\nimport { MAT_DIALOG_DATA, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\n\nimport { CronLogStates } from '../../consts/cron-log-states.const';\nimport { indexNameValue } from '../../helpers/index-name-value';\nimport { FsSkeletonModule } from '@firestitch/skeleton';\nimport { FsDialogModule } from '@firestitch/dialog';\nimport { CdkScrollable } from '@angular/cdk/scrolling';\nimport { FsLabelModule } from '@firestitch/label';\nimport { NgStyle } from '@angular/common';\nimport { FsDateModule } from '@firestitch/date';\nimport { MatButton } from '@angular/material/button';\n\n\n@Component({\n templateUrl: './cron-log.component.html',\n styleUrls: ['./cron-log.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n FsSkeletonModule,\n FsDialogModule,\n MatDialogTitle,\n CdkScrollable,\n MatDialogContent,\n FsLabelModule,\n NgStyle,\n FsDateModule,\n MatDialogActions,\n MatButton,\n MatDialogClose,\n ],\n})\nexport class CronLogComponent implements OnInit {\n private _data = inject(MAT_DIALOG_DATA);\n\n\n public cronLog;\n public CronLogStates = indexNameValue(CronLogStates);\n public CronLogStateColors = {};\n\n public ngOnInit(): void {\n this.cronLog = this._data.cronLog;\n this.CronLogStateColors = CronLogStates\n .reduce((accum, cronLogState) => {\n accum[cronLogState.value] = cronLogState.color;\n\n return accum;\n }, {});\n }\n}\n","<fs-dialog *fsSkeleton=\"cronLog\">\n <div mat-dialog-title>\n Cron Log\n </div>\n <mat-dialog-content>\n <div class=\"row\">\n <fs-label-field>\n <fs-label>\n Status\n </fs-label>\n <div [ngStyle]=\"{ color: CronLogStateColors[cronLog.state]}\">\n {{ CronLogStates[cronLog.state] || cronLog.state }}\n </div>\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Date\n </fs-label>\n <fs-date-ago [date]=\"cronLog.createDate\"></fs-date-ago>\n </fs-label-field>\n </div>\n @if (cronLog.message) {\n <fs-label-field>\n <fs-label>\n Message\n </fs-label>\n <div class=\"message\">\n {{ cronLog.message }}\n </div>\n </fs-label-field>\n }\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n [mat-dialog-close]=\"true\"\n color=\"primary\">\n Done\n </button>\n </mat-dialog-actions>\n</fs-dialog>","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, Input, OnInit } from '@angular/core';\n\nimport { MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';\n\nimport { FsDateModule } from '@firestitch/date';\nimport { ItemType } from '@firestitch/filter';\nimport { FsListConfig, FsListModule, PaginationStrategy } from '@firestitch/list';\n\nimport { map } from 'rxjs/operators';\n\nimport { CronLogStates } from '../../consts/cron-log-states.const';\nimport { CronData } from '../../data/cron.data';\nimport { indexNameValue } from '../../helpers/index-name-value';\nimport { CronLogComponent } from '../cron-log';\n\n\n@Component({\n selector: 'app-cron-logs',\n templateUrl: './cron-logs.component.html',\n styleUrls: ['./cron-logs.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n CommonModule,\n FsListModule,\n FsDateModule,\n ],\n})\nexport class CronLogsComponent implements OnInit {\n\n @Input() public cron;\n public CronLogStateColors = {};\n\n public config: FsListConfig;\n public CronLogStates = indexNameValue(CronLogStates);\n public cronActions;\n \n private _cronData = inject(CronData);\n private _dialog = inject(MatDialog);\n private _data = inject(MAT_DIALOG_DATA);\n\n public ngOnInit(): void {\n this.cron = this._data.cron;\n this.load();\n this.CronLogStateColors = CronLogStates\n .reduce((accum, cronLogState) => {\n accum[cronLogState.value] = cronLogState.color;\n\n return accum;\n }, {});\n }\n\n public cronLogOpen(cronLog): void {\n this._dialog.open(CronLogComponent, {\n data: { \n cronLog,\n },\n width: '85%',\n }); \n }\n\n public load(): void {\n this.config = {\n paging: {\n strategy: PaginationStrategy.Many,\n },\n filters: [\n {\n type: ItemType.Select,\n name: 'state',\n label: 'Status',\n values: [\n { name: 'All', value: null },\n ...CronLogStates,\n ],\n },\n {\n type: ItemType.DateRange,\n name: 'date',\n label: ['From Date', 'To Date'],\n },\n ], \n fetch: (query) => {\n query = {\n ...query,\n cronId: this.cron.id,\n };\n\n return this._cronData.cronLogGets(query, {\n key: null,\n })\n .pipe(\n map((data: any) => {\n return { data: data.cronLogs, paging: data.paging };\n }),\n );\n },\n };\n }\n}\n","<fs-list [config]=\"config\">\n <fs-list-column\n name=\"state\"\n title=\"Status\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <a\n (click)=\"cronLogOpen(row)\"\n [ngStyle]=\"{ color: CronLogStateColors[row.state] }\">\n {{ CronLogStates[row.state] || row.state }}\n </a>\n </ng-template>\n </fs-list-column>\n <fs-list-column\n title=\"Message\"\n class=\"col-message\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <div class=\"message\">\n {{ row.message }}\n </div>\n </ng-template>\n </fs-list-column>\n <fs-list-column\n title=\"Duration\"\n class=\"col-message\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n @if (row.duration) {\n {{ row.duration | fsDateDuration: 'hour-minute-second' }}\n }\n </ng-template>\n </fs-list-column>\n <fs-list-column\n name=\"create_date\"\n title=\"Date\"\n class=\"col-date\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <fs-date-ago [date]=\"row.createDate\"></fs-date-ago>\n </ng-template>\n </fs-list-column>\n</fs-list>","import {\n ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, OnInit,\n} from '@angular/core';\n\nimport { MAT_DIALOG_DATA, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\n\nimport { CronProcessStates, CronStates } from '../../consts';\nimport { CronData } from '../../data/cron.data';\nimport { indexNameValue } from '../../helpers/index-name-value';\nimport { FsSkeletonModule } from '@firestitch/skeleton';\nimport { FsDialogModule } from '@firestitch/dialog';\nimport { CdkScrollable } from '@angular/cdk/scrolling';\nimport { MatTabGroup, MatTab, MatTabContent } from '@angular/material/tabs';\nimport { FsLabelModule } from '@firestitch/label';\nimport { FsDateModule } from '@firestitch/date';\nimport { CronLogsComponent } from '../cron-logs/cron-logs.component';\nimport { MatButton } from '@angular/material/button';\n\n\n@Component({\n templateUrl: './cron.component.html',\n styleUrls: ['./cron.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n FsSkeletonModule,\n FsDialogModule,\n MatDialogTitle,\n CdkScrollable,\n MatDialogContent,\n MatTabGroup,\n MatTab,\n FsLabelModule,\n FsDateModule,\n MatTabContent,\n CronLogsComponent,\n MatDialogActions,\n MatButton,\n MatDialogClose,\n ],\n})\nexport class CronComponent implements OnInit {\n\n public cron;\n public tabIndex = 0;\n public CronStates = indexNameValue(CronStates);\n public CronProcessStates = indexNameValue(CronProcessStates);\n\n public cronActions;\n \n private _cronData = inject(CronData);\n private _cdRef = inject(ChangeDetectorRef);\n private _data = inject(MAT_DIALOG_DATA);\n\n public ngOnInit(): void {\n this.load();\n }\n\n public cronActionClick(cronAction) {\n cronAction\n .action(this.cron)\n .subscribe(() => {\n this.load();\n });\n }\n\n public selectedIndexChange(index) {\n this.tabIndex = index;\n }\n\n public load(): void {\n this._cronData\n .get(this._data.cron.id, {\n timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n })\n .subscribe((cron) => {\n this.cron = {\n ...this._data.cron,\n ...cron,\n };\n\n this.cronActions = this._data.cronActions\n .filter((cronLogAction) => {\n return cronLogAction.show(this.cron);\n });\n\n this._cdRef.markForCheck();\n });\n }\n}\n","<fs-dialog *fsSkeleton=\"cron\">\n <h1 mat-dialog-title>\n Cron\n <div class=\"small\">\n {{ cron.name }}\n </div>\n </h1>\n <mat-dialog-content>\n <mat-tab-group (selectedIndexChange)=\"selectedIndexChange($event)\">\n <mat-tab label=\"Overview\">\n <div class=\"fs-row.gap-lg.wrap.align-start\">\n <fs-label-field>\n <fs-label>\n Status\n </fs-label>\n {{ CronStates[cron.state] }}\n </fs-label-field>\n @if (cron.cronSetting) {\n <fs-label-field>\n <fs-label>\n Run Frequency\n </fs-label>\n {{ cron.cronSetting.summary }}\n </fs-label-field>\n }\n <fs-label-field>\n <fs-label>\n Process ID\n </fs-label>\n {{ cron.processId || 'None' }}\n @if (cron.processId) {\n <div class=\"small\">\n {{ CronProcessStates[cron.processState] || 'Unknown' }}\n </div>\n }\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Last Ran\n </fs-label>\n @if (cron.duration===null) {\n Never\n } @else {\n <fs-date-ago [date]=\"cron.createDate\"></fs-date-ago>\n <div>\n @if (cron.duration) {\n <small>\n Duration: {{ cron.duration | fsDateDuration }}\n </small>\n }\n </div>\n }\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Timeout hours\n </fs-label>\n {{ cron.cronSetting?.timeout || 'N/A' }}\n </fs-label-field>\n </div>\n @if (cron.message) {\n <fs-label-field>\n <fs-label>\n Last Message\n </fs-label>\n <div class=\"message\">\n {{ cron.message }}\n </div>\n </fs-label-field>\n }\n </mat-tab>\n <mat-tab label=\"Logs\">\n <ng-template matTabContent>\n <app-cron-logs [cron]=\"cron\"></app-cron-logs>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n [mat-dialog-close]=\"true\"\n color=\"primary\">\n Done\n </button>\n @if (tabIndex === 0) {\n @for (cronAction of cronActions; track cronAction) {\n <button\n mat-button\n (click)=\"cronActionClick(cronAction)\">\n {{ cronAction.label }}\n </button>\n }\n }\n </mat-dialog-actions>\n</fs-dialog>","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit, inject } from '@angular/core';\n\n\nimport { Subject, timer } from 'rxjs';\nimport { takeUntil, tap } from 'rxjs/operators';\n\nimport { addDays, addHours, addMinutes, differenceInSeconds, getDaysInMonth, subSeconds } from 'date-fns';\nimport { FsDateModule } from '@firestitch/date';\n\n\n@Component({\n selector: 'app-next-run',\n templateUrl: './cron-next-run.component.html',\n styleUrls: ['./cron-next-run.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [FsDateModule],\n})\nexport class CronNextRunComponent implements OnInit, OnDestroy {\n private _cdRef = inject(ChangeDetectorRef);\n\n\n @Input() public cron;\n\n public duration;\n\n private _destroy$ = new Subject();\n\n\n public ngOnInit() {\n this.update();\n }\n\n public calculateDuration() {\n const now = new Date();\n const nextMinutes = this._getNextMinutes(now);\n const nextHours = this._getNextHours(now);\n const nextDays = this._getNextDays(now);\n\n if(\n this.cron.cronSetting.minutes.length ||\n this.cron.cronSetting.hours.length ||\n this.cron.cronSetting.days.length \n ) {\n let next = new Date();\n next = addMinutes(next, nextMinutes);\n next = addHours(next, nextHours);\n next = addDays(next, nextDays);\n next = subSeconds(next, next.getSeconds());\n\n this.duration = Math.max(0, differenceInSeconds(next, now));\n } else {\n this.duration = Math.max(0, 60 - now.getSeconds());\n }\n }\n\n public update() {\n this.calculateDuration();\n timer(0, 1000)\n .pipe(\n tap(() => {\n this.duration -= 1; \n\n if(this.duration % 60 === 0 || this.duration < (60 * 5)) {\n this._cdRef.markForCheck();\n }\n\n if(this.duration <= 0) {\n this.calculateDuration();\n this._cdRef.markForCheck();\n }\n\n }),\n takeUntil(this._destroy$),\n )\n .subscribe();\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n\n private _getNextMinutes(now: Date) {\n const minutes: number[] = this.cron.cronSetting.minutes;\n if(minutes.length) {\n for(let i = minutes.length - 1; i >= 0; i--) {\n if(now.getUTCMinutes() >= minutes[i]) {\n return (minutes[i + 1] ? minutes[i + 1] - now.getUTCMinutes() : (60 - now.getUTCMinutes() + minutes[i]));\n }\n }\n\n return minutes[0] - now.getUTCMinutes();\n }\n\n return 0;\n }\n\n private _getNextHours(now: Date) {\n const hours: number[] = this.cron.cronSetting.hours;\n if(hours.length) {\n for(let i = hours.length - 1; i >= 0; i--) {\n if(now.getUTCHours() >= hours[i]) {\n return (hours[i + 1] ? hours[i + 1] - now.getUTCHours() : (24 - now.getUTCHours() + hours[i]));\n }\n }\n\n return hours[0] - now.getUTCHours();\n }\n\n return 0;\n }\n\n private _getNextDays(now: Date) {\n const days = this.cron.cronSetting.days;\n if(days.length) {\n for(let i = days.length - 1; i >= 0; i--) {\n if(now.getDate() >= days[i]) {\n return (days[i + 1] ? days[i + 1] : getDaysInMonth(now)) - now.getDate();\n }\n }\n\n return days[0] - now.getDate();\n }\n\n return 0;\n }\n}\n","@if (duration > 60) {\n {{ duration | fsDateDuration: { hours: true, seconds: true, minutes: true, days: true, maxOutputs: 2 } }}\n} @else {\n {{ duration }}s\n}\n<ng-template #seconds>\n {{ duration }}s\n</ng-template>","import { ChangeDetectionStrategy, Component, inject, OnDestroy, OnInit, ViewChild } from '@angular/core';\n\nimport { MatDialog } from '@angular/material/dialog';\n\nimport { FsApi, RequestMethod, StreamEventData } from '@firestitch/api';\nimport { parse, FsDateModule } from '@firestitch/date';\nimport { ItemType } from '@firestitch/filter';\nimport { FsListActionSelected, FsListComponent, FsListConfig, FsListModule } from '@firestitch/list';\nimport { FsMessage } from '@firestitch/message';\nimport { FsProcess } from '@firestitch/process';\nimport { FsPrompt } from '@firestitch/prompt';\nimport { SelectionActionType } from '@firestitch/selection';\n\nimport { Observable, Subject, timer } from 'rxjs';\nimport { filter, map, switchMap, take, takeUntil, tap } from 'rxjs/operators';\n\nimport { differenceInSeconds } from 'date-fns';\n\nimport { CronProcessStates, CronStates } from '../../consts';\nimport { CronData } from '../../data/cron.data';\nimport { CronState } from '../../enums';\nimport { indexNameValue } from '../../helpers/index-name-value';\nimport { CronComponent } from '../cron/cron.component';\nimport { FsPopoverModule } from '@firestitch/popover';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { CronNextRunComponent } from '../cron-next-run/cron-next-run.component';\n\n\n@Component({\n selector: 'fs-system-crons',\n templateUrl: './crons.component.html',\n styleUrls: ['./crons.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n FsListModule,\n FsPopoverModule,\n NgTemplateOutlet,\n FsDateModule,\n CronNextRunComponent,\n ],\n})\nexport class CronsComponent implements OnInit, OnDestroy {\n\n @ViewChild(FsListComponent, { static: true }) public list: FsListComponent;\n\n public config: FsListConfig = null;\n public CronStates = indexNameValue(CronStates);\n public CronProcessStates = indexNameValue(CronProcessStates);\n public CronState = CronState;\n\n private _destroy$ = new Subject();\n private _cronData = inject(CronData);\n private _message = inject(FsMessage);\n private _dialog = inject(MatDialog);\n private _prompt = inject(FsPrompt);\n private _process = inject(FsProcess);\n private _api = inject(FsApi);\n\n public ngOnInit(): void {\n this._configList();\n }\n\n public open(cron) {\n this._dialog.open(CronComponent, {\n data: {\n cron,\n cronActions: this.getCronActions(),\n },\n width: '85%',\n });\n }\n\n public getCronActions() {\n return [\n {\n action: (data) => {\n return this.queue(data)\n .pipe(\n tap(() => {\n this._message.success('Queued cron');\n this.list.reload();\n }),\n );\n },\n label: 'Queue',\n show: (cron) => {\n return cron.state === CronState.Idle || cron.state === CronState.Failed;\n },\n },\n {\n action: (data) => {\n return this.run(data)\n .pipe(\n tap(() => {\n this.list.reload();\n }),\n );\n },\n label: 'Run',\n show: (cron) => {\n return cron.state === CronState.Idle || cron.state === CronState.Failed;\n },\n },\n {\n action: (data) => {\n return this.enable(data)\n .pipe(\n tap(() => {\n this._message.success('Enabled cron');\n this.list.reload();\n }),\n );\n },\n label: 'Enable',\n show: (cron) => {\n return cron.state === CronState.Disabled;\n },\n },\n {\n action: (data) => {\n return this.disable(data)\n .pipe(\n tap(() => {\n this._message.success('Disabled cron');\n this.list.reload();\n }),\n );\n },\n label: 'Disable',\n show: (cron) => {\n return cron.state === CronState.Idle || cron.state === CronState.Failed;\n },\n },\n {\n action: (data) => {\n return this._prompt.confirm({\n title: 'Confirm',\n template: 'Are you sure you would like to kill the cron?',\n })\n .pipe(\n switchMap(() => {\n return this.kill(data);\n }),\n tap(() => {\n this._message.success('Killed cron');\n this.list.reload();\n }),\n takeUntil(this._destroy$),\n );\n },\n label: 'Kill',\n show: (cron) => {\n return cron.state === CronState.Running;\n },\n },\n {\n action: (data) => {\n return this._prompt.confirm({\n title: 'Confirm',\n template: 'Are you sure you would like to reset the cron?',\n })\n .pipe(\n switchMap(() => {\n return this.enable(data);\n }),\n tap(() => {\n this._message.success('Reset cron');\n this.list.reload();\n }),\n takeUntil(this._destroy$),\n );\n },\n label: 'Reset',\n show: (cron) => {\n return cron.state === CronState.Killing || \n cron.state === CronState.Running || \n cron.state === CronState.Failed || \n cron.state === CronState.Queued;\n },\n },\n ];\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n \n public enable(data) {\n return this._cronData.enable(data);\n }\n\n public disable(data) {\n return this._cronData.disable(data);\n }\n\n public kill (data) {\n return this._cronData.kill(data);\n }\n\n public queue(data) {\n return this._cronData.queue(data);\n }\n\n public run(cron): Observable<any> {\n return new Observable((observer) => { \n const process = this._process\n .run(`Run ${cron.name}`, this._api\n .stream(\n RequestMethod.Post, `system/crons/${cron.id}/run`)\n .pipe(\n filter((event) => event instanceof StreamEventData),\n map((event) => {\n return event?.data;\n }), \n filter((data) => !!data),\n ),\n );\n \n timer(1000, 5000)\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n observer.next(null);\n });\n\n process.failed$\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n observer.next(null);\n observer.complete();\n });\n\n process.completed$ \n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n observer.next(null);\n observer.complete();\n });\n\n process.cancelled$\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n observer.next(null);\n observer.complete();\n });\n });\n }\n\n public loadCrons = (query) => {\n query.timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n\n return this._cronData.gets(query, { key: 'crons' });\n };\n\n public bulk = (action, crons) => {\n const processes = crons\n .map((cron) => {\n return cron.process;\n });\n\n return this._cronData.bulk(action, processes);\n };\n\n private _configList(): void {\n this.config = {\n paging: false,\n filters: [\n {\n type: ItemType.Keyword,\n name: 'keyword',\n label: 'Search',\n },\n ],\n rowActions: this.getCronActions()\n .map((rowAction) => {\n return {\n ...rowAction,\n click: (cron) => {\n rowAction\n .action(cron)\n .pipe(\n take(1),\n )\n .subscribe(() => {\n this.list.reload();\n });\n },\n };\n }),\n fetch: (query) => {\n query = { \n ...query,\n timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n };\n\n return this.loadCrons(query)\n .pipe(\n map((crons) => ({\n data: crons\n .map((cron) => {\n return {\n ...cron,\n runningDuration: differenceInSeconds(parse(cron.createDate), new Date()),\n };\n }),\n })),\n );\n },\n };\n\n if(this.bulk) {\n this.config.selection = {\n selectAll: false,\n actions: [\n {\n type: SelectionActionType.Action,\n name: 'disable',\n label: 'Disable',\n },\n {\n type: SelectionActionType.Action,\n name: 'enable',\n label: 'Enable',\n },\n ],\n actionSelected: (action: FsListActionSelected) => {\n return this.bulk(action.action.name, action.selected)\n .pipe(\n tap(() => {\n this.list.reload();\n this._message.success('Applied Changes');\n }),\n );\n },\n };\n }\n }\n\n}\n","<fs-list [config]=\"config\">\n <fs-list-column>\n <ng-template fs-list-header>\n Name\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <a (click)=\"open(row)\">\n {{ row.name }}\n </a>\n <small>\n {{ row.cronSetting?.description }}\n </small>\n </ng-template>\n </fs-list-column>\n <fs-list-column align=\"center\">\n <ng-template fs-list-header>\n Status\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n @if (row.host || row.processId) {\n <fs-popover\n [maxWidth]=\"null\"\n [template]=\"statusPopover\"\n [indication]=\"true\"\n size=\"small\">\n <ng-container *ngTemplateOutlet=\"status\"></ng-container>\n </fs-popover>\n <ng-template #statusPopover>\n @if (row.host) {\n <div>\n Host: {{ row.host }}\n </div>\n }\n @if (row.processId) {\n <div>\n Process ID: {{ row.processId }}\n </div>\n }\n @if (row.processState) {\n <div>\n Process State: {{ CronProcessStates[row.processState] }}\n </div>\n }\n </ng-template>\n } @else {\n {{ CronStates[row.state] }}\n }\n <ng-template #status>\n {{ CronStates[row.state] }}\n </ng-template>\n @if (row.state === CronState.Running) {\n <div class=\"small\">\n Duration: {{ row.runningDuration | fsDateDuration: { hours: true, minutes: true, seconds: true } }}\n </div>\n }\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>\n Frequency\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.cronSetting?.summary }}\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>\n Last Ran\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n @if (row.duration===null) {\n Never\n } @else {\n <fs-date-ago [date]=\"row.createDate\"></fs-date-ago>\n @if (row.duration) {\n <div\n class=\"small\"\n >\n Duration: {{ row.duration | fsDateDuration: { hours: true, minutes: true, seconds: true } }}\n </div>\n }\n }\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>\n Next Run\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n @if (row.state !== CronState.Disabled) {\n <app-next-run [cron]=\"row\"></app-next-run>\n }\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>\n Timeout\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.cronSetting.timeout }}h\n </ng-template>\n </fs-list-column>\n</fs-list>","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit, inject } from '@angular/core';\n\nimport { BuildData, FsBuildService } from '@firestitch/build';\nimport { FsMessage } from '@firestitch/message';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { differenceInMinutes } from 'date-fns';\n\nimport { DashboardAction } from './../../interfaces/dashboard-action';\nimport { FsSkeletonModule } from '@firestitch/skeleton';\nimport { FsLabelModule } from '@firestitch/label';\nimport { NgClass } from '@angular/common';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { MatButton } from '@angular/material/button';\nimport { FsMenuModule } from '@firestitch/menu';\nimport { FsDateModule } from '@firestitch/date';\n\n\n@Component({\n selector: 'fs-system-dashboard',\n templateUrl: './dashboard.component.html',\n styleUrls: ['./dashboard.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n FsSkeletonModule,\n FsLabelModule,\n NgClass,\n MatIcon,\n MatTooltip,\n MatButton,\n FsMenuModule,\n FsDateModule,\n ],\n})\nexport class DashboardComponent implements OnInit, OnDestroy {\n private _message = inject(FsMessage);\n private _cdRef = inject(ChangeDetectorRef);\n private _buildService = inject(FsBuildService);\n\n\n @Input() public init: () => any;\n @Input() public upgrade: () => any;\n @Input() public load: () => any;\n\n @Input() public actions: DashboardAction[] = [];\n\n public dashboard;\n public buttonActions: DashboardAction[] = [];\n public build: BuildData;\n public menuActions: DashboardAction[] = [];\n\n private _destroy$ = new Subject();\n\n public ngOnInit() {\n this._load();\n this.buttonActions = this.actions.filter((item) => {\n return !item.menu; \n });\n this.menuActions = this.actions.filter((item) => {\n return item.menu; \n });\n\n this.build = this._buildService.build;\n this._buildService.build$\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe((build: BuildData) => {\n this.build = build;\n this._cdRef.markForCheck();\n });\n }\n\n public ngOnDestroy() {\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n\n public actionClick(action) {\n action.click();\n }\n\n public initClick() {\n this.init()\n .subscribe(() => {\n this._message.success('Successfully initialized the system');\n });\n }\n\n public upgradeClick() {\n this.upgrade()\n .subscribe(() => {\n this._load();\n this._message.success('Successfully upgraded the system');\n });\n }\n\n private _load() {\n this.load()\n .subscribe((dashboard) => {\n this.dashboard = dashboard;\n this.dashboard.cronRanAttention = !dashboard.cronRan ||\n differenceInMinutes(new Date(), new Date(dashboard.cronRan)) > 15;\n this._cdRef.markForCheck();\n });\n }\n}\n","<div *fsSkeleton=\"dashboard\">\n <div class=\"fs-row.gap-lg.wrap.align-start\">\n <div>\n <h2>\n Server\n </h2>\n <fs-label-field>\n <fs-label>\n Date/Time\n </fs-label>\n {{ dashboard.serverTime | fsDateFormat: 'date-time' }}\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Timezone\n </fs-label>\n {{ dashboard.serverTimezone }}\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Hostname\n </fs-label>\n {{ dashboard.serverHostname }}\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Directory\n </fs-label>\n {{ dashboard.appDirectory }}\n </fs-label-field>\n </div>\n <div>\n <h2>\n System\n </h2>\n <fs-label-field>\n <fs-label>\n Mode\n </fs-label>\n {{ dashboard.appMode }}\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Notification Recipients\n </fs-label>\n {{ dashboard.notifyRecipients.join(', ') }}\n </fs-label-field>\n </div>\n <div>\n <h2>\n Database\n </h2>\n <fs-label-field>\n <fs-label>\n Name\n </fs-label>\n {{ dashboard.databaseName }}\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Date/Time\n </fs-label>\n {{ dashboard.databaseTime | fsDateFormat: 'date-time' }}\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Timezone\n </fs-label>\n {{ dashboard.databaseTimezone }}\n </fs-label-field>\n </div>\n @if (build || dashboard.upgrades.length) {\n <div>\n @if (build) {\n <h2>\n Build\n </h2>\n <fs-label-field>\n <fs-label>\n Version\n </fs-label>\n {{ build.version || 'Unknown' }}\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Date\n </fs-label>\n {{ (build.date | fsDateFormat: 'date-time') || 'Unknown' }}\n </fs-label-field>\n }\n @if (dashboard.upgrades.length) {\n <fs-label-field>\n <fs-label>\n Pending Upgrades\n </fs-label>\n <span\n class=\"attention\"\n [ngClass]=\"{ 'needs-attention': !!dashboard.upgrades.length }\">\n {{ dashboard.upgrades.length }}\n <mat-icon\n [matTooltip]=\"dashboard.upgrades.join('\\n')\"\n matTooltipClass=\"tooltip-pending-upgrades\">\n warning\n </mat-icon>\n </span>\n </fs-label-field>\n }\n </div>\n }\n <div>\n <h2>\n Cron\n </h2>\n <fs-label-field>\n <fs-label>\n Last Ran\n </fs-label>\n <span\n class=\"attention\"\n [ngClass]=\"{ 'needs-attention': dashboard.cronRanAttention }\">\n @if (!dashboard.cronRan) {\n <span>\n Never\n </span>\n }\n @if (dashboard.cronRan) {\n <span>\n {{ dashboard.cronRan | fsDateFormat: 'date-time' }}\n </span>\n }\n <mat-icon>\n warning\n </mat-icon>\n </span>\n </fs-label-field>\n </div>\n </div>\n <div>\n <div class=\"actions\">\n <button\n mat-stroked-button\n (click)=\"upgradeClick()\">\n Run Upgrades\n </button>\n <button\n mat-stroked-button\n (click)=\"initClick()\">\n Init System\n </button>\n @for (action of buttonActions; track action) {\n <button\n mat-stroked-button\n (click)=\"actionClick(action)\">\n {{ action.label }}\n </button>\n }\n @if (menuActions.length) {\n <fs-menu buttonClass=\"mat-stroked-button menu-button\">\n @for (action of menuActions; track action) {\n <ng-template\n fs-menu-item\n (click)=\"actionClick(action)\">\n {{ action.label }}\n </ng-template>\n }\n </fs-menu>\n }\n </div>\n </div>\n</div>","import { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, Input, ViewChild } from '@angular/core';\n\nimport { Observable } from 'rxjs';\n\n\n@Component({\n selector: 'fs-system-info',\n templateUrl: './info.component.html',\n styleUrls: ['./info.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n})\nexport class InfoComponent implements AfterViewInit {\n\n @ViewChild('iframe') \n public iframe: ElementRef;\n\n @Input() public load: () => Observable<any>;\n\n public ngAfterViewInit() {\n this._load();\n }\n\n private _load() {\n this.load()\n .subscribe((info) => {\n\n info += '<style>body { background: transparent; }</style>';\n\n const doc = this.iframe.nativeElement.contentDocument || this.iframe.nativeElement.contentWindow;\n doc.open();\n doc.write(info);\n doc.close();\n const scrollHeight = (this.iframe.nativeElement.contentWindow.document.documentElement.scrollHeight + 100);\n this.iframe.nativeElement.style.height = `${scrollHeight}px`;\n });\n }\n}\n","<iframe #iframe></iframe>\n","import { Injectable, inject } from '@angular/core';\n\nimport { FsApi, RequestConfig } from '@firestitch/api';\n\nimport { Observable } from 'rxjs';\n\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ProcessData {\n private _api = inject(FsApi);\n\n\n public gets(data: any = {}, config: RequestConfig = {}): Observable<any> {\n return this._api.get('processes', data, { key: 'processes', ...config });\n }\n\n public post(data: any = {}, config: RequestConfig = {}): Observable<any> {\n return this._api.post('processes', data, { key: 'process', ...config });\n }\n\n public run(data: any = {}, config: RequestConfig = {}): Observable<any> {\n return this._api.post(`processes/${data.id}/run`, data, { key: 'process', ...config });\n }\n\n public get(id: number, config: RequestConfig = {}): Observable<any> {\n return this._api.get(`processes/${id}`, {}, { key: 'process', ...config });\n }\n\n public kill(data: any = {}, config: RequestConfig = {}): Observable<any> {\n return this._api.post(`processes/${data.id}/kill`, data, { key: 'process', ...config });\n }\n\n public delete(data: any = {}, config: RequestConfig = {}): Observable<any> {\n return this._api.delete(`processes/${data.id}`, data, { key: 'process', ...config });\n }\n\n public queue(data: any = {}, config: RequestConfig = {}): Observable<any> {\n return this._api.post(`processes/${data.id}/queue`, data, { key: 'process', ...config });\n }\n\n public download(data: any = {}): void {\n this._api\n .createApiFile(`processes/${data.id}/download`)\n .download();\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, OnDestroy, OnInit } from '@angular/core';\n\nimport { MAT_DIALOG_DATA, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\n\nimport { FsApi, RequestMethod, StreamEventData, StreamEventType } from '@firestitch/api';\nimport { FsMessage } from '@firestitch/message';\nimport { FsProcess } from '@firestitch/process';\nimport { FsPrompt } from '@firestitch/prompt';\n\nimport { Observable, Subject, timer } from 'rxjs';\nimport { filter, map, switchMap, takeUntil, tap } from 'rxjs/operators';\n\n\nimport { ProcessProcessStates } from '../../consts';\nimport { ProcessData } from '../../data/process.data';\nimport { indexNameValue } from '../../helpers/index-name-value';\nimport { Process } from '../../interfaces';\n\nimport { ProcessStates } from './../../consts/process-states.const';\nimport { ProcessState } from './../../enums/process-state.enum';\nimport { FsSkeletonModule } from '@firestitch/skeleton';\nimport { FsDialogModule } from '@firestitch/dialog';\nimport { CdkScrollable } from '@angular/cdk/scrolling';\nimport { FsLabelModule } from '@firestitch/label';\nimport { NgClass } from '@angular/common';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\nimport { MatButton } from '@angular/material/button';\nimport { FsDateModule } from '@firestitch/date';\n\n\n@Component({\n templateUrl: './process.component.html',\n styleUrls: ['./process.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n FsSkeletonModule,\n FsDialogModule,\n MatDialogTitle,\n CdkScrollable,\n MatDialogContent,\n FsLabelModule,\n NgClass,\n MatProgressSpinner,\n MatDialogActions,\n MatButton,\n MatDialogClose,\n FsDateModule,\n ],\n})\nexport class ProcessComponent implements OnInit, OnDestroy {\n data = inject(MAT_DIALOG_DATA);\n private _message = inject(FsMessage);\n private _cdRef = inject(ChangeDetectorRef);\n private _prompt = inject(FsPrompt);\n private _process = inject(FsProcess);\n private _api = inject(FsApi);\n\n\n public process: Process;\n public ProcessStates = indexNameValue(ProcessStates);\n public ProcessProcessStates = indexNameValue(ProcessProcessStates);\n public ProcessState = ProcessState;\n\n private _destroy$ = new Subject();\n private _processData = inject(ProcessData);\n\n public ngOnInit() {\n this.load$()\n .subscribe(() => {\n this.runningRefresh();\n });\n }\n\n public load$(): Observable<any> {\n return this._processData.get(this.data.process.id)\n .pipe(\n tap((process) => {\n this.process = process;\n this._cdRef.markForCheck();\n }),\n );\n }\n \n public runningRefresh() {\n timer(0, 2000)\n .pipe(\n filter(() => this.process.state === String(ProcessState.Running)),\n switchMap(() => this.load$()),\n takeUntil(this._destroy$),\n )\n .subscribe();\n }\n\n public kill() {\n this._prompt.confirm({\n title: 'Kill process',\n template: 'Are you sure you would like to kill the process?',\n })\n .pipe(\n switchMap(() => this._processData.kill(this.data.process)),\n switchMap(() => this.load$()),\n ) \n .subscribe(() => {\n this._message.success('Killed process');\n }); \n }\n\n public run() {\n this._process\n .run(`Run ${this.process.name}`, this._api\n .stream(\n RequestMethod.Post, `processes/${this.process.id}/run`)\n .pipe(\n tap((event) => {\n if(event instanceof StreamEventData && event.type === StreamEventType.Sent) {\n this.process.state = ProcessState.Running;\n this._cdRef.markForCheck();\n }\n }),\n filter((event) => event instanceof StreamEventData),\n map((event) => {\n return event?.data;\n }), \n filter((data) => !!data),\n ),\n );\n }\n\n public queue() {\n this._message.success('Running process');\n this._processData.queue(this.data.process)\n .pipe(\n switchMap(() => this.load$()),\n )\n .subscribe();\n }\n\n public download() {\n this._processData.download(this.data.process);\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n\n}\n","<fs-dialog *fsSkeleton=\"process\">\n <div mat-dialog-title>\n Process\n </div>\n <mat-dialog-content>\n <div class=\"column\">\n <div class=\"fs-row.gap-lg.wrap.align-start\">\n <fs-label-field>\n <fs-label>\n Name\n </fs-label>\n {{ process.prettyName }}\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Status\n </fs-label>\n <div\n class=\"status\"\n [ngClass]=\"{ 'running': process.state === ProcessState.Running }\">\n {{ ProcessStates[process.state] }}\n @if (process.state === ProcessState.Running) {\n <mat-progress-spinner\n [diameter]=\"20\"\n [mode]=\"'indeterminate'\">\n </mat-progress-spinner>\n }\n </div>\n </fs-label-field>\n @if (process.notify) {\n <fs-label-field>\n <fs-label>\n Notification Email\n </fs-label>\n {{ process.notify }}\n </fs-label-field>\n }\n <fs-label-field>\n <fs-label>\n Process ID\n </fs-label>\n {{ process.pid || 'None' }}\n @if (process.pid) {\n <div class=\"small\">\n {{ ProcessProcessStates[process.processState] || 'Unknown' }}\n </div>\n }\n </fs-label-field>\n @if (process.createDate) {\n <fs-label-field>\n <fs-label>\n Create Date\n </fs-label>\n {{ process.createDate | fsDateFormat: 'date-time' }}\n </fs-label-field>\n }\n @if (process.startDate) {\n <fs-label-field>\n <fs-label>\n Start Date\n </fs-label>\n {{ process.startDate | fsDateFormat: 'date-time' }}\n </fs-label-field>\n }\n @if (process.endDate) {\n <fs-label-field>\n <fs-label>\n Complete Date\n </fs-label>\n {{ process.endDate | fsDateFormat: 'date-time' }}\n </fs-label-field>\n }\n @if (process.duration) {\n <fs-label-field>\n <fs-label>\n Duration\n </fs-label>\n {{ process.duration | fsDateDuration: {hours: true, minutes: true, seconds: true} }}\n </fs-label-field>\n }\n </div>\n @if (process.message) {\n <fs-label-field>\n <fs-label>\n Message\n </fs-label>\n {{ process.message }}\n </fs-label-field>\n }\n @if (process.log) {\n <fs-label-field>\n <fs-label>\n Log\n </fs-label>\n <div class=\"log\">\n {{ process.log }}\n </div>\n </fs-label-field>\n }\n </div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n [mat-dialog-close]=\"true\"\n color=\"primary\">\n Close\n </button>\n @if (process.state === ProcessState.Running) {\n <button\n mat-button\n (click)=\"kill()\">\n Kill\n </button>\n }\n @if (process.state !== ProcessState.Running) {\n <button\n mat-button\n (click)=\"run()\">\n Run\n </button>\n }\n @if ((\n process.state !== ProcessState.Running &&\n process.state !== ProcessState.Queued\n )) {\n <button\n mat-button\n (click)=\"queue()\">\n Queue\n </button>\n }\n @if (process.filename) {\n <button\n mat-button\n (click)=\"download()\">\n Download\n </button>\n }\n </mat-dialog-actions>\n</fs-dialog>","import {\n ChangeDetectionStrategy, Component, inject, Input, OnDestroy, OnInit, ViewChild,\n} from '@angular/core';\n\nimport { MatDialog } from '@angular/material/dialog';\n\nimport { FsApi, RequestMethod, StreamEventData, StreamEventType } from '@firestitch/api';\nimport { ItemType } from '@firestitch/filter';\nimport { FsListComponent, FsListConfig, FsListModule } from '@firestitch/list';\nimport { FsMessage } from '@firestitch/message';\nimport { FsProcess } from '@firestitch/process';\n\nimport { Subject } from 'rxjs';\nimport { filter, finalize, map, takeUntil, tap } from 'rxjs/operators';\n\nimport { ProcessStates } from '../../consts';\nimport { ProcessData } from '../../data/process.data';\nimport { ProcessState } from '../../enums';\nimport { indexNameValue } from '../../helpers/index-name-value';\n\n\nimport { ProcessAction } from './../../interfaces/process-action';\nimport { ProcessComponent } from './../process/process.component';\nimport { FsDateModule } from '@firestitch/date';\n\n\n@Component({\n selector: 'fs-system-processes',\n templateUrl: './processes.component.html',\n styleUrls: ['./processes.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [FsListModule, FsDateModule],\n})\nexport class ProcessesComponent implements OnInit, OnDestroy {\n private _dialog = inject(MatDialog);\n private _message = inject(FsMessage);\n private _process = inject(FsProcess);\n private _api = inject(FsApi);\n\n\n @ViewChild(FsListComponent) \n public list: FsListComponent;\n\n @Input() public actions: ProcessAction[] = [];\n\n public config: FsListConfig = null;\n public ProcessStates = indexNameValue(ProcessStates);\n public ProcessState = ProcessState;\n\n private _destroy$ = new Subject();\n private _processData = inject(ProcessData);\n\n public ngOnInit() {\n this._configList();\n }\n\n public reload() {\n this.list.reload();\n }\n\n public open(process) {\n this._dialog\n .open(ProcessComponent, {\n data: {\n process,\n },\n width: '85%',\n })\n .afterClosed()\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.reload();\n });\n }\n\n public ngOnDestroy() {\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n\n public download(process) {\n this._processData.download(process);\n }\n\n private _configList() {\n this.config = {\n actions: [],\n rowActions: [ \n {\n label: 'Queue',\n show: (process) => {\n return process.state !== ProcessState.Running && \n process.state !== ProcessState.Queued;\n },\n click: (data) => {\n this._processData.queue(data)\n .subscribe(() => {\n this.reload();\n this._message.success('Queued process');\n });\n },\n },\n {\n label: 'Run',\n show: (data) => {\n return data.state !== ProcessState.Running;\n },\n click: (process) => {\n this._process\n .run(`Run ${process.name}`, this._api\n .stream(\n RequestMethod.Post, `processes/${process.id}/run`)\n .pipe(\n tap((event) => {\n if(\n event instanceof StreamEventData && event.type === StreamEventType.Sent\n ) {\n process = {\n ...process,\n state: ProcessState.Running,\n };\n\n this.list\n .updateData(process, (row) => {\n return process.id === row.id;\n });\n }\n }),\n filter((event) => event instanceof StreamEventData),\n map((event) => {\n return event?.data;\n }),\n filter((data) => !!data),\n finalize(() => {\n this.list.reload();\n }),\n ),\n );\n },\n },\n {\n label: 'Kill',\n show: (data) => {\n return !!data.pid;\n },\n click: (data) => {\n this._message.info('Killing process...');\n this._processData.kill(data)\n .subscribe(() => {\n this.reload();\n this._message.success('Killed process');\n });\n },\n },\n {\n label: 'Delete',\n click: (data) => {\n this._processData.delete(data)\n .subscribe(() => {\n this.reload();\n this._message.success('Deleted process');\n });\n },\n },\n ],\n filters: [\n {\n type: ItemType.Keyword,\n name: 'keyword',\n label: 'Search',\n },\n {\n type: ItemType.Select,\n name: 'state',\n label: 'Status',\n values: ProcessStates,\n },\n ],\n fetch: (query) => {\n return this._processData.gets(query, { key: null })\n .pipe(\n map((response: any) => ({ data: response.processes, paging: response.paging })),\n );\n },\n };\n\n this.actions.forEach((action) => {\n this.config.actions.push(\n {\n primary: false,\n label: action.label,\n menu: action.menu,\n click: (data) => {\n if (action.click) {\n action.click(data);\n }\n\n if (action.component) {\n this._dialog.open(action.component, {\n width: '800px',\n })\n .afterClosed()\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.reload();\n });\n }\n },\n },\n );\n });\n }\n}\n","<fs-list [config]=\"config\">\n <fs-list-column>\n <ng-template fs-list-header>\n Name\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <a (click)=\"open(row)\">\n {{ row.name }}\n </a>\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>\n Status\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ ProcessStates[row.state] }}\n <small>\n @if (row.state===ProcessState.Running && row.percent) {\n <div>\n Complete: {{ row.percent }}%\n </div>\n }\n @if (row.state===ProcessState.Completed && row.filename) {\n <div>\n <a\n href=\"javascript:;\"\n (click)=\"download(row)\">\n {{ row.filename }}\n </a>\n </div>\n }\n @if (row.pid) {\n <div>\n PID: {{ row.pid }}\n </div>\n }\n @if (row.state===ProcessState.Running && row.notify) {\n <div>\n Notify: {{ row.notify }}\n </div>\n }\n </small>\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>\n Duration\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.duration | fsDateDuration: {hours: true, minutes: true, seconds: true} }}\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>\n Message\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.message }}\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>\n Completed\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <fs-date-ago [date]=\"row.endDate\"></fs-date-ago>\n </ng-template>\n </fs-list-column>\n</fs-list>","export const LogTypes = [\n { value: '1', name: 'Fatal Error' }, // E_ERROR\n { value: '2', name: 'Warning' }, // E_WARNING\n { value: '4', name: 'Parse Error' }, // E_PARSE\n { value: '8', name: 'Notice' }, // E_NOTICE\n { value: '16', name: 'Core Error' }, // E_CORE_ERROR\n { value: '32', name: 'Core Warning' }, // E_CORE_WARNING\n { value: '64', name: 'Compile Error' }, // E_COMPILE_ERROR\n { value: '128', name: 'Compile Warning' }, // E_COMPILE_WARNING\n { value: '256', name: 'User Error' }, // E_USER_ERROR\n { value: '512', name: 'User Warning' }, // E_USER_WARNING\n { value: '1024', name: 'User Notice' }, // E_USER_NOTICE\n { value: '2048', name: 'Strict Notice' }, // E_STRICT\n { value: '4096', name: 'Recoverable Error' }, // E_RECOVERABLE_ERROR\n { value: '8192', name: 'Deprecated' }, // E_DEPRECATED\n { value: '16384', name: 'User Deprecated' }, // E_USER_DEPRECATED\n { value: 'exception', name: 'Exception' },\n];\n\n","import { CommonModule, JsonPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, OnInit, inject } from '@angular/core';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { FsBadgeModule } from '@firestitch/badge';\nimport { FsDateModule } from '@firestitch/date';\nimport { FsDialogModule } from '@firestitch/dialog';\nimport { FsLabelModule } from '@firestitch/label';\nimport { FsSkeletonModule } from '@firestitch/skeleton';\n\n\n@Component({\n templateUrl: './server-log.component.html',\n styleUrls: ['./server-log.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n CommonModule,\n MatDialogModule,\n MatButtonModule,\n MatIconModule,\n MatTooltipModule,\n FsLabelModule,\n FsLabelModule,\n FsBadgeModule,\n JsonPipe,\n FsDateModule,\n FsSkeletonModule,\n FsDialogModule,\n ],\n})\nexport class ServerLogComponent implements OnInit {\n data = inject(MAT_DIALOG_DATA);\n\n\n public log;\n\n public ngOnInit() {\n\n if (this.data.log) {\n this.log = this.data.log;\n\n try {\n this.log.backtrace = JSON.parse(this.log.backtrace);\n } catch (e) {\n //\n }\n\n try {\n this.log.server = JSON.parse(this.log.server);\n } catch (e) {\n // \n }\n }\n }\n}\n","<fs-dialog *fsSkeleton=\"log\">\n <div mat-dialog-title>\n Log\n </div>\n <mat-dialog-content>\n <div class=\"fs-row.gap-lg.wrap.align-start\">\n <fs-label-field>\n <fs-label>\n Error Type\n </fs-label>\n {{ log.type }}\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Message\n </fs-label>\n {{ log.message }}\n </fs-label-field>\n @if (log.url) {\n <fs-label-field>\n <fs-label>\n URL\n </fs-label>\n {{ log.url }}\n </fs-label-field>\n }\n <fs-label-field>\n <fs-label>\n Date\n </fs-label>\n {{ log.createDate|fsDateFormat: 'full-date-time' }}\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n File\n </fs-label>\n {{ log.file }} &#64; {{ log.line }}\n </fs-label-field>\n </div>\n <fs-label-field>\n <fs-label>\n $_SERVER\n </fs-label>\n <pre>\n {{ log.server|json }}\n </pre>\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Backtrace\n </fs-label>\n <pre>\n {{ log.backtrace|json }}\n </pre>\n </fs-label-field>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n [mat-dialog-close]=\"true\"\n color=\"primary\">\n Done\n </button>\n </mat-dialog-actions>\n</fs-dialog>","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output, ViewChild, inject } from '@angular/core';\n\nimport { MatDialog } from '@angular/material/dialog';\n\nimport { FsApi } from '@firestitch/api';\nimport { index } from '@firestitch/common';\nimport { ItemType } from '@firestitch/filter';\nimport { FsListAction, FsListComponent, FsListConfig, PaginationStrategy, FsListModule } from '@firestitch/list';\n\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { LogTypes } from '../../../../consts';\n\nimport { ServerLogComponent } from './components';\nimport { FsBadgeModule } from '@firestitch/badge';\nimport { FsDateModule } from '@firestitch/date';\n\n\n@Component({\n selector: 'fs-system-server-logs',\n templateUrl: './server-logs.component.html',\n styleUrls: ['./server-logs.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n FsListModule,\n FsBadgeModule,\n FsDateModule,\n ],\n})\nexport class ServerLogsComponent implements OnInit {\n private _dialog = inject(MatDialog);\n private _api = inject(FsApi);\n\n\n @ViewChild(FsListComponent) \n public list: FsListComponent;\n\n @Input() public loadLogs: (data: any) => Observable<{ data: any[], paging: any }>;\n\n @Output() public acknowledgedAll: EventEmitter<void> = new EventEmitter();\n\n public config: FsListConfig = null;\n public actions: FsListAction[] = [];\n public LogTypes = index(LogTypes, 'value', 'name');\n\n public ngOnInit() {\n this._configList();\n }\n\n public toggleAcknowledged(log) {\n const acknowledge = log.acknowledged ? 'unacknowledge' : 'acknowledge';\n this._api\n .put(`system/logs/server/${log.id}/${acknowledge}`)\n .subscribe((response) => {\n this.list\n .updateData(response.log,\n (item: any) => {\n return item.id === log.id;\n });\n });\n }\n\n public open(log) {\n this._dialog\n .open(ServerLogComponent, {\n data: { log: log },\n width: '85%',\n });\n }\n\n private _configList() {\n this.config = {\n actions: [\n ...this.actions,\n {\n primary: false,\n label: 'Acknowledge all',\n click: () => {\n this._api\n .put('system/logs/server/acknowledge')\n .subscribe(() => {\n this.list.reload();\n this.acknowledgedAll.emit();\n });\n },\n },\n ],\n paging: {\n strategy: PaginationStrategy.Many,\n },\n filters: [\n {\n type: ItemType.Keyword,\n name: 'keyword',\n label: 'Search',\n },\n ],\n fetch: (query) => {\n return this._api\n .get('system/logs/server', query, { key: null })\n .pipe(\n map((response: any) => ({ data: response.logs, paging: response.paging })),\n );\n },\n };\n }\n}\n","<fs-list [config]=\"config\">\n <fs-list-column width=\"1%\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <a (click)=\"toggleAcknowledged(row)\">\n <fs-badge\n [size]=\"10\"\n [tooltip]=\"row.acknowledged ? 'Acknowledged' : 'Unacknowledged'\"\n [color]=\"row.acknowledged ? '#E3E3E3' : '#F30000'\">\n </fs-badge>\n </a>\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>\n Message\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <a\n href=\"javascript:;\"\n (click)=\"open(row)\">\n {{ row.message }}\n </a>\n </ng-template>\n </fs-list-column>\n <fs-list-column class=\"col-date\">\n <ng-template fs-list-header>\n Type\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ LogTypes[row.type] }}\n </ng-template>\n </fs-list-column>\n <fs-list-column class=\"col-date\">\n <ng-template fs-list-header>\n Date\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <fs-date-ago [date]=\"row.createDate\"></fs-date-ago>\n </ng-template>\n </fs-list-column>\n</fs-list>","import { Injectable, Pipe, PipeTransform } from '@angular/core';\n\n\n@Pipe({\n name: 'keyNameValue',\n standalone: true,\n})\n@Injectable()\nexport class KeyNameValuePipe implements PipeTransform {\n\n public transform(values): any {\n return Object.keys(values).map((key) => {\n return { value: key, name: values[key] };\n });\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output, inject } from '@angular/core';\n\nimport { FsClipboard } from '@firestitch/clipboard';\nimport { parse } from '@firestitch/date';\nimport { FsMessage } from '@firestitch/message';\nimport { FsPrompt } from '@firestitch/prompt';\n\nimport { Observable } from 'rxjs';\n\nimport { SettingInterfaceType } from '../../enums';\nimport { MatAccordion, MatExpansionPanel, MatExpansionPanelHeader, MatExpansionPanelTitle } from '@angular/material/expansion';\nimport { MatIconButton, MatButton } from '@angular/material/button';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { MatIcon } from '@angular/material/icon';\nimport { NgClass } from '@angular/common';\nimport { MatFormField, MatLabel, MatHint } from '@angular/material/form-field';\nimport { MatInput } from '@angular/material/input';\nimport { FormsModule } from '@angular/forms';\nimport { MatSelect } from '@angular/material/select';\nimport { MatOption } from '@angular/material/core';\nimport { FsDatePickerModule } from '@firestitch/datepicker';\nimport { FsColorPickerModule } from '@firestitch/colorpicker';\nimport { FsFileModule } from '@firestitch/file';\nimport { KeyNameValuePipe } from '../../pipes/key-name-value.pipe';\n\n\n@Component({\n selector: 'fs-system-settings',\n templateUrl: './settings.component.html',\n styleUrls: ['./settings.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n MatAccordion,\n MatExpansionPanel,\n MatExpansionPanelHeader,\n MatExpansionPanelTitle,\n MatIconButton,\n MatTooltip,\n MatIcon,\n NgClass,\n MatFormField,\n MatLabel,\n MatInput,\n FormsModule,\n MatHint,\n MatSelect,\n MatOption,\n FsDatePickerModule,\n FsColorPickerModule,\n FsFileModule,\n MatButton,\n KeyNameValuePipe,\n ],\n})\nexport class SettingsComponent implements OnInit {\n private _message = inject(FsMessage);\n private _clipboard = inject(FsClipboard);\n private _prompt = inject(FsPrompt);\n private _cdRef = inject(ChangeDetectorRef);\n\n\n @Input() public loadSettings: (query) => Observable<any[]>;\n @Input() public save: (data: any, group: string) => Observable<any>;\n\n @Output() public fileRemove = new EventEmitter();\n @Output() public fileSelect = new EventEmitter<{ setting: any, file: Blob }>();\n\n public groupedSettings = [];\n public groups = [];\n public SettingInterfaceType = SettingInterfaceType;\n\n public ngOnInit(): void {\n this.loadSettings({\n visible: true,\n })\n .subscribe((settings) => {\n settings = settings\n .filter((setting) => {\n return setting.interfaceType !== SettingInterfaceType.None;\n })\n .map((setting) => {\n switch (setting.interfaceType) {\n case SettingInterfaceType.Date:\n case SettingInterfaceType.Time:\n return {\n ...setting,\n value: parse(setting.value),\n };\n\n case SettingInterfaceType.SelectMultiple:\n return {\n ...setting,\n value: Array.isArray(setting.value) ? setting.value : [],\n };\n }\n \n return setting;\n });\n\n this.groupedSettings = settings.reduce((accum, item) => {\n if(accum[item.group] === undefined) {\n accum[item.group] = [];\n }\n accum[item.group].push(item);\n\n return accum;\n }, {});\n \n this.groups = Object.keys(this.groupedSettings);\n this._cdRef.markForCheck();\n });\n }\n\n public export(event: UIEvent, settings): void {\n event.stopPropagation();\n const data = settings.map((setting) => {\n return {\n name: setting.name,\n value: setting.value,\n group: setting.group,\n };\n });\n\n this._clipboard.copy(JSON.stringify(data));\n this._message.success('Copied to clipboard');\n }\n\n public import(event: UIEvent, group): void {\n event.stopPropagation();\n this._prompt.input({\n label: 'JSON Import',\n title: 'Import Settings',\n commitLabel: 'Import',\n required: true,\n }).subscribe((value: string) => {\n if (value) {\n try {\n const settings = this.groupedSettings[group];\n const data = JSON.parse(value);\n\n data.forEach((item) => {\n const setting = settings.find((s) => {\n return item.name === s.name;\n });\n\n if (setting) {\n Object.assign(setting, item);\n }\n });\n\n this._cdRef.markForCheck();\n } catch (e) {\n this._message.error(e);\n }\n }\n });\n }\n\n public saveGroup(group): void {\n const settings = this.groupedSettings[group];\n const values = settings.reduce((result, value) => {\n return (result[value.name] = value.value, result);\n }, {});\n\n this.save(group, values)\n .subscribe(() => {\n this._message.success('Changes Saved');\n });\n }\n}\n","<mat-accordion>\n @for (group of groups; track group) {\n <mat-expansion-panel\n hideToggle\n >\n <mat-expansion-panel-header>\n <mat-panel-title>\n <div class=\"title-row\">\n <div class=\"title\">\n {{ group || 'General' }}\n </div>\n <div class=\"actions\">\n <button\n type=\"button\"\n [matTooltip]=\"'Export ' + (group || 'General') + ' Settings'\"\n mat-icon-button\n (click)=\"export($event, groupedSettings[group])\">\n <mat-icon>\n cloud_download\n </mat-icon>\n </button>\n <button\n type=\"button\"\n [matTooltip]=\"'Import ' + (group || 'General') + ' Settings'\"\n mat-icon-button\n (click)=\"import($event, group)\">\n <mat-icon>\n cloud_upload\n </mat-icon>\n </button>\n </div>\n </div>\n </mat-panel-title>\n </mat-expansion-panel-header>\n @for (setting of groupedSettings[group]; track setting) {\n <div\n hideToggle\n class=\"setting\"\n [ngClass]=\"{ 'has-instruction': !! setting.instruction }\">\n @if (setting.interfaceType===SettingInterfaceType.InputBox) {\n <mat-form-field\n class=\"full-width form-field-multiline-subscript\"\n >\n <mat-label>\n {{ setting.label }}\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"setting.value\"\n [name]=\"'setting' + setting.id\">\n <mat-hint>\n {{ setting.instruction }}\n </mat-hint>\n </mat-form-field>\n }\n @if (setting.interfaceType===SettingInterfaceType.Textarea) {\n <mat-form-field\n class=\"full-width form-field-multiline-subscript\"\n >\n <mat-label>\n {{ setting.label }}\n </mat-label>\n <textarea\n matInput\n [(ngModel)]=\"setting.value\"\n [name]=\"'setting' + setting.id\">\n </textarea>\n <mat-hint>\n {{ setting.instruction }}\n </mat-hint>\n </mat-form-field>\n }\n @if (setting.interfaceType===SettingInterfaceType.Select || setting.interfaceType===SettingInterfaceType.SelectMultiple) {\n <mat-form-field\n class=\"full-width form-field-multiline-subscript\"\n >\n <mat-label>\n {{ setting.label }}\n </mat-label>\n <mat-select\n [(ngModel)]=\"setting.value\"\n [multiple]=\"setting.interfaceType===SettingInterfaceType.SelectMultiple\"\n [name]=\"'setting' + setting.id\">\n @for (item of setting.values | keyNameValue; track item) {\n <mat-option\n [value]=\"item.value\">\n {{ item.name }}\n </mat-option>\n }\n </mat-select>\n <mat-hint>\n {{ setting.instruction }}\n </mat-hint>\n </mat-form-field>\n }\n @if (setting.interfaceType===SettingInterfaceType.Date) {\n <mat-form-field\n class=\"full-width form-field-multiline-subscript\"\n >\n <mat-label>\n {{ setting.label }}\n </mat-label>\n <input\n matInput\n fsDatePicker\n [(ngModel)]=\"setting.value\"\n [name]=\"'setting' + setting.id\">\n <mat-hint>\n {{ setting.instruction }}\n </mat-hint>\n </mat-form-field>\n }\n @if (setting.interfaceType===SettingInterfaceType.Color) {\n <mat-form-field\n class=\"full-width form-field-multiline-subscript\"\n >\n <mat-label>\n {{ setting.label }}\n </mat-label>\n <input\n matInput\n fsColorPicker\n [(ngModel)]=\"setting.value\"\n [name]=\"'setting' + setting.id\">\n <mat-hint>\n {{ setting.instruction }}\n </mat-hint>\n </mat-form-field>\n }\n @if (setting.interfaceType===SettingInterfaceType.Time) {\n <mat-form-field\n class=\"full-width form-field-multiline-subscript\"\n >\n <mat-label>\n {{ setting.label }}\n </mat-label>\n <input\n matInput\n fsTimePicker\n [(ngModel)]=\"setting.value\"\n [name]=\"'setting' + setting.id\">\n <mat-hint>\n {{ setting.instruction }}\n </mat-hint>\n </mat-form-field>\n }\n @if (setting.interfaceType===SettingInterfaceType.File) {\n <fs-file-picker\n [allowRemove]=\"true\"\n [allowDownload]=\"true\"\n (select)=\"fileSelect.emit({ setting: setting, file: $event.file })\"\n (remove)=\"fileRemove.emit(setting)\"\n [url]=\"setting.value\">\n <div fsFileLabel>\n {{ setting.label }}\n </div>\n <div fsFileHint>\n {{ setting.instruction }}\n </div>\n </fs-file-picker>\n }\n </div>\n }\n <button\n mat-stroked-button\n color=\"primary\"\n type=\"button\"\n (click)=\"saveGroup(group)\">\n Save\n </button>\n </mat-expansion-panel>\n }\n</mat-accordion>","import { ChangeDetectionStrategy, Component, Input, OnInit, ViewChild } from '@angular/core';\n\nimport { ItemType } from '@firestitch/filter';\nimport { FsListComponent, FsListConfig, FsListModule } from '@firestitch/list';\n\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { FsDateModule } from '@firestitch/date';\n\n\n@Component({\n selector: 'fs-system-upgrade-logs',\n templateUrl: './upgrade-logs.component.html',\n styleUrls: ['./upgrade-logs.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [FsListModule, FsDateModule],\n})\nexport class UpgradeLogsComponent implements OnInit {\n\n @ViewChild(FsListComponent, { static: true })\n public list: FsListComponent;\n\n @Input() public loadUpgradeLogs: (data: any) => Observable<{ data: any[], paging: any }>;\n\n public config: FsListConfig = null;\n public logTypes = [];\n\n public ngOnInit() {\n this._configList();\n }\n\n private _configList() {\n\n this.config = {\n paging: false,\n filters: [\n {\n type: ItemType.Keyword,\n name: 'keyword',\n label: 'Search',\n },\n ],\n fetch: (query) => {\n return this.loadUpgradeLogs(query)\n .pipe(\n map((response: any) => ({ data: response.data, paging: response.paging })),\n );\n },\n };\n }\n}\n","<fs-list [config]=\"config\">\n <fs-list-column>\n <ng-template fs-list-header>Name</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n {{row.name}}\n </ng-template>\n </fs-list-column>\n\n <fs-list-column>\n <ng-template fs-list-header>Function</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n {{row.function}}()\n </ng-template>\n </fs-list-column>\n\n <fs-list-column>\n <ng-template fs-list-header>Date</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n <fs-date-ago [date]=\"row.createDate\"></fs-date-ago>\n </ng-template>\n </fs-list-column>\n</fs-list>\n","import { InjectionToken } from '@angular/core';\n\nexport const FS_SYSTEM_CONFIG = new InjectionToken<any[]>('fs-system-config');\n","import { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { FsBadgeModule } from '@firestitch/badge';\nimport { FsColorPickerModule } from '@firestitch/colorpicker';\nimport { FsDateModule } from '@firestitch/date';\nimport { FsDatePickerModule } from '@firestitch/datepicker';\nimport { FsDialogModule } from '@firestitch/dialog';\nimport { FsFileModule } from '@firestitch/file';\nimport { FsFileManagerModule } from '@firestitch/file-manager';\nimport { FsLabelModule } from '@firestitch/label';\nimport { FsListModule } from '@firestitch/list';\nimport { FsMenuModule } from '@firestitch/menu';\nimport { FsPopoverModule } from '@firestitch/popover';\nimport { FsSkeletonModule } from '@firestitch/skeleton';\n\nimport { ApiLogComponent } from './components/api-log/api-log.component';\nimport { ApiLogsComponent } from './components/api-logs/api-logs.component';\nimport { CronComponent } from './components/cron';\nimport { CronLogComponent } from './components/cron-log';\nimport { CronLogsComponent } from './components/cron-logs';\nimport { CronNextRunComponent } from './components/cron-next-run';\nimport { CronsComponent } from './components/crons/crons.component';\nimport { DashboardComponent } from './components/dashboard/dashboard.component';\nimport { InfoComponent } from './components/info/info.component';\nimport { ProcessComponent } from './components/process/process.component';\nimport { ProcessesComponent } from './components/processes/processes.component';\nimport { ServerLogsComponent } from './components/server-logs/server-logs.component';\nimport { SettingsComponent } from './components/settings/settings.component';\nimport { UpgradeLogsComponent } from './components/upgrade-logs/upgrade-logs.component';\nimport { FS_SYSTEM_CONFIG } from './injectors/system-config.injector';\nimport { FsSystemConfig } from './interfaces/system-config';\nimport { KeyNameValuePipe } from './pipes/key-name-value.pipe';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n MatButtonModule,\n MatExpansionModule,\n MatTooltipModule,\n MatIconModule,\n MatFormFieldModule,\n MatInputModule,\n MatSelectModule,\n MatDialogModule,\n MatProgressSpinnerModule,\n MatTabsModule,\n FsDateModule,\n FsSkeletonModule,\n FsListModule,\n FsFileModule,\n FsFileManagerModule,\n FsLabelModule,\n FsDialogModule,\n FsDatePickerModule,\n FsMenuModule,\n FsBadgeModule,\n FsPopoverModule,\n FsColorPickerModule,\n CronLogsComponent,\n DashboardComponent,\n CronNextRunComponent,\n CronsComponent,\n SettingsComponent,\n KeyNameValuePipe,\n ProcessesComponent,\n ServerLogsComponent,\n UpgradeLogsComponent,\n ApiLogsComponent,\n ApiLogComponent,\n InfoComponent,\n ProcessComponent,\n CronComponent,\n CronLogComponent,\n ],\n exports: [\n DashboardComponent,\n CronsComponent,\n SettingsComponent,\n ProcessesComponent,\n ServerLogsComponent,\n UpgradeLogsComponent,\n ApiLogsComponent,\n InfoComponent,\n ],\n})\nexport class FsSystemModule {\n public static forRoot(config: FsSystemConfig): ModuleWithProviders<FsSystemModule> {\n return {\n ngModule: FsSystemModule,\n providers: [\n { provide: FS_SYSTEM_CONFIG, useValue: config || {} },\n ],\n };\n }\n}\n\n\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\n\nimport { MAT_DIALOG_DATA, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\nimport { FsDialogModule } from '@firestitch/dialog';\nimport { CdkScrollable } from '@angular/cdk/scrolling';\nimport { MatButton } from '@angular/material/button';\nimport { FsFormModule } from '@firestitch/form';\nimport { JsonPipe } from '@angular/common';\n\n\n@Component({\n templateUrl: './explain.component.html',\n styleUrls: ['./explain.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n FsDialogModule,\n MatDialogTitle,\n CdkScrollable,\n MatDialogContent,\n MatDialogActions,\n MatButton,\n FsFormModule,\n MatDialogClose,\n JsonPipe,\n ],\n})\nexport class ExplainComponent {\n private _data = inject(MAT_DIALOG_DATA);\n\n\n public explain;\n\n constructor() {\n const _data = this._data;\n\n this.explain = _data.explain;\n }\n}\n","<fs-dialog>\n <h1 mat-dialog-title>Explain</h1>\n <mat-dialog-content>\n <div class=\"explain-popover\">{{explain | json}}</div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n type=\"button\"\n color=\"primary\"\n [mat-dialog-close]=\"undefined\">\n Done\n </button>\n </mat-dialog-actions>\n</fs-dialog>\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\n\nimport { MAT_DIALOG_DATA, MatDialog, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\n\n\nimport { ExplainComponent } from '../explain';\nimport { FsDialogModule } from '@firestitch/dialog';\nimport { CdkScrollable } from '@angular/cdk/scrolling';\nimport { FsLabelModule } from '@firestitch/label';\nimport { MatTabGroup, MatTab } from '@angular/material/tabs';\nimport { FsClipboardModule } from '@firestitch/clipboard';\nimport { NgTemplateOutlet, NgClass } from '@angular/common';\nimport { MatButton } from '@angular/material/button';\nimport { FsFormModule } from '@firestitch/form';\nimport { FsPopoverModule } from '@firestitch/popover';\nimport { FsCommonModule } from '@firestitch/common';\n\n\n@Component({\n templateUrl: './query-log.component.html',\n styleUrls: ['./query-log.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n FsDialogModule,\n MatDialogTitle,\n CdkScrollable,\n MatDialogContent,\n FsLabelModule,\n MatTabGroup,\n MatTab,\n FsClipboardModule,\n NgTemplateOutlet,\n MatDialogActions,\n MatButton,\n FsFormModule,\n MatDialogClose,\n FsPopoverModule,\n NgClass,\n FsCommonModule,\n ],\n})\nexport class QueryLogComponent {\n private _data = inject(MAT_DIALOG_DATA);\n private _dialog = inject(MatDialog);\n\n\n public queryLog;\n public accessTypes = {\n NULL: 'This access method means MySQL can resolve the query during the optimization phase and will not even access the table or index during the execution stage.',\n system: 'The table is empty or has one row.',\n const: 'The value of the column can be treated as a constant (there is one row matching the query). Note: Primary Key Lookup, Unique Index Lookup',\n eq_ref: 'The index is clustered and is being used by the operation (either the index is a PRIMARY KEY or UNIQUE INDEX with all key columns defined as NOT NULL)',\n ref: 'The indexed column was accessed using an equality operator Note: The ref_or_null access type is a variation on ref. It means MySQL must do a second lookup to find NULL entries after doing the initial lookup.',\n fulltext: 'Operation (JOIN) is using the table’s fulltext index',\n index: 'The entire index is scanned to find a match for the query. Note: The main advantage is that this avoids sorting. The biggest disadvantage is the cost of reading an entire table in index order. This usually means accessing the rows in random order, which is very expensive.',\n index_merge: 'This join type indicates that the Index Merge optimization is used. In this case, the key column in the output row contains a list of indexes used. It indicates a query can make limited use of multiple indexes on a single table.',\n range: 'This type replaces eq_ref for some IN subqueries of the following form: value IN (SELECT primary_key FROM single_table WHERE some_expr)',\n unique_subquery: '',\n ALL: 'MySQL scans the entire table to satisfy the query',\n };\n\n constructor() {\n const _data = this._data;\n\n this.queryLog = _data.queryLog;\n }\n\n public openExplain() {\n this._dialog.open(ExplainComponent, {\n data: { explain: this.explain },\n });\n }\n\n public get explain() {\n return this.queryLog.explain;\n }\n\n public get queryBlock() {\n return this.explain?.queryBlock;\n }\n\n public get orderingOperation() {\n return this.queryBlock?.orderingOperation;\n }\n}\n","<fs-dialog>\n <h1 mat-dialog-title>Query Log</h1>\n <mat-dialog-content>\n <div class=\"fs-row.gap-lg.wrap.align-start\">\n <fs-label-field>\n <fs-label>Duration</fs-label>\n {{queryLog.duration}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>Optimized</fs-label>\n {{queryLog.optimized ? 'Yes' : 'No'}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>Query Cost</fs-label>\n {{queryLog.queryCost}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>Raw Explain</fs-label>\n <a (click)=\"openExplain()\">View</a>\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>URL</fs-label>\n {{queryLog.path | fsFormatTruncate: 50}}\n </fs-label-field>\n </div>\n\n <mat-tab-group>\n <mat-tab label=\"Query\">\n <fs-clipboard-button\n [content]=\"queryLog.prettyQuery\">\n </fs-clipboard-button>\n <div [innerHTML]=\"queryLog.prettyQuery\" class=\"query\"></div>\n </mat-tab>\n\n <mat-tab label=\"Explain\">\n <ng-container [ngTemplateOutlet]=\"nestedLoop\" [ngTemplateOutletContext]=\"{ queryBlock: queryBlock, selectId: queryBlock.selectId, costInfo: queryBlock.costInfo }\"></ng-container>\n </mat-tab>\n </mat-tab-group>\n\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n type=\"button\"\n color=\"primary\"\n [mat-dialog-close]=\"undefined\">\n Done\n </button>\n </mat-dialog-actions>\n</fs-dialog>\n\n<ng-template #nestedLoop let-queryBlock=\"queryBlock\" let-selectId=\"selectId\" let-costInfo=\"costInfo\">\n @if (selectId) {\n <h1>Select {{selectId}}</h1>\n }\n\n <div class=\"fs-row.gap-lg.wrap.align-start\">\n @if (costInfo?.queryCost) {\n <fs-label-field>\n <fs-label>Query Cost</fs-label>\n {{costInfo.queryCost}}\n </fs-label-field>\n }\n @if (queryBlock.orderingOperation) {\n <fs-label-field>\n <fs-label>Ordering Operation</fs-label>\n <ng-container [ngTemplateOutlet]=\"queryBlockCritical\" [ngTemplateOutletContext]=\"{ queryBlock: queryBlock.orderingOperation }\"></ng-container>\n </fs-label-field>\n }\n\n @if (queryBlock.groupingOperation) {\n <fs-label-field>\n <fs-label>Grouping Operation</fs-label>\n <ng-container [ngTemplateOutlet]=\"queryBlockCritical\" [ngTemplateOutletContext]=\"{ queryBlock: queryBlock.groupingOperation }\"></ng-container>\n </fs-label-field>\n }\n\n @if (queryBlock.duplicatesRemoval) {\n <fs-label-field>\n <fs-label>Duplicates Removal</fs-label>\n <ng-container [ngTemplateOutlet]=\"queryBlockCritical\" [ngTemplateOutletContext]=\"{ queryBlock: queryBlock.duplicatesRemoval }\"></ng-container>\n </fs-label-field>\n }\n </div>\n\n @if (queryBlock.orderingOperation) {\n <ng-container [ngTemplateOutlet]=\"nestedLoop\" [ngTemplateOutletContext]=\"{ queryBlock: queryBlock.orderingOperation }\"></ng-container>\n }\n\n @if (queryBlock.groupingOperation) {\n <ng-container [ngTemplateOutlet]=\"nestedLoop\" [ngTemplateOutletContext]=\"{ queryBlock: queryBlock.groupingOperation }\"></ng-container>\n }\n\n @if (queryBlock.duplicatesRemoval) {\n <ng-container [ngTemplateOutlet]=\"nestedLoop\" [ngTemplateOutletContext]=\"{ queryBlock: queryBlock.duplicatesRemoval }\"></ng-container>\n }\n\n @if (queryBlock.table) {\n <ng-container [ngTemplateOutlet]=\"nestedLoop\" [ngTemplateOutletContext]=\"{ queryBlock: { nestedLoop: [ queryBlock ]} }\"></ng-container>\n @if (queryBlock.table.attachedSubqueries) {\n <fs-label>Attached Subqueries</fs-label>\n @for (subquery of queryBlock.table.attachedSubqueries; track subquery) {\n <ng-container [ngTemplateOutlet]=\"queryBlockCritical\" [ngTemplateOutletContext]=\"{ queryBlock: subquery.queryBlock }\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"nestedLoop\" [ngTemplateOutletContext]=\"{ queryBlock: subquery.queryBlock, selectId: subquery.queryBlock.selectId, costInfo: subquery.queryBlock.costInfo }\"></ng-container>\n }\n }\n }\n\n @if (queryBlock.nestedLoop) {\n <table class=\"fs-list-table style-line\">\n <thead>\n <tr>\n <th>Table</th>\n <th>Type</th>\n <th>Keys</th>\n <th>Ref</th>\n <th>Rows</th>\n <th>Filtered</th>\n <th>Extra</th>\n <th>Cost</th>\n </tr>\n </thead>\n <tbody>\n @for (item of queryBlock.nestedLoop; track item; let index = $index) {\n <tr>\n <td>\n {{item.table.tableName}}\n </td>\n <td>\n <fs-popover [template]=\"accessTypePopover\" [data]=\"item.table.accessType\">\n <span class=\"access-type\" [ngClass]=\"item.table.accessType\">{{item.table.accessType}}</span>\n </fs-popover>\n </td>\n <td>\n <fs-popover\n [template]=\"keysPopover\"\n [maxWidth]=\"null\"\n [data]=\"{ possibleKeys: item.table.possibleKeys, key: item.table.key }\">\n {{item.table.key}}\n </fs-popover>\n </td>\n <td>\n <div class=\"fs-delimit\">\n @for (ref of item.table.ref; track ref) {\n <span>{{ref}}</span>\n }\n </div>\n </td>\n <td>\n {{item.table.rowsExaminedPerScan}}\n </td>\n <td>\n {{item.table.filtered}}\n </td>\n <td>\n <div class=\"fs-delimit\">\n @if (item.table.indexCondition) {\n <span>\n <fs-popover\n [template]=\"usingIndexCondition\"\n [maxWidth]=\"null\"\n [data]=\"item.table.indexCondition\">\n Using Index Condition\n </fs-popover>\n </span>\n }\n @if (item.table.attachedCondition) {\n <span>\n <fs-popover\n [template]=\"usingWhere\"\n [maxWidth]=\"null\"\n [data]=\"item.table.attachedCondition\">\n Using Where\n </fs-popover>\n </span>\n }\n @if (item.usingIndex) {\n <span>Using Index</span>\n }\n @if (item.usingFilesort) {\n <span class=\"critical\">Using File Sort</span>\n }\n @if (item.usingTemporaryTable) {\n <span class=\"critical\">Temporary Table</span>\n }\n </div>\n </td>\n <td>\n <fs-popover [template]=\"tableCostPopover\" [data]=\"item.table?.costInfo\">\n {{item.table?.costInfo.prefixCost}}\n </fs-popover>\n <ng-template #tableCostPopover let-data=\"data\">\n <div>Eval Cost: {{data.evalCost}}</div>\n <div>Read Cost: {{data.readCost}}</div>\n <div>Prefix Cost: {{data.prefixCost}}</div>\n <div>Data Read Per Join: {{data.dataReadPerJoin}}</div>\n </ng-template>\n </td>\n </tr>\n }\n </tbody>\n </table>\n <br>\n }\n\n @if (queryBlock.selectListSubqueries) {\n <br>\n <fs-label>Select List Subqueries</fs-label>\n @for (subquery of queryBlock.selectListSubqueries; track subquery) {\n <ng-container [ngTemplateOutlet]=\"queryBlockCritical\" [ngTemplateOutletContext]=\"{ queryBlock: subquery.queryBlock }\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"nestedLoop\" [ngTemplateOutletContext]=\"{ queryBlock: subquery.queryBlock, selectId: subquery.queryBlock.selectId, costInfo: subquery.queryBlock.costInfo }\"></ng-container>\n }\n }\n <!--\n <ng-container *ngIf=\"queryBlock.queryBlockattachedSubqueries\">\n <br>\n <fs-label>Attached Subqueries</fs-label>\n <ng-container *ngFor=\"let subquery of queryBlock.attachedSubqueries\">\n <ng-container [ngTemplateOutlet]=\"queryBlockCritical\" [ngTemplateOutletContext]=\"{ queryBlock: subquery.queryBlock }\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"nestedLoop\" [ngTemplateOutletContext]=\"{ queryBlock: subquery.queryBlock }\"></ng-container>\n </ng-container>\n </ng-container> -->\n </ng-template>\n\n <ng-template #keysPopover let-data=\"data\">\n <div class=\"fs-delimit\">\n @for (possibleKey of data.possibleKeys; track possibleKey) {\n <span [ngClass]=\"{ 'query-log-used-key': possibleKey === data.key }\">{{possibleKey}}</span>\n }\n </div>\n </ng-template>\n\n <ng-template #usingWhere let-data=\"data\">\n {{data}}\n </ng-template>\n\n <ng-template #usingIndexCondition let-data=\"data\">\n {{data}}\n </ng-template>\n\n <ng-template #accessTypePopover let-data=\"data\">\n {{accessTypes[data]}}\n </ng-template>\n\n\n <ng-template #queryBlockCritical let-queryBlock=\"queryBlock\">\n <div class=\"fs-delimit\">\n @if (queryBlock.usingFilesort) {\n <span class=\"critical\">Using File Sort</span>\n }\n\n @if (queryBlock.usingTemporaryTable) {\n <span class=\"critical\">Temporary Table</span>\n }\n </div>\n </ng-template>","import { ChangeDetectionStrategy, Component, Input, OnInit, ViewChild, inject } from '@angular/core';\n\nimport { MatDialog } from '@angular/material/dialog';\n\nimport { ItemType } from '@firestitch/filter';\nimport { FsListComponent, FsListConfig, FsListModule } from '@firestitch/list';\n\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { QueryLogComponent } from '..';\nimport { NgClass } from '@angular/common';\nimport { FsDateModule } from '@firestitch/date';\nimport { FsCommonModule } from '@firestitch/common';\n\n\n@Component({\n selector: 'fs-system-query-logs',\n templateUrl: './query-logs.component.html',\n styleUrls: ['./query-logs.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n FsListModule,\n NgClass,\n FsDateModule,\n FsCommonModule,\n ],\n})\nexport class QueryLogsComponent implements OnInit {\n private _dialog = inject(MatDialog);\n\n\n @ViewChild(FsListComponent)\n public list: FsListComponent;\n\n @Input() public loadQueryLogs: (query: any) => Observable<{ data: any; paging: any }>;\n @Input() public purgeQueryLogs: () => Observable<any>;\n\n public listConfig: FsListConfig;\n\n public openQueryLog(queryLog): void {\n this._dialog.open(QueryLogComponent, {\n data: { queryLog },\n width: '100%',\n });\n }\n\n public ngOnInit(): void {\n this.listConfig = {\n filters: [\n {\n name: 'keyword',\n type: ItemType.Keyword,\n label: 'Search',\n },\n {\n name: 'optimized',\n type: ItemType.Select,\n label: 'Optimization',\n values: [\n { name: 'Any', value: undefined },\n { name: 'Yes', value: 'true' },\n { name: 'No', value: 'false' },\n ],\n },\n {\n name: 'createDate',\n type: ItemType.DateTimeRange,\n label: ['From Date', 'To Date'],\n },\n {\n name: 'duration',\n type: ItemType.Range,\n label: ['Min Duration', 'Max Duration'],\n },\n ],\n actions: [\n {\n label: 'Purge',\n primary: false,\n click: () => {\n this.purgeQueryLogs()\n .subscribe(() => {\n this.list.reload();\n });\n },\n },\n ],\n fetch: (query) => {\n return this.loadQueryLogs(query)\n .pipe(\n map((response) => ({ data: response.data, paging: response.paging })),\n );\n },\n };\n }\n\n}\n","<fs-list [config]=\"listConfig\">\n <fs-list-column title=\"Optimized\" name=\"optimized\" [sortable]=\"true\">\n <ng-template fs-list-cell let-row=\"row\">\n <span [ngClass]=\"{ optimized: row.optimized, 'not-optimized': !row.optimized }\">\n {{row.optimized ? 'Yes' : 'No'}}\n </span>\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Duration\" name=\"duration\" [sortable]=\"true\">\n <ng-template fs-list-cell let-row=\"row\">\n {{row.duration}}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Cost\" name=\"query_cost\" [sortable]=\"true\">\n <ng-template fs-list-cell let-row=\"row\">\n {{row.queryCost}}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Query\">\n <ng-template fs-list-cell let-row=\"row\">\n <a (click)=\"openQueryLog(row)\">{{ row.query | fsFormatTruncate: 500 }}</a>\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Created\" name=\"query_log_id\" [sortable]=\"true\" [direction]=\"'desc'\" [sortableDefault]=\"true\">\n <ng-template fs-list-cell let-row=\"row\">\n <fs-date-ago [date]=\"row.createDate\"></fs-date-ago>\n </ng-template>\n </fs-list-column>\n</fs-list>","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1","i2","i3","i4","i5","i6","i7"],"mappings":"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"}
1
+ {"version":3,"file":"firestitch-system.mjs","sources":["../../src/app/modules/system/enums/cron-state.enum.ts","../../src/app/modules/system/enums/setting-interface-type.enum.ts","../../src/app/modules/system/enums/api-log-state.enum.ts","../../src/app/modules/system/enums/process-state.enum.ts","../../src/app/modules/system/enums/cron-log-state.enum.ts","../../src/app/modules/system/consts/api-log-states.const.ts","../../src/app/modules/system/consts/cron-log-states.const.ts","../../src/app/modules/system/consts/cron-process-states.const.ts","../../src/app/modules/system/consts/cron-states.const.ts","../../src/app/modules/system/consts/process-process-states.const.ts","../../src/app/modules/system/consts/process-states.const.ts","../../src/app/modules/system/consts/setting-interface-types.const.ts","../../src/app/modules/system/helpers/index-name-value.ts","../../src/app/modules/system/components/api-log/api-log.component.ts","../../src/app/modules/system/components/api-log/api-log.component.html","../../src/app/modules/system/components/api-logs/api-logs.component.ts","../../src/app/modules/system/components/api-logs/api-logs.component.html","../../src/app/modules/system/data/cron.data.ts","../../src/app/modules/system/components/cron-log/cron-log.component.ts","../../src/app/modules/system/components/cron-log/cron-log.component.html","../../src/app/modules/system/components/cron-logs/cron-logs.component.ts","../../src/app/modules/system/components/cron-logs/cron-logs.component.html","../../src/app/modules/system/components/cron/cron.component.ts","../../src/app/modules/system/components/cron/cron.component.html","../../src/app/modules/system/components/cron-next-run/cron-next-run.component.ts","../../src/app/modules/system/components/cron-next-run/cron-next-run.component.html","../../src/app/modules/system/components/crons/crons.component.ts","../../src/app/modules/system/components/crons/crons.component.html","../../src/app/modules/system/components/dashboard/dashboard.component.ts","../../src/app/modules/system/components/dashboard/dashboard.component.html","../../src/app/modules/system/components/info/info.component.ts","../../src/app/modules/system/components/info/info.component.html","../../src/app/modules/system/data/process.data.ts","../../src/app/modules/system/components/process/process.component.ts","../../src/app/modules/system/components/process/process.component.html","../../src/app/modules/system/components/processes/processes.component.ts","../../src/app/modules/system/components/processes/processes.component.html","../../src/app/consts/log-types.const.ts","../../src/app/modules/system/components/server-logs/components/server-log/server-log.component.ts","../../src/app/modules/system/components/server-logs/components/server-log/server-log.component.html","../../src/app/modules/system/components/server-logs/server-logs.component.ts","../../src/app/modules/system/components/server-logs/server-logs.component.html","../../src/app/modules/system/pipes/key-name-value.pipe.ts","../../src/app/modules/system/components/settings/settings.component.ts","../../src/app/modules/system/components/settings/settings.component.html","../../src/app/modules/system/components/upgrade-logs/upgrade-logs.component.ts","../../src/app/modules/system/components/upgrade-logs/upgrade-logs.component.html","../../src/app/modules/system/injectors/system-config.injector.ts","../../src/app/modules/system/fs-system.module.ts","../../src/app/modules/query-logs/components/explain/explain.component.ts","../../src/app/modules/query-logs/components/explain/explain.component.html","../../src/app/modules/query-logs/components/query-log/query-log.component.ts","../../src/app/modules/query-logs/components/query-log/query-log.component.html","../../src/app/modules/query-logs/components/query-logs/query-logs.component.ts","../../src/app/modules/query-logs/components/query-logs/query-logs.component.html","../../src/firestitch-system.ts"],"sourcesContent":["export enum CronState {\n Running = 'running',\n Idle = 'idle',\n Failed = 'failed',\n Queued = 'queued',\n Disabled = 'disabled',\n Enabled = 'enabled',\n SystemDisabled = 'systemDisabled',\n Killing = 'killing',\n}\n","export enum SettingInterfaceType {\n RadioButton = 'R',\n InputBox = 'I',\n Textarea = 'T',\n Select = 'D',\n SelectMultiple = 'W',\n Date = 'A',\n File = 'F',\n Static = 'S',\n Password = 'P',\n Time = 'M',\n None = 'N',\n Color = 'C',\n}\n","export enum ApiLogState {\n Success = 'success',\n Failed = 'failed',\n Deleted = 'deleted'\n}","export enum ProcessState {\n Queued = 'Q',\n Running = 'R',\n Completed = 'C',\n Killed = 'K',\n Deleted = 'D',\n Failed = 'F'\n}\n","export enum CronLogState {\n Message = 'message',\n Disabled = 'disabled',\n Enabled = 'enabled',\n Started = 'started',\n Running = 'running',\n Completed = 'completed',\n Failed = 'failed',\n Killed = 'killed',\n Queued = 'queued',\n Reset = 'reset',\n Stagnant = 'stagnant',\n LongRunning = 'long_running',\n}\n","import { ApiLogState } from '../enums';\n\nexport const ApiLogStates = [\n { name: 'Success', value: ApiLogState.Success },\n { name: 'Failed', value: ApiLogState.Failed },\n { name: 'Deleted', value: ApiLogState.Deleted }\n];\n","import { CronLogState } from '../enums';\n\nexport const CronLogStates = [\n { name: 'Message', value: CronLogState.Message, color: '#29B7FF' },\n { name: 'Disabled', value: CronLogState.Disabled, color: '#29B7FF' },\n { name: 'Reset', value: CronLogState.Reset, color: '#29B7FF' },\n { name: 'Enabled', value: CronLogState.Enabled, color: '#29B7FF' },\n { name: 'Queued', value: CronLogState.Queued, color: '#29B7FF' },\n { name: 'Started', value: CronLogState.Started, color: '#D17333' },\n { name: 'Running', value: CronLogState.Running, color: '#34BD43' },\n { name: 'Completed', value: CronLogState.Completed, color: '#34BD43' },\n { name: 'Failed', value: CronLogState.Failed, color: '#FA7567' },\n { name: 'Killed', value: CronLogState.Killed, color: '#FA7567' },\n { name: 'Stagnant', value: CronLogState.Stagnant, color: '#FA7567' },\n { name: 'Long Running', value: CronLogState.LongRunning, color: '#FA7567' },\n];\n","\nexport const CronProcessStates = [\n { name: 'Running', value: 'running' },\n { name: 'Stopped', value: 'stopped' },\n];\n","import { CronState } from '../enums';\n\nexport const CronStates = [\n { name: 'Running', value: CronState.Running },\n { name: 'Idle', value: CronState.Idle },\n { name: 'Failed', value: CronState.Failed },\n { name: 'Queued', value: CronState.Queued },\n { name: 'Disabled', value: CronState.Disabled },\n { name: 'Killing', value: CronState.Killing },\n { name: 'Enabled', value: CronState.Enabled },\n { name: 'System disabled', value: CronState.SystemDisabled },\n];\n","\nexport const ProcessProcessStates = [\n { name: 'Missing', value: 'missing' },\n { name: 'Running', value: 'running' },\n { name: 'Stopped', value: 'stopped' },\n];\n","import { ProcessState } from '../enums';\n\nexport const ProcessStates = [\n { name: 'Queued', value: ProcessState.Queued },\n { name: 'Running', value: ProcessState.Running },\n { name: 'Completed', value: ProcessState.Completed },\n { name: 'Killed', value: ProcessState.Killed },\n { name: 'Failed', value: ProcessState.Failed },\n { name: 'Deleted', value: ProcessState.Deleted }\n];\n","import { SettingInterfaceType } from '../enums';\n\nexport const SettingInterfaceTypes = [\n { name: 'RadioButton', value: SettingInterfaceType.RadioButton },\n { name: 'InputBox', value: SettingInterfaceType.InputBox },\n { name: 'Textarea', value: SettingInterfaceType.Textarea },\n { name: 'DropDown', value: SettingInterfaceType.Select },\n { name: 'File', value: SettingInterfaceType.File },\n { name: 'Static', value: SettingInterfaceType.Static },\n { name: 'Password', value: SettingInterfaceType.Password },\n { name: 'Color', value: SettingInterfaceType.Color }\n];\n","\nexport function indexNameValue(arry) {\n const obj = {};\n arry.forEach(item => {\n obj[item.value] = item.name;\n });\n\n return obj;\n}\n","import { Component, OnInit, inject } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\nimport { ApiLogStates } from '../../consts';\nimport { indexNameValue } from '../../helpers/index-name-value';\nimport { FsSkeletonModule } from '@firestitch/skeleton';\nimport { FsDialogModule } from '@firestitch/dialog';\nimport { CdkScrollable } from '@angular/cdk/scrolling';\nimport { FsLabelModule } from '@firestitch/label';\nimport { MatButton } from '@angular/material/button';\nimport { JsonPipe } from '@angular/common';\nimport { FsDateModule } from '@firestitch/date';\n\n\n@Component({\n templateUrl: './api-log.component.html',\n styleUrls: ['./api-log.component.scss'],\n standalone: true,\n imports: [FsSkeletonModule, FsDialogModule, MatDialogTitle, CdkScrollable, MatDialogContent, FsLabelModule, MatDialogActions, MatButton, MatDialogClose, JsonPipe, FsDateModule]\n})\nexport class ApiLogComponent implements OnInit {\n private _dialogRef = inject<MatDialogRef<ApiLogComponent>>(MatDialogRef);\n data = inject(MAT_DIALOG_DATA);\n\n\n public apiLog;\n public apiLogStates;\n\n public ngOnInit() {\n\n this.apiLogStates = indexNameValue(ApiLogStates);\n\n if (this.data.apiLog) {\n this.apiLog = this.data.apiLog;\n }\n }\n}\n","<fs-dialog *fsSkeleton=\"apiLog\">\n\n <div mat-dialog-title>API Log</div>\n\n <mat-dialog-content>\n <div class=\"fs-row.gap-lg.wrap.align-start\">\n <fs-label-field>\n <fs-label>\n Type\n </fs-label>\n {{apiLog.type}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>\n Status\n </fs-label>\n {{apiLogStates[apiLog.state]}}\n </fs-label-field>\n\n @if (apiLog.code) {\n <fs-label-field>\n <fs-label>\n Code\n </fs-label>\n {{apiLog.code}}\n </fs-label-field>\n }\n\n <fs-label-field>\n <fs-label>\n Date\n </fs-label>\n {{apiLog.createDate|fsDateFormat: 'full-date-time'}}\n </fs-label-field>\n\n @if (apiLog.direction) {\n <fs-label-field>\n <fs-label>\n Direction\n </fs-label>\n {{apiLog.direction}}\n </fs-label-field>\n }\n\n @if (apiLog.length) {\n <fs-label-field>\n <fs-label>\n Duration\n </fs-label>\n {{ apiLog.length | fsDateDuration }}\n </fs-label-field>\n }\n\n @if (apiLog.method) {\n @if (apiLog.method) {\n <fs-label-field>\n <fs-label>\n Method\n </fs-label>\n {{apiLog.method}}\n </fs-label-field>\n }\n }\n\n @if (apiLog.url) {\n <fs-label-field>\n <fs-label>\n URL\n </fs-label>\n {{apiLog.url}}\n </fs-label-field>\n }\n </div>\n\n @if (apiLog.message) {\n <fs-label-field>\n <fs-label>\n Message\n </fs-label>\n {{apiLog.message}}\n </fs-label-field>\n }\n\n <div>\n @if (apiLog.request) {\n <fs-label-field>\n <fs-label>\n Request\n </fs-label>\n <pre>{{apiLog.request|json}}</pre>\n </fs-label-field>\n }\n\n @if (apiLog.response) {\n <fs-label-field>\n <fs-label>\n Response\n </fs-label>\n <pre>{{apiLog.response|json}}</pre>\n </fs-label-field>\n }\n\n @if (apiLog.headers) {\n <fs-label-field>\n <fs-label>\n Headers\n </fs-label>\n <pre>{{apiLog.headers|json}}</pre>\n </fs-label-field>\n }\n </div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n [mat-dialog-close]=\"true\"\n color=\"primary\">\n Done\n </button>\n </mat-dialog-actions>\n</fs-dialog>\n","import { ChangeDetectionStrategy, Component, Input, OnInit, ViewChild, inject } from '@angular/core';\n\nimport { MatDialog } from '@angular/material/dialog';\n\nimport { ItemType } from '@firestitch/filter';\nimport { FsListComponent, FsListConfig, PaginationStrategy, FsListModule } from '@firestitch/list';\n\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { ApiLogStates } from '../../consts';\nimport { indexNameValue } from '../../helpers/index-name-value';\nimport { ApiLogComponent } from '../api-log/api-log.component';\nimport { MatIcon } from '@angular/material/icon';\nimport { NgClass } from '@angular/common';\nimport { FsDateModule } from '@firestitch/date';\n\n\n@Component({\n selector: 'fs-system-api-logs',\n templateUrl: './api-logs.component.html',\n styleUrls: ['./api-logs.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n FsListModule,\n MatIcon,\n NgClass,\n FsDateModule,\n ],\n})\nexport class ApiLogsComponent implements OnInit {\n private _dialog = inject(MatDialog);\n\n\n @ViewChild(FsListComponent, { static: true })\n public list: FsListComponent;\n\n @Input() public loadApiLogs: (data: any) => Observable<{ data: any[]; paging: any }>;\n\n public config: FsListConfig = null;\n public apiLogStates = indexNameValue(ApiLogStates);\n\n public ngOnInit() {\n this._configList();\n }\n\n public open(apiLog) {\n this._dialog.open(ApiLogComponent, {\n data: { apiLog },\n width: '85%',\n });\n }\n\n private _configList() {\n this.config = {\n paging: {\n strategy: PaginationStrategy.Many,\n },\n filters: [\n {\n type: ItemType.Keyword,\n name: 'keyword',\n label: 'Search',\n },\n {\n type: ItemType.Select,\n name: 'state',\n label: 'Status',\n values: ApiLogStates,\n },\n {\n name: 'createDate',\n type: ItemType.DateRange,\n label: ['From Date', 'To Date'],\n },\n ],\n fetch: (query) => {\n Object.assign(query, { });\n\n return this.loadApiLogs(query)\n .pipe(\n map((response: any) => ({ data: response.data, paging: response.paging })),\n );\n },\n };\n }\n}\n","<fs-list [config]=\"config\">\n <fs-list-column>\n <ng-template fs-list-header>Name</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n <a href=\"javascript:;\" (click)=\"open(row)\">\n {{row.type || 'Unknown'}}\n @if (row.direction=='outgoing') {\n <mat-icon class=\"direction\">arrow_upward</mat-icon>\n }\n @if (row.direction=='incoming') {\n <mat-icon class=\"direction\">arrow_downward</mat-icon>\n }\n </a>\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>Status</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n {{apiLogStates[row.state]}}\n @if (row.code) {\n <span class=\"code\" [ngClass]=\"{'success': row.code >= 200 && row.code < 300,'error': row.code < 200 || row.code >= 300 }\">[{{row.code}}]</span>\n }\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>Message</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n {{row.message}}\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>Date</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n <fs-date-ago [date]=\"row.createDate\"></fs-date-ago>\n <div>@if (row.length) {\n <small>Duration: {{ row.length | fsDateDuration }}</small>\n }</div>\n </ng-template>\n </fs-list-column>\n</fs-list>\n","import { Injectable, inject } from '@angular/core';\n\nimport { FsApi } from '@firestitch/api';\n\nimport { Observable } from 'rxjs';\n\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CronData {\n private _fsApi = inject(FsApi);\n\n\n public create(data = { id: null }) {\n return data;\n }\n\n public get(cronId: number | string, query = {}): Observable<any> {\n return this._fsApi.get(`system/crons/${cronId}`, query, { key: 'cron' });\n }\n\n public gets(data = {}, config = {}): Observable<any> {\n return this._fsApi.request('GET', 'system/crons', data, { key: 'cron', ...config });\n }\n\n public cronLogGets(data = {}, config = {}): Observable<any> {\n return this._fsApi.request('GET', 'system/cronlogs', data, { key: 'cronLogs', ...config });\n }\n\n public enable(cron, config = {}): Observable<any> {\n return this._fsApi.put(`system/crons/${cron.id}/enable`, cron, { key: 'cron', ...config });\n }\n\n public disable(cron, config = {}): Observable<any> {\n return this._fsApi.put(`system/crons/${cron.id}/disable`, cron, { key: 'cron', ...config });\n }\n\n public kill(cron, config = {}): Observable<any> {\n return this._fsApi.put(`system/crons/${cron.id}/kill`, cron, { key: 'cron', ...config });\n }\n\n public queue(cron, config = {}): Observable<any> {\n return this._fsApi.put(`system/crons/${cron.id}/queue`, cron, { key: 'cron', ...config });\n }\n\n public run(cron, config = {}): Observable<any> {\n return this._fsApi.put(`system/crons/${cron.id}/run`, cron, { key: 'cron', ...config });\n }\n\n public bulk(action, processes, config = {}): Observable<any> {\n return this._fsApi.put('system/crons/bulk', {\n action,\n processes,\n }, { key: 'cron', ...config });\n }\n}\n","import { ChangeDetectionStrategy, Component, OnInit, inject } from '@angular/core';\n\nimport { MAT_DIALOG_DATA, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\n\nimport { CronLogStates } from '../../consts/cron-log-states.const';\nimport { indexNameValue } from '../../helpers/index-name-value';\nimport { FsSkeletonModule } from '@firestitch/skeleton';\nimport { FsDialogModule } from '@firestitch/dialog';\nimport { CdkScrollable } from '@angular/cdk/scrolling';\nimport { FsLabelModule } from '@firestitch/label';\nimport { NgStyle } from '@angular/common';\nimport { FsDateModule } from '@firestitch/date';\nimport { MatButton } from '@angular/material/button';\n\n\n@Component({\n templateUrl: './cron-log.component.html',\n styleUrls: ['./cron-log.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n FsSkeletonModule,\n FsDialogModule,\n MatDialogTitle,\n CdkScrollable,\n MatDialogContent,\n FsLabelModule,\n NgStyle,\n FsDateModule,\n MatDialogActions,\n MatButton,\n MatDialogClose,\n ],\n})\nexport class CronLogComponent implements OnInit {\n private _data = inject(MAT_DIALOG_DATA);\n\n\n public cronLog;\n public CronLogStates = indexNameValue(CronLogStates);\n public CronLogStateColors = {};\n\n public ngOnInit(): void {\n this.cronLog = this._data.cronLog;\n this.CronLogStateColors = CronLogStates\n .reduce((accum, cronLogState) => {\n accum[cronLogState.value] = cronLogState.color;\n\n return accum;\n }, {});\n }\n}\n","<fs-dialog *fsSkeleton=\"cronLog\">\n <div mat-dialog-title>\n Cron Log\n </div>\n <mat-dialog-content>\n <div class=\"row\">\n <fs-label-field>\n <fs-label>\n Status\n </fs-label>\n <div [ngStyle]=\"{ color: CronLogStateColors[cronLog.state]}\">\n {{ CronLogStates[cronLog.state] || cronLog.state }}\n </div>\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Date\n </fs-label>\n <fs-date-ago [date]=\"cronLog.createDate\"></fs-date-ago>\n </fs-label-field>\n </div>\n @if (cronLog.message) {\n <fs-label-field>\n <fs-label>\n Message\n </fs-label>\n <div class=\"message\">\n {{ cronLog.message }}\n </div>\n </fs-label-field>\n }\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n [mat-dialog-close]=\"true\"\n color=\"primary\">\n Done\n </button>\n </mat-dialog-actions>\n</fs-dialog>","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, Input, OnInit } from '@angular/core';\n\nimport { MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';\n\nimport { FsDateModule } from '@firestitch/date';\nimport { ItemType } from '@firestitch/filter';\nimport { FsListConfig, FsListModule, PaginationStrategy } from '@firestitch/list';\n\nimport { map } from 'rxjs/operators';\n\nimport { CronLogStates } from '../../consts/cron-log-states.const';\nimport { CronData } from '../../data/cron.data';\nimport { indexNameValue } from '../../helpers/index-name-value';\nimport { CronLogComponent } from '../cron-log';\n\n\n@Component({\n selector: 'app-cron-logs',\n templateUrl: './cron-logs.component.html',\n styleUrls: ['./cron-logs.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n CommonModule,\n FsListModule,\n FsDateModule,\n ],\n})\nexport class CronLogsComponent implements OnInit {\n\n @Input() public cron;\n public CronLogStateColors = {};\n\n public config: FsListConfig;\n public CronLogStates = indexNameValue(CronLogStates);\n public cronActions;\n \n private _cronData = inject(CronData);\n private _dialog = inject(MatDialog);\n private _data = inject(MAT_DIALOG_DATA);\n\n public ngOnInit(): void {\n this.cron = this._data.cron;\n this.load();\n this.CronLogStateColors = CronLogStates\n .reduce((accum, cronLogState) => {\n accum[cronLogState.value] = cronLogState.color;\n\n return accum;\n }, {});\n }\n\n public cronLogOpen(cronLog): void {\n this._dialog.open(CronLogComponent, {\n data: { \n cronLog,\n },\n width: '85%',\n }); \n }\n\n public load(): void {\n this.config = {\n paging: {\n strategy: PaginationStrategy.Many,\n },\n filters: [\n {\n type: ItemType.Select,\n name: 'state',\n label: 'Status',\n values: [\n { name: 'All', value: null },\n ...CronLogStates,\n ],\n },\n {\n type: ItemType.DateRange,\n name: 'date',\n label: ['From Date', 'To Date'],\n },\n ], \n fetch: (query) => {\n query = {\n ...query,\n cronId: this.cron.id,\n };\n\n return this._cronData.cronLogGets(query, {\n key: null,\n })\n .pipe(\n map((data: any) => {\n return { data: data.cronLogs, paging: data.paging };\n }),\n );\n },\n };\n }\n}\n","<fs-list [config]=\"config\">\n <fs-list-column\n name=\"state\"\n title=\"Status\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <a\n (click)=\"cronLogOpen(row)\"\n [ngStyle]=\"{ color: CronLogStateColors[row.state] }\">\n {{ CronLogStates[row.state] || row.state }}\n </a>\n </ng-template>\n </fs-list-column>\n <fs-list-column\n title=\"Message\"\n class=\"col-message\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <div class=\"message\">\n {{ row.message }}\n </div>\n </ng-template>\n </fs-list-column>\n <fs-list-column\n title=\"Duration\"\n class=\"col-message\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n @if (row.duration) {\n {{ row.duration | fsDateDuration: 'hour-minute-second' }}\n }\n </ng-template>\n </fs-list-column>\n <fs-list-column\n name=\"create_date\"\n title=\"Date\"\n class=\"col-date\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <fs-date-ago [date]=\"row.createDate\"></fs-date-ago>\n </ng-template>\n </fs-list-column>\n</fs-list>","import {\n ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, OnInit,\n} from '@angular/core';\n\nimport { MAT_DIALOG_DATA, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\n\nimport { CronProcessStates, CronStates } from '../../consts';\nimport { CronData } from '../../data/cron.data';\nimport { indexNameValue } from '../../helpers/index-name-value';\nimport { FsSkeletonModule } from '@firestitch/skeleton';\nimport { FsDialogModule } from '@firestitch/dialog';\nimport { CdkScrollable } from '@angular/cdk/scrolling';\nimport { MatTabGroup, MatTab, MatTabContent } from '@angular/material/tabs';\nimport { FsLabelModule } from '@firestitch/label';\nimport { FsDateModule } from '@firestitch/date';\nimport { CronLogsComponent } from '../cron-logs/cron-logs.component';\nimport { MatButton } from '@angular/material/button';\n\n\n@Component({\n templateUrl: './cron.component.html',\n styleUrls: ['./cron.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n FsSkeletonModule,\n FsDialogModule,\n MatDialogTitle,\n CdkScrollable,\n MatDialogContent,\n MatTabGroup,\n MatTab,\n FsLabelModule,\n FsDateModule,\n MatTabContent,\n CronLogsComponent,\n MatDialogActions,\n MatButton,\n MatDialogClose,\n ],\n})\nexport class CronComponent implements OnInit {\n\n public cron;\n public tabIndex = 0;\n public CronStates = indexNameValue(CronStates);\n public CronProcessStates = indexNameValue(CronProcessStates);\n\n public cronActions;\n \n private _cronData = inject(CronData);\n private _cdRef = inject(ChangeDetectorRef);\n private _data = inject(MAT_DIALOG_DATA);\n\n public ngOnInit(): void {\n this.load();\n }\n\n public cronActionClick(cronAction) {\n cronAction\n .action(this.cron)\n .subscribe(() => {\n this.load();\n });\n }\n\n public selectedIndexChange(index) {\n this.tabIndex = index;\n }\n\n public load(): void {\n this._cronData\n .get(this._data.cron.id, {\n timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n })\n .subscribe((cron) => {\n this.cron = {\n ...this._data.cron,\n ...cron,\n };\n\n this.cronActions = this._data.cronActions\n .filter((cronLogAction) => {\n return cronLogAction.show(this.cron);\n });\n\n this._cdRef.markForCheck();\n });\n }\n}\n","<fs-dialog *fsSkeleton=\"cron\">\n <h1 mat-dialog-title>\n Cron\n <div class=\"small\">\n {{ cron.name }}\n </div>\n </h1>\n <mat-dialog-content>\n <mat-tab-group (selectedIndexChange)=\"selectedIndexChange($event)\">\n <mat-tab label=\"Overview\">\n <div class=\"fs-row.gap-lg.wrap.align-start\">\n <fs-label-field>\n <fs-label>\n Status\n </fs-label>\n {{ CronStates[cron.state] }}\n </fs-label-field>\n @if (cron.cronSetting) {\n <fs-label-field>\n <fs-label>\n Run Frequency\n </fs-label>\n {{ cron.cronSetting.summary }}\n </fs-label-field>\n }\n <fs-label-field>\n <fs-label>\n Process ID\n </fs-label>\n {{ cron.processId || 'None' }}\n @if (cron.processId) {\n <div class=\"small\">\n {{ CronProcessStates[cron.processState] || 'Unknown' }}\n </div>\n }\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Last Ran\n </fs-label>\n @if (cron.duration===null) {\n Never\n } @else {\n <fs-date-ago [date]=\"cron.createDate\"></fs-date-ago>\n <div>\n @if (cron.duration) {\n <small>\n Duration: {{ cron.duration | fsDateDuration }}\n </small>\n }\n </div>\n }\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Timeout hours\n </fs-label>\n {{ cron.cronSetting?.timeout || 'N/A' }}\n </fs-label-field>\n </div>\n @if (cron.message) {\n <fs-label-field>\n <fs-label>\n Last Message\n </fs-label>\n <div class=\"message\">\n {{ cron.message }}\n </div>\n </fs-label-field>\n }\n </mat-tab>\n <mat-tab label=\"Logs\">\n <ng-template matTabContent>\n <app-cron-logs [cron]=\"cron\"></app-cron-logs>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n [mat-dialog-close]=\"true\"\n color=\"primary\">\n Done\n </button>\n @if (tabIndex === 0) {\n @for (cronAction of cronActions; track cronAction) {\n <button\n mat-button\n (click)=\"cronActionClick(cronAction)\">\n {{ cronAction.label }}\n </button>\n }\n }\n </mat-dialog-actions>\n</fs-dialog>","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit, inject } from '@angular/core';\n\n\nimport { Subject, timer } from 'rxjs';\nimport { takeUntil, tap } from 'rxjs/operators';\n\nimport { addDays, addHours, addMinutes, differenceInSeconds, getDaysInMonth, subSeconds } from 'date-fns';\nimport { FsDateModule } from '@firestitch/date';\n\n\n@Component({\n selector: 'app-next-run',\n templateUrl: './cron-next-run.component.html',\n styleUrls: ['./cron-next-run.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [FsDateModule],\n})\nexport class CronNextRunComponent implements OnInit, OnDestroy {\n private _cdRef = inject(ChangeDetectorRef);\n\n\n @Input() public cron;\n\n public duration;\n\n private _destroy$ = new Subject();\n\n\n public ngOnInit() {\n this.update();\n }\n\n public calculateDuration() {\n const now = new Date();\n const nextMinutes = this._getNextMinutes(now);\n const nextHours = this._getNextHours(now);\n const nextDays = this._getNextDays(now);\n\n if(\n this.cron.cronSetting.minutes.length ||\n this.cron.cronSetting.hours.length ||\n this.cron.cronSetting.days.length \n ) {\n let next = new Date();\n next = addMinutes(next, nextMinutes);\n next = addHours(next, nextHours);\n next = addDays(next, nextDays);\n next = subSeconds(next, next.getSeconds());\n\n this.duration = Math.max(0, differenceInSeconds(next, now));\n } else {\n this.duration = Math.max(0, 60 - now.getSeconds());\n }\n }\n\n public update() {\n this.calculateDuration();\n timer(0, 1000)\n .pipe(\n tap(() => {\n this.duration -= 1; \n\n if(this.duration % 60 === 0 || this.duration < (60 * 5)) {\n this._cdRef.markForCheck();\n }\n\n if(this.duration <= 0) {\n this.calculateDuration();\n this._cdRef.markForCheck();\n }\n\n }),\n takeUntil(this._destroy$),\n )\n .subscribe();\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n\n private _getNextMinutes(now: Date) {\n const minutes: number[] = this.cron.cronSetting.minutes;\n if(minutes.length) {\n for(let i = minutes.length - 1; i >= 0; i--) {\n if(now.getUTCMinutes() >= minutes[i]) {\n return (minutes[i + 1] ? minutes[i + 1] - now.getUTCMinutes() : (60 - now.getUTCMinutes() + minutes[i]));\n }\n }\n\n return minutes[0] - now.getUTCMinutes();\n }\n\n return 0;\n }\n\n private _getNextHours(now: Date) {\n const hours: number[] = this.cron.cronSetting.hours;\n if(hours.length) {\n for(let i = hours.length - 1; i >= 0; i--) {\n if(now.getUTCHours() >= hours[i]) {\n return (hours[i + 1] ? hours[i + 1] - now.getUTCHours() : (24 - now.getUTCHours() + hours[i]));\n }\n }\n\n return hours[0] - now.getUTCHours();\n }\n\n return 0;\n }\n\n private _getNextDays(now: Date) {\n const days = this.cron.cronSetting.days;\n if(days.length) {\n for(let i = days.length - 1; i >= 0; i--) {\n if(now.getDate() >= days[i]) {\n return (days[i + 1] ? days[i + 1] : getDaysInMonth(now)) - now.getDate();\n }\n }\n\n return days[0] - now.getDate();\n }\n\n return 0;\n }\n}\n","@if (duration > 60) {\n {{ duration | fsDateDuration: { hours: true, seconds: true, minutes: true, days: true, maxOutputs: 2 } }}\n} @else {\n {{ duration }}s\n}\n<ng-template #seconds>\n {{ duration }}s\n</ng-template>","import { ChangeDetectionStrategy, Component, inject, OnDestroy, OnInit, ViewChild } from '@angular/core';\n\nimport { MatDialog } from '@angular/material/dialog';\n\nimport { FsApi, RequestMethod, StreamEventData } from '@firestitch/api';\nimport { parse, FsDateModule } from '@firestitch/date';\nimport { ItemType } from '@firestitch/filter';\nimport { FsListActionSelected, FsListComponent, FsListConfig, FsListModule } from '@firestitch/list';\nimport { FsMessage } from '@firestitch/message';\nimport { FsProcess } from '@firestitch/process';\nimport { FsPrompt } from '@firestitch/prompt';\nimport { SelectionActionType } from '@firestitch/selection';\n\nimport { Observable, Subject, timer } from 'rxjs';\nimport { filter, map, switchMap, take, takeUntil, tap } from 'rxjs/operators';\n\nimport { differenceInSeconds } from 'date-fns';\n\nimport { CronProcessStates, CronStates } from '../../consts';\nimport { CronData } from '../../data/cron.data';\nimport { CronState } from '../../enums';\nimport { indexNameValue } from '../../helpers/index-name-value';\nimport { CronComponent } from '../cron/cron.component';\nimport { FsPopoverModule } from '@firestitch/popover';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { CronNextRunComponent } from '../cron-next-run/cron-next-run.component';\n\n\n@Component({\n selector: 'fs-system-crons',\n templateUrl: './crons.component.html',\n styleUrls: ['./crons.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n FsListModule,\n FsPopoverModule,\n NgTemplateOutlet,\n FsDateModule,\n CronNextRunComponent,\n ],\n})\nexport class CronsComponent implements OnInit, OnDestroy {\n\n @ViewChild(FsListComponent, { static: true }) public list: FsListComponent;\n\n public config: FsListConfig = null;\n public CronStates = indexNameValue(CronStates);\n public CronProcessStates = indexNameValue(CronProcessStates);\n public CronState = CronState;\n\n private _destroy$ = new Subject();\n private _cronData = inject(CronData);\n private _message = inject(FsMessage);\n private _dialog = inject(MatDialog);\n private _prompt = inject(FsPrompt);\n private _process = inject(FsProcess);\n private _api = inject(FsApi);\n\n public ngOnInit(): void {\n this._configList();\n }\n\n public open(cron) {\n this._dialog.open(CronComponent, {\n data: {\n cron,\n cronActions: this.getCronActions(),\n },\n width: '85%',\n });\n }\n\n public getCronActions() {\n return [\n {\n action: (data) => {\n return this.queue(data)\n .pipe(\n tap(() => {\n this._message.success('Queued cron');\n this.list.reload();\n }),\n );\n },\n label: 'Queue',\n show: (cron) => {\n return cron.state === CronState.Idle || cron.state === CronState.Failed;\n },\n },\n {\n action: (data) => {\n return this.run(data)\n .pipe(\n tap(() => {\n this.list.reload();\n }),\n );\n },\n label: 'Run',\n show: (cron) => {\n return cron.state === CronState.Idle || cron.state === CronState.Failed;\n },\n },\n {\n action: (data) => {\n return this.enable(data)\n .pipe(\n tap(() => {\n this._message.success('Enabled cron');\n this.list.reload();\n }),\n );\n },\n label: 'Enable',\n show: (cron) => {\n return cron.state === CronState.Disabled;\n },\n },\n {\n action: (data) => {\n return this.disable(data)\n .pipe(\n tap(() => {\n this._message.success('Disabled cron');\n this.list.reload();\n }),\n );\n },\n label: 'Disable',\n show: (cron) => {\n return cron.state === CronState.Idle || cron.state === CronState.Failed;\n },\n },\n {\n action: (data) => {\n return this._prompt.confirm({\n title: 'Confirm',\n template: 'Are you sure you would like to kill the cron?',\n })\n .pipe(\n switchMap(() => {\n return this.kill(data);\n }),\n tap(() => {\n this._message.success('Killed cron');\n this.list.reload();\n }),\n takeUntil(this._destroy$),\n );\n },\n label: 'Kill',\n show: (cron) => {\n return cron.state === CronState.Running;\n },\n },\n {\n action: (data) => {\n return this._prompt.confirm({\n title: 'Confirm',\n template: 'Are you sure you would like to reset the cron?',\n })\n .pipe(\n switchMap(() => {\n return this.enable(data);\n }),\n tap(() => {\n this._message.success('Reset cron');\n this.list.reload();\n }),\n takeUntil(this._destroy$),\n );\n },\n label: 'Reset',\n show: (cron) => {\n return cron.state === CronState.Killing || \n cron.state === CronState.Running || \n cron.state === CronState.Failed || \n cron.state === CronState.Queued;\n },\n },\n ];\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n \n public enable(data) {\n return this._cronData.enable(data);\n }\n\n public disable(data) {\n return this._cronData.disable(data);\n }\n\n public kill (data) {\n return this._cronData.kill(data);\n }\n\n public queue(data) {\n return this._cronData.queue(data);\n }\n\n public run(cron): Observable<any> {\n return new Observable((observer) => { \n const process = this._process\n .run(`Run ${cron.name}`, this._api\n .stream(\n RequestMethod.Post, `system/crons/${cron.id}/run`)\n .pipe(\n filter((event) => event instanceof StreamEventData),\n map((event) => {\n return event?.data;\n }), \n filter((data) => !!data),\n ),\n );\n \n timer(1000, 5000)\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n observer.next(null);\n });\n\n process.failed$\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n observer.next(null);\n observer.complete();\n });\n\n process.completed$ \n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n observer.next(null);\n observer.complete();\n });\n\n process.cancelled$\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n observer.next(null);\n observer.complete();\n });\n });\n }\n\n public loadCrons = (query) => {\n query.timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n\n return this._cronData.gets(query, { key: 'crons' });\n };\n\n public bulk = (action, crons) => {\n const processes = crons\n .map((cron) => {\n return cron.process;\n });\n\n return this._cronData.bulk(action, processes);\n };\n\n private _configList(): void {\n this.config = {\n paging: false,\n filters: [\n {\n type: ItemType.Keyword,\n name: 'keyword',\n label: 'Search',\n },\n ],\n rowActions: this.getCronActions()\n .map((rowAction) => {\n return {\n ...rowAction,\n click: (cron) => {\n rowAction\n .action(cron)\n .pipe(\n take(1),\n )\n .subscribe(() => {\n this.list.reload();\n });\n },\n };\n }),\n fetch: (query) => {\n query = { \n ...query,\n timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n };\n\n return this.loadCrons(query)\n .pipe(\n map((crons) => ({\n data: crons\n .map((cron) => {\n return {\n ...cron,\n runningDuration: differenceInSeconds(parse(cron.createDate), new Date()),\n };\n }),\n })),\n );\n },\n };\n\n if(this.bulk) {\n this.config.selection = {\n selectAll: false,\n actions: [\n {\n type: SelectionActionType.Action,\n name: 'disable',\n label: 'Disable',\n },\n {\n type: SelectionActionType.Action,\n name: 'enable',\n label: 'Enable',\n },\n ],\n actionSelected: (action: FsListActionSelected) => {\n return this.bulk(action.action.name, action.selected)\n .pipe(\n tap(() => {\n this.list.reload();\n this._message.success('Applied Changes');\n }),\n );\n },\n };\n }\n }\n\n}\n","<fs-list [config]=\"config\">\n <fs-list-column>\n <ng-template fs-list-header>\n Name\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <a (click)=\"open(row)\">\n {{ row.name }}\n </a>\n <small>\n {{ row.cronSetting?.description }}\n </small>\n </ng-template>\n </fs-list-column>\n <fs-list-column align=\"center\">\n <ng-template fs-list-header>\n Status\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n @if (row.host || row.processId) {\n <fs-popover\n [maxWidth]=\"null\"\n [template]=\"statusPopover\"\n [indication]=\"true\"\n size=\"small\">\n <ng-container *ngTemplateOutlet=\"status\"></ng-container>\n </fs-popover>\n <ng-template #statusPopover>\n @if (row.host) {\n <div>\n Host: {{ row.host }}\n </div>\n }\n @if (row.processId) {\n <div>\n Process ID: {{ row.processId }}\n </div>\n }\n @if (row.processState) {\n <div>\n Process State: {{ CronProcessStates[row.processState] }}\n </div>\n }\n </ng-template>\n } @else {\n {{ CronStates[row.state] }}\n }\n <ng-template #status>\n {{ CronStates[row.state] }}\n </ng-template>\n @if (row.state === CronState.Running) {\n <div class=\"small\">\n Duration: {{ row.runningDuration | fsDateDuration: { hours: true, minutes: true, seconds: true } }}\n </div>\n }\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>\n Frequency\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.cronSetting?.summary }}\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>\n Last Ran\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n @if (row.duration===null) {\n Never\n } @else {\n <fs-date-ago [date]=\"row.createDate\"></fs-date-ago>\n @if (row.duration) {\n <div\n class=\"small\"\n >\n Duration: {{ row.duration | fsDateDuration: { hours: true, minutes: true, seconds: true } }}\n </div>\n }\n }\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>\n Next Run\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n @if (row.state !== CronState.Disabled) {\n <app-next-run [cron]=\"row\"></app-next-run>\n }\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>\n Timeout\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.cronSetting.timeout }}h\n </ng-template>\n </fs-list-column>\n</fs-list>","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit, inject } from '@angular/core';\n\nimport { BuildData, FsBuildService } from '@firestitch/build';\nimport { FsMessage } from '@firestitch/message';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { differenceInMinutes } from 'date-fns';\n\nimport { DashboardAction } from './../../interfaces/dashboard-action';\nimport { FsSkeletonModule } from '@firestitch/skeleton';\nimport { FsLabelModule } from '@firestitch/label';\nimport { NgClass } from '@angular/common';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { MatButton } from '@angular/material/button';\nimport { FsMenuModule } from '@firestitch/menu';\nimport { FsDateModule } from '@firestitch/date';\n\n\n@Component({\n selector: 'fs-system-dashboard',\n templateUrl: './dashboard.component.html',\n styleUrls: ['./dashboard.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n FsSkeletonModule,\n FsLabelModule,\n NgClass,\n MatIcon,\n MatTooltip,\n MatButton,\n FsMenuModule,\n FsDateModule,\n ],\n})\nexport class DashboardComponent implements OnInit, OnDestroy {\n private _message = inject(FsMessage);\n private _cdRef = inject(ChangeDetectorRef);\n private _buildService = inject(FsBuildService);\n\n\n @Input() public init: () => any;\n @Input() public upgrade: () => any;\n @Input() public load: () => any;\n\n @Input() public actions: DashboardAction[] = [];\n\n public dashboard;\n public buttonActions: DashboardAction[] = [];\n public build: BuildData;\n public menuActions: DashboardAction[] = [];\n\n private _destroy$ = new Subject();\n\n public ngOnInit() {\n this._load();\n this.buttonActions = this.actions.filter((item) => {\n return !item.menu; \n });\n this.menuActions = this.actions.filter((item) => {\n return item.menu; \n });\n\n this.build = this._buildService.build;\n this._buildService.build$\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe((build: BuildData) => {\n this.build = build;\n this._cdRef.markForCheck();\n });\n }\n\n public ngOnDestroy() {\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n\n public actionClick(action) {\n action.click();\n }\n\n public initClick() {\n this.init()\n .subscribe(() => {\n this._message.success('Successfully initialized the system');\n });\n }\n\n public upgradeClick() {\n this.upgrade()\n .subscribe(() => {\n this._load();\n this._message.success('Successfully upgraded the system');\n });\n }\n\n private _load() {\n this.load()\n .subscribe((dashboard) => {\n this.dashboard = dashboard;\n this.dashboard.cronRanAttention = !dashboard.cronRan ||\n differenceInMinutes(new Date(), new Date(dashboard.cronRan)) > 15;\n this._cdRef.markForCheck();\n });\n }\n}\n","<div *fsSkeleton=\"dashboard\">\n <div class=\"fs-row.gap-lg.wrap.align-start\">\n <div>\n <h2>\n Server\n </h2>\n <fs-label-field>\n <fs-label>\n Date/Time\n </fs-label>\n {{ dashboard.serverTime | fsDateFormat: 'date-time' }}\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Timezone\n </fs-label>\n {{ dashboard.serverTimezone }}\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Hostname\n </fs-label>\n {{ dashboard.serverHostname }}\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Directory\n </fs-label>\n {{ dashboard.appDirectory }}\n </fs-label-field>\n </div>\n <div>\n <h2>\n System\n </h2>\n <fs-label-field>\n <fs-label>\n Mode\n </fs-label>\n {{ dashboard.appMode }}\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Notification Recipients\n </fs-label>\n {{ dashboard.notifyRecipients.join(', ') }}\n </fs-label-field>\n </div>\n <div>\n <h2>\n Database\n </h2>\n <fs-label-field>\n <fs-label>\n Name\n </fs-label>\n {{ dashboard.databaseName }}\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Date/Time\n </fs-label>\n {{ dashboard.databaseTime | fsDateFormat: 'date-time' }}\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Timezone\n </fs-label>\n {{ dashboard.databaseTimezone }}\n </fs-label-field>\n </div>\n @if (build || dashboard.upgrades.length) {\n <div>\n @if (build) {\n <h2>\n Build\n </h2>\n <fs-label-field>\n <fs-label>\n Version\n </fs-label>\n {{ build.version || 'Unknown' }}\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Date\n </fs-label>\n {{ (build.date | fsDateFormat: 'date-time') || 'Unknown' }}\n </fs-label-field>\n }\n @if (dashboard.upgrades.length) {\n <fs-label-field>\n <fs-label>\n Pending Upgrades\n </fs-label>\n <span\n class=\"attention\"\n [ngClass]=\"{ 'needs-attention': !!dashboard.upgrades.length }\">\n {{ dashboard.upgrades.length }}\n <mat-icon\n [matTooltip]=\"dashboard.upgrades.join('\\n')\"\n matTooltipClass=\"tooltip-pending-upgrades\">\n warning\n </mat-icon>\n </span>\n </fs-label-field>\n }\n </div>\n }\n <div>\n <h2>\n Cron\n </h2>\n <fs-label-field>\n <fs-label>\n Last Ran\n </fs-label>\n <span\n class=\"attention\"\n [ngClass]=\"{ 'needs-attention': dashboard.cronRanAttention }\">\n @if (!dashboard.cronRan) {\n <span>\n Never\n </span>\n }\n @if (dashboard.cronRan) {\n <span>\n {{ dashboard.cronRan | fsDateFormat: 'date-time' }}\n </span>\n }\n <mat-icon>\n warning\n </mat-icon>\n </span>\n </fs-label-field>\n </div>\n </div>\n <div>\n <div class=\"actions\">\n <button\n mat-stroked-button\n (click)=\"upgradeClick()\">\n Run Upgrades\n </button>\n <button\n mat-stroked-button\n (click)=\"initClick()\">\n Init System\n </button>\n @for (action of buttonActions; track action) {\n <button\n mat-stroked-button\n (click)=\"actionClick(action)\">\n {{ action.label }}\n </button>\n }\n @if (menuActions.length) {\n <fs-menu buttonClass=\"mat-stroked-button menu-button\">\n @for (action of menuActions; track action) {\n <ng-template\n fs-menu-item\n (click)=\"actionClick(action)\">\n {{ action.label }}\n </ng-template>\n }\n </fs-menu>\n }\n </div>\n </div>\n</div>","import { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, Input, ViewChild } from '@angular/core';\n\nimport { Observable } from 'rxjs';\n\n\n@Component({\n selector: 'fs-system-info',\n templateUrl: './info.component.html',\n styleUrls: ['./info.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n})\nexport class InfoComponent implements AfterViewInit {\n\n @ViewChild('iframe') \n public iframe: ElementRef;\n\n @Input() public load: () => Observable<any>;\n\n public ngAfterViewInit() {\n this._load();\n }\n\n private _load() {\n this.load()\n .subscribe((info) => {\n\n info += '<style>body { background: transparent; }</style>';\n\n const doc = this.iframe.nativeElement.contentDocument || this.iframe.nativeElement.contentWindow;\n doc.open();\n doc.write(info);\n doc.close();\n const scrollHeight = (this.iframe.nativeElement.contentWindow.document.documentElement.scrollHeight + 100);\n this.iframe.nativeElement.style.height = `${scrollHeight}px`;\n });\n }\n}\n","<iframe #iframe></iframe>\n","import { Injectable, inject } from '@angular/core';\n\nimport { FsApi, RequestConfig } from '@firestitch/api';\n\nimport { Observable } from 'rxjs';\n\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ProcessData {\n private _api = inject(FsApi);\n\n\n public gets(data: any = {}, config: RequestConfig = {}): Observable<any> {\n return this._api.get('processes', data, { key: 'processes', ...config });\n }\n\n public post(data: any = {}, config: RequestConfig = {}): Observable<any> {\n return this._api.post('processes', data, { key: 'process', ...config });\n }\n\n public run(data: any = {}, config: RequestConfig = {}): Observable<any> {\n return this._api.post(`processes/${data.id}/run`, data, { key: 'process', ...config });\n }\n\n public get(id: number, config: RequestConfig = {}): Observable<any> {\n return this._api.get(`processes/${id}`, {}, { key: 'process', ...config });\n }\n\n public kill(data: any = {}, config: RequestConfig = {}): Observable<any> {\n return this._api.post(`processes/${data.id}/kill`, data, { key: 'process', ...config });\n }\n\n public delete(data: any = {}, config: RequestConfig = {}): Observable<any> {\n return this._api.delete(`processes/${data.id}`, data, { key: 'process', ...config });\n }\n\n public queue(data: any = {}, config: RequestConfig = {}): Observable<any> {\n return this._api.post(`processes/${data.id}/queue`, data, { key: 'process', ...config });\n }\n\n public download(data: any = {}): void {\n this._api\n .createApiFile(`processes/${data.id}/download`)\n .download();\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n inject,\n OnDestroy,\n OnInit,\n} from \"@angular/core\";\n\nimport {\n MAT_DIALOG_DATA,\n MatDialogActions,\n MatDialogClose,\n MatDialogContent,\n MatDialogTitle,\n} from \"@angular/material/dialog\";\n\nimport {\n FsApi,\n RequestMethod,\n StreamEventData,\n StreamEventType,\n} from \"@firestitch/api\";\nimport { FsMessage } from \"@firestitch/message\";\nimport { FsProcess } from \"@firestitch/process\";\nimport { FsPrompt } from \"@firestitch/prompt\";\n\nimport { Observable, Subject, timer } from \"rxjs\";\nimport { filter, map, switchMap, takeUntil, tap } from \"rxjs/operators\";\n\nimport { ProcessProcessStates } from \"../../consts\";\nimport { ProcessData } from \"../../data/process.data\";\nimport { indexNameValue } from \"../../helpers/index-name-value\";\nimport { Process } from \"../../interfaces\";\n\nimport { CdkScrollable } from \"@angular/cdk/scrolling\";\nimport { NgClass } from \"@angular/common\";\nimport { MatButton } from \"@angular/material/button\";\nimport { MatProgressSpinner } from \"@angular/material/progress-spinner\";\nimport { FsDateModule } from \"@firestitch/date\";\nimport { FsDialogModule } from \"@firestitch/dialog\";\nimport { FsLabelModule } from \"@firestitch/label\";\nimport { FsSkeletonModule } from \"@firestitch/skeleton\";\nimport { ProcessStates } from \"./../../consts/process-states.const\";\nimport { ProcessState } from \"./../../enums/process-state.enum\";\n\n@Component({\n templateUrl: \"./process.component.html\",\n styleUrls: [\"./process.component.scss\"],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n FsSkeletonModule,\n FsDialogModule,\n MatDialogTitle,\n CdkScrollable,\n MatDialogContent,\n FsLabelModule,\n NgClass,\n MatProgressSpinner,\n MatDialogActions,\n MatButton,\n MatDialogClose,\n FsDateModule,\n ],\n})\nexport class ProcessComponent implements OnInit, OnDestroy {\n data = inject(MAT_DIALOG_DATA);\n private _message = inject(FsMessage);\n private _cdRef = inject(ChangeDetectorRef);\n private _prompt = inject(FsPrompt);\n private _process = inject(FsProcess);\n private _api = inject(FsApi);\n\n public process: Process;\n public ProcessStates = indexNameValue(ProcessStates);\n public ProcessProcessStates = indexNameValue(ProcessProcessStates);\n public ProcessState = ProcessState;\n\n private _destroy$ = new Subject();\n private _processData = inject(ProcessData);\n\n public ngOnInit() {\n this.load$().subscribe(() => {\n this.runningRefresh();\n });\n }\n\n public load$(): Observable<any> {\n return this._processData.get(this.data.process.id).pipe(\n tap((process) => {\n this.process = process;\n this._cdRef.markForCheck();\n }),\n );\n }\n\n public runningRefresh() {\n timer(0, 2000)\n .pipe(\n filter(() => this.process.state === String(ProcessState.Running)),\n switchMap(() => this.load$()),\n takeUntil(this._destroy$),\n )\n .subscribe();\n }\n\n public kill() {\n this._prompt\n .confirm({\n title: \"Kill process\",\n template: \"Are you sure you would like to kill the process?\",\n })\n .pipe(\n switchMap(() => this._processData.kill(this.data.process)),\n switchMap(() => this.load$()),\n )\n .subscribe(() => {\n this._message.success(\"Killed process\");\n });\n }\n\n public run() {\n this._process.run(\n `Run ${this.process.name}`,\n this._api\n .stream(RequestMethod.Post, `processes/${this.process.id}/run`)\n .pipe(\n tap((event) => {\n if (\n event instanceof StreamEventData &&\n event.type === StreamEventType.Sent\n ) {\n this.process.state = ProcessState.Running;\n this._cdRef.markForCheck();\n }\n }),\n filter((event) => event instanceof StreamEventData),\n map((event) => {\n return event?.data;\n }),\n filter((data) => !!data),\n ),\n );\n }\n\n public queue() {\n this._message.success(\"Running process\");\n this._processData\n .queue(this.data.process)\n .pipe(switchMap(() => this.load$()))\n .subscribe();\n }\n\n public download() {\n this._processData.download(this.data.process);\n }\n\n public get formattedProcessData(): string | null {\n const d = this.process?.data;\n if (d === null || d === undefined) {\n return null;\n }\n let value: unknown = d;\n if (typeof d === \"string\") {\n try {\n value = JSON.parse(d);\n } catch {\n return d;\n }\n }\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n}\n","<fs-dialog *fsSkeleton=\"process\">\n <div mat-dialog-title>\n Process\n </div>\n <mat-dialog-content>\n <div class=\"column\">\n <div class=\"fs-row.gap-lg.wrap.align-start\">\n <fs-label-field>\n <fs-label>\n Name\n </fs-label>\n {{ process.prettyName }}\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Class\n </fs-label>\n {{ process.class || 'None' }}\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Function\n </fs-label>\n {{ process['function'] || 'None' }}\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Status\n </fs-label>\n <div\n class=\"status\"\n [ngClass]=\"{ 'running': process.state === ProcessState.Running }\">\n {{ ProcessStates[process.state] }}\n @if (process.state === ProcessState.Running) {\n <mat-progress-spinner\n [diameter]=\"20\"\n [mode]=\"'indeterminate'\">\n </mat-progress-spinner>\n }\n </div>\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Notification Email\n </fs-label>\n @if (process.notify) {\n <a [href]=\"'mailto:' + process.notify\">\n {{ process.notify }}\n </a>\n } @else {\n None\n }\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Process ID\n </fs-label>\n {{ process.pid || 'None' }}\n @if (process.pid) {\n <div class=\"small\">\n {{ ProcessProcessStates[process.processState] || 'Unknown' }}\n </div>\n }\n </fs-label-field>\n @if (process.createDate) {\n <fs-label-field>\n <fs-label>\n Create Date\n </fs-label>\n {{ process.createDate | fsDateFormat: 'date-time' }}\n </fs-label-field>\n }\n @if (process.startDate) {\n <fs-label-field>\n <fs-label>\n Start Date\n </fs-label>\n {{ process.startDate | fsDateFormat: 'date-time' }}\n </fs-label-field>\n }\n @if (process.endDate) {\n <fs-label-field>\n <fs-label>\n Complete Date\n </fs-label>\n {{ process.endDate | fsDateFormat: 'date-time' }}\n </fs-label-field>\n }\n @if (process.duration) {\n <fs-label-field>\n <fs-label>\n Duration\n </fs-label>\n {{ process.duration | fsDateDuration: {hours: true, minutes: true, seconds: true} }}\n </fs-label-field>\n }\n </div>\n <fs-label-field>\n <fs-label>\n Data\n </fs-label>\n @if (formattedProcessData === null) {\n None\n } @else {\n <pre class=\"log json-block\">\n {{ formattedProcessData }}\n </pre>\n }\n </fs-label-field>\n @if (process.message) {\n <fs-label-field>\n <fs-label>\n Message\n </fs-label>\n {{ process.message }}\n </fs-label-field>\n }\n @if (process.log) {\n <fs-label-field>\n <fs-label>\n Log\n </fs-label>\n <div class=\"log\">\n {{ process.log }}\n </div>\n </fs-label-field>\n }\n </div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n [mat-dialog-close]=\"true\"\n color=\"primary\">\n Close\n </button>\n @if (process.state === ProcessState.Running) {\n <button\n mat-button\n (click)=\"kill()\">\n Kill\n </button>\n }\n @if (process.state !== ProcessState.Running) {\n <button\n mat-button\n (click)=\"run()\">\n Run\n </button>\n }\n @if (( process.state !== ProcessState.Running && process.state !== ProcessState.Queued )) {\n <button\n mat-button\n (click)=\"queue()\">\n Queue\n </button>\n }\n @if (process.filename) {\n <button\n mat-button\n (click)=\"download()\">\n Download\n </button>\n }\n </mat-dialog-actions>\n</fs-dialog>","import {\n ChangeDetectionStrategy,\n Component,\n inject,\n Input,\n OnDestroy,\n OnInit,\n ViewChild,\n} from \"@angular/core\";\n\nimport { MatDialog } from \"@angular/material/dialog\";\n\nimport {\n FsApi,\n RequestMethod,\n StreamEventData,\n StreamEventType,\n} from \"@firestitch/api\";\nimport { ItemType } from \"@firestitch/filter\";\nimport { FsListComponent, FsListConfig, FsListModule } from \"@firestitch/list\";\nimport { FsMessage } from \"@firestitch/message\";\nimport { FsProcess } from \"@firestitch/process\";\n\nimport { Subject } from \"rxjs\";\nimport { filter, finalize, map, takeUntil, tap } from \"rxjs/operators\";\n\nimport { ProcessStates } from \"../../consts\";\nimport { ProcessData } from \"../../data/process.data\";\nimport { ProcessState } from \"../../enums\";\nimport { indexNameValue } from \"../../helpers/index-name-value\";\n\nimport { FsDateModule } from \"@firestitch/date\";\nimport { ProcessAction } from \"./../../interfaces/process-action\";\nimport { ProcessComponent } from \"./../process/process.component\";\n\n@Component({\n selector: \"fs-system-processes\",\n templateUrl: \"./processes.component.html\",\n styleUrls: [\"./processes.component.scss\"],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [FsListModule, FsDateModule],\n})\nexport class ProcessesComponent implements OnInit, OnDestroy {\n private _dialog = inject(MatDialog);\n private _message = inject(FsMessage);\n private _process = inject(FsProcess);\n private _api = inject(FsApi);\n\n @ViewChild(FsListComponent)\n public list: FsListComponent;\n\n @Input() public actions: ProcessAction[] = [];\n\n public config: FsListConfig = null;\n public ProcessStates = indexNameValue(ProcessStates);\n public ProcessState = ProcessState;\n\n private _destroy$ = new Subject();\n private _processData = inject(ProcessData);\n\n public ngOnInit() {\n this._configList();\n }\n\n public reload() {\n this.list.reload();\n }\n\n public open(process) {\n this._dialog\n .open(ProcessComponent, {\n data: {\n process,\n },\n width: \"85%\",\n })\n .afterClosed()\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => {\n this.reload();\n });\n }\n\n public ngOnDestroy() {\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n\n public download(process) {\n this._processData.download(process);\n }\n\n private _configList() {\n this.config = {\n actions: [],\n rowActions: [\n {\n label: \"Queue\",\n show: (process) => {\n return (\n process.state !== ProcessState.Running &&\n process.state !== ProcessState.Queued\n );\n },\n click: (data) => {\n this._processData.queue(data).subscribe(() => {\n this.reload();\n this._message.success(\"Queued process\");\n });\n },\n },\n {\n label: \"Run\",\n show: (data) => {\n return data.state !== ProcessState.Running;\n },\n click: (process) => {\n this._process.run(\n `Run ${process.name}`,\n this._api\n .stream(RequestMethod.Post, `processes/${process.id}/run`)\n .pipe(\n tap((event) => {\n if (\n event instanceof StreamEventData &&\n event.type === StreamEventType.Sent\n ) {\n process = {\n ...process,\n state: ProcessState.Running,\n };\n\n this.list.updateData(process, (row) => {\n return process.id === row.id;\n });\n }\n }),\n filter((event) => event instanceof StreamEventData),\n map((event) => {\n return event?.data;\n }),\n filter((data) => !!data),\n finalize(() => {\n this.list.reload();\n }),\n ),\n );\n },\n },\n {\n label: \"Kill\",\n show: (data) => {\n return !!data.pid;\n },\n click: (data) => {\n this._message.info(\"Killing process...\");\n this._processData.kill(data).subscribe(() => {\n this.reload();\n this._message.success(\"Killed process\");\n });\n },\n },\n {\n label: \"Delete\",\n click: (data) => {\n this._processData.delete(data).subscribe(() => {\n this.reload();\n this._message.success(\"Deleted process\");\n });\n },\n },\n ],\n filters: [\n {\n type: ItemType.Keyword,\n name: \"keyword\",\n label: \"Search\",\n },\n {\n type: ItemType.Select,\n name: \"state\",\n label: \"Status\",\n values: ProcessStates,\n },\n {\n name: \"createDate\",\n type: ItemType.DateRange,\n label: [\"From Date\", \"To Date\"],\n },\n ],\n fetch: (query) => {\n return this._processData\n .gets(query, { key: null })\n .pipe(\n map((response: any) => ({\n data: response.processes,\n paging: response.paging,\n })),\n );\n },\n };\n\n this.actions.forEach((action) => {\n this.config.actions.push({\n primary: false,\n label: action.label,\n menu: action.menu,\n click: (data) => {\n if (action.click) {\n action.click(data);\n }\n\n if (action.component) {\n this._dialog\n .open(action.component, {\n width: \"800px\",\n })\n .afterClosed()\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => {\n this.reload();\n });\n }\n },\n });\n });\n }\n}\n","<fs-list [config]=\"config\">\n <fs-list-column>\n <ng-template fs-list-header>\n Name\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <a (click)=\"open(row)\">\n {{ row.name }}\n </a>\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>\n Status\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ ProcessStates[row.state] }}\n <small>\n @if (row.state===ProcessState.Running && row.percent) {\n <div>\n Complete: {{ row.percent }}%\n </div>\n }\n @if (row.state===ProcessState.Completed && row.filename) {\n <div>\n <a\n href=\"javascript:;\"\n (click)=\"download(row)\">\n {{ row.filename }}\n </a>\n </div>\n }\n @if (row.pid) {\n <div>\n PID: {{ row.pid }}\n </div>\n }\n @if (row.state===ProcessState.Running && row.notify) {\n <div>\n Notify: {{ row.notify }}\n </div>\n }\n </small>\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>\n Duration\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.duration | fsDateDuration: {hours: true, minutes: true, seconds: true} }}\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>\n Message\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.message }}\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>\n Completed\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <fs-date-ago [date]=\"row.endDate\"></fs-date-ago>\n </ng-template>\n </fs-list-column>\n</fs-list>","export const LogTypes = [\n { value: '1', name: 'Fatal Error' }, // E_ERROR\n { value: '2', name: 'Warning' }, // E_WARNING\n { value: '4', name: 'Parse Error' }, // E_PARSE\n { value: '8', name: 'Notice' }, // E_NOTICE\n { value: '16', name: 'Core Error' }, // E_CORE_ERROR\n { value: '32', name: 'Core Warning' }, // E_CORE_WARNING\n { value: '64', name: 'Compile Error' }, // E_COMPILE_ERROR\n { value: '128', name: 'Compile Warning' }, // E_COMPILE_WARNING\n { value: '256', name: 'User Error' }, // E_USER_ERROR\n { value: '512', name: 'User Warning' }, // E_USER_WARNING\n { value: '1024', name: 'User Notice' }, // E_USER_NOTICE\n { value: '2048', name: 'Strict Notice' }, // E_STRICT\n { value: '4096', name: 'Recoverable Error' }, // E_RECOVERABLE_ERROR\n { value: '8192', name: 'Deprecated' }, // E_DEPRECATED\n { value: '16384', name: 'User Deprecated' }, // E_USER_DEPRECATED\n { value: 'exception', name: 'Exception' },\n];\n\n","import { CommonModule, JsonPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, OnInit, inject } from '@angular/core';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { FsBadgeModule } from '@firestitch/badge';\nimport { FsDateModule } from '@firestitch/date';\nimport { FsDialogModule } from '@firestitch/dialog';\nimport { FsLabelModule } from '@firestitch/label';\nimport { FsSkeletonModule } from '@firestitch/skeleton';\n\n\n@Component({\n templateUrl: './server-log.component.html',\n styleUrls: ['./server-log.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n CommonModule,\n MatDialogModule,\n MatButtonModule,\n MatIconModule,\n MatTooltipModule,\n FsLabelModule,\n FsLabelModule,\n FsBadgeModule,\n JsonPipe,\n FsDateModule,\n FsSkeletonModule,\n FsDialogModule,\n ],\n})\nexport class ServerLogComponent implements OnInit {\n data = inject(MAT_DIALOG_DATA);\n\n\n public log;\n\n public ngOnInit() {\n\n if (this.data.log) {\n this.log = this.data.log;\n\n try {\n this.log.backtrace = JSON.parse(this.log.backtrace);\n } catch (e) {\n //\n }\n\n try {\n this.log.server = JSON.parse(this.log.server);\n } catch (e) {\n // \n }\n }\n }\n}\n","<fs-dialog *fsSkeleton=\"log\">\n <div mat-dialog-title>\n Log\n </div>\n <mat-dialog-content>\n <div class=\"fs-row.gap-lg.wrap.align-start\">\n <fs-label-field>\n <fs-label>\n Error Type\n </fs-label>\n {{ log.type }}\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Message\n </fs-label>\n {{ log.message }}\n </fs-label-field>\n @if (log.url) {\n <fs-label-field>\n <fs-label>\n URL\n </fs-label>\n {{ log.url }}\n </fs-label-field>\n }\n <fs-label-field>\n <fs-label>\n Date\n </fs-label>\n {{ log.createDate|fsDateFormat: 'full-date-time' }}\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n File\n </fs-label>\n {{ log.file }} &#64; {{ log.line }}\n </fs-label-field>\n </div>\n <fs-label-field>\n <fs-label>\n $_SERVER\n </fs-label>\n <pre>\n {{ log.server|json }}\n </pre>\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Backtrace\n </fs-label>\n <pre>\n {{ log.backtrace|json }}\n </pre>\n </fs-label-field>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n [mat-dialog-close]=\"true\"\n color=\"primary\">\n Done\n </button>\n </mat-dialog-actions>\n</fs-dialog>","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output, ViewChild, inject } from '@angular/core';\n\nimport { MatDialog } from '@angular/material/dialog';\n\nimport { FsApi } from '@firestitch/api';\nimport { index } from '@firestitch/common';\nimport { ItemType } from '@firestitch/filter';\nimport { FsListAction, FsListComponent, FsListConfig, PaginationStrategy, FsListModule } from '@firestitch/list';\n\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { LogTypes } from '../../../../consts';\n\nimport { ServerLogComponent } from './components';\nimport { FsBadgeModule } from '@firestitch/badge';\nimport { FsDateModule } from '@firestitch/date';\n\n\n@Component({\n selector: 'fs-system-server-logs',\n templateUrl: './server-logs.component.html',\n styleUrls: ['./server-logs.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n FsListModule,\n FsBadgeModule,\n FsDateModule,\n ],\n})\nexport class ServerLogsComponent implements OnInit {\n private _dialog = inject(MatDialog);\n private _api = inject(FsApi);\n\n\n @ViewChild(FsListComponent) \n public list: FsListComponent;\n\n @Input() public loadLogs: (data: any) => Observable<{ data: any[], paging: any }>;\n\n @Output() public acknowledgedAll: EventEmitter<void> = new EventEmitter();\n\n public config: FsListConfig = null;\n public actions: FsListAction[] = [];\n public LogTypes = index(LogTypes, 'value', 'name');\n\n public ngOnInit() {\n this._configList();\n }\n\n public toggleAcknowledged(log) {\n const acknowledge = log.acknowledged ? 'unacknowledge' : 'acknowledge';\n this._api\n .put(`system/logs/server/${log.id}/${acknowledge}`)\n .subscribe((response) => {\n this.list\n .updateData(response.log,\n (item: any) => {\n return item.id === log.id;\n });\n });\n }\n\n public open(log) {\n this._dialog\n .open(ServerLogComponent, {\n data: { log: log },\n width: '85%',\n });\n }\n\n private _configList() {\n this.config = {\n actions: [\n ...this.actions,\n {\n primary: false,\n label: 'Acknowledge all',\n click: () => {\n this._api\n .put('system/logs/server/acknowledge')\n .subscribe(() => {\n this.list.reload();\n this.acknowledgedAll.emit();\n });\n },\n },\n ],\n paging: {\n strategy: PaginationStrategy.Many,\n },\n filters: [\n {\n type: ItemType.Keyword,\n name: 'keyword',\n label: 'Search',\n },\n ],\n fetch: (query) => {\n return this._api\n .get('system/logs/server', query, { key: null })\n .pipe(\n map((response: any) => ({ data: response.logs, paging: response.paging })),\n );\n },\n };\n }\n}\n","<fs-list [config]=\"config\">\n <fs-list-column width=\"1%\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <a (click)=\"toggleAcknowledged(row)\">\n <fs-badge\n [size]=\"10\"\n [tooltip]=\"row.acknowledged ? 'Acknowledged' : 'Unacknowledged'\"\n [color]=\"row.acknowledged ? '#E3E3E3' : '#F30000'\">\n </fs-badge>\n </a>\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>\n Message\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <a\n href=\"javascript:;\"\n (click)=\"open(row)\">\n {{ row.message }}\n </a>\n </ng-template>\n </fs-list-column>\n <fs-list-column class=\"col-date\">\n <ng-template fs-list-header>\n Type\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ LogTypes[row.type] }}\n </ng-template>\n </fs-list-column>\n <fs-list-column class=\"col-date\">\n <ng-template fs-list-header>\n Date\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <fs-date-ago [date]=\"row.createDate\"></fs-date-ago>\n </ng-template>\n </fs-list-column>\n</fs-list>","import { Injectable, Pipe, PipeTransform } from '@angular/core';\n\n\n@Pipe({\n name: 'keyNameValue',\n standalone: true,\n})\n@Injectable()\nexport class KeyNameValuePipe implements PipeTransform {\n\n public transform(values): any {\n return Object.keys(values).map((key) => {\n return { value: key, name: values[key] };\n });\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output, inject } from '@angular/core';\n\nimport { FsClipboard } from '@firestitch/clipboard';\nimport { parse } from '@firestitch/date';\nimport { FsMessage } from '@firestitch/message';\nimport { FsPrompt } from '@firestitch/prompt';\n\nimport { Observable } from 'rxjs';\n\nimport { SettingInterfaceType } from '../../enums';\nimport { MatAccordion, MatExpansionPanel, MatExpansionPanelHeader, MatExpansionPanelTitle } from '@angular/material/expansion';\nimport { MatIconButton, MatButton } from '@angular/material/button';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { MatIcon } from '@angular/material/icon';\nimport { NgClass } from '@angular/common';\nimport { MatFormField, MatLabel, MatHint } from '@angular/material/form-field';\nimport { MatInput } from '@angular/material/input';\nimport { FormsModule } from '@angular/forms';\nimport { MatSelect } from '@angular/material/select';\nimport { MatOption } from '@angular/material/core';\nimport { FsDatePickerModule } from '@firestitch/datepicker';\nimport { FsColorPickerModule } from '@firestitch/colorpicker';\nimport { FsFileModule } from '@firestitch/file';\nimport { KeyNameValuePipe } from '../../pipes/key-name-value.pipe';\n\n\n@Component({\n selector: 'fs-system-settings',\n templateUrl: './settings.component.html',\n styleUrls: ['./settings.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n MatAccordion,\n MatExpansionPanel,\n MatExpansionPanelHeader,\n MatExpansionPanelTitle,\n MatIconButton,\n MatTooltip,\n MatIcon,\n NgClass,\n MatFormField,\n MatLabel,\n MatInput,\n FormsModule,\n MatHint,\n MatSelect,\n MatOption,\n FsDatePickerModule,\n FsColorPickerModule,\n FsFileModule,\n MatButton,\n KeyNameValuePipe,\n ],\n})\nexport class SettingsComponent implements OnInit {\n private _message = inject(FsMessage);\n private _clipboard = inject(FsClipboard);\n private _prompt = inject(FsPrompt);\n private _cdRef = inject(ChangeDetectorRef);\n\n\n @Input() public loadSettings: (query) => Observable<any[]>;\n @Input() public save: (data: any, group: string) => Observable<any>;\n\n @Output() public fileRemove = new EventEmitter();\n @Output() public fileSelect = new EventEmitter<{ setting: any, file: Blob }>();\n\n public groupedSettings = [];\n public groups = [];\n public SettingInterfaceType = SettingInterfaceType;\n\n public ngOnInit(): void {\n this.loadSettings({\n visible: true,\n })\n .subscribe((settings) => {\n settings = settings\n .filter((setting) => {\n return setting.interfaceType !== SettingInterfaceType.None;\n })\n .map((setting) => {\n switch (setting.interfaceType) {\n case SettingInterfaceType.Date:\n case SettingInterfaceType.Time:\n return {\n ...setting,\n value: parse(setting.value),\n };\n\n case SettingInterfaceType.SelectMultiple:\n return {\n ...setting,\n value: Array.isArray(setting.value) ? setting.value : [],\n };\n }\n \n return setting;\n });\n\n this.groupedSettings = settings.reduce((accum, item) => {\n if(accum[item.group] === undefined) {\n accum[item.group] = [];\n }\n accum[item.group].push(item);\n\n return accum;\n }, {});\n \n this.groups = Object.keys(this.groupedSettings);\n this._cdRef.markForCheck();\n });\n }\n\n public export(event: UIEvent, settings): void {\n event.stopPropagation();\n const data = settings.map((setting) => {\n return {\n name: setting.name,\n value: setting.value,\n group: setting.group,\n };\n });\n\n this._clipboard.copy(JSON.stringify(data));\n this._message.success('Copied to clipboard');\n }\n\n public import(event: UIEvent, group): void {\n event.stopPropagation();\n this._prompt.input({\n label: 'JSON Import',\n title: 'Import Settings',\n commitLabel: 'Import',\n required: true,\n }).subscribe((value: string) => {\n if (value) {\n try {\n const settings = this.groupedSettings[group];\n const data = JSON.parse(value);\n\n data.forEach((item) => {\n const setting = settings.find((s) => {\n return item.name === s.name;\n });\n\n if (setting) {\n Object.assign(setting, item);\n }\n });\n\n this._cdRef.markForCheck();\n } catch (e) {\n this._message.error(e);\n }\n }\n });\n }\n\n public saveGroup(group): void {\n const settings = this.groupedSettings[group];\n const values = settings.reduce((result, value) => {\n return (result[value.name] = value.value, result);\n }, {});\n\n this.save(group, values)\n .subscribe(() => {\n this._message.success('Changes Saved');\n });\n }\n}\n","<mat-accordion>\n @for (group of groups; track group) {\n <mat-expansion-panel\n hideToggle\n >\n <mat-expansion-panel-header>\n <mat-panel-title>\n <div class=\"title-row\">\n <div class=\"title\">\n {{ group || 'General' }}\n </div>\n <div class=\"actions\">\n <button\n type=\"button\"\n [matTooltip]=\"'Export ' + (group || 'General') + ' Settings'\"\n mat-icon-button\n (click)=\"export($event, groupedSettings[group])\">\n <mat-icon>\n cloud_download\n </mat-icon>\n </button>\n <button\n type=\"button\"\n [matTooltip]=\"'Import ' + (group || 'General') + ' Settings'\"\n mat-icon-button\n (click)=\"import($event, group)\">\n <mat-icon>\n cloud_upload\n </mat-icon>\n </button>\n </div>\n </div>\n </mat-panel-title>\n </mat-expansion-panel-header>\n @for (setting of groupedSettings[group]; track setting) {\n <div\n hideToggle\n class=\"setting\"\n [ngClass]=\"{ 'has-instruction': !! setting.instruction }\">\n @if (setting.interfaceType===SettingInterfaceType.InputBox) {\n <mat-form-field\n class=\"full-width form-field-multiline-subscript\"\n >\n <mat-label>\n {{ setting.label }}\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"setting.value\"\n [name]=\"'setting' + setting.id\">\n <mat-hint>\n {{ setting.instruction }}\n </mat-hint>\n </mat-form-field>\n }\n @if (setting.interfaceType===SettingInterfaceType.Textarea) {\n <mat-form-field\n class=\"full-width form-field-multiline-subscript\"\n >\n <mat-label>\n {{ setting.label }}\n </mat-label>\n <textarea\n matInput\n [(ngModel)]=\"setting.value\"\n [name]=\"'setting' + setting.id\">\n </textarea>\n <mat-hint>\n {{ setting.instruction }}\n </mat-hint>\n </mat-form-field>\n }\n @if (setting.interfaceType===SettingInterfaceType.Select || setting.interfaceType===SettingInterfaceType.SelectMultiple) {\n <mat-form-field\n class=\"full-width form-field-multiline-subscript\"\n >\n <mat-label>\n {{ setting.label }}\n </mat-label>\n <mat-select\n [(ngModel)]=\"setting.value\"\n [multiple]=\"setting.interfaceType===SettingInterfaceType.SelectMultiple\"\n [name]=\"'setting' + setting.id\">\n @for (item of setting.values | keyNameValue; track item) {\n <mat-option\n [value]=\"item.value\">\n {{ item.name }}\n </mat-option>\n }\n </mat-select>\n <mat-hint>\n {{ setting.instruction }}\n </mat-hint>\n </mat-form-field>\n }\n @if (setting.interfaceType===SettingInterfaceType.Date) {\n <mat-form-field\n class=\"full-width form-field-multiline-subscript\"\n >\n <mat-label>\n {{ setting.label }}\n </mat-label>\n <input\n matInput\n fsDatePicker\n [(ngModel)]=\"setting.value\"\n [name]=\"'setting' + setting.id\">\n <mat-hint>\n {{ setting.instruction }}\n </mat-hint>\n </mat-form-field>\n }\n @if (setting.interfaceType===SettingInterfaceType.Color) {\n <mat-form-field\n class=\"full-width form-field-multiline-subscript\"\n >\n <mat-label>\n {{ setting.label }}\n </mat-label>\n <input\n matInput\n fsColorPicker\n [(ngModel)]=\"setting.value\"\n [name]=\"'setting' + setting.id\">\n <mat-hint>\n {{ setting.instruction }}\n </mat-hint>\n </mat-form-field>\n }\n @if (setting.interfaceType===SettingInterfaceType.Time) {\n <mat-form-field\n class=\"full-width form-field-multiline-subscript\"\n >\n <mat-label>\n {{ setting.label }}\n </mat-label>\n <input\n matInput\n fsTimePicker\n [(ngModel)]=\"setting.value\"\n [name]=\"'setting' + setting.id\">\n <mat-hint>\n {{ setting.instruction }}\n </mat-hint>\n </mat-form-field>\n }\n @if (setting.interfaceType===SettingInterfaceType.File) {\n <fs-file-picker\n [allowRemove]=\"true\"\n [allowDownload]=\"true\"\n (select)=\"fileSelect.emit({ setting: setting, file: $event.file })\"\n (remove)=\"fileRemove.emit(setting)\"\n [url]=\"setting.value\">\n <div fsFileLabel>\n {{ setting.label }}\n </div>\n <div fsFileHint>\n {{ setting.instruction }}\n </div>\n </fs-file-picker>\n }\n </div>\n }\n <button\n mat-stroked-button\n color=\"primary\"\n type=\"button\"\n (click)=\"saveGroup(group)\">\n Save\n </button>\n </mat-expansion-panel>\n }\n</mat-accordion>","import { ChangeDetectionStrategy, Component, Input, OnInit, ViewChild } from '@angular/core';\n\nimport { ItemType } from '@firestitch/filter';\nimport { FsListComponent, FsListConfig, FsListModule } from '@firestitch/list';\n\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { FsDateModule } from '@firestitch/date';\n\n\n@Component({\n selector: 'fs-system-upgrade-logs',\n templateUrl: './upgrade-logs.component.html',\n styleUrls: ['./upgrade-logs.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [FsListModule, FsDateModule],\n})\nexport class UpgradeLogsComponent implements OnInit {\n\n @ViewChild(FsListComponent, { static: true })\n public list: FsListComponent;\n\n @Input() public loadUpgradeLogs: (data: any) => Observable<{ data: any[], paging: any }>;\n\n public config: FsListConfig = null;\n public logTypes = [];\n\n public ngOnInit() {\n this._configList();\n }\n\n private _configList() {\n\n this.config = {\n paging: false,\n filters: [\n {\n type: ItemType.Keyword,\n name: 'keyword',\n label: 'Search',\n },\n ],\n fetch: (query) => {\n return this.loadUpgradeLogs(query)\n .pipe(\n map((response: any) => ({ data: response.data, paging: response.paging })),\n );\n },\n };\n }\n}\n","<fs-list [config]=\"config\">\n <fs-list-column>\n <ng-template fs-list-header>Name</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n {{row.name}}\n </ng-template>\n </fs-list-column>\n\n <fs-list-column>\n <ng-template fs-list-header>Function</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n {{row.function}}()\n </ng-template>\n </fs-list-column>\n\n <fs-list-column>\n <ng-template fs-list-header>Date</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n <fs-date-ago [date]=\"row.createDate\"></fs-date-ago>\n </ng-template>\n </fs-list-column>\n</fs-list>\n","import { InjectionToken } from '@angular/core';\n\nexport const FS_SYSTEM_CONFIG = new InjectionToken<any[]>('fs-system-config');\n","import { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { FsBadgeModule } from '@firestitch/badge';\nimport { FsColorPickerModule } from '@firestitch/colorpicker';\nimport { FsDateModule } from '@firestitch/date';\nimport { FsDatePickerModule } from '@firestitch/datepicker';\nimport { FsDialogModule } from '@firestitch/dialog';\nimport { FsFileModule } from '@firestitch/file';\nimport { FsFileManagerModule } from '@firestitch/file-manager';\nimport { FsLabelModule } from '@firestitch/label';\nimport { FsListModule } from '@firestitch/list';\nimport { FsMenuModule } from '@firestitch/menu';\nimport { FsPopoverModule } from '@firestitch/popover';\nimport { FsSkeletonModule } from '@firestitch/skeleton';\n\nimport { ApiLogComponent } from './components/api-log/api-log.component';\nimport { ApiLogsComponent } from './components/api-logs/api-logs.component';\nimport { CronComponent } from './components/cron';\nimport { CronLogComponent } from './components/cron-log';\nimport { CronLogsComponent } from './components/cron-logs';\nimport { CronNextRunComponent } from './components/cron-next-run';\nimport { CronsComponent } from './components/crons/crons.component';\nimport { DashboardComponent } from './components/dashboard/dashboard.component';\nimport { InfoComponent } from './components/info/info.component';\nimport { ProcessComponent } from './components/process/process.component';\nimport { ProcessesComponent } from './components/processes/processes.component';\nimport { ServerLogsComponent } from './components/server-logs/server-logs.component';\nimport { SettingsComponent } from './components/settings/settings.component';\nimport { UpgradeLogsComponent } from './components/upgrade-logs/upgrade-logs.component';\nimport { FS_SYSTEM_CONFIG } from './injectors/system-config.injector';\nimport { FsSystemConfig } from './interfaces/system-config';\nimport { KeyNameValuePipe } from './pipes/key-name-value.pipe';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n MatButtonModule,\n MatExpansionModule,\n MatTooltipModule,\n MatIconModule,\n MatFormFieldModule,\n MatInputModule,\n MatSelectModule,\n MatDialogModule,\n MatProgressSpinnerModule,\n MatTabsModule,\n FsDateModule,\n FsSkeletonModule,\n FsListModule,\n FsFileModule,\n FsFileManagerModule,\n FsLabelModule,\n FsDialogModule,\n FsDatePickerModule,\n FsMenuModule,\n FsBadgeModule,\n FsPopoverModule,\n FsColorPickerModule,\n CronLogsComponent,\n DashboardComponent,\n CronNextRunComponent,\n CronsComponent,\n SettingsComponent,\n KeyNameValuePipe,\n ProcessesComponent,\n ServerLogsComponent,\n UpgradeLogsComponent,\n ApiLogsComponent,\n ApiLogComponent,\n InfoComponent,\n ProcessComponent,\n CronComponent,\n CronLogComponent,\n ],\n exports: [\n DashboardComponent,\n CronsComponent,\n SettingsComponent,\n ProcessesComponent,\n ServerLogsComponent,\n UpgradeLogsComponent,\n ApiLogsComponent,\n InfoComponent,\n ],\n})\nexport class FsSystemModule {\n public static forRoot(config: FsSystemConfig): ModuleWithProviders<FsSystemModule> {\n return {\n ngModule: FsSystemModule,\n providers: [\n { provide: FS_SYSTEM_CONFIG, useValue: config || {} },\n ],\n };\n }\n}\n\n\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\n\nimport { MAT_DIALOG_DATA, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\nimport { FsDialogModule } from '@firestitch/dialog';\nimport { CdkScrollable } from '@angular/cdk/scrolling';\nimport { MatButton } from '@angular/material/button';\nimport { FsFormModule } from '@firestitch/form';\nimport { JsonPipe } from '@angular/common';\n\n\n@Component({\n templateUrl: './explain.component.html',\n styleUrls: ['./explain.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n FsDialogModule,\n MatDialogTitle,\n CdkScrollable,\n MatDialogContent,\n MatDialogActions,\n MatButton,\n FsFormModule,\n MatDialogClose,\n JsonPipe,\n ],\n})\nexport class ExplainComponent {\n private _data = inject(MAT_DIALOG_DATA);\n\n\n public explain;\n\n constructor() {\n const _data = this._data;\n\n this.explain = _data.explain;\n }\n}\n","<fs-dialog>\n <h1 mat-dialog-title>Explain</h1>\n <mat-dialog-content>\n <div class=\"explain-popover\">{{explain | json}}</div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n type=\"button\"\n color=\"primary\"\n [mat-dialog-close]=\"undefined\">\n Done\n </button>\n </mat-dialog-actions>\n</fs-dialog>\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\n\nimport { MAT_DIALOG_DATA, MatDialog, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\n\n\nimport { ExplainComponent } from '../explain';\nimport { FsDialogModule } from '@firestitch/dialog';\nimport { CdkScrollable } from '@angular/cdk/scrolling';\nimport { FsLabelModule } from '@firestitch/label';\nimport { MatTabGroup, MatTab } from '@angular/material/tabs';\nimport { FsClipboardModule } from '@firestitch/clipboard';\nimport { NgTemplateOutlet, NgClass } from '@angular/common';\nimport { MatButton } from '@angular/material/button';\nimport { FsFormModule } from '@firestitch/form';\nimport { FsPopoverModule } from '@firestitch/popover';\nimport { FsCommonModule } from '@firestitch/common';\n\n\n@Component({\n templateUrl: './query-log.component.html',\n styleUrls: ['./query-log.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n FsDialogModule,\n MatDialogTitle,\n CdkScrollable,\n MatDialogContent,\n FsLabelModule,\n MatTabGroup,\n MatTab,\n FsClipboardModule,\n NgTemplateOutlet,\n MatDialogActions,\n MatButton,\n FsFormModule,\n MatDialogClose,\n FsPopoverModule,\n NgClass,\n FsCommonModule,\n ],\n})\nexport class QueryLogComponent {\n private _data = inject(MAT_DIALOG_DATA);\n private _dialog = inject(MatDialog);\n\n\n public queryLog;\n public accessTypes = {\n NULL: 'This access method means MySQL can resolve the query during the optimization phase and will not even access the table or index during the execution stage.',\n system: 'The table is empty or has one row.',\n const: 'The value of the column can be treated as a constant (there is one row matching the query). Note: Primary Key Lookup, Unique Index Lookup',\n eq_ref: 'The index is clustered and is being used by the operation (either the index is a PRIMARY KEY or UNIQUE INDEX with all key columns defined as NOT NULL)',\n ref: 'The indexed column was accessed using an equality operator Note: The ref_or_null access type is a variation on ref. It means MySQL must do a second lookup to find NULL entries after doing the initial lookup.',\n fulltext: 'Operation (JOIN) is using the table’s fulltext index',\n index: 'The entire index is scanned to find a match for the query. Note: The main advantage is that this avoids sorting. The biggest disadvantage is the cost of reading an entire table in index order. This usually means accessing the rows in random order, which is very expensive.',\n index_merge: 'This join type indicates that the Index Merge optimization is used. In this case, the key column in the output row contains a list of indexes used. It indicates a query can make limited use of multiple indexes on a single table.',\n range: 'This type replaces eq_ref for some IN subqueries of the following form: value IN (SELECT primary_key FROM single_table WHERE some_expr)',\n unique_subquery: '',\n ALL: 'MySQL scans the entire table to satisfy the query',\n };\n\n constructor() {\n const _data = this._data;\n\n this.queryLog = _data.queryLog;\n }\n\n public openExplain() {\n this._dialog.open(ExplainComponent, {\n data: { explain: this.explain },\n });\n }\n\n public get explain() {\n return this.queryLog.explain;\n }\n\n public get queryBlock() {\n return this.explain?.queryBlock;\n }\n\n public get orderingOperation() {\n return this.queryBlock?.orderingOperation;\n }\n}\n","<fs-dialog>\n <h1 mat-dialog-title>Query Log</h1>\n <mat-dialog-content>\n <div class=\"fs-row.gap-lg.wrap.align-start\">\n <fs-label-field>\n <fs-label>Duration</fs-label>\n {{queryLog.duration}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>Optimized</fs-label>\n {{queryLog.optimized ? 'Yes' : 'No'}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>Query Cost</fs-label>\n {{queryLog.queryCost}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>Raw Explain</fs-label>\n <a (click)=\"openExplain()\">View</a>\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>URL</fs-label>\n {{queryLog.path | fsFormatTruncate: 50}}\n </fs-label-field>\n </div>\n\n <mat-tab-group>\n <mat-tab label=\"Query\">\n <fs-clipboard-button\n [content]=\"queryLog.prettyQuery\">\n </fs-clipboard-button>\n <div [innerHTML]=\"queryLog.prettyQuery\" class=\"query\"></div>\n </mat-tab>\n\n <mat-tab label=\"Explain\">\n <ng-container [ngTemplateOutlet]=\"nestedLoop\" [ngTemplateOutletContext]=\"{ queryBlock: queryBlock, selectId: queryBlock.selectId, costInfo: queryBlock.costInfo }\"></ng-container>\n </mat-tab>\n </mat-tab-group>\n\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n type=\"button\"\n color=\"primary\"\n [mat-dialog-close]=\"undefined\">\n Done\n </button>\n </mat-dialog-actions>\n</fs-dialog>\n\n<ng-template #nestedLoop let-queryBlock=\"queryBlock\" let-selectId=\"selectId\" let-costInfo=\"costInfo\">\n @if (selectId) {\n <h1>Select {{selectId}}</h1>\n }\n\n <div class=\"fs-row.gap-lg.wrap.align-start\">\n @if (costInfo?.queryCost) {\n <fs-label-field>\n <fs-label>Query Cost</fs-label>\n {{costInfo.queryCost}}\n </fs-label-field>\n }\n @if (queryBlock.orderingOperation) {\n <fs-label-field>\n <fs-label>Ordering Operation</fs-label>\n <ng-container [ngTemplateOutlet]=\"queryBlockCritical\" [ngTemplateOutletContext]=\"{ queryBlock: queryBlock.orderingOperation }\"></ng-container>\n </fs-label-field>\n }\n\n @if (queryBlock.groupingOperation) {\n <fs-label-field>\n <fs-label>Grouping Operation</fs-label>\n <ng-container [ngTemplateOutlet]=\"queryBlockCritical\" [ngTemplateOutletContext]=\"{ queryBlock: queryBlock.groupingOperation }\"></ng-container>\n </fs-label-field>\n }\n\n @if (queryBlock.duplicatesRemoval) {\n <fs-label-field>\n <fs-label>Duplicates Removal</fs-label>\n <ng-container [ngTemplateOutlet]=\"queryBlockCritical\" [ngTemplateOutletContext]=\"{ queryBlock: queryBlock.duplicatesRemoval }\"></ng-container>\n </fs-label-field>\n }\n </div>\n\n @if (queryBlock.orderingOperation) {\n <ng-container [ngTemplateOutlet]=\"nestedLoop\" [ngTemplateOutletContext]=\"{ queryBlock: queryBlock.orderingOperation }\"></ng-container>\n }\n\n @if (queryBlock.groupingOperation) {\n <ng-container [ngTemplateOutlet]=\"nestedLoop\" [ngTemplateOutletContext]=\"{ queryBlock: queryBlock.groupingOperation }\"></ng-container>\n }\n\n @if (queryBlock.duplicatesRemoval) {\n <ng-container [ngTemplateOutlet]=\"nestedLoop\" [ngTemplateOutletContext]=\"{ queryBlock: queryBlock.duplicatesRemoval }\"></ng-container>\n }\n\n @if (queryBlock.table) {\n <ng-container [ngTemplateOutlet]=\"nestedLoop\" [ngTemplateOutletContext]=\"{ queryBlock: { nestedLoop: [ queryBlock ]} }\"></ng-container>\n @if (queryBlock.table.attachedSubqueries) {\n <fs-label>Attached Subqueries</fs-label>\n @for (subquery of queryBlock.table.attachedSubqueries; track subquery) {\n <ng-container [ngTemplateOutlet]=\"queryBlockCritical\" [ngTemplateOutletContext]=\"{ queryBlock: subquery.queryBlock }\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"nestedLoop\" [ngTemplateOutletContext]=\"{ queryBlock: subquery.queryBlock, selectId: subquery.queryBlock.selectId, costInfo: subquery.queryBlock.costInfo }\"></ng-container>\n }\n }\n }\n\n @if (queryBlock.nestedLoop) {\n <table class=\"fs-list-table style-line\">\n <thead>\n <tr>\n <th>Table</th>\n <th>Type</th>\n <th>Keys</th>\n <th>Ref</th>\n <th>Rows</th>\n <th>Filtered</th>\n <th>Extra</th>\n <th>Cost</th>\n </tr>\n </thead>\n <tbody>\n @for (item of queryBlock.nestedLoop; track item; let index = $index) {\n <tr>\n <td>\n {{item.table.tableName}}\n </td>\n <td>\n <fs-popover [template]=\"accessTypePopover\" [data]=\"item.table.accessType\">\n <span class=\"access-type\" [ngClass]=\"item.table.accessType\">{{item.table.accessType}}</span>\n </fs-popover>\n </td>\n <td>\n <fs-popover\n [template]=\"keysPopover\"\n [maxWidth]=\"null\"\n [data]=\"{ possibleKeys: item.table.possibleKeys, key: item.table.key }\">\n {{item.table.key}}\n </fs-popover>\n </td>\n <td>\n <div class=\"fs-delimit\">\n @for (ref of item.table.ref; track ref) {\n <span>{{ref}}</span>\n }\n </div>\n </td>\n <td>\n {{item.table.rowsExaminedPerScan}}\n </td>\n <td>\n {{item.table.filtered}}\n </td>\n <td>\n <div class=\"fs-delimit\">\n @if (item.table.indexCondition) {\n <span>\n <fs-popover\n [template]=\"usingIndexCondition\"\n [maxWidth]=\"null\"\n [data]=\"item.table.indexCondition\">\n Using Index Condition\n </fs-popover>\n </span>\n }\n @if (item.table.attachedCondition) {\n <span>\n <fs-popover\n [template]=\"usingWhere\"\n [maxWidth]=\"null\"\n [data]=\"item.table.attachedCondition\">\n Using Where\n </fs-popover>\n </span>\n }\n @if (item.usingIndex) {\n <span>Using Index</span>\n }\n @if (item.usingFilesort) {\n <span class=\"critical\">Using File Sort</span>\n }\n @if (item.usingTemporaryTable) {\n <span class=\"critical\">Temporary Table</span>\n }\n </div>\n </td>\n <td>\n <fs-popover [template]=\"tableCostPopover\" [data]=\"item.table?.costInfo\">\n {{item.table?.costInfo.prefixCost}}\n </fs-popover>\n <ng-template #tableCostPopover let-data=\"data\">\n <div>Eval Cost: {{data.evalCost}}</div>\n <div>Read Cost: {{data.readCost}}</div>\n <div>Prefix Cost: {{data.prefixCost}}</div>\n <div>Data Read Per Join: {{data.dataReadPerJoin}}</div>\n </ng-template>\n </td>\n </tr>\n }\n </tbody>\n </table>\n <br>\n }\n\n @if (queryBlock.selectListSubqueries) {\n <br>\n <fs-label>Select List Subqueries</fs-label>\n @for (subquery of queryBlock.selectListSubqueries; track subquery) {\n <ng-container [ngTemplateOutlet]=\"queryBlockCritical\" [ngTemplateOutletContext]=\"{ queryBlock: subquery.queryBlock }\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"nestedLoop\" [ngTemplateOutletContext]=\"{ queryBlock: subquery.queryBlock, selectId: subquery.queryBlock.selectId, costInfo: subquery.queryBlock.costInfo }\"></ng-container>\n }\n }\n <!--\n <ng-container *ngIf=\"queryBlock.queryBlockattachedSubqueries\">\n <br>\n <fs-label>Attached Subqueries</fs-label>\n <ng-container *ngFor=\"let subquery of queryBlock.attachedSubqueries\">\n <ng-container [ngTemplateOutlet]=\"queryBlockCritical\" [ngTemplateOutletContext]=\"{ queryBlock: subquery.queryBlock }\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"nestedLoop\" [ngTemplateOutletContext]=\"{ queryBlock: subquery.queryBlock }\"></ng-container>\n </ng-container>\n </ng-container> -->\n </ng-template>\n\n <ng-template #keysPopover let-data=\"data\">\n <div class=\"fs-delimit\">\n @for (possibleKey of data.possibleKeys; track possibleKey) {\n <span [ngClass]=\"{ 'query-log-used-key': possibleKey === data.key }\">{{possibleKey}}</span>\n }\n </div>\n </ng-template>\n\n <ng-template #usingWhere let-data=\"data\">\n {{data}}\n </ng-template>\n\n <ng-template #usingIndexCondition let-data=\"data\">\n {{data}}\n </ng-template>\n\n <ng-template #accessTypePopover let-data=\"data\">\n {{accessTypes[data]}}\n </ng-template>\n\n\n <ng-template #queryBlockCritical let-queryBlock=\"queryBlock\">\n <div class=\"fs-delimit\">\n @if (queryBlock.usingFilesort) {\n <span class=\"critical\">Using File Sort</span>\n }\n\n @if (queryBlock.usingTemporaryTable) {\n <span class=\"critical\">Temporary Table</span>\n }\n </div>\n </ng-template>","import { ChangeDetectionStrategy, Component, Input, OnInit, ViewChild, inject } from '@angular/core';\n\nimport { MatDialog } from '@angular/material/dialog';\n\nimport { ItemType } from '@firestitch/filter';\nimport { FsListComponent, FsListConfig, FsListModule } from '@firestitch/list';\n\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { QueryLogComponent } from '..';\nimport { NgClass } from '@angular/common';\nimport { FsDateModule } from '@firestitch/date';\nimport { FsCommonModule } from '@firestitch/common';\n\n\n@Component({\n selector: 'fs-system-query-logs',\n templateUrl: './query-logs.component.html',\n styleUrls: ['./query-logs.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n FsListModule,\n NgClass,\n FsDateModule,\n FsCommonModule,\n ],\n})\nexport class QueryLogsComponent implements OnInit {\n private _dialog = inject(MatDialog);\n\n\n @ViewChild(FsListComponent)\n public list: FsListComponent;\n\n @Input() public loadQueryLogs: (query: any) => Observable<{ data: any; paging: any }>;\n @Input() public purgeQueryLogs: () => Observable<any>;\n\n public listConfig: FsListConfig;\n\n public openQueryLog(queryLog): void {\n this._dialog.open(QueryLogComponent, {\n data: { queryLog },\n width: '100%',\n });\n }\n\n public ngOnInit(): void {\n this.listConfig = {\n filters: [\n {\n name: 'keyword',\n type: ItemType.Keyword,\n label: 'Search',\n },\n {\n name: 'optimized',\n type: ItemType.Select,\n label: 'Optimization',\n values: [\n { name: 'Any', value: undefined },\n { name: 'Yes', value: 'true' },\n { name: 'No', value: 'false' },\n ],\n },\n {\n name: 'createDate',\n type: ItemType.DateTimeRange,\n label: ['From Date', 'To Date'],\n },\n {\n name: 'duration',\n type: ItemType.Range,\n label: ['Min Duration', 'Max Duration'],\n },\n ],\n actions: [\n {\n label: 'Purge',\n primary: false,\n click: () => {\n this.purgeQueryLogs()\n .subscribe(() => {\n this.list.reload();\n });\n },\n },\n ],\n fetch: (query) => {\n return this.loadQueryLogs(query)\n .pipe(\n map((response) => ({ data: response.data, paging: response.paging })),\n );\n },\n };\n }\n\n}\n","<fs-list [config]=\"listConfig\">\n <fs-list-column title=\"Optimized\" name=\"optimized\" [sortable]=\"true\">\n <ng-template fs-list-cell let-row=\"row\">\n <span [ngClass]=\"{ optimized: row.optimized, 'not-optimized': !row.optimized }\">\n {{row.optimized ? 'Yes' : 'No'}}\n </span>\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Duration\" name=\"duration\" [sortable]=\"true\">\n <ng-template fs-list-cell let-row=\"row\">\n {{row.duration}}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Cost\" name=\"query_cost\" [sortable]=\"true\">\n <ng-template fs-list-cell let-row=\"row\">\n {{row.queryCost}}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Query\">\n <ng-template fs-list-cell let-row=\"row\">\n <a (click)=\"openQueryLog(row)\">{{ row.query | fsFormatTruncate: 500 }}</a>\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Created\" name=\"query_log_id\" [sortable]=\"true\" [direction]=\"'desc'\" [sortableDefault]=\"true\">\n <ng-template fs-list-cell let-row=\"row\">\n <fs-date-ago [date]=\"row.createDate\"></fs-date-ago>\n </ng-template>\n </fs-list-column>\n</fs-list>","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1","i2","i3","i4","i5","i6","i7"],"mappings":"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"}