UNPKG

@microsoft/windows-admin-center-sdk

Version:

Microsoft - Windows Admin Center Shell

1 lines 7.12 kB
{"version":3,"sources":["../../../packages/core/diagnostics/error-monitor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAA6B,MAAM,WAAW,CAAC;AAKjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yDAAyD,CAAC;AAE7F,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEjC;;GAEG;AACH,qBAAa,YAAY;IACrB,OAAO,CAAC,MAAM,CAAC,WAAW,CAAkB;IAC5C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAe;IAEtC,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,+BAA+B,CAAkC;IACzE,OAAO,CAAC,+BAA+B,CAAkC;IACzE,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,KAAK,CAAkD;IAE/D;;OAEG;IACH,WAAkB,OAAO,IAAI,YAAY,CAOxC;IAED;;;;OAIG;IACI,YAAY,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,GAAG,IAAI;IAMtE;;OAEG;IACI,aAAa,IAAI,IAAI;IAK5B;;OAEG;IACI,IAAI,IAAI,IAAI;IAMnB;;;;OAIG;IACI,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IA6BlC;;;;OAIG;IACI,mBAAmB,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAqBlD;;;;OAIG;IACI,WAAW,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI;IAmBnD;;OAEG;IACH,OAAO,CAAC,aAAa;IAQrB;;OAEG;IACH,OAAO,CAAC,YAAY;CAWvB","file":"error-monitor.d.ts","sourcesContent":["import { of, throwError } from 'rxjs';\r\nimport { AjaxError, AjaxRequest, AjaxResponse } from 'rxjs/ajax';\r\nimport { filter, take } from 'rxjs/operators';\r\nimport { Http } from '../data/http';\r\nimport { Net } from '../data/net';\r\nimport { RpcObservableErrorMonitorClient } from '../rpc/error-monitor/rpc-observable-error-monitor-client';\r\nimport { ErrorMonitorRecord } from '../rpc/error-monitor/rpc-observable-error-monitor-model';\r\nimport { RpcObservableErrorMonitorServer } from '../rpc/error-monitor/rpc-observable-error-monitor-server';\r\nimport { Rpc } from '../rpc/rpc';\r\n\r\n/**\r\n * Error Monitor class.\r\n */\r\nexport class ErrorMonitor {\r\n private static monitorName = 'ErrorMonitor';\r\n private static instance: ErrorMonitor;\r\n\r\n private rpc: Rpc;\r\n private rpcObservableErrorMonitorClient: RpcObservableErrorMonitorClient;\r\n private rpcObservableErrorMonitorServer: RpcObservableErrorMonitorServer;\r\n private enabled = false;\r\n private shellVersionChecked = false;\r\n private check: (record: ErrorMonitorRecord) => void = () => {};\r\n\r\n /**\r\n * Gets the current ErrorMonitor instance.\r\n */\r\n public static get current(): ErrorMonitor {\r\n if (ErrorMonitor.instance) {\r\n return ErrorMonitor.instance;\r\n }\r\n\r\n ErrorMonitor.instance = new ErrorMonitor();\r\n return ErrorMonitor.instance;\r\n }\r\n\r\n /**\r\n * Start and register the check function on shell.\r\n *\r\n * @param check the check function.\r\n */\r\n public startOnShell(check: (record: ErrorMonitorRecord) => void): void {\r\n this.enabled = true;\r\n this.check = check;\r\n this.updateMonitor();\r\n }\r\n\r\n /**\r\n * Start error monitoring if it was stopped once.\r\n */\r\n public startOnModule(): void {\r\n this.enabled = true;\r\n this.updateMonitor();\r\n }\r\n\r\n /**\r\n * Stop error monitoring if it's started. This works on both shell and module.\r\n */\r\n public stop(): void {\r\n this.enabled = false;\r\n this.check = () => {};\r\n this.updateMonitor();\r\n }\r\n\r\n /**\r\n * Register rpc and start error monitoring.\r\n *\r\n * @param rpc the rpc.\r\n */\r\n public registerRpc(rpc: Rpc): void {\r\n if (!this.rpc) {\r\n this.rpc = rpc;\r\n if (MsftSme.isShell()) {\r\n rpc.stateChanged\r\n .pipe(\r\n filter(active => active),\r\n take(1))\r\n .subscribe(() => {\r\n this.rpcObservableErrorMonitorServer = new RpcObservableErrorMonitorServer(rpc);\r\n this.rpcObservableErrorMonitorServer.register(\r\n request => {\r\n this.check(request);\r\n return of(null);\r\n });\r\n });\r\n } else {\r\n rpc.stateChanged\r\n .pipe(\r\n filter(active => active),\r\n take(1))\r\n .subscribe(() => this.rpcObservableErrorMonitorClient = new RpcObservableErrorMonitorClient(rpc));\r\n }\r\n\r\n this.enabled = true;\r\n this.updateMonitor();\r\n }\r\n }\r\n\r\n /**\r\n * Report the error from the ajax error object.\r\n *\r\n * @param error the ajax error object.\r\n */\r\n public reportErrorFromAjax(error: AjaxError): void {\r\n if (!error || !error.request || !error.request.url) {\r\n return;\r\n }\r\n\r\n const forbidden = error.xhr && error.xhr.response && error.xhr.response.error && error.xhr.response.error.forbidden;\r\n const statusCode = error.status;\r\n const request = error.request;\r\n const url = request.url;\r\n const method = request.method;\r\n const message = Net.getErrorMessage(error);\r\n let code = null;\r\n let action = null;\r\n if (error && error.xhr && error.xhr.response && error.xhr.response.error) {\r\n code = error.xhr.response.error.code || error.xhr.response.error.errorCode;\r\n action = error.xhr.response.error.actionCode;\r\n }\r\n\r\n this.reportError({ httpError: { url, method, statusCode, message, code, action, forbidden } });\r\n }\r\n\r\n /**\r\n * Report the error to shell.\r\n *\r\n * @param error the error monitor record.\r\n */\r\n public reportError(error: ErrorMonitorRecord): void {\r\n if (!this.enabled) {\r\n return;\r\n }\r\n\r\n const self = MsftSme.self();\r\n const record: ErrorMonitorRecord = {\r\n ...error,\r\n ...{ sessionId: self.Init.sessionId, timestamp: Date.now(), moduleName: self.Init.moduleName }\r\n };\r\n\r\n if (this.rpc && this.rpc.stateActive && this.rpcObservableErrorMonitorClient) {\r\n // send to shell.\r\n this.rpcObservableErrorMonitorClient.report(record).subscribe();\r\n } else {\r\n this.check(record);\r\n }\r\n }\r\n\r\n /**\r\n * Update the monitoring state.\r\n */\r\n private updateMonitor(): void {\r\n if (this.enabled) {\r\n this.registerHttp();\r\n } else {\r\n Http.unregisterMonitors(ErrorMonitor.monitorName);\r\n }\r\n }\r\n\r\n /**\r\n * Register Http monitoring.\r\n */\r\n private registerHttp(): void {\r\n Http.registerMonitorSet({\r\n name: ErrorMonitor.monitorName,\r\n preMonitor: (request: AjaxRequest) => of(request),\r\n successMonitor: (response: AjaxResponse<any>) => of(response),\r\n errorMonitor: (error: AjaxError) => {\r\n this.reportErrorFromAjax(error);\r\n return throwError(() => error);\r\n }\r\n });\r\n }\r\n}\r\n"]}