diff --git a/src/Umbraco.Web.UI.Client/.vscode/settings.json b/src/Umbraco.Web.UI.Client/.vscode/settings.json index a33b02ae5b..196b1d2b83 100644 --- a/src/Umbraco.Web.UI.Client/.vscode/settings.json +++ b/src/Umbraco.Web.UI.Client/.vscode/settings.json @@ -1,4 +1,6 @@ { "cssVariables.lookupFiles": ["node_modules/@umbraco-ui/uui-css/dist/custom-properties.css"], - "cSpell.words": ["combobox", "variantable"] + "cSpell.words": ["combobox", "variantable"], + "exportall.config.folderListener": [], + "exportall.config.relExclusion": [] } diff --git a/src/Umbraco.Web.UI.Client/libs/observable-api/array-state.ts b/src/Umbraco.Web.UI.Client/libs/observable-api/array-state.ts index 81ede2a7ea..d421e4d6b5 100644 --- a/src/Umbraco.Web.UI.Client/libs/observable-api/array-state.ts +++ b/src/Umbraco.Web.UI.Client/libs/observable-api/array-state.ts @@ -10,7 +10,6 @@ import { pushToUniqueArray } from './push-to-unique-array.function'; * * The ArrayState provides methods to append data when the data is an Object. */ - export class ArrayState extends DeepState { constructor(initialData: T[], private _getUnique?: (entry: T) => unknown) { super(initialData); diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/menu-item/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/menu-item/manifests.ts index dc7b08158f..558df963b7 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/menu-item/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/menu-item/manifests.ts @@ -8,7 +8,7 @@ const menuItem: ManifestMenuItem = { meta: { label: 'Log Viewer', icon: 'umb:box-alt', - entityType: 'logviewer-root', + entityType: 'logviewer', menus: ['Umb.Menu.Settings'], }, }; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/repository/log-viewer.repository.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/repository/log-viewer.repository.ts new file mode 100644 index 0000000000..5870e28762 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/repository/log-viewer.repository.ts @@ -0,0 +1,101 @@ +import { UmbLogMessagesServerDataSource, UmbLogSearchesServerDataSource } from './sources/log-viewer.server.data'; +import { UmbContextConsumerController } from '@umbraco-cms/context-api'; +import { UmbControllerHostInterface } from '@umbraco-cms/controller'; +import { UmbNotificationContext, UMB_NOTIFICATION_CONTEXT_TOKEN } from '@umbraco-cms/notification'; +import { DirectionModel, LogLevelModel } from '@umbraco-cms/backend-api'; + +// Move to documentation / JSdoc +/* We need to create a new instance of the repository from within the element context. We want the notifications to be displayed in the right context. */ +// element -> context -> repository -> (store) -> data source +// All methods should be async and return a promise. Some methods might return an observable as part of the promise response. +export class UmbLogViewerRepository { + #host: UmbControllerHostInterface; + #searchDataSource: UmbLogSearchesServerDataSource; + #messagesDataSource: UmbLogMessagesServerDataSource; + #notificationService?: UmbNotificationContext; + #initResolver?: () => void; + #initialized = false; + + constructor(host: UmbControllerHostInterface) { + this.#host = host; + this.#searchDataSource = new UmbLogSearchesServerDataSource(this.#host); + this.#messagesDataSource = new UmbLogMessagesServerDataSource(this.#host); + + new UmbContextConsumerController(this.#host, UMB_NOTIFICATION_CONTEXT_TOKEN, (instance) => { + this.#notificationService = instance; + this.#checkIfInitialized(); + }); + } + + #init() { + // TODO: This would only works with one user of this method. If two, the first one would be forgotten, but maybe its alright for now as I guess this is temporary. + return new Promise((resolve) => { + this.#initialized ? resolve() : (this.#initResolver = resolve); + }); + } + + #checkIfInitialized() { + if (this.#notificationService) { + this.#initialized = true; + this.#initResolver?.(); + } + } + + async getSavedSearches({ skip, take }: { skip: number; take: number }) { + await this.#init(); + + return this.#searchDataSource.getAllSavedSearches({ skip, take }); + } + + async getMessageTemplates({ skip, take }: { skip: number; take: number }) { + await this.#init(); + + return this.#messagesDataSource.getLogViewerMessageTemplate({ skip, take }); + } + + async getLogCount({ startDate, endDate }: { startDate?: string; endDate?: string }) { + await this.#init(); + + return this.#messagesDataSource.getLogViewerLevelCount({ startDate, endDate }); + } + + async getLogs({ + skip = 0, + take = 100, + orderDirection, + filterExpression, + logLevel, + startDate, + endDate, + }: { + skip?: number; + take?: number; + orderDirection?: DirectionModel; + filterExpression?: string; + logLevel?: Array; + startDate?: string; + endDate?: string; + }) { + await this.#init(); + + return this.#messagesDataSource.getLogViewerLogs({ + skip, + take, + orderDirection, + filterExpression, + logLevel, + startDate, + endDate, + }); + } + + async getLogLevels({ skip = 0, take = 100 }: { skip: number; take: number }) { + await this.#init(); + return this.#messagesDataSource.getLogViewerLevel({ skip, take }); + } + + async getLogViewerValidateLogsSize({ startDate, endDate }: { startDate?: string; endDate?: string }) { + await this.#init(); + return this.#messagesDataSource.getLogViewerValidateLogsSize({ startDate, endDate }); + } +} diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/repository/sources/index.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/repository/sources/index.ts new file mode 100644 index 0000000000..518a5e18af --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/repository/sources/index.ts @@ -0,0 +1,69 @@ +import { + DirectionModel, + LogLevelCountsModel, + LogLevelModel, + PagedLoggerModel, + PagedLogMessageModel, + PagedLogTemplateModel, + PagedSavedLogSearchModel, + SavedLogSearchModel, +} from '@umbraco-cms/backend-api'; +import type { DataSourceResponse } from '@umbraco-cms/models'; + + + +export interface LogSearchDataSource { + getAllSavedSearches({ + skip, + take, + }: { + skip?: number; + take?: number; + }): Promise>; + getSavedSearchByName({ name }: { name: string }): Promise>; + deleteSavedSearchByName({ name }: { name: string }): Promise>; + postLogViewerSavedSearch({ + requestBody, + }: { + requestBody?: SavedLogSearchModel; + }): Promise>; +} + +export interface LogMessagesDataSource { + getLogViewerLevel({ skip, take }: { skip?: number; take?: number }): Promise>; + getLogViewerLevelCount({ + startDate, + endDate, + }: { + startDate?: string; + endDate?: string; + }): Promise>; + getLogViewerLogs({ + skip, + take = 100, + orderDirection, + filterExpression, + logLevel, + startDate, + endDate, + }: { + skip?: number; + take?: number; + orderDirection?: DirectionModel; + filterExpression?: string; + logLevel?: Array; + startDate?: string; + endDate?: string; + }): Promise>; + getLogViewerMessageTemplate({ + skip, + take = 100, + startDate, + endDate, + }: { + skip?: number; + take?: number; + startDate?: string; + endDate?: string; + }): Promise>; +} diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/repository/sources/log-viewer.server.data.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/repository/sources/log-viewer.server.data.ts new file mode 100644 index 0000000000..ebdf1264e5 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/repository/sources/log-viewer.server.data.ts @@ -0,0 +1,213 @@ +import { LogMessagesDataSource, LogSearchDataSource } from '.'; +import { DirectionModel, LogLevelModel, LogViewerResource, SavedLogSearchModel } from '@umbraco-cms/backend-api'; +import { UmbControllerHostInterface } from '@umbraco-cms/controller'; +import { tryExecuteAndNotify } from '@umbraco-cms/resources'; + +/** + * A data source for the log saved searches + * @export + * @class UmbLogSearchesServerDataSource + * @implements {TemplateDetailDataSource} + */ +export class UmbLogSearchesServerDataSource implements LogSearchDataSource { + #host: UmbControllerHostInterface; + + /** + * Creates an instance of UmbLogSearchesServerDataSource. + * @param {UmbControllerHostInterface} host + * @memberof UmbLogSearchesServerDataSource + */ + constructor(host: UmbControllerHostInterface) { + this.#host = host; + } + + /** + * Grabs all the log viewer saved searches from the server + * + * @param {{ skip?: number; take?: number }} { skip = 0, take = 100 } + * @return {*} + * @memberof UmbLogSearchesServerDataSource + */ + async getAllSavedSearches({ skip = 0, take = 100 }: { skip?: number; take?: number }) { + return await tryExecuteAndNotify(this.#host, LogViewerResource.getLogViewerSavedSearch({ skip, take })); + } + /** + * Get a log viewer saved search by name from the server + * + * @param {{ name: string }} { name } + * @return {*} + * @memberof UmbLogSearchesServerDataSource + */ + async getSavedSearchByName({ name }: { name: string }) { + return await tryExecuteAndNotify(this.#host, LogViewerResource.getLogViewerSavedSearchByName({ name })); + } + + /** + * Post a new log viewer saved search to the server + * + * @param {{ requestBody?: SavedLogSearch }} { requestBody } + * @return {*} + * @memberof UmbLogSearchesServerDataSource + */ + async postLogViewerSavedSearch({ requestBody }: { requestBody?: SavedLogSearchModel }) { + return await tryExecuteAndNotify(this.#host, LogViewerResource.postLogViewerSavedSearch({ requestBody })); + } + /** + * Remove a log viewer saved search by name from the server + * + * @param {{ name: string }} { name } + * @return {*} + * @memberof UmbLogSearchesServerDataSource + */ + async deleteSavedSearchByName({ name }: { name: string }) { + return await tryExecuteAndNotify(this.#host, LogViewerResource.deleteLogViewerSavedSearchByName({ name })); + } +} + /** + * A data source for the log messages and levels + * + * @export + * @class UmbLogMessagesServerDataSource + * @implements {LogMessagesDataSource} + */ + export class UmbLogMessagesServerDataSource implements LogMessagesDataSource { + #host: UmbControllerHostInterface; + + /** + * Creates an instance of UmbLogMessagesServerDataSource. + * @param {UmbControllerHostInterface} host + * @memberof UmbLogMessagesServerDataSource + */ + constructor(host: UmbControllerHostInterface) { + this.#host = host; + } + + /** + * Grabs all the loggers from the server + * + * @param {{ skip?: number; take?: number }} { skip = 0, take = 100 } + * @return {*} + * @memberof UmbLogMessagesServerDataSource + */ + async getLogViewerLevel({ skip = 0, take = 100 }: { skip?: number; take?: number }) { + return await tryExecuteAndNotify(this.#host, LogViewerResource.getLogViewerLevel({ skip, take })); + } + + /** + * Grabs all the number of different log messages from the server + * + * @param {{ skip?: number; take?: number }} { skip = 0, take = 100 } + * @return {*} + * @memberof UmbLogMessagesServerDataSource + */ + async getLogViewerLevelCount({ startDate, endDate }: { startDate?: string; endDate?: string }) { + return await tryExecuteAndNotify( + this.#host, + LogViewerResource.getLogViewerLevelCount({ + startDate, + endDate, + }) + ); + } + /** + * Grabs all the log messages from the server + * + * @param {{ + * skip?: number; + * take?: number; + * orderDirection?: DirectionModel; + * filterExpression?: string; + * logLevel?: Array; + * startDate?: string; + * endDate?: string; + * }} { + * skip = 0, + * take = 100, + * orderDirection, + * filterExpression, + * logLevel, + * startDate, + * endDate, + * } + * @return {*} + * @memberof UmbLogMessagesServerDataSource + */ + async getLogViewerLogs({ + skip = 0, + take = 100, + orderDirection, + filterExpression, + logLevel, + startDate, + endDate, + }: { + skip?: number; + take?: number; + orderDirection?: DirectionModel; + filterExpression?: string; + logLevel?: Array; + startDate?: string; + endDate?: string; + }) { + return await tryExecuteAndNotify( + this.#host, + LogViewerResource.getLogViewerLog({ + skip, + take, + orderDirection, + filterExpression, + logLevel, + startDate, + endDate, + }) + ); + } + /** + * Grabs all the log message templates from the server + * + * @param {{ + * skip?: number; + * take?: number; + * startDate?: string; + * endDate?: string; + * }} { + * skip, + * take = 100, + * startDate, + * endDate, + * } + * @return {*} + * @memberof UmbLogMessagesServerDataSource + */ + async getLogViewerMessageTemplate({ + skip, + take = 100, + startDate, + endDate, + }: { + skip?: number; + take?: number; + startDate?: string; + endDate?: string; + }) { + return await tryExecuteAndNotify( + this.#host, + LogViewerResource.getLogViewerMessageTemplate({ + skip, + take, + startDate, + endDate, + }) + ); + } + + async getLogViewerValidateLogsSize({ startDate, endDate }: { startDate?: string; endDate?: string }) { + return await tryExecuteAndNotify( + this.#host, + LogViewerResource.getLogViewerValidateLogsSize({ + startDate, + endDate, + }) + ); + } + } diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/logviewer-root/components/index.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/logviewer-root/components/index.ts new file mode 100644 index 0000000000..e204c32424 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/logviewer-root/components/index.ts @@ -0,0 +1,3 @@ +export * from './log-viewer-date-range-selector.element'; +export * from './log-viewer-level-tag.element'; +export * from './log-viewer-to-many-logs-warning.element'; \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/logviewer-root/components/log-viewer-date-range-selector.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/logviewer-root/components/log-viewer-date-range-selector.element.ts new file mode 100644 index 0000000000..045bb0f849 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/logviewer-root/components/log-viewer-date-range-selector.element.ts @@ -0,0 +1,132 @@ +import { UUITextStyles } from '@umbraco-ui/uui-css'; +import { css, html } from 'lit'; +import { customElement, property, queryAll, state } from 'lit/decorators.js'; +import { + LogViewerDateRange, + UmbLogViewerWorkspaceContext, + UMB_APP_LOG_VIEWER_CONTEXT_TOKEN, +} from '../../logviewer.context'; +import { UmbLitElement } from '@umbraco-cms/element'; +import { query } from 'router-slot'; + +@customElement('umb-log-viewer-date-range-selector') +export class UmbLogViewerDateRangeSelectorElement extends UmbLitElement { + static styles = [ + UUITextStyles, + css` + :host { + display: flex; + flex-direction: column; + gap: var(--uui-size-space-3); + } + + input { + font-family: inherit; + padding: var(--uui-size-1) var(--uui-size-space-3); + font-size: inherit; + color: inherit; + border-radius: 0; + box-sizing: border-box; + border: none; + background: none; + width: 100%; + height: 100%; + outline: none; + position: relative; + border-bottom: 2px solid transparent; + } + + /* find out better validation for that */ + input:out-of-range { + border-color: var(--uui-color-danger); + } + + :host([horizontal]) .input-container { + display: flex; + align-items: baseline; + } + `, + ]; + + @state() + private _startDate = ''; + + @state() + private _endDate = ''; + + @queryAll('input') + private _inputs!: NodeListOf; + + @property({ type: Boolean, reflect: true }) + horizontal = false; + + #logViewerContext?: UmbLogViewerWorkspaceContext; + constructor() { + super(); + this.addEventListener('input', this.#setDates); + this.consumeContext(UMB_APP_LOG_VIEWER_CONTEXT_TOKEN, (instance) => { + this.#logViewerContext = instance; + this.#logViewerContext?.getMessageTemplates(0, 10); + this.#observeStuff(); + }); + } + + #observeStuff() { + if (!this.#logViewerContext) return; + this.observe(this.#logViewerContext.dateRange, (dateRange: LogViewerDateRange) => { + this._startDate = dateRange?.startDate; + this._endDate = dateRange?.endDate; + }); + } + + #setDates() { + this._inputs.forEach((input) => { + if (input.id === 'start-date') { + this._startDate = input.value; + } else if (input.id === 'end-date') { + this._endDate = input.value; + } + }); + const newDateRange: LogViewerDateRange = { startDate: this._startDate, endDate: this._endDate }; + this.#logViewerContext?.setDateRange(newDateRange); + } + + render() { + return html` +
+ From: + { + (e.target as HTMLInputElement).showPicker(); + }} + + id="start-date" + type="date" + label="From" + .max=${this.#logViewerContext?.today ?? ''} + .value=${this._startDate}> + +
+
+ To: + { + (e.target as HTMLInputElement).showPicker(); + }} + id="end-date" + type="date" + label="To" + .min=${this._startDate} + .max=${this.#logViewerContext?.today ?? ''} + .value=${this._endDate}> + +
+ `; + } +} + +declare global { + interface HTMLElementTagNameMap { + 'umb-log-viewer-date-range-selector': UmbLogViewerDateRangeSelectorElement; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/logviewer-root/components/log-viewer-level-tag.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/logviewer-root/components/log-viewer-level-tag.element.ts new file mode 100644 index 0000000000..d0fc55eb86 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/logviewer-root/components/log-viewer-level-tag.element.ts @@ -0,0 +1,47 @@ +import { UUITextStyles } from '@umbraco-ui/uui-css'; +import { css, html, LitElement } from 'lit'; +import { customElement, property } from 'lit/decorators.js'; +import { ifDefined } from 'lit-html/directives/if-defined.js'; +import { InterfaceColor, InterfaceLook } from '@umbraco-ui/uui-base/lib/types'; +import { LogLevelModel } from '@umbraco-cms/backend-api'; + +interface LevelMapStyles { + look?: InterfaceLook; + color?: InterfaceColor; + style?: string; +} + +@customElement('umb-log-viewer-level-tag') +export class UmbLogViewerLevelTagElement extends LitElement { + static styles = [UUITextStyles, css``]; + + @property() + level?: LogLevelModel; + + levelMap: Record = { + Verbose: { look: 'secondary' }, + Debug: { + look: 'default', + style: 'background-color: var(--umb-log-viewer-debug-color); color: var(--uui-color-surface)', + }, + Information: { look: 'primary', color: 'positive' }, + Warning: { look: 'primary', color: 'warning' }, + Error: { look: 'primary', color: 'danger' }, + Fatal: { look: 'primary' }, + }; + + render() { + return html`${this.level}`; + } +} + +declare global { + interface HTMLElementTagNameMap { + 'umb-log-viewer-level-tag': UmbLogViewerLevelTagElement; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/logviewer-root/components/log-viewer-to-many-logs-warning.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/logviewer-root/components/log-viewer-to-many-logs-warning.element.ts new file mode 100644 index 0000000000..b0bdb0c1ce --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/logviewer-root/components/log-viewer-to-many-logs-warning.element.ts @@ -0,0 +1,27 @@ +import { css, html, LitElement } from 'lit'; +import { customElement } from 'lit/decorators.js'; + +@customElement('umb-log-viewer-to-many-logs-warning') +export class UmbLogViewerToManyLogsWarningElement extends LitElement { + static styles = [ + css` + :host { + text-align: center; + } + `, + ]; + + render() { + return html` +

Unable to view logs

+

Today's log file is too large to be viewed and would cause performance problems.

+

If you need to view the log files, narrow your date range or try opening them manually.

+
`; + } +} + +declare global { + interface HTMLElementTagNameMap { + 'umb-log-viewer-to-many-logs-warning': UmbLogViewerToManyLogsWarningElement; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/logviewer-root/logviewer-root-workspace.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/logviewer-root/logviewer-root-workspace.element.ts index f3f77a5ded..fc2f769528 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/logviewer-root/logviewer-root-workspace.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/logviewer-root/logviewer-root-workspace.element.ts @@ -1,21 +1,190 @@ -import { html, LitElement } from 'lit'; -import { customElement } from 'lit/decorators.js'; +import './components'; +import { map } from 'rxjs'; +import { css, html, nothing } from 'lit'; +import { customElement, state, property } from 'lit/decorators.js'; +import { IRoutingInfo } from 'router-slot'; +import { UUITextStyles } from '@umbraco-ui/uui-css'; +import { UmbLitElement } from '@umbraco-cms/element'; +import { umbExtensionsRegistry, createExtensionElement } from '@umbraco-cms/extensions-api'; +import { ManifestWorkspaceView, ManifestWorkspaceViewCollection } from '@umbraco-cms/extensions-registry'; +import { UmbRouterSlotInitEvent, UmbRouterSlotChangeEvent } from '@umbraco-cms/router'; +import { UmbLogViewerWorkspaceContext, UMB_APP_LOG_VIEWER_CONTEXT_TOKEN } from '../logviewer.context'; +import { repeat } from 'lit-html/directives/repeat.js'; + +//TODO make uui-input accept min and max values +@customElement('umb-logviewer-workspace') +export class UmbLogViewerWorkspaceElement extends UmbLitElement { + static styles = [ + UUITextStyles, + css` + :host { + display: block; + width: 100%; + height: 100%; + + --umb-log-viewer-debug-color: var(--uui-color-default-emphasis); + --umb-log-viewer-information-color: var(--uui-color-positive); + --umb-log-viewer-warning-color: var(--uui-color-warning); + --umb-log-viewer-error-color: var(--uui-color-danger); + --umb-log-viewer-fatal-color: var(--uui-color-default); + --umb-log-viewer-verbose-color: var(--uui-color-current); + } + + #header { + display: flex; + padding: 0 var(--uui-size-space-6); + gap: var(--uui-size-space-4); + align-items: center; + } + + #router-slot { + height: 100%; + } + + uui-tab-group { + --uui-tab-divider: var(--uui-color-border); + border-left: 1px solid var(--uui-color-border); + border-right: 1px solid var(--uui-color-border); + } + `, + ]; + + private _alias = 'Umb.Workspace.LogviewerRoot'; + + @state() + private _workspaceViews: Array = []; + + @state() + private _routes: any[] = []; + + @state() + private _activePath?: string; + + @state() + private _routerPath?: string; + + #logViewerContext = new UmbLogViewerWorkspaceContext(this); + + constructor() { + super(); + this.#logViewerContext.init(); + } + + connectedCallback() { + super.connectedCallback(); + this._observeWorkspaceViews(); + this.provideContext(UMB_APP_LOG_VIEWER_CONTEXT_TOKEN, this.#logViewerContext); + } + + load(): void { + // Not relevant for this workspace -added to prevent the error from popping up + } + + private _observeWorkspaceViews() { + this.observe( + umbExtensionsRegistry + .extensionsOfTypes(['workspaceView']) + .pipe(map((extensions) => extensions.filter((extension) => extension.meta.workspaces.includes(this._alias)))), + (workspaceViews) => { + this._workspaceViews = workspaceViews; + this._createRoutes(); + } + ); + } + + create(): void { + // Not relevant for this workspace + } + + private _createRoutes() { + this._routes = []; + + if (this._workspaceViews.length > 0) { + this._routes = this._workspaceViews.map((view) => { + return { + path: `${view.meta.pathname}`, + component: () => { + return createExtensionElement(view); + }, + setup: (component: Promise | HTMLElement, info: IRoutingInfo) => { + // When its using import, we get an element, when using createExtensionElement we get a Promise. + if ((component as any).then) { + (component as any).then((el: any) => (el.manifest = view)); + } else { + (component as any).manifest = view; + } + }, + }; + }); + + this._routes.push({ + path: '**', + redirectTo: `${this._workspaceViews[0].meta.pathname}`, + }); + } + } + + #renderRoutes() { + return html` + ${this._routes.length > 0 + ? html` + { + this._routerPath = event.target.absoluteRouterPath; + }} + @change=${(event: UmbRouterSlotChangeEvent) => { + this._activePath = event.target.localActiveViewPath; + }}> + ` + : nothing} + `; + } + + #renderViews() { + return html` + ${this._workspaceViews.length > 1 + ? html` + + ${repeat( + this._workspaceViews, + (view) => view.alias, + (view) => html` + + + ${view.meta.label || view.name} + + ` + )} + + ` + : nothing} + `; + } -@customElement('umb-logviewer-root-workspace') -export class UmbLogViewerRootWorkspaceElement extends LitElement { render() { return html` -
-

LogViewer Root Workspace

-
+ + + ${this.#renderViews()} ${this.#renderRoutes()} + + `; } } -export default UmbLogViewerRootWorkspaceElement; +export default UmbLogViewerWorkspaceElement; declare global { interface HTMLElementTagNameMap { - 'umb-logviewer-root-workspace': UmbLogViewerRootWorkspaceElement; + 'umb-logviewer-workspace': UmbLogViewerWorkspaceElement; } } diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/logviewer-root/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/logviewer-root/manifests.ts index 1e06c4df7d..c740c29aa1 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/logviewer-root/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/logviewer-root/manifests.ts @@ -1,16 +1,45 @@ import type { ManifestWorkspace, ManifestWorkspaceAction, ManifestWorkspaceView } from '@umbraco-cms/models'; +const workspaceAlias = 'Umb.Workspace.LogviewerRoot'; + const workspace: ManifestWorkspace = { type: 'workspace', - alias: 'Umb.Workspace.LogviewerRoot', + alias: workspaceAlias, name: 'LogViewer Root Workspace', loader: () => import('./logviewer-root-workspace.element'), meta: { - entityType: 'logviewer-root', + entityType: 'logviewer', }, }; -const workspaceViews: Array = []; +const workspaceViews: Array = [ + { + type: 'workspaceView', + alias: 'Umb.WorkspaceView.Logviewer.Overview', + name: 'LogViewer Root Workspace Overview View', + loader: () => import('../views/overview/index'), + weight: 300, + meta: { + workspaces: [workspaceAlias], + label: 'Overview', + pathname: 'overview', + icon: 'umb:box-alt', + }, + }, + { + type: 'workspaceView', + alias: 'Umb.WorkspaceView.Logviewer.Search', + name: 'LogViewer Root Workspace Search View', + loader: () => import('../views/search/index'), + weight: 200, + meta: { + workspaces: [workspaceAlias], + label: 'Search', + pathname: 'search', + icon: 'umb:search', + }, + }, +]; const workspaceActions: Array = []; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/logviewer.context.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/logviewer.context.ts new file mode 100644 index 0000000000..93d7896cc6 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/logviewer.context.ts @@ -0,0 +1,253 @@ +import { UmbLogViewerRepository } from '../repository/log-viewer.repository'; +import { ArrayState, createObservablePart, DeepState, ObjectState, StringState } from '@umbraco-cms/observable-api'; +import { + DirectionModel, + LogLevelCountsModel, + LogLevelModel, + PagedLoggerModel, + PagedLogMessageModel, + PagedLogTemplateModel, + PagedSavedLogSearchModel, +} from '@umbraco-cms/backend-api'; +import { UmbControllerHostInterface } from '@umbraco-cms/controller'; +import { UmbContextToken } from '@umbraco-cms/context-api'; +import { BasicState } from 'libs/observable-api/basic-state'; + +export type PoolingInterval = 0 | 2000 | 5000 | 10000 | 20000 | 30000; +export interface PoolingCOnfig { + enabled: boolean; + interval: PoolingInterval; +} +export interface LogViewerDateRange { + startDate: string; + endDate: string; +} + +export class UmbLogViewerWorkspaceContext { + #host: UmbControllerHostInterface; + #repository: UmbLogViewerRepository; + + get today() { + const today = new Date(); + const dd = String(today.getDate()).padStart(2, '0'); + const mm = String(today.getMonth() + 1).padStart(2, '0'); + const yyyy = today.getFullYear(); + + return yyyy + '-' + mm + '-' + dd; + } + + get yesterday() { + const yesterday = new Date(new Date().setDate(new Date().getDate() - 1)); + const dd = String(yesterday.getDate()).padStart(2, '0'); + const mm = String(yesterday.getMonth() + 1).padStart(2, '0'); + const yyyy = yesterday.getFullYear(); + + return yyyy + '-' + mm + '-' + dd; + } + + defaultDateRange: LogViewerDateRange = { + startDate: this.yesterday, + endDate: this.today, + }; + + #savedSearches = new DeepState(undefined); + savedSearches = createObservablePart(this.#savedSearches, (data) => data?.items); + + #logCount = new DeepState(null); + logCount = createObservablePart(this.#logCount, (data) => data); + + #dateRange = new DeepState(this.defaultDateRange); + dateRange = createObservablePart(this.#dateRange, (data) => data); + + #loggers = new DeepState(null); + loggers = createObservablePart(this.#loggers, (data) => data?.items); + + #canShowLogs = new BasicState(null); + canShowLogs = createObservablePart(this.#canShowLogs, (data) => data); + + #filterExpression = new StringState(''); + filterExpression = createObservablePart(this.#filterExpression, (data) => data); + + #messageTemplates = new DeepState(null); + messageTemplates = createObservablePart(this.#messageTemplates, (data) => data); + + #logLevelsFilter = new ArrayState([]); + logLevelsFilter = createObservablePart(this.#logLevelsFilter, (data) => data); + + #logs = new DeepState(null); + logs = createObservablePart(this.#logs, (data) => data?.items); + logsTotal = createObservablePart(this.#logs, (data) => data?.total); + + #polling = new ObjectState({ enabled: false, interval: 2000 }); + polling = createObservablePart(this.#polling, (data) => data); + + #sortingDirection = new BasicState(DirectionModel.ASCENDING); + sortingDirection = createObservablePart(this.#sortingDirection, (data) => data); + + #intervalID: number | null = null; + + currentPage = 1; + + constructor(host: UmbControllerHostInterface) { + this.#host = host; + this.#repository = new UmbLogViewerRepository(this.#host); + } + + async init() { + this.validateLogSize(); + } + + setDateRange(dateRange: LogViewerDateRange) { + const { startDate, endDate } = dateRange; + + const isAnyDateInTheFuture = new Date(startDate) > new Date() || new Date(endDate) > new Date(); + const isStartDateBiggerThenEndDate = new Date(startDate) > new Date(endDate); + if (isAnyDateInTheFuture || isStartDateBiggerThenEndDate) { + return; + } + + this.#dateRange.next(dateRange); + this.validateLogSize(); + this.getLogCount(); + } + + async getSavedSearches() { + const { data } = await this.#repository.getSavedSearches({ skip: 0, take: 100 }); + if (data) { + this.#savedSearches.next(data); + } else { + //falback to some default searches like in the old backoffice + this.#savedSearches.next({ + items: [ + { + name: 'Find all logs where the Level is NOT Verbose and NOT Debug', + query: "Not(@Level='Verbose') and Not(@Level='Debug')", + }, + { + name: 'Find all logs that has an exception property (Warning, Error & Fatal with Exceptions)', + query: 'Has(@Exception)', + }, + { + name: "Find all logs that have the property 'Duration'", + query: 'Has(Duration)', + }, + { + name: "Find all logs that have the property 'Duration' and the duration is greater than 1000ms", + query: 'Has(Duration) and Duration > 1000', + }, + { + name: "Find all logs that are from the namespace 'Umbraco.Core'", + query: "StartsWith(SourceContext, 'Umbraco.Core')", + }, + { + name: 'Find all logs that use a specific log message template', + query: "@MessageTemplate = '[Timing {TimingId}] {EndMessage} ({TimingDuration}ms)'", + }, + ], + total: 6, + }); + } + } + + async getLogCount() { + const { data } = await this.#repository.getLogCount({ ...this.#dateRange.getValue() }); + + if (data) { + this.#logCount.next(data); + } + } + + async getMessageTemplates(skip: number, take: number) { + const { data } = await this.#repository.getMessageTemplates({ skip, take }); + + if (data) { + this.#messageTemplates.next(data); + } + } + + async getLogLevels(skip: number, take: number) { + const { data } = await this.#repository.getLogLevels({ skip, take }); + + if (data) { + this.#loggers.next(data); + } + } + + async validateLogSize() { + const { data, error } = await this.#repository.getLogViewerValidateLogsSize({ ...this.#dateRange.getValue() }); + if (error) { + this.#canShowLogs.next(false); + console.info('LogViewer: ', error); + return; + } + this.#canShowLogs.next(true); + console.info('LogViewer:showinfg logs'); + } + + setCurrentPage(page: number) { + this.currentPage = page; + } + + getLogs = async () => { + if (!this.#canShowLogs.getValue()) { + return; + } + + const skip = (this.currentPage - 1) * 100; + const take = 100; + + const options = { + skip, + take, + orderDirection: this.#sortingDirection.getValue(), + filterExpression: this.#filterExpression.getValue(), + logLevel: this.#logLevelsFilter.getValue(), + ...this.#dateRange.getValue(), + }; + + const { data } = await this.#repository.getLogs(options); + + if (data) { + this.#logs.next(data); + } + }; + + setFilterExpression(query: string) { + this.#filterExpression.next(query); + } + + setLogLevelsFilter(logLevels: LogLevelModel[]) { + this.#logLevelsFilter.next(logLevels); + } + + togglePolling() { + const isEnabled = !this.#polling.getValue().enabled; + this.#polling.update({ + enabled: isEnabled, + }); + + if (isEnabled) { + this.#intervalID = setInterval(() => { + this.currentPage = 1; + this.getLogs(); + }, this.#polling.getValue().interval) as unknown as number; + return; + } + + clearInterval(this.#intervalID as number); + } + + setPollingInterval(interval: PoolingInterval) { + this.#polling.update({ interval, enabled: true }); + } + + toggleSortOrder() { + const direction = this.#sortingDirection.getValue(); + const newDirection = direction === DirectionModel.ASCENDING ? DirectionModel.DESCENDING : DirectionModel.ASCENDING; + this.#sortingDirection.next(newDirection); + } +} + +export const UMB_APP_LOG_VIEWER_CONTEXT_TOKEN = new UmbContextToken( + UmbLogViewerWorkspaceContext.name +); diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/manifests.ts index 4f3d6db1e4..5a8c3cc38d 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/manifests.ts @@ -1,3 +1,4 @@ import { manifests as logviewerRootManifests } from './logviewer-root/manifests'; + export const manifests = [...logviewerRootManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/overview/components/index.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/overview/components/index.ts new file mode 100644 index 0000000000..926372cc6e --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/overview/components/index.ts @@ -0,0 +1,4 @@ +export * from './log-viewer-saved-searches-overview.element'; +export * from './log-viewer-message-templates-overview.element'; +export * from './log-viewer-log-types-chart.element'; +export * from './log-viewer-log-level-overview.element'; \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/overview/components/log-viewer-log-level-overview.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/overview/components/log-viewer-log-level-overview.element.ts new file mode 100644 index 0000000000..2aeafb27fa --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/overview/components/log-viewer-log-level-overview.element.ts @@ -0,0 +1,48 @@ +import { html } from 'lit'; +import { customElement, property, state } from 'lit/decorators.js'; +import { UmbLogViewerWorkspaceContext, UMB_APP_LOG_VIEWER_CONTEXT_TOKEN } from '../../../logviewer.context'; +import { UmbLitElement } from '@umbraco-cms/element'; +import { LoggerModel } from '@umbraco-cms/backend-api'; + +//TODO: implement the saved searches pagination when the API total bug is fixed +@customElement('umb-log-viewer-log-level-overview') +export class UmbLogViewerLogLevelOverviewElement extends UmbLitElement { + #logViewerContext?: UmbLogViewerWorkspaceContext; + constructor() { + super(); + this.consumeContext(UMB_APP_LOG_VIEWER_CONTEXT_TOKEN, (instance) => { + this.#logViewerContext = instance; + this.#logViewerContext?.getSavedSearches(); + this.#observeLogLevels(); + }); + } + + @state() + private _loggers: LoggerModel[] = []; + /** + * The name of the logger to get the level for. Defaults to 'Global'. + * + * @memberof UmbLogViewerLogLevelOverviewElement + */ + @property() + loggerName = 'Global'; + + #observeLogLevels() { + if (!this.#logViewerContext) return; + this.observe(this.#logViewerContext.loggers, (loggers) => { + this._loggers = loggers ?? []; + }); + } + + render() { + return html`${this._loggers.length > 0 + ? this._loggers.find((logger) => logger.name === this.loggerName)?.level + : ''}`; + } +} + +declare global { + interface HTMLElementTagNameMap { + 'umb-log-viewer-log-level-overview': UmbLogViewerLogLevelOverviewElement; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/overview/components/log-viewer-log-types-chart.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/overview/components/log-viewer-log-types-chart.element.ts new file mode 100644 index 0000000000..1c7ec7a927 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/overview/components/log-viewer-log-types-chart.element.ts @@ -0,0 +1,167 @@ +import { UUITextStyles } from '@umbraco-ui/uui-css'; +import { css, html } from 'lit'; +import { customElement, state } from 'lit/decorators.js'; +import { UmbLogViewerWorkspaceContext, UMB_APP_LOG_VIEWER_CONTEXT_TOKEN } from '../../../logviewer.context'; +import { UmbLitElement } from '@umbraco-cms/element'; +import { LogLevelCountsModel } from '@umbraco-cms/backend-api'; + +@customElement('umb-log-viewer-log-types-chart') +export class UmbLogViewerLogTypesChartElement extends UmbLitElement { + static styles = [ + css` + #log-types-container { + display: flex; + gap: var(--uui-size-space-4); + flex-direction: column-reverse; + align-items: center; + justify-content: space-between; + } + + button { + all: unset; + display: flex; + align-items: center; + cursor: pointer; + } + + button:focus { + outline: 1px solid var(--uui-color-focus); + } + + button.active { + text-decoration: line-through; + } + + #chart { + width: 150px; + aspect-ratio: 1; + background: radial-gradient(white 40%, transparent 41%), + conic-gradient( + var(--umb-log-viewer-debug-color) 0% 20%, + var(--umb-log-viewer-information-color) 20% 40%, + var(--umb-log-viewer-warning-color) 40% 60%, + var(--umb-log-viewer-error-color) 60% 80%, + var(--umb-log-viewer-fatal-color) 80% 100% + ); + margin: 10px; + display: inline-block; + border-radius: 50%; + } + + ul { + list-style: none; + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; + } + + li { + display: flex; + align-items: center; + } + + li uui-icon { + margin-right: 1em; + } + `, + ]; + + #logViewerContext?: UmbLogViewerWorkspaceContext; + constructor() { + super(); + this.consumeContext(UMB_APP_LOG_VIEWER_CONTEXT_TOKEN, (instance) => { + this.#logViewerContext = instance; + this.#logViewerContext?.getLogCount(); + this.#observeStuff(); + }); + } + + @state() + private _logLevelCount: LogLevelCountsModel | null = null; + + @state() + private logLevelCount: [string, number][] = []; + + @state() + private _logLevelCountFilter: string[] = []; + + protected willUpdate(_changedProperties: Map): void { + if (_changedProperties.has('_logLevelCountFilter')) { + this.setLogLevelCount(); + } + } + + #setCountFilter(level: string) { + if (this._logLevelCountFilter.includes(level)) { + this._logLevelCountFilter = this._logLevelCountFilter.filter((item) => item !== level); + return; + } + + this._logLevelCountFilter = [...this._logLevelCountFilter, level]; + } + + setLogLevelCount() { + this.logLevelCount = this._logLevelCount + ? Object.entries(this._logLevelCount).filter(([level, number]) => !this._logLevelCountFilter.includes(level)) + : []; + } + + #observeStuff() { + if (!this.#logViewerContext) return; + this.observe(this.#logViewerContext.logCount, (logLevel) => { + this._logLevelCount = logLevel ?? null; + this.setLogLevelCount(); + }); + } + + render() { + return html` + +
+
+
    + ${this._logLevelCount + ? Object.keys(this._logLevelCount).map( + (level) => + html`
  • + +
  • ` + ) + : ''} +
+
+ + ${this._logLevelCount + ? this.logLevelCount.map( + ([level, number]) => + html` ` + ) + : ''} + +
+
+ `; + } +} + +declare global { + interface HTMLElementTagNameMap { + 'umb-log-viewer-log-types-chart': UmbLogViewerLogTypesChartElement; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/overview/components/log-viewer-message-templates-overview.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/overview/components/log-viewer-message-templates-overview.element.ts new file mode 100644 index 0000000000..5c9cd6f754 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/overview/components/log-viewer-message-templates-overview.element.ts @@ -0,0 +1,124 @@ +import { UUITextStyles } from '@umbraco-ui/uui-css'; +import { css, html } from 'lit'; +import { customElement, state } from 'lit/decorators.js'; +import { UmbLogViewerWorkspaceContext, UMB_APP_LOG_VIEWER_CONTEXT_TOKEN } from '../../../logviewer.context'; +import { UmbLitElement } from '@umbraco-cms/element'; +import { PagedLogTemplateModel, SavedLogSearchModel } from '@umbraco-cms/backend-api'; + +//TODO: fix pagination bug when API is fixed +@customElement('umb-log-viewer-message-templates-overview') +export class UmbLogViewerMessageTemplatesOverviewElement extends UmbLitElement { + static styles = [ + UUITextStyles, + css` + #show-more-templates-btn { + margin-top: var(--uui-size-space-5); + } + + a { + display: flex; + align-items: center; + justify-content: space-between; + text-decoration: none; + color: inherit; + } + + uui-table-cell { + padding: 10px 20px; + height: unset; + } + + uui-table-row { + cursor: pointer; + } + + uui-table-row:hover > uui-table-cell { + background-color: var(--uui-color-surface-alt); + } + `, + ]; + + @state() + private _messageTemplates: PagedLogTemplateModel | null = null; + + #logViewerContext?: UmbLogViewerWorkspaceContext; + constructor() { + super(); + this.consumeContext(UMB_APP_LOG_VIEWER_CONTEXT_TOKEN, (instance) => { + this.#logViewerContext = instance; + this.#logViewerContext?.getMessageTemplates(0, 10); + this.#observeStuff(); + }); + } + + #observeStuff() { + if (!this.#logViewerContext) return; + this.observe(this.#logViewerContext.messageTemplates, (templates) => { + this._messageTemplates = templates ?? null; + }); + } + + #getMessageTemplates() { + const take = this._messageTemplates?.items?.length ?? 0; + this.#logViewerContext?.getMessageTemplates(0, take + 10); + } + + #renderSearchItem = (searchListItem: SavedLogSearchModel) => { + return html`
  • + { + this.#setCurrentQuery(searchListItem.query ?? ''); + }} + label="${searchListItem.name ?? ''}" + title="${searchListItem.name ?? ''}" + href=${'/section/settings/logviewer/search?lq=' + searchListItem.query} + >${searchListItem.name} +
  • `; + }; + + #setCurrentQuery = (query: string) => { + this.#logViewerContext?.setFilterExpression(query); + }; + + render() { + return html` + +

    Total Unique Message types: ${this._messageTemplates?.total}

    + + + ${this._messageTemplates + ? this._messageTemplates.items.map( + (template) => + html` + { + this.#setCurrentQuery(`@MessageTemplate='${template.messageTemplate}'` ?? ''); + }} + href=${'/section/settings/logviewer/search?lg=@MessageTemplate%3D' + template.messageTemplate}> + ${template.messageTemplate} ${template.count} + + + ` + ) + : ''} + + + Show more +
    + `; + } +} + +declare global { + interface HTMLElementTagNameMap { + 'umb-log-viewer-message-templates-overview': UmbLogViewerMessageTemplatesOverviewElement; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/overview/components/log-viewer-saved-searches-overview.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/overview/components/log-viewer-saved-searches-overview.element.ts new file mode 100644 index 0000000000..588e51bd9f --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/overview/components/log-viewer-saved-searches-overview.element.ts @@ -0,0 +1,101 @@ +import { UUITextStyles } from '@umbraco-ui/uui-css'; +import { css, html } from 'lit'; +import { customElement, state } from 'lit/decorators.js'; +import { UmbLogViewerWorkspaceContext, UMB_APP_LOG_VIEWER_CONTEXT_TOKEN } from '../../../logviewer.context'; +import { UmbLitElement } from '@umbraco-cms/element'; +import { SavedLogSearchModel } from '@umbraco-cms/backend-api'; + +//TODO: implement the saved searches pagination when the API total bug is fixed +@customElement('umb-log-viewer-saved-searches-overview') +export class UmbLogViewerSavedSearchesOverviewElement extends UmbLitElement { + static styles = [ + UUITextStyles, + css` + uui-box { + height: 100%; + } + + ul { + list-style: none; + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; + } + + li { + display: flex; + align-items: center; + } + + li uui-icon { + margin-right: 1em; + } + `, + ]; + + @state() + private _savedSearches: SavedLogSearchModel[] = []; + + #logViewerContext?: UmbLogViewerWorkspaceContext; + constructor() { + super(); + this.consumeContext(UMB_APP_LOG_VIEWER_CONTEXT_TOKEN, (instance) => { + this.#logViewerContext = instance; + this.#logViewerContext?.getSavedSearches(); + this.#observeStuff(); + }); + } + + #observeStuff() { + if (!this.#logViewerContext) return; + this.observe(this.#logViewerContext.savedSearches, (savedSearches) => { + this._savedSearches = savedSearches ?? []; + }); + } + + #setCurrentQuery(query: string) { + this.#logViewerContext?.setFilterExpression(query); + } + + #renderSearchItem = (searchListItem: SavedLogSearchModel) => { + return html`
  • + { + this.#setCurrentQuery(searchListItem.query ?? ''); + }} + label="${searchListItem.name ?? ''}" + title="${searchListItem.name ?? ''}" + href=${'/section/settings/logviewer/search?lq=' + searchListItem.query} + >${searchListItem.name} +
  • `; + }; + + render() { + return html` +
      +
    • + { + this.#setCurrentQuery(''); + }} + label="All logs" + title="All logs" + href="/section/settings/logviewer/search" + >All logs +
    • + ${this._savedSearches.map(this.#renderSearchItem)} +
    +
    `; + } +} + +declare global { + interface HTMLElementTagNameMap { + 'umb-log-viewer-saved-searches-overview': UmbLogViewerSavedSearchesOverviewElement; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/overview/index.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/overview/index.ts new file mode 100644 index 0000000000..cf7acfb3b9 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/overview/index.ts @@ -0,0 +1,4 @@ +import './components'; +import { UmbLogViewerOverviewViewElement } from './log-overview-view.element'; + +export default UmbLogViewerOverviewViewElement; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/overview/log-overview-view.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/overview/log-overview-view.element.ts new file mode 100644 index 0000000000..38191cf274 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/overview/log-overview-view.element.ts @@ -0,0 +1,159 @@ +import { css, html } from 'lit'; +import { customElement, state } from 'lit/decorators.js'; +import { UmbLogViewerWorkspaceContext, UMB_APP_LOG_VIEWER_CONTEXT_TOKEN } from '../../logviewer.context'; +import { LogLevelCountsModel } from '@umbraco-cms/backend-api'; +import { UmbLitElement } from '@umbraco-cms/element'; + +//TODO: add a disabled attribute to the show more button when the total number of items is correctly returned from the endpoint +@customElement('umb-log-viewer-overview-view') +export class UmbLogViewerOverviewViewElement extends UmbLitElement { + static styles = [ + css` + :host { + display: block; + } + + #logviewer-layout { + margin: 20px; + height: calc(100vh - 160px); + display: grid; + grid-template-columns: 7fr 2fr; + grid-template-rows: 1fr 1fr; + gap: 20px 20px; + grid-auto-flow: row; + grid-template-areas: + 'saved-searches info' + 'common-messages info'; + } + + #info { + grid-area: info; + align-self: start; + display: grid; + grid-template-columns: repeat(2, 1fr); + grid-template-rows: repeat(4, 1fr); + gap: 20px 20px; + } + + #time-period { + grid-area: 1 / 1 / 2 / 3; + } + + #errors { + grid-area: 2 / 1 / 3 / 2; + } + + #level { + grid-area: 2 / 2 / 3 / 3; + } + + #log-lever { + color: var(--uui-color-positive); + text-align: center; + } + + #types { + grid-area: 3 / 1 / 5 / 3; + } + + #saved-searches-container, + to-many-logs-warning { + grid-area: saved-searches; + } + + #common-messages-container { + grid-area: common-messages; + --uui-box-default-padding: 0 var(--uui-size-space-5, 18px) var(--uui-size-space-5, 18px) + var(--uui-size-space-5, 18px); + } + + #common-messages-container > uui-box { + height: 100%; + } + + uui-label:nth-of-type(2) { + display: block; + margin-top: var(--uui-size-space-5); + } + + #error-count { + font-size: 4rem; + text-align: center; + color: var(--uui-color-danger); + } + `, + ]; + + @state() + private _errorCount = 0; + + @state() + private _logLevelCount: LogLevelCountsModel | null = null; + + @state() + private _canShowLogs = false; + + #logViewerContext?: UmbLogViewerWorkspaceContext; + constructor() { + super(); + this.consumeContext(UMB_APP_LOG_VIEWER_CONTEXT_TOKEN, (instance) => { + this.#logViewerContext = instance; + this.#observeErrorCount(); + this.#observeCanShowLogs(); + this.#logViewerContext?.getLogLevels(0, 100); + }); + } + + #observeErrorCount() { + if (!this.#logViewerContext) return; + + this.observe(this.#logViewerContext.logCount, () => { + this._errorCount = this._logLevelCount?.error ?? 0; + }); + } + + #observeCanShowLogs() { + if (!this.#logViewerContext) return; + this.observe(this.#logViewerContext.canShowLogs, (canShowLogs) => { + this._canShowLogs = canShowLogs ?? false; + }); + } + + render() { + return html` +
    +
    + + + + + +

    ${this._errorCount}

    +
    + + +

    +
    + + +
    + + ${this._canShowLogs + ? html`
    + +
    + +
    + +
    ` + : html``} +
    + `; + } +} + +declare global { + interface HTMLElementTagNameMap { + 'umb-log-viewer-overview-view': UmbLogViewerOverviewViewElement; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/search/components/index.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/search/components/index.ts new file mode 100644 index 0000000000..2157e5df73 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/search/components/index.ts @@ -0,0 +1,5 @@ +export * from './log-viewer-log-level-filter-menu.element'; +export * from './log-viewer-message.element'; +export * from './log-viewer-messages-list.element'; +export * from './log-viewer-polling-button.element'; +export * from './log-viewer-search-input.element'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/search/components/log-viewer-log-level-filter-menu.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/search/components/log-viewer-log-level-filter-menu.element.ts new file mode 100644 index 0000000000..dc72dcec91 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/search/components/log-viewer-log-level-filter-menu.element.ts @@ -0,0 +1,118 @@ +import { UUICheckboxElement } from '@umbraco-ui/uui'; +import { UUITextStyles } from '@umbraco-ui/uui-css'; +import { css, html } from 'lit'; +import { customElement, queryAll, state } from 'lit/decorators.js'; +import _ from 'lodash'; +import { UmbLogViewerWorkspaceContext, UMB_APP_LOG_VIEWER_CONTEXT_TOKEN } from '../../../logviewer.context'; +import { LogLevelModel } from '@umbraco-cms/backend-api'; +import { UmbLitElement } from '@umbraco-cms/element'; + +@customElement('umb-log-viewer-log-level-filter-menu') +export class UmbLogViewerLogLevelFilterMenuElement extends UmbLitElement { + static styles = [ + UUITextStyles, + css` + #log-level-selector { + padding: var(--uui-box-default-padding, var(--uui-size-space-5, 18px)); + width: 150px; + background-color: var(--uui-color-surface); + box-shadow: var(--uui-shadow-depth-3); + display: flex; + flex-direction: column; + gap: var(--uui-size-space-3); + } + + .log-level-button-indicator { + font-weight: 600; + } + + .log-level-button-indicator:not(:last-of-type)::after { + content: ', '; + } + `, + ]; + + @queryAll('#log-level-selector > uui-checkbox') + private _logLevelSelectorCheckboxes!: NodeListOf; + + @state() + private _logLevelFilter: LogLevelModel[] = []; + + #logViewerContext?: UmbLogViewerWorkspaceContext; + + constructor() { + super(); + this.consumeContext(UMB_APP_LOG_VIEWER_CONTEXT_TOKEN, (instance) => { + this.#logViewerContext = instance; + this.#observeLogLevelFilter(); + }); + } + + #observeLogLevelFilter() { + if (!this.#logViewerContext) return; + + this.observe(this.#logViewerContext.logLevelsFilter, (levelsFilter) => { + this._logLevelFilter = levelsFilter ?? []; + }); + } + + #setLogLevel() { + if (!this.#logViewerContext) return; + this.#logViewerContext?.setCurrentPage(1); + + const logLevels = Array.from(this._logLevelSelectorCheckboxes) + .filter((checkbox) => checkbox.checked) + .map((checkbox) => checkbox.value as LogLevelModel); + this.#logViewerContext?.setLogLevelsFilter(logLevels); + this.#logViewerContext.getLogs(); + } + + setLogLevelDebounce = _.debounce(this.#setLogLevel, 300); + + #selectAllLogLevels() { + this._logLevelSelectorCheckboxes.forEach((checkbox) => (checkbox.checked = true)); + this.#setLogLevel(); + } + + #deselectAllLogLevels() { + this._logLevelSelectorCheckboxes.forEach((checkbox) => (checkbox.checked = false)); + this.#setLogLevel(); + } + + #renderLogLevelSelector() { + return html` +
    + ${Object.values(LogLevelModel).map( + (logLevel) => + html`` + )} + Select all + Deselect all +
    + `; + } + + render() { + return html` + Log Level: + ${this._logLevelFilter.length > 0 + ? this._logLevelFilter.map((level) => html`${level}`) + : 'All'} + ${this.#renderLogLevelSelector()} + + `; + } +} + +declare global { + interface HTMLElementTagNameMap { + 'umb-log-viewer-log-level-filter-menu': UmbLogViewerLogLevelFilterMenuElement; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/search/components/log-viewer-message.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/search/components/log-viewer-message.element.ts new file mode 100644 index 0000000000..8bc5edb9c6 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/search/components/log-viewer-message.element.ts @@ -0,0 +1,303 @@ +import { UUITextStyles } from '@umbraco-ui/uui-css'; +import { css, html, PropertyValueMap } from 'lit'; +import { customElement, property, query, state } from 'lit/decorators.js'; +import { UmbLogViewerWorkspaceContext, UMB_APP_LOG_VIEWER_CONTEXT_TOKEN } from '../../../logviewer.context'; +import { LogLevelModel, LogMessagePropertyModel } from '@umbraco-cms/backend-api'; +import { UmbLitElement } from '@umbraco-cms/element'; + +//TODO: check how to display EventId field in the message properties +@customElement('umb-log-viewer-message') +export class UmbLogViewerMessageElement extends UmbLitElement { + static styles = [ + UUITextStyles, + css` + :host > details { + border-top: 1px solid var(--uui-color-border); + } + + :host(:last-child) > details { + border-bottom: 1px solid var(--uui-color-border); + } + + summary { + display: flex; + } + + details[open] { + margin-bottom: var(--uui-size-space-3); + } + + summary:hover, + #properties-list { + background-color: var(--uui-color-background); + } + + #properties-list { + margin: 0; + padding: 0; + list-style: none; + margin-bottom: var(--uui-size-space-3); + } + + .property { + padding: 10px 20px; + display: flex; + border-top: 1px solid var(--uui-color-border); + } + + summary > div { + box-sizing: border-box; + padding: 10px 20px; + display: flex; + align-items: center; + } + + #timestamp { + flex: 1 0 14ch; + } + + #level, + #machine { + flex: 1 0 14ch; + } + + #message { + flex: 6 0 14ch; + } + + .property-name, + .property-value { + display: flex; + align-items: center; + } + + .property-name { + font-weight: 600; + flex: 1 1 20ch; + } + + .property-value { + flex: 3 0 20ch; + } + + #search-menu { + margin: 0; + padding: 0; + margin-top: var(--uui-size-space-3); + background-color: var(--uui-color-surface); + box-shadow: var(--uui-shadow-depth-3); + max-width: 25%; + } + + #search-menu > li { + padding: 0; + } + + .search-item { + width: 100%; + } + + pre { + background-color: var(--uui-color-background); + border-top: 1px solid #d8d7d9; + border-left: 4px solid #d42054; + color: #303033; + display: block; + font-family: Lato, Helvetica Neue, Helvetica, Arial, sans-serif; + line-height: 20px; + margin: 0; + overflow-x: auto; + padding: 9.5px; + white-space: pre-wrap; + } + `, + ]; + + @query('details') + details!: HTMLDetailsElement; + + @property() + timestamp = ''; + + @state() + date?: Date; + + @property() + level: LogLevelModel | '' = ''; + + @property() + messageTemplate = ''; + + @property() + renderedMessage = ''; + + @property({ attribute: false }) + properties: Array = []; + + @property({ type: Boolean }) + open = false; + + @property() + exception = ''; + + willUpdate(changedProperties: Map) { + if (changedProperties.has('timestamp')) { + this.date = new Date(this.timestamp); + } + } + + protected updated(_changedProperties: PropertyValueMap | Map): void { + if (_changedProperties.has('open')) { + this.open ? this.details.setAttribute('open', 'true') : this.details.removeAttribute('open'); + } + } + + #logViewerContext?: UmbLogViewerWorkspaceContext; + constructor() { + super(); + this.consumeContext(UMB_APP_LOG_VIEWER_CONTEXT_TOKEN, (instance) => { + this.#logViewerContext = instance; + }); + } + + private _searchMenuData: Array<{ label: string; href: () => string; icon: string; title: string }> = [ + { + label: 'Search in Google', + title: '@logViewer_searchThisMessageWithGoogle', + href: () => `https://www.google.com/search?q=${this.renderedMessage}`, + icon: 'https://www.google.com/favicon.ico', + }, + { + label: 'Search in Bing', + title: 'Search this message with Bing', + href: () => `https://www.bing.com/search?q=${this.renderedMessage}`, + icon: 'https://www.bing.com/favicon.ico', + }, + { + label: 'Search in OurUmbraco', + title: 'Search this message on Our Umbraco forums and docs', + href: () => `https://our.umbraco.com/search?q=${this.renderedMessage}&content=wiki,forum,documentation`, + icon: 'https://our.umbraco.com/assets/images/app-icons/favicon.png', + }, + { + label: 'Search in OurUmbraco with Google', + title: 'Search Our Umbraco forums using Google', + href: () => + `https://www.google.co.uk/?q=site:our.umbraco.com ${this.renderedMessage}&safe=off#q=site:our.umbraco.com ${ + this.renderedMessage + } ${this.properties.find((property) => property.name === 'SourceContext')?.value}&safe=off"`, + icon: 'https://www.google.com/favicon.ico', + }, + { + label: 'Search Umbraco Source', + title: 'Search within Umbraco source code on Github', + href: () => + `https://github.com/umbraco/Umbraco-CMS/search?q=${ + this.properties.find((property) => property.name === 'SourceContext')?.value + }`, + icon: 'https://github.githubassets.com/favicon.ico', + }, + { + label: 'Search Umbraco Issues', + title: 'Search Umbraco Issues on Github', + href: () => + `https://github.com/umbraco/Umbraco-CMS/issues?q=${ + this.properties.find((property) => property.name === 'SourceContext')?.value + }`, + icon: 'https://github.githubassets.com/favicon.ico', + }, + ]; + + private _propertiesWithSearchMenu: Array = ['HttpRequestNumber', 'SourceContext', 'MachineName']; + + private _findLogsWithProperty({ name, value }: LogMessagePropertyModel) { + let queryString = ''; + + if (isNaN(+(value ?? ''))) { + queryString = name + "='" + value + "'"; + } else { + queryString = name + '=' + value; + } + + this.#logViewerContext?.setFilterExpression(queryString); + this.#logViewerContext?.setCurrentPage(1); + this.details.removeAttribute('open'); + this.#logViewerContext?.getLogs(); + } + + #setOpen(event: Event) { + this.open = (event.target as HTMLDetailsElement).open; + } + + render() { + return html` +
    + +
    ${this.date?.toLocaleString()}
    +
    + +
    +
    ${this.properties.find((property) => property.name === 'MachineName')?.value}
    +
    ${this.renderedMessage}
    +
    + ${this.exception ? html`
    ${this.exception}
    ` : ''} +
      +
    • +
      Timestamp
      +
      ${this.date?.toLocaleString()}
      +
    • +
    • +
      @MessageTemplate
      +
      ${this.messageTemplate}
      +
    • + ${this.properties.map( + (property) => + html`
    • +
      ${property.name}:
      +
      + ${property.value} + ${this._propertiesWithSearchMenu.includes(property.name ?? '') + ? html` { + this._findLogsWithProperty(property); + }} + look="secondary" + label="Find logs with ${property.name}" + title="Find logs with ${property.name}" + >` + : ''} +
      +
    • ` + )} +
    + + Search +
      + ${this._searchMenuData.map( + (menuItem) => html` +
    • + + + +
    • + ` + )} +
    +
    +
    + `; + } +} + +declare global { + interface HTMLElementTagNameMap { + 'umb-log-viewer-message': UmbLogViewerMessageElement; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/search/components/log-viewer-messages-list.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/search/components/log-viewer-messages-list.element.ts new file mode 100644 index 0000000000..4bccce5cb7 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/search/components/log-viewer-messages-list.element.ts @@ -0,0 +1,158 @@ +import { DirectionModel, LogMessageModel } from '@umbraco-cms/backend-api'; +import { UmbLitElement } from '@umbraco-cms/element'; +import { UUIScrollContainerElement, UUIPaginationElement } from '@umbraco-ui/uui'; +import { UUITextStyles } from '@umbraco-ui/uui-css'; +import { css, html } from 'lit'; +import { customElement, query, state } from 'lit/decorators.js'; +import { UmbLogViewerWorkspaceContext, UMB_APP_LOG_VIEWER_CONTEXT_TOKEN } from '../../../logviewer.context'; + +@customElement('umb-log-viewer-messages-list') +export class UmbLogViewerMessagesListElement extends UmbLitElement { + static styles = [ + UUITextStyles, + css` + #message-list-header { + display: flex; + font-weight: 600; + } + + #message-list-header > div { + box-sizing: border-box; + padding: 10px 20px; + display: flex; + align-items: center; + } + + #timestamp { + flex: 1 0 14ch; + } + + #level, + #machine { + flex: 1 0 14ch; + } + + #message { + flex: 6 0 14ch; + } + + #empty { + display: flex; + justify-content: center; + align-items: center; + gap: var(--uui-size-space-3); + } + + #pagination { + margin: var(--uui-size-space-5, 18px) 0; + } + `, + ]; + + @query('#logs-scroll-container') + private _logsScrollContainer!: UUIScrollContainerElement; + + @state() + private _sortingDirection: DirectionModel = DirectionModel.ASCENDING; + + @state() + private _logs: LogMessageModel[] = []; + + @state() + private _logsTotal = 0; + + #logViewerContext?: UmbLogViewerWorkspaceContext; + + constructor() { + super(); + this.consumeContext(UMB_APP_LOG_VIEWER_CONTEXT_TOKEN, (instance) => { + this.#logViewerContext = instance; + this.#observeLogs(); + this.#logViewerContext.getLogs(); + }); + } + + #observeLogs() { + if (!this.#logViewerContext) return; + + this.observe(this.#logViewerContext.logs, (logs) => { + this._logs = logs ?? []; + }); + + this.observe(this.#logViewerContext.logsTotal, (total) => { + this._logsTotal = total ?? 0; + }); + + this.observe(this.#logViewerContext.sortingDirection, (direction) => { + this._sortingDirection = direction; + }); + } + + #sortLogs() { + this.#logViewerContext?.toggleSortOrder(); + this.#logViewerContext?.setCurrentPage(1); + this.#logViewerContext?.getLogs(); + } + + _onPageChange(event: Event): void { + const current = (event.target as UUIPaginationElement).current; + this.#logViewerContext?.setCurrentPage(current); + this.#logViewerContext?.getLogs(); + this._logsScrollContainer.scrollTop = 0; + } + + private _renderPagination() { + if (!this._logsTotal) return ''; + + const totalPages = Math.ceil(this._logsTotal / 100); + + if (totalPages <= 1) return ''; + + return html``; + } + + render() { + return html` +

    Total items: ${this._logsTotal}

    +
    +
    + Timestamp + + + +
    +
    Level
    +
    Machine name
    +
    Message
    +
    + + ${this._logs.length > 0 + ? html` ${this._logs.map( + (log) => html`` + )}` + : html` + Sorry, we cannot find what you are looking for. + `} + + ${this._renderPagination()} +
    `; + } +} + +declare global { + interface HTMLElementTagNameMap { + 'umb-log-viewer-messages-list': UmbLogViewerMessagesListElement; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/search/components/log-viewer-polling-button.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/search/components/log-viewer-polling-button.element.ts new file mode 100644 index 0000000000..5ee674f1d4 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/search/components/log-viewer-polling-button.element.ts @@ -0,0 +1,138 @@ +import { UUIPopoverElement, UUISymbolExpandElement } from '@umbraco-ui/uui'; +import { UUITextStyles } from '@umbraco-ui/uui-css'; +import { css, html } from 'lit'; +import { customElement, query, state } from 'lit/decorators.js'; +import { + PoolingCOnfig, + PoolingInterval, + UmbLogViewerWorkspaceContext, + UMB_APP_LOG_VIEWER_CONTEXT_TOKEN, +} from '../../../logviewer.context'; +import { UmbLitElement } from '@umbraco-cms/element'; + +@customElement('umb-log-viewer-polling-button') +export class UmbLogViewerPollingButtonElement extends UmbLitElement { + static styles = [ + UUITextStyles, + css` + #polling-interval-menu { + margin: 0; + padding: 0; + width: 20ch; + background-color: var(--uui-color-surface); + box-shadow: var(--uui-shadow-depth-3); + display: flex; + flex-direction: column; + transform: translateX(calc((100% - 33px) * -1)); + } + + #polling-enabled-icon { + margin-right: var(--uui-size-space-3); + margin-bottom: 1px; + -webkit-animation: rotate-center 0.8s ease-in-out infinite both; + animation: rotate-center 0.8s ease-in-out infinite both; + } + + @-webkit-keyframes rotate-center { + 0% { + -webkit-transform: rotate(0); + transform: rotate(0); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } + } + @keyframes rotate-center { + 0% { + -webkit-transform: rotate(0); + transform: rotate(0); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } + } + `, + ]; + + @query('#polling-popover') + private _pollingPopover!: UUIPopoverElement; + + @query('#polling-expand-symbol') + private _polingExpandSymbol!: UUISymbolExpandElement; + + @state() + private _poolingConfig: PoolingCOnfig = { enabled: false, interval: 0 }; + + #pollingIntervals: PoolingInterval[] = [2000, 5000, 10000, 20000, 30000]; + + #logViewerContext?: UmbLogViewerWorkspaceContext; + + constructor() { + super(); + this.consumeContext(UMB_APP_LOG_VIEWER_CONTEXT_TOKEN, (instance) => { + this.#logViewerContext = instance; + this.#observePoolingConfig(); + this.#logViewerContext.getLogs(); + }); + } + + #observePoolingConfig() { + if (!this.#logViewerContext) return; + + this.observe(this.#logViewerContext.polling, (poolingConfig) => { + this._poolingConfig = { ...poolingConfig }; + }); + } + + #togglePolling() { + this.#logViewerContext?.togglePolling(); + } + + #setPolingInterval(interval: PoolingInterval) { + this.#logViewerContext?.setPollingInterval(interval); + this.#closePoolingPopover(); + } + + #openPoolingPopover() { + this._pollingPopover.open = true; + this._polingExpandSymbol.open = true; + } + + #closePoolingPopover() { + this._pollingPopover.open = false; + this._polingExpandSymbol.open = false; + } + + render() { + return html` + ${this._poolingConfig.enabled + ? html`Polling + ${this._poolingConfig.interval / 1000} seconds` + : 'Pooling'} + (this._polingExpandSymbol.open = false)}> + + + + +
      + ${this.#pollingIntervals.map( + (interval: PoolingInterval) => + html` this.#setPolingInterval(interval)}>` + )} +
    +
    +
    `; + } +} + +declare global { + interface HTMLElementTagNameMap { + 'umb-log-viewer-polling-button': UmbLogViewerPollingButtonElement; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/search/components/log-viewer-search-input.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/search/components/log-viewer-search-input.element.ts new file mode 100644 index 0000000000..c4ca1a8ffa --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/search/components/log-viewer-search-input.element.ts @@ -0,0 +1,211 @@ +import { UUIInputElement, UUIPopoverElement, UUISymbolExpandElement } from '@umbraco-ui/uui'; +import { UUITextStyles } from '@umbraco-ui/uui-css'; +import { css, html } from 'lit'; +import { customElement, query, state } from 'lit/decorators.js'; +import { UmbLogViewerWorkspaceContext, UMB_APP_LOG_VIEWER_CONTEXT_TOKEN } from '../../../logviewer.context'; +import { SavedLogSearchModel } from '@umbraco-cms/backend-api'; +import { UmbLitElement } from '@umbraco-cms/element'; + +@customElement('umb-log-viewer-search-input') +export class UmbLogViewerSearchInputElement extends UmbLitElement { + static styles = [ + UUITextStyles, + css` + :host { + display: flex; + align-items: center; + justify-content: space-between; + gap: var(--uui-size-space-4); + } + + #search-input { + width: 100%; + } + + #saved-searches-button { + flex-shrink: 0; + } + + #saved-searches-popover { + flex: 1; + } + + #saved-searches-container { + width: 100%; + max-height: 300px; + background-color: var(--uui-color-surface); + box-shadow: var(--uui-shadow-depth-1); + } + + .saved-search-item { + display: flex; + justify-content: space-between; + align-items: stretch; + border-bottom: 1px solid #e9e9eb; + } + + .saved-search-item-button { + display: flex; + font-family: inherit; + flex: 1; + background: 0 0; + padding: 0 0; + border: 0; + clear: both; + cursor: pointer; + display: flex; + font-weight: 400; + line-height: 20px; + text-align: left; + align-items: center; + white-space: nowrap; + color: var(--uui-color-interactive); + } + + .saved-search-item-button:hover { + background-color: var(--uui-color-surface-emphasis, rgb(250, 250, 250)); + color: var(--color-standalone); + } + + .saved-search-item-name { + font-weight: 600; + margin: 0 var(--uui-size-space-3); + } + + #polling-symbol-expand, + #saved-search-expand-symbol, + uui-symbol-sort { + margin-left: var(--uui-size-space-3); + } + `, + ]; + + @query('#saved-searches-popover') + private _savedSearchesPopover!: UUIPopoverElement; + + @query('#saved-search-expand-symbol') + private _savedSearchesExpandSymbol!: UUISymbolExpandElement; + + @state() + private _savedSearches: SavedLogSearchModel[] = []; + + @state() + private _inputQuery = ''; + + #logViewerContext?: UmbLogViewerWorkspaceContext; + + constructor() { + super(); + this.consumeContext(UMB_APP_LOG_VIEWER_CONTEXT_TOKEN, (instance) => { + this.#logViewerContext = instance; + this.#observeStuff(); + this.#logViewerContext.getLogs(); + }); + } + + #observeStuff() { + if (!this.#logViewerContext) return; + this.observe(this.#logViewerContext.savedSearches, (savedSearches) => { + this._savedSearches = savedSearches ?? []; + }); + + this.observe(this.#logViewerContext.filterExpression, (query) => { + this._inputQuery = query; + }); + } + + #toggleSavedSearchesPopover() { + this._savedSearchesPopover.open = !this._savedSearchesPopover.open; + } + + #toggleSavedSearchesExpandSymbol() { + this._savedSearchesExpandSymbol.open = !this._savedSearchesExpandSymbol.open; + } + + #openSavedSearchesPopover() { + this.#toggleSavedSearchesPopover(); + this.#toggleSavedSearchesExpandSymbol(); + } + + #setQuery(event: Event) { + const target = event.target as UUIInputElement; + this._inputQuery = target.value as string; + this.#logViewerContext?.setFilterExpression(this._inputQuery); + } + + #setQueryFromSavedSearch(query: string) { + this._inputQuery = query; + this.#logViewerContext?.setFilterExpression(query); + this.#logViewerContext?.setCurrentPage(1); + + this.#logViewerContext?.getLogs(); + this._savedSearchesPopover.open = false; + } + + #clearQuery() { + this._inputQuery = ''; + this.#logViewerContext?.setFilterExpression(''); + this.#logViewerContext?.getLogs(); + } + + #search() { + this.#logViewerContext?.setCurrentPage(1); + + this.#logViewerContext?.getLogs(); + } + + render() { + return html` + + ${this._inputQuery + ? html`` + : html``} + Saved searches + + + + ${this._savedSearches.map( + (search) => + html`
  • + +
  • ` + )} +
    +
    + Search`; + } +} + +declare global { + interface HTMLElementTagNameMap { + 'umb-log-viewer-search-input': UmbLogViewerSearchInputElement; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/search/index.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/search/index.ts new file mode 100644 index 0000000000..4760a61f5a --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/search/index.ts @@ -0,0 +1,4 @@ +import './components'; +import { UmbLogViewerSearchViewElement } from './log-search-view.element'; + +export default UmbLogViewerSearchViewElement; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/search/log-search-view.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/search/log-search-view.element.ts new file mode 100644 index 0000000000..91d032a69e --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/views/search/log-search-view.element.ts @@ -0,0 +1,87 @@ +import { UUITextStyles } from '@umbraco-ui/uui-css'; +import { css, html } from 'lit'; +import { customElement, state } from 'lit/decorators.js'; +import { UmbLitElement } from '@umbraco-cms/element'; +import { UmbLogViewerWorkspaceContext, UMB_APP_LOG_VIEWER_CONTEXT_TOKEN } from '../../logviewer.context'; + +@customElement('umb-log-viewer-search-view') +export class UmbLogViewerSearchViewElement extends UmbLitElement { + static styles = [ + UUITextStyles, + css` + #layout { + margin: 20px; + } + #levels-container, + #input-container { + display: flex; + align-items: center; + gap: var(--uui-size-space-4); + width: 100%; + margin-bottom: 20px; + } + + #levels-container { + justify-content: space-between; + } + + #dates-polling-container { + display: flex; + align-items: baseline; + } + + umb-log-viewer-search-input { + flex: 1; + } + + umb-log-viewer-date-range-selector { + flex-direction: row; + } + `, + ]; + + @state() + private _canShowLogs = false; + + #logViewerContext?: UmbLogViewerWorkspaceContext; + constructor() { + super(); + this.consumeContext(UMB_APP_LOG_VIEWER_CONTEXT_TOKEN, (instance) => { + this.#logViewerContext = instance; + this.#observeCanShowLogs(); + }); + } + + #observeCanShowLogs() { + if (!this.#logViewerContext) return; + this.observe(this.#logViewerContext.canShowLogs, (canShowLogs) => { + this._canShowLogs = canShowLogs ?? false; + }); + } + + render() { + return html` +
    +
    + +
    + + +
    +
    +
    + +
    + ${this._canShowLogs + ? html`` + : html``} +
    + `; + } +} + +declare global { + interface HTMLElementTagNameMap { + 'umb-log-viewer-search-view': UmbLogViewerSearchViewElement; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/button-with-dropdown/button-with-dropdown.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/button-with-dropdown/button-with-dropdown.element.ts new file mode 100644 index 0000000000..b9aeb923cd --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/button-with-dropdown/button-with-dropdown.element.ts @@ -0,0 +1,82 @@ +import { UUITextStyles } from '@umbraco-ui/uui-css'; +import { css, html, LitElement } from 'lit'; +import { customElement, property, query } from 'lit/decorators.js'; +import { PopoverPlacement, UUIPopoverElement, UUISymbolExpandElement } from '@umbraco-ui/uui'; +import { InterfaceColor, InterfaceLook } from '@umbraco-ui/uui-base/lib/types'; + +// TODO: maybe this should go to UI library? It's a common pattern +// TODO: consider not using this, but instead use dropdown, which is more generic shared component of backoffice. (this is at the movement only used in Log Viewer) +@customElement('umb-button-with-dropdown') +export class UmbButtonWithDropdownElement extends LitElement { + static styles = [ + UUITextStyles, + css` + uui-symbol-expand { + margin-left: var(--uui-size-space-3); + } + `, + ]; + + @property() + label = ''; + + @property() + open = false; + + @property() + look: InterfaceLook = 'default'; + + @property() + color: InterfaceColor = 'default'; + + @property() + placement: PopoverPlacement = 'bottom-start'; + + @query('#symbol-expand') + symbolExpand!: UUISymbolExpandElement; + + @query('#popover') + popover!: UUIPopoverElement; + + #openPopover() { + this.open = true; + this.popover.open = true; + this.symbolExpand.open = true; + } + + #closePopover() { + this.open = false; + this.popover.open = false; + this.symbolExpand.open = false; + } + + #togglePopover() { + this.open ? this.#closePopover() : this.#openPopover(); + } + + render() { + return html` + + + + + +
    + +
    +
    + `; + } +} + +declare global { + interface HTMLElementTagNameMap { + 'umb-button-with-dropdown': UmbButtonWithDropdownElement; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/button-with-dropdown/button-with-dropdown.stories.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/button-with-dropdown/button-with-dropdown.stories.ts new file mode 100644 index 0000000000..4c73fc1dfa --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/button-with-dropdown/button-with-dropdown.stories.ts @@ -0,0 +1,17 @@ +import './button-with-dropdown.element'; + +import { Meta, Story } from '@storybook/web-components'; +import { html } from 'lit-html'; +import { UmbButtonWithDropdownElement } from './button-with-dropdown.element'; + +export default { + title: 'Components/Button with dropdown', + component: 'umb-button-with-dropdown', + id: 'umb-button-with-dropdown', +} as Meta; + +export const AAAOverview: Story = () => html` + Open me +
    I am a dropdown
    +
    `; +AAAOverview.storyName = 'Overview'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/donut-chart/donut-chart.stories.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/donut-chart/donut-chart.stories.ts new file mode 100644 index 0000000000..72529b5b1e --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/donut-chart/donut-chart.stories.ts @@ -0,0 +1,20 @@ +import './donut-slice'; +import './donut-chart'; + +import { Meta } from '@storybook/web-components'; +import { html } from 'lit-html'; + +export default { + title: 'Components/Donut chart', + component: 'umb-donut-chart', + id: 'umb-donut-chart', + tags: ['autodocs'], +} as Meta; + +export const AAAOverview = () => html` + + + + +`; +AAAOverview.storyName = 'Overview'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/donut-chart/donut-chart.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/donut-chart/donut-chart.ts new file mode 100644 index 0000000000..916ce79310 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/donut-chart/donut-chart.ts @@ -0,0 +1,337 @@ +import { UUITextStyles } from '@umbraco-ui/uui-css'; +import { css, html, LitElement, svg } from 'lit'; +import { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js'; +import { clamp } from 'lodash-es'; +import { UmbDonutSliceElement } from './donut-slice'; + +export interface Circle { + color: string; + name: string; + percent: number; + kind: string; +} + +interface CircleWithCommands extends Circle { + offset: number; + commands: string; +} +//TODO: maybe move to UI Library +/** + * This is a donut chart component that can be used to display data in a circular way. + * + * @export + * @class UmbDonutChartElement + * @extends {LitElement} + */ +@customElement('umb-donut-chart') +export class UmbDonutChartElement extends LitElement { + static percentToDegrees(percent: number): number { + return percent * 3.6; + } + + static styles = [ + UUITextStyles, + css` + path { + pointer-events: visibleFill; + } + .circle { + filter: url(#erode); + } + + .highlight { + transition: opacity 200ms linear; + filter: url(#filter); + opacity: 0; + } + + .highlight:hover { + opacity: 0.5; + } + + #container { + position: relative; + width: 200px; + } + + #details-box { + background: #ffffffe6; + border: 1px solid var(--uui-color-border-standalone); + border-radius: var(--uui-border-radius); + box-sizing: border-box; + top: 0; + left: 0; + position: absolute; + opacity: 0; + padding: 0.5em; + line-height: 1.5; + font-size: var(--uui-type-small-size); + box-shadow: var(--uui-shadow-depth-1); + transform: translate3d(var(--pos-x), var(--pos-y), 0); + transition: transform 0.2s cubic-bezier(0.02, 1.23, 0.79, 1.08); + transition: opacity 150ms linear; + } + + #details-box.show { + opacity: 1; + } + + #details-box uui-icon { + /* optically correct alignment */ + color: var(--umb-donut-detail-color); + margin-right: 0.2em; + } + + #details-title { + font-weight: bold; + display: flex; + align-items: center; + } + `, + ]; + + /** + * Circle radius in pixels + * + * @memberof UmbDonutChartElement + */ + @property({ type: Number }) + radius = 45; + + /** + * The circle thickness in pixels + * + * @memberof UmbDonutChartElement + */ + @property({ type: Number, attribute: 'border-size' }) + borderSize = 20; + + /** + * The size of SVG element in pixels + * + * @memberof UmbDonutChartElement + */ + @property({ type: Number, attribute: 'svg-size' }) + svgSize = 100; + + /** + * Description of the graph, added for accessibility purposes + * + * @memberof UmbDonutChartElement + */ + @property() + description = ''; + + /** + * Hides the box that appears oh hover with the details of the slice + * + * @memberof UmbDonutChartElement + */ + @property({ type: Boolean }) + hideDetailBox = false; + + @queryAssignedElements({ selector: 'umb-donut-slice' }) + private _slices!: UmbDonutSliceElement[]; + + @query('#container') + private _container!: HTMLDivElement; + + @query('#details-box') + private _detailsBox!: HTMLDivElement; + + @state() + private circles: CircleWithCommands[] = []; + + @state() + private viewBox = 100; + + @state() + private _posY = 0; + + @state() + private _posX = 0; + + @state() + private _detailName = ''; + + @state() + private _detailAmount = 0; + + @state() + private _detailColor = 'black'; + + @state() + private _totalAmount = 0; + + @state() + private _detailKind = ''; + + #containerBounds: DOMRect | undefined; + + firstUpdated() { + this.#containerBounds = this._container.getBoundingClientRect(); + } + + protected willUpdate(_changedProperties: Map): void { + if (_changedProperties.has('radius') || _changedProperties.has('borderSize') || _changedProperties.has('svgSize')) { + if (this.borderSize > this.radius) { + throw new Error('Border size cannot be bigger than radius'); + } + + this.#printCircles(); + } + + + } + + #calculatePercentage(partialValue: number) { + if (this._totalAmount === 0) return 0; + const percent = Math.round((100 * partialValue) / this._totalAmount); + return clamp(percent, 0, 99); + } + + #printCircles(event: Event | null = null) { + this._totalAmount = this._slices.reduce((acc, slice) => acc + slice.amount, 0); + event?.stopPropagation(); + this.circles = this.#addCommands( + this._slices.map((slice) => { + return { + percent: this.#calculatePercentage(slice.amount), + color: slice.color, + name: slice.name, + kind: slice.kind, + }; + }) + ); + } + + #addCommands(Circles: Circle[]): CircleWithCommands[] { + let previousPercent = 0; + return Circles.map((slice) => { + const sliceWithCommands: CircleWithCommands = { + ...slice, + commands: this.#getSliceCommands(slice, this.radius, this.svgSize, this.borderSize), + offset: previousPercent * 3.6 * -1, + }; + previousPercent += slice.percent; + return sliceWithCommands; + }); + } + + #getSliceCommands(Circle: Circle, radius: number, svgSize: number, borderSize: number): string { + const degrees = UmbDonutChartElement.percentToDegrees(Circle.percent); + const longPathFlag = degrees > 180 ? 1 : 0; + const innerRadius = radius - borderSize; + + const commands: string[] = []; + commands.push(`M ${svgSize / 2 + radius} ${svgSize / 2}`); + commands.push(`A ${radius} ${radius} 0 ${longPathFlag} 0 ${this.#getCoordFromDegrees(degrees, radius, svgSize)}`); + commands.push(`L ${this.#getCoordFromDegrees(degrees, innerRadius, svgSize)}`); + commands.push(`A ${innerRadius} ${innerRadius} 0 ${longPathFlag} 1 ${svgSize / 2 + innerRadius} ${svgSize / 2}`); + return commands.join(' '); + } + + #getCoordFromDegrees(angle: number, radius: number, svgSize: number): string { + const x = Math.cos((angle * Math.PI) / 180); + const y = Math.sin((angle * Math.PI) / 180); + const coordX = x * radius + svgSize / 2; + const coordY = y * -radius + svgSize / 2; + return [coordX, coordY].join(' '); + } + + #calculateDetailsBoxPosition = (event: MouseEvent) => { + const x = this.#containerBounds ? event.clientX - this.#containerBounds?.left : 0; + const y = this.#containerBounds ? event.clientY - this.#containerBounds?.top : 0; + this._posX = x - 10; + this._posY = y - 70; + }; + + #setDetailsBoxData(event: MouseEvent) { + const target = event.target as SVGPathElement; + const index = target.dataset.index as unknown as number; + const circle = this.circles[index]; + this._detailName = circle.name; + this._detailAmount = circle.percent; + this._detailColor = circle.color; + this._detailKind = circle.kind; + } + + #showDetailsBox(event: MouseEvent) { + if (this.hideDetailBox) return; + this.#setDetailsBoxData(event); + this._detailsBox.classList.add('show'); + } + + #hideDetailsBox() { + if (this.hideDetailBox) return; + this._detailsBox.classList.remove('show'); + } + + #renderCircles() { + return svg` + + + + + + + + + + + + + + + + ${this.description} + ${this.circles.map( + (circle, i) => svg` + + + + ` + )} + + `; + } + + render() { + return html`
    + ${this.#renderCircles()} +
    +
    ${this._detailName}
    + ${this._detailAmount} ${this._detailKind} +
    +
    + `; + } +} + +declare global { + interface HTMLElementTagNameMap { + 'umb-donut-chart': UmbDonutChartElement; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/donut-chart/donut-slice.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/donut-chart/donut-slice.ts new file mode 100644 index 0000000000..b485803986 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/donut-chart/donut-slice.ts @@ -0,0 +1,51 @@ +import { LitElement } from 'lit'; +import { customElement, property } from 'lit/decorators.js'; +/** + * This component is used to display a single slice of a donut chart. It only makes sense insice the donut chart + * + * @export + * @class UmbDonutSliceElement + * @fires slice-update - This event is fired when the slice is updated + * @extends {LitElement} + */ +@customElement('umb-donut-slice') +export class UmbDonutSliceElement extends LitElement { + /** + * Number of items that this slice represents + * + * @memberof UmbDonutSliceElement + */ + @property({ type: Number }) + amount = 0; + /** + * Color of the slice. Any valid css color is accepted, custom properties are also supported + * + * @memberof UmbDonutSliceElement + */ + @property() + color = 'red'; + /** + * Name of the slice. This is used to display the name of the slice in the donut chart + * + * @memberof UmbDonutSliceElement + */ + @property() + name = ''; + /** + * Kind of the slice. This is shown on a details box when hovering over the slice + * + * @memberof UmbDonutSliceElement + */ + @property() + kind = ''; + + willUpdate() { + this.dispatchEvent(new CustomEvent('slice-update', { composed: true, bubbles: true })); + } +} + +declare global { + interface HTMLElementTagNameMap { + 'umb-donut-slice': UmbDonutSliceElement; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/donut-chart/index.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/donut-chart/index.ts new file mode 100644 index 0000000000..218f52b18f --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/donut-chart/index.ts @@ -0,0 +1,2 @@ +export * from './donut-chart'; +export * from './donut-slice'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/dropdown/dropdown.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/dropdown/dropdown.element.ts index ab21ee4f5e..20a72a57d9 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/dropdown/dropdown.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/dropdown/dropdown.element.ts @@ -3,6 +3,7 @@ import { css, html, nothing } from 'lit'; import { customElement, property } from 'lit/decorators.js'; import { UmbLitElement } from '@umbraco-cms/element'; +// TODO: maybe move this to UI Library. @customElement('umb-dropdown') export class UmbDropdownElement extends UmbLitElement { static styles = [ diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/index.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/index.ts index 58f9694311..cb63f61786 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/index.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/index.ts @@ -7,8 +7,10 @@ import './backoffice-frame/backoffice-header.element'; import './backoffice-frame/backoffice-main.element'; import './backoffice-frame/backoffice-modal-container.element'; import './backoffice-frame/backoffice-notification-container.element'; +import './button-with-dropdown/button-with-dropdown.element'; import './code-block/code-block.element'; import './debug/debug.element'; +import './donut-chart'; import './dropdown/dropdown.element'; import './empty-state/empty-state.element'; import './extension-slot/extension-slot.element'; diff --git a/src/Umbraco.Web.UI.Client/src/core/mocks/browser-handlers.ts b/src/Umbraco.Web.UI.Client/src/core/mocks/browser-handlers.ts index 014a4e8c61..29f1f1d104 100644 --- a/src/Umbraco.Web.UI.Client/src/core/mocks/browser-handlers.ts +++ b/src/Umbraco.Web.UI.Client/src/core/mocks/browser-handlers.ts @@ -24,6 +24,7 @@ import { handlers as templateHandlers } from './domains/template.handlers'; import { handlers as languageHandlers } from './domains/language.handlers'; import { handlers as cultureHandlers } from './domains/culture.handlers'; import { handlers as redirectManagementHandlers } from './domains/redirect-management.handlers'; +import { handlers as logViewerHandlers } from './domains/log-viewer.handlers'; import { handlers as packageHandlers } from './domains/package.handlers'; const handlers = [ @@ -52,6 +53,7 @@ const handlers = [ ...languageHandlers, ...cultureHandlers, ...redirectManagementHandlers, + ...logViewerHandlers, ...packageHandlers, ]; diff --git a/src/Umbraco.Web.UI.Client/src/core/mocks/data/data.ts b/src/Umbraco.Web.UI.Client/src/core/mocks/data/data.ts index 7b405ceed8..8f08949ada 100644 --- a/src/Umbraco.Web.UI.Client/src/core/mocks/data/data.ts +++ b/src/Umbraco.Web.UI.Client/src/core/mocks/data/data.ts @@ -5,4 +5,8 @@ export class UmbData { constructor(data: Array) { this.data = data; } + + get total() { + return this.data.length; + } } diff --git a/src/Umbraco.Web.UI.Client/src/core/mocks/data/log-viewer.data.ts b/src/Umbraco.Web.UI.Client/src/core/mocks/data/log-viewer.data.ts new file mode 100644 index 0000000000..b74e755fa9 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/core/mocks/data/log-viewer.data.ts @@ -0,0 +1,413 @@ +import { logs } from './logs.data'; +import { UmbData } from './data'; +import { LogMessageModel, LogTemplateModel, SavedLogSearchModel } from '@umbraco-cms/backend-api'; + +// Temp mocked database +class UmbLogviewerSearchesData extends UmbData { + constructor(data: SavedLogSearchModel[]) { + super(data); + } + + // skip can be number or null + getSavedSearches(skip = 0, take = this.data.length): Array { + return this.data.slice(skip, take); + } + + getByName(name: string) { + return this.data.find((search) => search.name === name); + } +} + +class UmbLogviewerTemplatesData extends UmbData { + constructor(data: LogTemplateModel[]) { + super(data); + } + + // skip can be number or null + getTemplates(skip = 0, take = this.data.length): Array { + return this.data.slice(skip, take); + } +} + +class UmbLogviewerMessagesData extends UmbData { + constructor(data: LogTemplateModel[]) { + super(data); + } + + // skip can be number or null + getLogs(skip = 0, take = this.data.length): Array { + return this.data.slice(skip, take); + } + + getLevelCount() { + const levels = this.data.map((log) => log.level ?? 'unknown'); + const counts = {}; + levels.forEach((level: string) => { + //eslint-disable-next-line @typescript-eslint/ban-ts-comment + //@ts-ignore + counts[level ?? 'unknown'] = (counts[level] || 0) + 1; + }); + return counts; + } +} + +export const savedSearches: Array = [ + { + name: 'Find all logs where the Level is NOT Verbose and NOT Debug', + query: "Not(@Level='Verbose') and Not(@Level='Debug')", + }, + { + name: 'Find all logs that has an exception property (Warning, Error & Fatal with Exceptions)', + query: 'Has(@Exception)', + }, + { + name: "Find all logs that have the property 'Duration'", + query: 'Has(Duration)', + }, + { + name: "Find all logs that have the property 'Duration' and the duration is greater than 1000ms", + query: 'Has(Duration) and Duration > 1000', + }, + { + name: "Find all logs that are from the namespace 'Umbraco.Core'", + query: "StartsWith(SourceContext, 'Umbraco.Core')", + }, + { + name: 'Find all logs that use a specific log message template', + query: "@messageTemplate = '[Timing {TimingId}] {EndMessage} ({TimingDuration}ms)'", + }, + { + name: 'Find logs where one of the items in the SortedComponentTypes property array is equal to', + query: "SortedComponentTypes[?] = 'Umbraco.Web.Search.ExamineComponent'", + }, + { + name: 'Find logs where one of the items in the SortedComponentTypes property array contains', + query: "Contains(SortedComponentTypes[?], 'DatabaseServer')", + }, + { + name: 'Find all logs that the message has localhost in it with SQL like', + query: "@Message like '%localhost%'", + }, + { + name: "Find all logs that the message that starts with 'end' in it with SQL like", + query: "@Message like 'end%'", + }, + { + name: 'bla', + query: 'bla bla', + }, +]; + +export const messageTemplates: LogTemplateModel[] = [ + { + messageTemplate: 'Create Foreign Key:\n {Sql}', + count: 90, + }, + { + messageTemplate: 'Create Index:\n {Sql}', + count: 86, + }, + { + messageTemplate: 'Create table:\n {Sql}', + count: 82, + }, + { + messageTemplate: 'Create Primary Key:\n {Sql}', + count: 78, + }, + { + messageTemplate: 'Creating data in {TableName}', + count: 58, + }, + { + messageTemplate: 'Completed creating data in {TableName}', + count: 58, + }, + { + messageTemplate: 'New table {TableName} was created', + count: 58, + }, + { + messageTemplate: 'At {OrigState}', + count: 18, + }, + { + messageTemplate: 'SQL [{ContextIndex}]: {Sql}', + count: 15, + }, + { + messageTemplate: '{StartMessage} [Timing {TimingId}]', + count: 14, + }, + { + messageTemplate: '{EndMessage} ({Duration}ms) [Timing {TimingId}]', + count: 14, + }, + { + messageTemplate: 'Execute {MigrationType}', + count: 13, + }, + { + messageTemplate: "Assigned Deploy permission letter '{Permission}' to user group '{UserGroupAlias}'", + count: 6, + }, + { + messageTemplate: "Starting '{MigrationName}'...", + count: 5, + }, + { + messageTemplate: 'Done (pending scope completion).', + count: 5, + }, + { + messageTemplate: + "Umbraco Forms scheduled record deletion task will not run as it has been not enabled via configuration. To enable, set the configuration value at 'Umbraco:Forms:Options:ScheduledRecordDeletion:Enabled' to true.", + count: 5, + }, + { + messageTemplate: + 'Mapped Umbraco.Cloud.Deployment.SiteExtension.Messages.External.Git.ApplyChangesFromWwwRootToRepositoryCommand -> "siteext-input-queue"', + count: 3, + }, + { + messageTemplate: 'Bus "Rebus 1" started', + count: 3, + }, + { + messageTemplate: 'Acquiring MainDom.', + count: 3, + }, + { + messageTemplate: 'Acquired MainDom.', + count: 3, + }, + { + messageTemplate: 'Profiler is VoidProfiler, not profiling (must run debug mode to profile).', + count: 3, + }, + { + messageTemplate: + "Found single permission letter for '{LegacyPermission}' on user group '{UserGroupAlias}', assuming this is the 'Notifications' permission instead of the Deploy 'Queue for transfer' permission", + count: 3, + }, + { + messageTemplate: 'Started :: Running {edition} edition', + count: 3, + }, + { + messageTemplate: + "File system watcher for deploy events started with filter 'deploy*' and notify filter 'FileName'.", + count: 3, + }, + { + messageTemplate: 'Application started. Press Ctrl+C to shut down.', + count: 3, + }, + { + messageTemplate: 'Hosting environment: {envName}', + count: 3, + }, + { + messageTemplate: 'Content root path: {contentRoot}', + count: 3, + }, + { + messageTemplate: + 'Database migration step not completed: could not create primary key constraint on UFRecordDataLongString as a primary key already exists.', + count: 2, + }, + { + messageTemplate: + 'No last synced Id found, this generally means this is a new server/install. A cold boot will be triggered.', + count: 2, + }, + { + messageTemplate: 'Deploy permissions updated and saved', + count: 2, + }, + { + messageTemplate: 'Starting :: Running on Umbraco Cloud', + count: 2, + }, + { + messageTemplate: + 'Registered with MainDom, localContentDbExists? {LocalContentDbExists}, localMediaDbExists? {LocalMediaDbExists}', + count: 2, + }, + { + messageTemplate: 'Creating the content store, localContentDbExists? {LocalContentDbExists}', + count: 2, + }, + { + messageTemplate: 'Creating the media store, localMediaDbExists? {LocalMediaDbExists}', + count: 2, + }, + { + messageTemplate: 'Stopping ({SignalSource})', + count: 2, + }, + { + messageTemplate: 'Released ({SignalSource})', + count: 2, + }, + { + messageTemplate: 'Application is shutting down...', + count: 2, + }, + { + messageTemplate: 'Bus "Rebus 1" stopped', + count: 2, + }, + { + messageTemplate: 'Queued Hosted Service is stopping.', + count: 2, + }, + { + messageTemplate: 'User logged will be logged out due to timeout: {Username}, IP Address: {IPAddress}', + count: 2, + }, + { + messageTemplate: 'Starting unattended install.', + count: 1, + }, + { + messageTemplate: 'Unattended install completed.', + count: 1, + }, + { + messageTemplate: 'Configured with Azure database.', + count: 1, + }, + { + messageTemplate: 'Initialized the SqlServer database schema.', + count: 1, + }, + { + messageTemplate: + 'Database migration step not completed: could not create primary key constraint on UFRecordDataBit as a primary key already exists.', + count: 1, + }, + { + messageTemplate: + 'Database migration step not completed: could not create primary key constraint on UFRecordDataDateTime as a primary key already exists.', + count: 1, + }, + { + messageTemplate: + 'Database migration step not completed: could not create primary key constraint on UFRecordDataInteger as a primary key already exists.', + count: 1, + }, + { + messageTemplate: + 'Database migration step not completed: could not create primary key constraint on UFUserFormSecurity as a primary key already exists.', + count: 1, + }, + { + messageTemplate: + 'Database migration step not completed: could not create primary key constraint on UFUserGroupSecurity as a primary key already exists.', + count: 1, + }, + { + messageTemplate: + 'Database migration step not completed: could not create primary key constraint on UFUserGroupFormSecurity as a primary key already exists.', + count: 1, + }, + { + messageTemplate: + 'Database NuCache was serialized using {CurrentSerializer}. Currently configured NuCache serializer {Serializer}. Rebuilding Nucache', + count: 1, + }, + { + messageTemplate: 'Starting :: Running locally', + count: 1, + }, + { + messageTemplate: 'No XML encryptor configured. Key {KeyId:B} may be persisted to storage in unencrypted form.', + count: 1, + }, + { + messageTemplate: 'Started :: Transitioned from azure init marker to deploy marker', + count: 1, + }, + { + messageTemplate: 'Found {diskReadTrigger} or {diskReadOnStartTrigger} trigger file when starting, processing...', + count: 1, + }, + { + messageTemplate: 'Beginning deployment {id}.', + count: 1, + }, + { + messageTemplate: 'Suspend scheduled publishing.', + count: 1, + }, + { + messageTemplate: 'Preparing', + count: 1, + }, + { + messageTemplate: 'Reading state', + count: 1, + }, + { + messageTemplate: 'No artifacts', + count: 1, + }, + { + messageTemplate: 'Restore caches and indexes', + count: 1, + }, + { + messageTemplate: 'Resume scheduled publishing.', + count: 1, + }, + { + messageTemplate: 'Complete', + count: 1, + }, + { + messageTemplate: 'Deployment {id} completed.', + count: 1, + }, + { + messageTemplate: 'Work Status {WorkStatus}.', + count: 1, + }, + { + messageTemplate: 'Released from MainDom', + count: 1, + }, + { + messageTemplate: "Keep alive failed (at '{keepAlivePingUrl}').", + count: 1, + }, + { + messageTemplate: 'Adding examine event handlers for {RegisteredIndexers} index providers.', + count: 1, + }, + { + messageTemplate: 'Document {ContentName} (id={ContentId}) has been published.', + count: 1, + }, +]; + +export const logLevels = { + total: 2, + items: [ + { + name: 'Global', + level: 'Information', + }, + { + name: 'UmbracoFile', + level: 'Verbose', + }, + ], +}; + +export const umbLogviewerData = { + searches: new UmbLogviewerSearchesData(savedSearches), + templates: new UmbLogviewerTemplatesData(messageTemplates), + logs: new UmbLogviewerMessagesData(logs), + logLevels: logLevels, +}; diff --git a/src/Umbraco.Web.UI.Client/src/core/mocks/data/logs.data.ts b/src/Umbraco.Web.UI.Client/src/core/mocks/data/logs.data.ts new file mode 100644 index 0000000000..974ec00f50 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/core/mocks/data/logs.data.ts @@ -0,0 +1,7350 @@ +import { LogLevelModel, LogMessageModel } from '@umbraco-cms/backend-api'; + +const allLogs = [ + { + timestamp: '2023-02-14T12:02:15.8094382+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: 'c80ec31d-3d58-401a-9361-1ae7451c215f', + }, + { + name: 'HttpRequestNumber', + value: '982', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:02:15.7464278+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '77052e32-93ab-426f-b96c-4c71fab7d48a', + }, + { + name: 'HttpRequestNumber', + value: '981', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:02:10.7972442+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '1cec3ec5-4980-4bfc-bdf4-085070da6f4d', + }, + { + name: 'HttpRequestNumber', + value: '980', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:02:10.735678+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '6941710a-4f09-41b2-8f11-fce2c813ad10', + }, + { + name: 'HttpRequestNumber', + value: '979', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:02:05.7944643+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '5e129d0e-595d-43f4-9055-7ea218347659', + }, + { + name: 'HttpRequestNumber', + value: '978', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:02:05.7340093+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: 'a760748a-43cd-4132-9f51-c518df8ae368', + }, + { + name: 'HttpRequestNumber', + value: '977', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:02:00.7904684+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '3acbe275-1340-4d92-a2f9-8b15eea7c5da', + }, + { + name: 'HttpRequestNumber', + value: '976', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:02:00.7298561+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '09ab7c8b-ae78-4b86-adff-e82bf9bed66e', + }, + { + name: 'HttpRequestNumber', + value: '975', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:01:55.7815654+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '3252af15-c998-4463-b9c0-18d663d65c53', + }, + { + name: 'HttpRequestNumber', + value: '974', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:01:55.7215251+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: 'aa6552dc-226d-4302-ab2f-6a1ae7b82205', + }, + { + name: 'HttpRequestNumber', + value: '973', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:01:50.7812088+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '85f8e869-9b32-49f7-a0b6-e1be33258230', + }, + { + name: 'HttpRequestNumber', + value: '972', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:01:50.7176788+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '70effdd7-f20a-4c54-bdf1-573f12c5c4df', + }, + { + name: 'HttpRequestNumber', + value: '971', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:01:45.7721389+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '62c6c02d-91b2-414d-82d6-ba6485cd901d', + }, + { + name: 'HttpRequestNumber', + value: '970', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:01:45.7101655+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '88ee8366-0cbe-465f-ab06-39e082f62cc3', + }, + { + name: 'HttpRequestNumber', + value: '969', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:01:40.7656432+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '72c6403d-097d-4274-b77e-9c33afe05705', + }, + { + name: 'HttpRequestNumber', + value: '968', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:01:40.7034373+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: 'da7ddb6d-ec9b-44aa-9376-b38f9dbf16ea', + }, + { + name: 'HttpRequestNumber', + value: '967', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:01:35.7586458+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: 'ada57301-d4fe-4399-acab-5506b96f0724', + }, + { + name: 'HttpRequestNumber', + value: '966', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:01:35.6957643+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '4603522a-12fa-43fa-b171-170c0a7dee91', + }, + { + name: 'HttpRequestNumber', + value: '965', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:01:30.7559798+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: 'bb012edc-36c7-4426-86e3-525e8c2ff44e', + }, + { + name: 'HttpRequestNumber', + value: '964', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:01:30.6937419+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '1180c2e4-ede3-458a-97ca-c733b4224718', + }, + { + name: 'HttpRequestNumber', + value: '963', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:01:25.744449+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '7c5d8901-3453-402d-881c-12d3c4d9477a', + }, + { + name: 'HttpRequestNumber', + value: '962', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:01:25.6824877+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: 'a2ae4602-2a58-4521-99dd-6fa41562b004', + }, + { + name: 'HttpRequestNumber', + value: '961', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:01:20.7317217+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '0b55b0c8-57f3-4ed9-ae8e-1cb85cb11077', + }, + { + name: 'HttpRequestNumber', + value: '960', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:01:20.6696118+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: 'c502a5a8-c8cb-4cec-ac6c-f9b66b3bad33', + }, + { + name: 'HttpRequestNumber', + value: '959', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:01:15.724729+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: 'bcada94f-9851-4c81-8da0-1bf27be66573', + }, + { + name: 'HttpRequestNumber', + value: '958', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:01:15.662463+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: 'f761bc23-9e7f-45e7-8847-7885624dd261', + }, + { + name: 'HttpRequestNumber', + value: '957', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:01:10.7235889+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '88785b30-85c1-40da-bba9-0663c5b38817', + }, + { + name: 'HttpRequestNumber', + value: '956', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:01:10.6605318+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: 'a26b64b4-5b83-405d-9860-e01bcbc0edaa', + }, + { + name: 'HttpRequestNumber', + value: '955', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:01:05.7157154+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: 'b192ac30-88f0-476d-a9ab-6462a4ca5195', + }, + { + name: 'HttpRequestNumber', + value: '954', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:01:05.6547824+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '97ee6cef-af1e-472a-acf0-d296890a1916', + }, + { + name: 'HttpRequestNumber', + value: '953', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:01:00.7039952+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: 'b537e0e1-e4ed-4f6b-afce-11c19a798632', + }, + { + name: 'HttpRequestNumber', + value: '952', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:01:00.6417516+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '3011bb2a-e3df-4dc6-a46d-9619287ad9bb', + }, + { + name: 'HttpRequestNumber', + value: '951', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:00:55.6948223+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: 'f43990a1-fdeb-4169-85c1-60b6833b4c82', + }, + { + name: 'HttpRequestNumber', + value: '950', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:00:55.6326808+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '43def4b0-c9e6-41db-9031-f7c3fc112900', + }, + { + name: 'HttpRequestNumber', + value: '949', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:00:50.6948589+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: 'e048057f-5dc0-408f-a560-2044b99e53a3', + }, + { + name: 'HttpRequestNumber', + value: '948', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:00:50.632697+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: 'ff426368-f6e5-4e9d-a2d2-0d061bedb688', + }, + { + name: 'HttpRequestNumber', + value: '947', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:00:45.6943493+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '0f2f6a91-487b-440d-9350-9737bed00c8d', + }, + { + name: 'HttpRequestNumber', + value: '946', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:00:45.6319218+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: 'fc244d40-46ae-49f9-8eee-ef5e41738283', + }, + { + name: 'HttpRequestNumber', + value: '945', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:00:40.6902419+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '5d3e350c-0b62-4122-9850-1b821fc14824', + }, + { + name: 'HttpRequestNumber', + value: '944', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:00:40.6274587+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: 'f4101feb-d20b-4007-b0d8-5fb8448b0ba5', + }, + { + name: 'HttpRequestNumber', + value: '943', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:00:35.6787856+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '136c6fa2-59b3-4a35-bf62-41b4b7e47aae', + }, + { + name: 'HttpRequestNumber', + value: '942', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:00:35.6168559+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: 'fd9d8b63-8cbe-448d-acfe-fb0225630c8f', + }, + { + name: 'HttpRequestNumber', + value: '941', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:00:30.6723677+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '5f550460-063c-4ffe-b4b7-977916a0bf3c', + }, + { + name: 'HttpRequestNumber', + value: '940', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:00:30.6121168+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '7205a37f-3c57-4388-86d0-aa82334ac8b9', + }, + { + name: 'HttpRequestNumber', + value: '939', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:00:25.6705459+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '11c619df-ec09-400d-bac3-0796ec8313b3', + }, + { + name: 'HttpRequestNumber', + value: '938', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:00:25.6072437+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '4acb6550-415f-4acd-9d5d-d16e3f24358d', + }, + { + name: 'HttpRequestNumber', + value: '937', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:00:20.655909+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '538ddeb5-5f61-4f0f-b997-d730ca43c308', + }, + { + name: 'HttpRequestNumber', + value: '936', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:00:20.593934+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '0bbed3f1-3732-4961-987b-dee855bf14e5', + }, + { + name: 'HttpRequestNumber', + value: '935', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:00:15.652173+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '2fc31793-1567-4166-ba1d-fedc5aa86c76', + }, + { + name: 'HttpRequestNumber', + value: '934', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:00:15.5893967+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: 'a1229318-a1f3-45ae-81ea-553c6380dc63', + }, + { + name: 'HttpRequestNumber', + value: '933', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:00:10.638341+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '3c73f5d8-fb91-4cb1-99ea-710dc5a077d0', + }, + { + name: 'HttpRequestNumber', + value: '932', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:00:10.5772254+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: 'c90cfc2c-4257-4963-b983-66e8154d411b', + }, + { + name: 'HttpRequestNumber', + value: '931', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:00:05.6357729+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '1545fb5a-eb3f-42ad-b996-83a25cc2884f', + }, + { + name: 'HttpRequestNumber', + value: '930', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:00:05.5733282+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: 'c9d266d1-4934-46c7-9b53-ed09fbd886a0', + }, + { + name: 'HttpRequestNumber', + value: '929', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:00:00.6298079+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: 'de2e3225-9d89-4a80-9ee5-e71690355f9d', + }, + { + name: 'HttpRequestNumber', + value: '928', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T12:00:00.5660574+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '82db2316-2b67-451c-86c0-dd45244c1d96', + }, + { + name: 'HttpRequestNumber', + value: '927', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:59:55.6191475+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '8dc85495-24f2-4842-8ff5-d0374cad3741', + }, + { + name: 'HttpRequestNumber', + value: '926', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:59:55.5568848+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: 'cc428ec4-db17-4cee-981d-901fde3af15c', + }, + { + name: 'HttpRequestNumber', + value: '925', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:59:50.6177966+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '245be706-df80-4501-a915-d2af6e44af26', + }, + { + name: 'HttpRequestNumber', + value: '924', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:59:50.5567918+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '8d5082a3-4ca1-4fb2-976b-8a761a245661', + }, + { + name: 'HttpRequestNumber', + value: '923', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:59:45.6058749+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '8fd1dee6-eb15-4081-b623-f4139cc465fd', + }, + { + name: 'HttpRequestNumber', + value: '922', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:59:45.5419858+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '87434476-9f86-49f5-bacd-37978f97ec3a', + }, + { + name: 'HttpRequestNumber', + value: '921', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:59:40.6030991+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '3a79d410-232f-46f0-8521-f71c58cefcd3', + }, + { + name: 'HttpRequestNumber', + value: '920', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:59:40.5414694+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '0fda8a3d-b7df-46e4-bf3d-0cf15829f6a7', + }, + { + name: 'HttpRequestNumber', + value: '919', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:59:35.5924386+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '54f6057e-d0f6-46d0-b7b4-082f315c4533', + }, + { + name: 'HttpRequestNumber', + value: '918', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:59:35.5304962+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '39ae83f8-0778-474a-b41f-eea93b82b201', + }, + { + name: 'HttpRequestNumber', + value: '917', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:59:30.5881163+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: 'c521cadd-3e47-4eab-b640-ea9dfc50abb8', + }, + { + name: 'HttpRequestNumber', + value: '916', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:59:30.5260781+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '5c3f597f-abcd-41d5-9360-8bd725c85b60', + }, + { + name: 'HttpRequestNumber', + value: '915', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:59:25.5753438+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '886f9acd-60bd-4ed4-8cf2-1c35b007c58e', + }, + { + name: 'HttpRequestNumber', + value: '914', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:59:25.5127958+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: 'c215f085-f3b8-4150-b77c-0a9882404530', + }, + { + name: 'HttpRequestNumber', + value: '913', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:59:20.571759+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: 'b3d613ba-6a53-4d6e-9b1a-c755752fe566', + }, + { + name: 'HttpRequestNumber', + value: '912', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:59:20.5091665+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: 'f97c2d30-f658-447e-b728-136bcd824bc9', + }, + { + name: 'HttpRequestNumber', + value: '911', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:59:15.569587+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: 'f7d59956-1034-4698-aad1-c2da66d067e8', + }, + { + name: 'HttpRequestNumber', + value: '910', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:59:15.5076538+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: 'a98bb970-a9f1-4a31-b22c-6874e7bcc811', + }, + { + name: 'HttpRequestNumber', + value: '909', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:59:10.5556531+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '188b901c-9022-4e8e-80c7-45bb8d5c7c0a', + }, + { + name: 'HttpRequestNumber', + value: '908', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:59:10.5074665+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: 'dba6dbdd-2142-4803-8223-cce07f231a51', + }, + { + name: 'HttpRequestNumber', + value: '907', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:59:05.5524744+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '07d65eca-a9ca-4109-8ad8-4db2a737cc68', + }, + { + name: 'HttpRequestNumber', + value: '906', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:59:05.5045339+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: 'c75e74d2-dec9-4525-8966-34e455047231', + }, + { + name: 'HttpRequestNumber', + value: '905', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:59:00.5441587+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '4787c7ab-a877-47e5-96fa-a8cdbc8eb427', + }, + { + name: 'HttpRequestNumber', + value: '904', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:59:00.4976461+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '6fd66545-4305-4f30-9791-54be1d151483', + }, + { + name: 'HttpRequestNumber', + value: '903', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:58:55.5306481+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '06ac6e6f-d866-48e7-ae49-b908cd472555', + }, + { + name: 'HttpRequestNumber', + value: '902', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:58:55.4849332+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: 'a8a3191e-1324-49b7-9fc5-c65b99f29c37', + }, + { + name: 'HttpRequestNumber', + value: '901', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:58:50.5183018+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '5c3c404b-03bb-47ee-8e60-2678249015a8', + }, + { + name: 'HttpRequestNumber', + value: '900', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:58:50.4715437+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '40090ff4-ac41-4e2d-a69b-99414ce77df5', + }, + { + name: 'HttpRequestNumber', + value: '899', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:58:45.5057522+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: 'b4cf7b6b-ebaf-40d0-97d6-69acd93bec86', + }, + { + name: 'HttpRequestNumber', + value: '898', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:58:45.4595094+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '17ee778c-62bb-4025-a232-bfaf76eda60b', + }, + { + name: 'HttpRequestNumber', + value: '897', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:58:40.4955381+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: 'f2f9a23f-efd1-4bc5-a316-bc603544c43a', + }, + { + name: 'HttpRequestNumber', + value: '896', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:58:40.4490867+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '1894e914-d45b-436f-b125-56160011d80f', + }, + { + name: 'HttpRequestNumber', + value: '895', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:58:35.4899092+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: 'f092d759-7c3a-4e7e-a560-9ac7e6c77f7c', + }, + { + name: 'HttpRequestNumber', + value: '894', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:58:35.4438695+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: 'f02cb18d-8976-4f2c-a16a-a0c9006724a1', + }, + { + name: 'HttpRequestNumber', + value: '893', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:58:30.4782757+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '743f4f0b-7e83-4eb8-bfdc-e3e97be0ecc6', + }, + { + name: 'HttpRequestNumber', + value: '892', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:58:30.4324179+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '422d43b5-45a4-4b59-901b-399cb3fb448a', + }, + { + name: 'HttpRequestNumber', + value: '891', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:58:25.4653028+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '7a3fe678-d6c9-475a-ab57-f7b4d06b8005', + }, + { + name: 'HttpRequestNumber', + value: '890', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:58:25.4179895+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '956a5a79-b0dd-446b-b4d0-f9594d6f538d', + }, + { + name: 'HttpRequestNumber', + value: '889', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:58:20.4554989+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '7cdab7b5-0d9b-4ae4-b023-83b5415e2909', + }, + { + name: 'HttpRequestNumber', + value: '888', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:58:20.4074817+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: 'f9dbdf17-fc1a-45b4-bd88-030b2c26ec16', + }, + { + name: 'HttpRequestNumber', + value: '887', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:58:15.4508724+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '9fef4e4a-e373-4a9a-b162-857af5c160f9', + }, + { + name: 'HttpRequestNumber', + value: '886', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:58:15.4043773+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: '1b1c9faa-c0be-4722-b3f3-441e48d42c0a', + }, + { + name: 'HttpRequestNumber', + value: '885', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:58:10.4501237+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"InternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'InternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: '1d9a0529-a75a-40cc-be5d-c871548ab233', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.EmptyRecycleBin (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000002e-0005-ef00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/EmptyRecycleBin', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '50', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: 'd8bedb8f-1151-4e2b-858f-286df530ffa2', + }, + { + name: 'HttpRequestNumber', + value: '884', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, + { + timestamp: '2023-02-14T11:58:10.4036882+00:00', + level: 'Debug', + messageTemplate: '{IndexName} searcher refreshed? {DidRefresh}', + renderedMessage: '"ExternalIndex" searcher refreshed? False', + properties: [ + { + name: 'IndexName', + value: 'ExternalIndex', + }, + { + name: 'DidRefresh', + value: 'False', + }, + { + name: 'SourceContext', + value: 'Examine.Lucene.Providers.LuceneIndex', + }, + { + name: 'ActionId', + value: 'c4a4ecf3-34e7-4ff9-99ad-4aab0a23c3c2', + }, + { + name: 'ActionName', + value: 'Umbraco.Cms.Web.BackOffice.Controllers.ContentController.DeleteById (Umbraco.Web.BackOffice)', + }, + { + name: 'RequestId', + value: '4000005e-0004-fe00-b63f-84710c7967bb', + }, + { + name: 'RequestPath', + value: '/umbraco/backoffice/umbracoapi/content/DeleteById', + }, + { + name: 'ProcessId', + value: '17632', + }, + { + name: 'ProcessName', + value: 'iisexpress', + }, + { + name: 'ThreadId', + value: '57', + }, + { + name: 'ApplicationId', + value: '0cf9334a65daa2e8a69943c6db2fb730bb14f2de', + }, + { + name: 'MachineName', + value: 'DESKTOP-M35N63H', + }, + { + name: 'Log4NetLevel', + value: 'DEBUG', + }, + { + name: 'HttpRequestId', + value: 'cdfde20a-6e4e-4062-be6f-5daff839ed04', + }, + { + name: 'HttpRequestNumber', + value: '883', + }, + { + name: 'HttpSessionId', + value: '0', + }, + ], + exception: null, + }, +]; + +const randomEnumValue = (enumeration: any): LogLevelModel => { + const values = Object.keys(enumeration); + const enumKey = values[Math.floor(Math.random() * values.length)]; + return enumeration[enumKey]; +}; + +export const logs: LogMessageModel[] = allLogs.map((log) => { + + const randomLevel = randomEnumValue(LogLevelModel); + + return { + ...log, + level: randomLevel, + eventId: { + TypeTag: null, + Properties: [ + { + Name: 'Id', + Value: { + Value: 17, + }, + }, + { + Name: 'Name', + Value: { + Value: 'ExceptionProcessingMessage', + }, + }, + ], + }, + exception: + randomLevel === LogLevelModel.ERROR + ? `System.InvalidOperationException: The identity did not contain requried claim name + at Umbraco.Cloud.Identity.Cms.PrincipalExtensions.GetRequiredFirstValue(ClaimsIdentity identity, String claimType) + at Umbraco.Cloud.Identity.Cms.ClaimsIdentityExtensions.ApplyNameClaim(ClaimsIdentity identity) + at Umbraco.Cloud.Identity.Cms.ClaimsIdentityExtensions.ValidateAndTransformClaims(ClaimsIdentity identity, String currentPolicy, String[] userRoles, String passwordChangePolicy, String profilePolicy, String passwordResetPolicy) + at Umbraco.Cloud.Identity.Cms.ClaimsIdentityExtensions.ValidateAndTransformClaims(ClaimsPrincipal principal, String currentPolicy, String[] userRoles, String passwordChangePolicy, String profilePolicy, String passwordResetPolicy) + at Umbraco.Cloud.Identity.Cms.V10.OpenIdConnectEventHandler.OnAuthorizationCodeReceived(AuthorizationCodeReceivedContext context) + at Microsoft.Identity.Web.MicrosoftIdentityWebAppAuthenticationBuilder.<>c__DisplayClass11_1.<b__1>d.MoveNext() + --- End of stack trace from previous location --- + at Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler.RunAuthorizationCodeReceivedEventAsync(OpenIdConnectMessage authorizationResponse, ClaimsPrincipal user, AuthenticationProperties properties, JwtSecurityToken jwt) + at Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler.HandleRemoteAuthenticateAsync()` + : undefined, + }; +}); diff --git a/src/Umbraco.Web.UI.Client/src/core/mocks/domains/log-viewer.handlers.ts b/src/Umbraco.Web.UI.Client/src/core/mocks/domains/log-viewer.handlers.ts new file mode 100644 index 0000000000..a0b6a8877a --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/core/mocks/domains/log-viewer.handlers.ts @@ -0,0 +1,82 @@ +import { rest } from 'msw'; +import { umbLogviewerData } from '../data/log-viewer.data'; +import { umbracoPath } from '@umbraco-cms/utils'; +import { SavedLogSearchModel } from '@umbraco-cms/backend-api'; + +export const handlers = [ + //#region Searches + rest.get(umbracoPath('/log-viewer/saved-search'), (req, res, ctx) => { + const skip = req.url.searchParams.get('skip'); + const skipNumber = skip ? Number.parseInt(skip) : undefined; + const take = req.url.searchParams.get('take'); + const takeNumber = take ? Number.parseInt(take) : undefined; + + const items = umbLogviewerData.searches.getSavedSearches(skipNumber, takeNumber); + + const response = { + total: items.length, + items, + }; + + return res(ctx.delay(), ctx.status(200), ctx.json(response)); + }), + + rest.get(umbracoPath('/log-viewer/saved-search/:name'), (req, res, ctx) => { + const name = req.params.key as string; + + if (!name) return; + + const item = umbLogviewerData.searches.getByName(name); + return res(ctx.delay(), ctx.status(200), ctx.json(item)); + }), + + rest.post(umbracoPath('/log-viewer/saved-search'), async (req, res, ctx) => { + return res(ctx.delay(), ctx.status(200)); + }), + + rest.delete(umbracoPath('/log-viewer/saved-search/:name'), async (req, res, ctx) => { + return res(ctx.status(200)); + }), + //#endregion + + //#region Temaplates + rest.get(umbracoPath('/log-viewer/message-template'), (req, res, ctx) => { + const skip = req.url.searchParams.get('skip'); + const skipNumber = skip ? Number.parseInt(skip) : undefined; + const take = req.url.searchParams.get('take'); + const takeNumber = take ? Number.parseInt(take) : undefined; + + const items = umbLogviewerData.templates.getTemplates(skipNumber, takeNumber); + + const response = { + total: umbLogviewerData.templates.total, + items, + }; + + return res(ctx.delay(), ctx.status(200), ctx.json(response)); + }), + //#endregion + //#region Logs + rest.get(umbracoPath('/log-viewer/level'), (req, res, ctx) => { + return res(ctx.delay(), ctx.status(200), ctx.json(umbLogviewerData.logLevels)); + }), + + rest.get(umbracoPath('/log-viewer/level-count'), (req, res, ctx) => { + return res(ctx.delay(), ctx.status(200), ctx.json(umbLogviewerData.logs.getLevelCount())); + }), + + rest.get(umbracoPath('/log-viewer/log'), (req, res, ctx) => { + const skip = req.url.searchParams.get('skip'); + const skipNumber = skip ? Number.parseInt(skip) : undefined; + const take = req.url.searchParams.get('take'); + const takeNumber = take ? Number.parseInt(take) : undefined; + + const items = umbLogviewerData.logs.getLogs(skipNumber, takeNumber); + const response = { + total: umbLogviewerData.logs.total, + items, + }; + + return res(ctx.delay(), ctx.status(200), ctx.json(response)); + }), +];