@oneteme/inspect-ng-collector 1.3.2-ng12 → 1.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{fesm2015/oneteme-inspect-ng-collector.js → fesm2022/oneteme-inspect-ng-collector.mjs} +125 -73
- package/fesm2022/oneteme-inspect-ng-collector.mjs.map +1 -0
- package/lib/configuration.d.ts +19 -19
- package/lib/http-interceptor.service.d.ts +5 -1
- package/lib/trace.model.d.ts +4 -4
- package/package.json +16 -11
- package/bundles/oneteme-inspect-ng-collector.umd.js +0 -1450
- package/bundles/oneteme-inspect-ng-collector.umd.js.map +0 -1
- package/esm2015/lib/configuration.js +0 -136
- package/esm2015/lib/event-bus.js +0 -41
- package/esm2015/lib/event-trace-debugger.js +0 -187
- package/esm2015/lib/event-trace-scheduled-dispatcher.service.js +0 -119
- package/esm2015/lib/global-error-handler.service.js +0 -25
- package/esm2015/lib/http-interceptor.service.js +0 -54
- package/esm2015/lib/local-request.monitor.js +0 -21
- package/esm2015/lib/navigation.monitor.js +0 -33
- package/esm2015/lib/ng-collector.module.js +0 -69
- package/esm2015/lib/resource-usage.monitor.js +0 -27
- package/esm2015/lib/rest-request.monitor.js +0 -112
- package/esm2015/lib/session-manager.service.js +0 -107
- package/esm2015/lib/trace.model.js +0 -21
- package/esm2015/lib/traceable-stage.decorator.js +0 -39
- package/esm2015/lib/user-action.monitor.js +0 -95
- package/esm2015/oneteme-inspect-ng-collector.js +0 -5
- package/esm2015/public-api.js +0 -7
- package/fesm2015/oneteme-inspect-ng-collector.js.map +0 -1
- /package/{oneteme-inspect-ng-collector.d.ts → index.d.ts} +0 -0
package/{fesm2015/oneteme-inspect-ng-collector.js → fesm2022/oneteme-inspect-ng-collector.mjs}
RENAMED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken,
|
|
2
|
+
import { InjectionToken, Inject, Injectable, APP_INITIALIZER, ErrorHandler, NgModule } from '@angular/core';
|
|
3
3
|
import { HttpResponse, HttpErrorResponse, HTTP_INTERCEPTORS } from '@angular/common/http';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { finalize, interval, startWith, tap as tap$1 } from 'rxjs';
|
|
5
|
+
import { tap } from 'rxjs/operators';
|
|
6
6
|
import { NavigationStart, NavigationEnd, NavigationCancel, Router } from '@angular/router';
|
|
7
7
|
|
|
8
8
|
var RequestMask;
|
|
@@ -23,7 +23,7 @@ const TRACE_TYPE_REST_REQUEST_CALLBACK = '121';
|
|
|
23
23
|
const TRACE_TYPE_HTTP_REQUEST_STAGE = '220';
|
|
24
24
|
const TRACE_TYPE_USER_ACTION = '300';
|
|
25
25
|
function dateNow() {
|
|
26
|
-
return Date.now() /
|
|
26
|
+
return Date.now() / 1_000;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
const eventTarget = new EventTarget();
|
|
@@ -93,52 +93,75 @@ function requirePostitiveValue(v, name, defaultValue) {
|
|
|
93
93
|
}
|
|
94
94
|
throw new Error(`bad value ${name}=${v} <= 0`);
|
|
95
95
|
}
|
|
96
|
-
function require(v, name) {
|
|
96
|
+
function require$1(v, name) {
|
|
97
97
|
if (v != undefined) {
|
|
98
98
|
return v;
|
|
99
99
|
}
|
|
100
100
|
throw new Error(`${name} property is required`);
|
|
101
101
|
}
|
|
102
102
|
function adaptedConfig(conf) {
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
103
|
+
return {
|
|
104
|
+
...conf,
|
|
105
|
+
scheduling: {
|
|
106
|
+
...conf.scheduling,
|
|
107
|
+
interval: conf.scheduling?.interval && conf.scheduling.interval / 1000
|
|
108
|
+
},
|
|
109
|
+
monitoring: {
|
|
110
|
+
...conf.monitoring,
|
|
111
|
+
additionalProperties: String(conf.additionalProperties),
|
|
112
|
+
name: String(conf.name),
|
|
113
|
+
version: String(conf.version),
|
|
114
|
+
env: String(conf.env),
|
|
115
|
+
user: String(conf.user),
|
|
116
|
+
httpRoute: {
|
|
117
|
+
...conf.monitoring?.httpRoute,
|
|
118
|
+
excludes: {
|
|
119
|
+
path: (conf?.monitoring?.httpRoute?.excludes?.path).map(r => r.source)
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
tracing: {
|
|
124
|
+
...conf.tracing,
|
|
125
|
+
remote: {
|
|
126
|
+
...conf.tracing?.remote,
|
|
127
|
+
'@type': TRACE_TYPE_COLLECTOR_CONFIGURATION,
|
|
128
|
+
retentionMaxAge: (conf.tracing?.remote?.retentionMaxAge ?? 10) * 60 * 60 * 24
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
};
|
|
107
132
|
}
|
|
108
133
|
function validateAndGetConfig(conf, instanceId) {
|
|
109
|
-
|
|
110
|
-
const host = matchRegex(getOrCall((_b = (_a = conf === null || conf === void 0 ? void 0 : conf.tracing) === null || _a === void 0 ? void 0 : _a.remote) === null || _b === void 0 ? void 0 : _b.host), "host", HOST_PATERN);
|
|
134
|
+
const host = matchRegex(getOrCall(conf?.tracing?.remote?.host), "host", HOST_PATERN);
|
|
111
135
|
return {
|
|
112
|
-
user: conf
|
|
113
|
-
queueCapacity: requirePostitiveValue(getOrCall(
|
|
114
|
-
interval: requirePostitiveValue(getOrCall(
|
|
136
|
+
user: conf?.user,
|
|
137
|
+
queueCapacity: requirePostitiveValue(getOrCall(conf?.tracing?.queueCapacity), "queueCapacity", 1000),
|
|
138
|
+
interval: requirePostitiveValue(getOrCall(conf?.scheduling?.interval), "interval", 60000),
|
|
115
139
|
instanceApi: new URL('v4/trace/instance', host).href,
|
|
116
140
|
sessionApi: new URL(`v4/trace/instance/${instanceId}/session`, host).href,
|
|
117
|
-
exclude: getOrCall(
|
|
118
|
-
hostExcludes:
|
|
141
|
+
exclude: getOrCall(conf?.monitoring?.httpRoute?.excludes?.path) || [],
|
|
142
|
+
hostExcludes: conf?.monitoring?.httpRequest?.excludes?.host || [],
|
|
119
143
|
debugMode: !!conf.debugMode,
|
|
120
|
-
analytics: !!
|
|
121
|
-
resources: !!
|
|
122
|
-
storage: !!
|
|
144
|
+
analytics: !!conf?.monitoring?.analytics?.enabled,
|
|
145
|
+
resources: !!conf?.monitoring?.resources?.enabled,
|
|
146
|
+
storage: !!conf?.monitoring?.storage?.enabled,
|
|
123
147
|
enabled: !!conf.enabled
|
|
124
148
|
};
|
|
125
149
|
}
|
|
126
150
|
function createInstance(conf, instanceId) {
|
|
127
|
-
var _a;
|
|
128
151
|
return {
|
|
129
152
|
id: instanceId,
|
|
130
153
|
instant: dateNow(),
|
|
131
|
-
name: require(getOrCall(conf
|
|
132
|
-
version: getOrCall(conf
|
|
133
|
-
address: getClientID(),
|
|
134
|
-
env: require(getOrCall(conf
|
|
154
|
+
name: require$1(getOrCall(conf?.name), 'configuration.name'),
|
|
155
|
+
version: getOrCall(conf?.version),
|
|
156
|
+
address: getClientID(), //server side
|
|
157
|
+
env: require$1(getOrCall(conf?.env), 'env'),
|
|
135
158
|
os: detectOs(),
|
|
136
159
|
re: detectBrowser(),
|
|
137
|
-
user: undefined,
|
|
160
|
+
user: undefined, // cannot get user
|
|
138
161
|
type: "CLIENT",
|
|
139
162
|
collector: "inspect-ng-collector-1.3.2-beta.1",
|
|
140
163
|
resource: { maxHeap: (('memory' in performance) && performance.memory.jsHeapSizeLimit / (1024 * 1024)) || undefined },
|
|
141
|
-
additionalProperties:
|
|
164
|
+
additionalProperties: conf?.additionalProperties?.(),
|
|
142
165
|
configuration: adaptedConfig(conf)
|
|
143
166
|
};
|
|
144
167
|
}
|
|
@@ -236,11 +259,10 @@ class SessionManager {
|
|
|
236
259
|
this.currentSessionCallBack = undefined;
|
|
237
260
|
}
|
|
238
261
|
updateSession() {
|
|
239
|
-
var _a;
|
|
240
262
|
if (this.currentSession) {
|
|
241
263
|
this.currentSession.name = document.title; // add settimeout
|
|
242
264
|
this.currentSession.location = document.URL;
|
|
243
|
-
if (!
|
|
265
|
+
if (!this._techConfig.exclude?.some((e) => e.test(this.currentSession?.location))) {
|
|
244
266
|
dispatchTraces(this.currentSession);
|
|
245
267
|
}
|
|
246
268
|
this.currentSession = undefined;
|
|
@@ -311,9 +333,23 @@ class RestRequestMonitor {
|
|
|
311
333
|
this.id = crypto.randomUUID();
|
|
312
334
|
}
|
|
313
335
|
preProcess(restRequest) {
|
|
314
|
-
const url = new URL(restRequest.urlWithParams,
|
|
336
|
+
const url = new URL(restRequest.urlWithParams, globalThis.location.origin);
|
|
315
337
|
const auth_user = extractAuthSchemeAnduser(restRequest.headers);
|
|
316
|
-
dispatchTraces(
|
|
338
|
+
dispatchTraces({ ...SessionManager.instance.initRestRequest(RequestMask.REST),
|
|
339
|
+
"@type": TRACE_TYPE_REST_REQUEST,
|
|
340
|
+
id: this.id,
|
|
341
|
+
method: restRequest.method,
|
|
342
|
+
protocol: url.protocol.slice(0, -1),
|
|
343
|
+
host: url.hostname,
|
|
344
|
+
port: url.port ? Number(url.port) : 0,
|
|
345
|
+
path: url.pathname,
|
|
346
|
+
query: url.search.slice(1, url.search.length),
|
|
347
|
+
contentType: restRequest.responseType,
|
|
348
|
+
authScheme: auth_user.authScheme,
|
|
349
|
+
user: auth_user.user,
|
|
350
|
+
dataSize: sizeOf(restRequest.body),
|
|
351
|
+
start: this.start,
|
|
352
|
+
});
|
|
317
353
|
}
|
|
318
354
|
postProcess(response, error) {
|
|
319
355
|
const end = dateNow();
|
|
@@ -348,7 +384,7 @@ class RestRequestMonitor {
|
|
|
348
384
|
dispatchTraces(callback, {
|
|
349
385
|
"@type": TRACE_TYPE_HTTP_REQUEST_STAGE,
|
|
350
386
|
name: "PROCESS",
|
|
351
|
-
start: this.start,
|
|
387
|
+
start: this.start, // use request
|
|
352
388
|
end: end,
|
|
353
389
|
order: 0,
|
|
354
390
|
exception: exception,
|
|
@@ -357,31 +393,37 @@ class RestRequestMonitor {
|
|
|
357
393
|
}
|
|
358
394
|
}
|
|
359
395
|
function assertSessionID(id, headers) {
|
|
360
|
-
return
|
|
396
|
+
return headers?.get(TRACE_HEADER) == id;
|
|
361
397
|
}
|
|
362
398
|
function extractAuthSchemeAnduser(headers) {
|
|
363
|
-
|
|
364
|
-
|
|
399
|
+
const authHeader = headers?.get('authorization');
|
|
400
|
+
if (!authHeader) {
|
|
401
|
+
return { authScheme: null, user: null };
|
|
402
|
+
}
|
|
403
|
+
const [scheme, credentials] = authHeader.split(' ');
|
|
404
|
+
if (!scheme || !credentials || !['Basic', 'Bearer'].includes(scheme)) {
|
|
405
|
+
return { authScheme: null, user: null };
|
|
406
|
+
}
|
|
365
407
|
return {
|
|
366
408
|
authScheme: scheme,
|
|
367
|
-
user:
|
|
409
|
+
user: extractUser(scheme, credentials) ?? null
|
|
368
410
|
};
|
|
369
411
|
}
|
|
370
412
|
function extractUser(scheme, authorization) {
|
|
371
413
|
try {
|
|
372
414
|
switch (scheme) {
|
|
373
|
-
case "Basic":
|
|
415
|
+
case "Basic":
|
|
416
|
+
return atob(authorization).split(':')[0] || undefined;
|
|
374
417
|
case "Bearer": {
|
|
375
|
-
const
|
|
376
|
-
if (
|
|
377
|
-
return JSON.parse(atob(
|
|
418
|
+
const payloadMatch = authorization.match(/^[^.]+\.([^.]+)\.[^.]+$/);
|
|
419
|
+
if (payloadMatch?.[1]) {
|
|
420
|
+
return JSON.parse(atob(payloadMatch[1])).sub;
|
|
378
421
|
}
|
|
379
|
-
dispatchReport('extractUser',
|
|
422
|
+
dispatchReport('extractUser', 'Invalid Bearer token format');
|
|
380
423
|
return undefined;
|
|
381
424
|
}
|
|
382
|
-
default:
|
|
425
|
+
default:
|
|
383
426
|
dispatchReport('extractUser', `Unknown auth scheme: ${scheme}`);
|
|
384
|
-
}
|
|
385
427
|
}
|
|
386
428
|
}
|
|
387
429
|
catch (e) {
|
|
@@ -391,7 +433,7 @@ function extractUser(scheme, authorization) {
|
|
|
391
433
|
}
|
|
392
434
|
function extractContentType(headers) {
|
|
393
435
|
try {
|
|
394
|
-
if (headers
|
|
436
|
+
if (headers?.has('Content-Type')) {
|
|
395
437
|
return headers.get('Content-Type');
|
|
396
438
|
}
|
|
397
439
|
}
|
|
@@ -418,11 +460,10 @@ class HttpInterceptorService {
|
|
|
418
460
|
this.techConfig = techConfig;
|
|
419
461
|
}
|
|
420
462
|
intercept(req, next) {
|
|
421
|
-
var _a;
|
|
422
463
|
const monitor = new RestRequestMonitor();
|
|
423
464
|
monitor.preProcess(req);
|
|
424
465
|
const host = new URL(req.url, window.location.origin).host;
|
|
425
|
-
if (!
|
|
466
|
+
if (!this.techConfig.tech.hostExcludes?.some((e) => e == host)) { // exclude les hôtes qui ne permet pas la modification des headers
|
|
426
467
|
req = req.clone({ headers: req.headers.set(TRACE_HEADER, monitor.id) });
|
|
427
468
|
}
|
|
428
469
|
let response = null;
|
|
@@ -450,23 +491,23 @@ class HttpInterceptorService {
|
|
|
450
491
|
monitor.postProcess(response, error);
|
|
451
492
|
}));
|
|
452
493
|
}
|
|
494
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: HttpInterceptorService, deps: [{ token: COLLECTOR_CONFIG$1 }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
495
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: HttpInterceptorService, providedIn: 'root' }); }
|
|
453
496
|
}
|
|
454
|
-
|
|
455
|
-
HttpInterceptorService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: HttpInterceptorService, providedIn: 'root' });
|
|
456
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: HttpInterceptorService, decorators: [{
|
|
497
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: HttpInterceptorService, decorators: [{
|
|
457
498
|
type: Injectable,
|
|
458
499
|
args: [{ providedIn: 'root' }]
|
|
459
|
-
}], ctorParameters:
|
|
500
|
+
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
460
501
|
type: Inject,
|
|
461
502
|
args: [COLLECTOR_CONFIG$1]
|
|
462
|
-
}] }]
|
|
503
|
+
}] }] });
|
|
463
504
|
|
|
464
505
|
class GlobalErrorHandler {
|
|
465
506
|
handleError(error) {
|
|
466
507
|
try {
|
|
467
508
|
SessionManager.instance.addException({
|
|
468
|
-
type: error
|
|
469
|
-
message: error
|
|
509
|
+
type: error?.name,
|
|
510
|
+
message: error?.message
|
|
470
511
|
});
|
|
471
512
|
}
|
|
472
513
|
catch (e) {
|
|
@@ -474,10 +515,10 @@ class GlobalErrorHandler {
|
|
|
474
515
|
}
|
|
475
516
|
throw error;
|
|
476
517
|
}
|
|
518
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: GlobalErrorHandler, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
519
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: GlobalErrorHandler, providedIn: 'root' }); }
|
|
477
520
|
}
|
|
478
|
-
|
|
479
|
-
GlobalErrorHandler.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: GlobalErrorHandler, providedIn: 'root' });
|
|
480
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: GlobalErrorHandler, decorators: [{
|
|
521
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: GlobalErrorHandler, decorators: [{
|
|
481
522
|
type: Injectable,
|
|
482
523
|
args: [{ providedIn: 'root' }]
|
|
483
524
|
}] });
|
|
@@ -493,7 +534,7 @@ class EventTraceScheduledDispatcherService {
|
|
|
493
534
|
this.wasDestroyed = false;
|
|
494
535
|
this.subscription = interval(_techConfig.interval)
|
|
495
536
|
.pipe(startWith(0))
|
|
496
|
-
.pipe(tap(() => {
|
|
537
|
+
.pipe(tap$1(() => {
|
|
497
538
|
if (!this.dispatching && !this.wasDestroyed && this.instance) {
|
|
498
539
|
this.dispatching = true;
|
|
499
540
|
dispatchExport();
|
|
@@ -509,7 +550,7 @@ class EventTraceScheduledDispatcherService {
|
|
|
509
550
|
}
|
|
510
551
|
appendTrace(events) {
|
|
511
552
|
if (!this.wasDestroyed) {
|
|
512
|
-
events
|
|
553
|
+
events?.forEach(event => this.traceQueue.push(event));
|
|
513
554
|
}
|
|
514
555
|
}
|
|
515
556
|
trace(instance) {
|
|
@@ -555,7 +596,7 @@ class EventTraceScheduledDispatcherService {
|
|
|
555
596
|
return traces; //retry on bad request !?
|
|
556
597
|
}
|
|
557
598
|
return res.json()
|
|
558
|
-
.then(body =>
|
|
599
|
+
.then(body => body?.retry ? traces : EMPTY_ARRAY)
|
|
559
600
|
.catch(() => EMPTY_ARRAY);
|
|
560
601
|
})
|
|
561
602
|
.catch(() => {
|
|
@@ -587,8 +628,7 @@ class EventTraceScheduledDispatcherService {
|
|
|
587
628
|
}
|
|
588
629
|
}
|
|
589
630
|
destroy() {
|
|
590
|
-
|
|
591
|
-
(_a = this.subscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
|
|
631
|
+
this.subscription?.unsubscribe();
|
|
592
632
|
this.wasDestroyed = true;
|
|
593
633
|
dispatchExport(); //last metric ??
|
|
594
634
|
this.dispatchTraces(true);
|
|
@@ -637,13 +677,18 @@ function lookUpChild(t, depth) {
|
|
|
637
677
|
return true;
|
|
638
678
|
}
|
|
639
679
|
function addActionUser(eventType, target) {
|
|
640
|
-
|
|
641
|
-
|
|
680
|
+
dispatchTraces({
|
|
681
|
+
...SessionManager.instance.initUserAction(),
|
|
682
|
+
'@type': TRACE_TYPE_USER_ACTION,
|
|
683
|
+
type: eventType,
|
|
684
|
+
instant: dateNow(),
|
|
685
|
+
name: extractName(target),
|
|
686
|
+
nodeName: target.tagName?.toLowerCase()
|
|
687
|
+
});
|
|
642
688
|
}
|
|
643
689
|
function getFirst(c, t) {
|
|
644
|
-
var _a;
|
|
645
690
|
for (const o of c) {
|
|
646
|
-
let r =
|
|
691
|
+
let r = o(t)?.trim();
|
|
647
692
|
if (r) {
|
|
648
693
|
return r;
|
|
649
694
|
}
|
|
@@ -659,7 +704,7 @@ function extractName(t) {
|
|
|
659
704
|
if (c) {
|
|
660
705
|
name = getFirst(c, t);
|
|
661
706
|
}
|
|
662
|
-
return name
|
|
707
|
+
return name ?? getFirst(genericMap, t);
|
|
663
708
|
}
|
|
664
709
|
}
|
|
665
710
|
catch (err) {
|
|
@@ -749,7 +794,7 @@ const COLLECTOR_CONFIG = new InjectionToken('COLLECTOR_CONFIG');
|
|
|
749
794
|
class NgCollectorModule {
|
|
750
795
|
static forRoot(configuration) {
|
|
751
796
|
const providers = [];
|
|
752
|
-
if (configuration
|
|
797
|
+
if (configuration?.enabled) {
|
|
753
798
|
try {
|
|
754
799
|
let config = initializeCollector(configuration);
|
|
755
800
|
providers.push({ provide: COLLECTOR_CONFIG, useValue: config }, { provide: APP_INITIALIZER, useFactory: initializeEventsFactory, deps: [COLLECTOR_CONFIG, Router], multi: true }, { provide: HTTP_INTERCEPTORS, useClass: HttpInterceptorService, deps: [COLLECTOR_CONFIG], multi: true }, { provide: ErrorHandler, useClass: GlobalErrorHandler });
|
|
@@ -760,11 +805,11 @@ class NgCollectorModule {
|
|
|
760
805
|
}
|
|
761
806
|
return { ngModule: NgCollectorModule, providers: providers };
|
|
762
807
|
}
|
|
808
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: NgCollectorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
809
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.25", ngImport: i0, type: NgCollectorModule }); }
|
|
810
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: NgCollectorModule }); }
|
|
763
811
|
}
|
|
764
|
-
|
|
765
|
-
NgCollectorModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: NgCollectorModule });
|
|
766
|
-
NgCollectorModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: NgCollectorModule });
|
|
767
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: NgCollectorModule, decorators: [{
|
|
812
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: NgCollectorModule, decorators: [{
|
|
768
813
|
type: NgModule
|
|
769
814
|
}] });
|
|
770
815
|
function initializeEventsFactory(config, router) {
|
|
@@ -807,8 +852,15 @@ class LocalRequestMonitor {
|
|
|
807
852
|
this.id = crypto.randomUUID();
|
|
808
853
|
}
|
|
809
854
|
preProcess(propertyKey, target) {
|
|
810
|
-
|
|
811
|
-
|
|
855
|
+
dispatchTraces({
|
|
856
|
+
...WIN["inspect-session-manager"]?.initRestRequest(RequestMask.LOCAL),
|
|
857
|
+
"@type": TRACE_TYPE_LOCAL_REQUEST,
|
|
858
|
+
id: this.id,
|
|
859
|
+
name: propertyKey,
|
|
860
|
+
location: target.constructor.name,
|
|
861
|
+
user: WIN["inspect-session-manager"]?.currentSession?.user, //bad access
|
|
862
|
+
start: this.start
|
|
863
|
+
});
|
|
812
864
|
}
|
|
813
865
|
postProcess(exception) {
|
|
814
866
|
dispatchTraces({
|
|
@@ -867,4 +919,4 @@ function resolveException(e) {
|
|
|
867
919
|
*/
|
|
868
920
|
|
|
869
921
|
export { NgCollectorModule, TraceableStage, initializeCollector, initializeEventsFactory, reloadCollector, resolveException, sessionlogger };
|
|
870
|
-
//# sourceMappingURL=oneteme-inspect-ng-collector.
|
|
922
|
+
//# sourceMappingURL=oneteme-inspect-ng-collector.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oneteme-inspect-ng-collector.mjs","sources":["../../../../projects/oneteme/inspect-ng-collector/src/lib/trace.model.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/event-bus.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/configuration.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/session-manager.service.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/rest-request.monitor.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/http-interceptor.service.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/global-error-handler.service.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/event-trace-scheduled-dispatcher.service.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/user-action.monitor.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/navigation.monitor.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/resource-usage.monitor.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/ng-collector.module.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/local-request.monitor.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/traceable-stage.decorator.ts","../../../../projects/oneteme/inspect-ng-collector/src/public-api.ts","../../../../projects/oneteme/inspect-ng-collector/src/oneteme-inspect-ng-collector.ts"],"sourcesContent":["type InstantType = \"SERVER\" | \"CLIENT\";\ntype MainSessionType = \"VIEW\" | \"BATCH\" | \"STARTUP\";\n\nexport type LogLevel = \"INFO\" | \"WARN\" | \"ERROR\" | \"REPORT\";\nexport type UUID = `${string}-${string}-${string}-${string}-${string}`;\n\nexport enum RequestMask { LOCAL = 1, REST = 4 }\n\nexport const TRACE_TYPE_LOG = '00';\nexport const TRACE_TYPE_RESOURCE_USAGE = '01';\nexport const TRACE_TYPE_COLLECTOR_CONFIGURATION = '02';\nexport const TRACE_TYPE_SESSION_MASK_UPDATE = '03';\nexport const TRACE_TYPE_MAIN_SESSION = '10';\nexport const TRACE_TYPE_MAIN_SESSION_CALLBACK = '11';\nexport const TRACE_TYPE_LOCAL_REQUEST = '110';\nexport const TRACE_TYPE_LOCAL_REQUEST_CALLBACK = '111';\nexport const TRACE_TYPE_REST_REQUEST = '120';\nexport const TRACE_TYPE_REST_REQUEST_CALLBACK = '121';\nexport const TRACE_TYPE_HTTP_REQUEST_STAGE = '220';\nexport const TRACE_TYPE_USER_ACTION = '300';\n\n\nexport function dateNow() {\n return Date.now() / 1_000;\n}\n\nexport interface InstanceEnvironment {\n id: string;\n name?: string;\n address?: string;\n version?: string;\n env?: string;\n os?: string;\n re?: string;\n user?: string;\n type?: InstantType;\n instant?: number;\n collector?: string;\n resource: MachineResource;\n additionalProperties?: { [key: string]: any };\n configuration?: { [key: string]: any };\n}\n\nexport interface EventTrace { }\n\nexport interface MainSession extends EventTrace {\n '@type': typeof TRACE_TYPE_MAIN_SESSION;\n id: UUID;\n type: MainSessionType;\n name?: string;\n location: string;\n user?: string;\n start: number;\n requestMask: number;\n}\n\nexport interface MainSessionCallBack extends EventTrace {\n '@type': typeof TRACE_TYPE_MAIN_SESSION_CALLBACK;\n id: UUID;\n end?: number;\n requestMask: number;\n exception?: ExceptionInfo; // make a list ?\n}\n\nexport interface SessionMaskUpdate {\n '@type': typeof TRACE_TYPE_SESSION_MASK_UPDATE;\n id: UUID;\n main: boolean;\n mask: number;\n}\n\nexport interface RestRequest extends EventTrace {\n '@type': typeof TRACE_TYPE_REST_REQUEST;\n id: UUID;\n method: string;\n protocol: string;\n host: string;\n port: number;\n path: string;\n query: string;\n contentType?: string;\n authScheme?: string;\n dataSize: number;\n user?: string;\n start: number;\n sessionId?: UUID;\n}\n\nexport interface RestRequestCallBack extends EventTrace {\n '@type': typeof TRACE_TYPE_REST_REQUEST_CALLBACK;\n id: UUID;\n status?: number;\n end?: number;\n dataSize?: number;\n linked?: boolean;\n contentType?: string;\n bodyContent?: string;\n}\n\nexport interface HttpRequestStage extends EventTrace {\n '@type': typeof TRACE_TYPE_HTTP_REQUEST_STAGE;\n name: string;\n start: number;\n end?: number;\n exception?: ExceptionInfo;\n requestId: string;\n}\n\nexport interface LocalRequest extends EventTrace {\n '@type': typeof TRACE_TYPE_LOCAL_REQUEST;\n id: UUID;\n name: string;\n location: string;\n user?: string;\n start: number;\n sessionId: UUID;\n}\n\nexport interface LocalRequestCallBack extends EventTrace {\n '@type': typeof TRACE_TYPE_LOCAL_REQUEST_CALLBACK;\n id: UUID;\n end: number;\n exception?: ExceptionInfo;\n}\n\nexport interface ExceptionInfo {\n type?: string;\n message?: string;\n}\n\nexport interface UserAction extends EventTrace {\n '@type': typeof TRACE_TYPE_USER_ACTION;\n type: string;\n instant: number;\n name: string | null;\n nodeName: string;\n sessionId: string;\n}\n\nexport interface LogEntry extends EventTrace {\n '@type': typeof TRACE_TYPE_LOG;\n instant: number;\n level: LogLevel;\n message: string;\n sessionId?: UUID;\n}\n\nexport interface MachineResource extends EventTrace {\n maxHeap?: number;\n}\n\nexport interface MachineRessourceUsage extends EventTrace {\n '@type': typeof TRACE_TYPE_RESOURCE_USAGE;\n instant: number;\n commitedHeap: number;\n usedHeap: number;\n}\n","import { dateNow, EventTrace, LogLevel, LogEntry, TRACE_TYPE_LOG } from \"./trace.model\";\n\nconst eventTarget = new EventTarget();\nconst TRACE = 'trace', EXPORT = 'export', SHUTDOWN = 'shutdown', RELOAD = 'reload';\n\nexport const WIN: any = window;\n\nexport function dispatchReport(message: string, error?: any) : void {\n dispatchLog(\"REPORT\", `${message} ${error && JSON.stringify(error)}`)\n}\n\nexport function dispatchLog(level: LogLevel, message: string, sessionId?: string) {\n dispatchTraces({\n \"@type\": TRACE_TYPE_LOG,\n level: level,\n message: message,\n instant: dateNow(),\n sessionId: sessionId\n } as LogEntry);\n}\n\nexport function dispatchTraces(...traces: EventTrace[]): void {\n eventTarget.dispatchEvent(new CustomEvent(TRACE, { detail: { traces } }));\n}\n\nexport function dispatchExport(): void {\n eventTarget.dispatchEvent(new CustomEvent(EXPORT));\n}\n\nexport function dispatchReload(): void {\n eventTarget.dispatchEvent(new CustomEvent(RELOAD));\n}\n\nexport function dispatchShutown(): void {\n eventTarget.dispatchEvent(new CustomEvent(SHUTDOWN));\n}\n\nexport function addTraceListener(fn : EventListener): void {\n eventTarget.addEventListener(TRACE, fn);\n}\n\nexport function addExportListener(fn : EventListener): void {\n eventTarget.addEventListener(EXPORT, fn);\n}\n\nexport function addReloadListener(fn : EventListener): void {\n eventTarget.addEventListener(RELOAD, fn);\n}\n\nexport function addShutdownListener(fn : EventListener): void {\n eventTarget.addEventListener(SHUTDOWN, fn);\n}\n","import {dateNow, InstanceEnvironment, TRACE_TYPE_COLLECTOR_CONFIGURATION} from \"./trace.model\";\nimport {dispatchReport} from \"./event-bus\";\n\ntype Provider<T> = T | (() => T);\n\nconst HOST_PATERN = /https?:\\/\\/[\\w\\-.]+(:\\d{2,5})?\\/?/;\n\nexport interface CollectorConfig {\n enabled?: boolean; // default: false\n debugMode?: boolean;\n name: Provider<string>;\n version?: Provider<string>;\n env?: Provider<string>;\n user?: Provider<string>;\n additionalProperties?: ()=> {[key:string]: any};\n scheduling?: {\n interval?: number; // default: '60s'\n };\n monitoring?: {\n httpRoute?: {\n excludes?: {\n path?: Provider<RegExp[]>; // replace this with string[]\n };\n };\n httpRequest?: {\n excludes?: {\n host?: string[];\n };\n };\n resources?: {\n enabled?: boolean; // default: false\n };\n analytics?: {\n enabled?: boolean; // default: false\n };\n storage?: {\n enabled: boolean // default: false\n }\n };\n tracing?: {\n queueCapacity?: number; // default: 1000\n remote?: {\n '@type'?: string;\n mode?: string; // default: null\n host?: string; // default: 'localhost'\n retentionMaxAge?: number; // default: '30'\n };\n };\n\n}\n\nexport interface TechnicalConf {\n user?: Provider<string>;\n queueCapacity: number;\n interval: number;\n instanceApi: string;\n sessionApi: string;\n exclude?: RegExp[];\n hostExcludes?: string[];\n debugMode: boolean;\n analytics: boolean;\n resources: boolean;\n storage: boolean;\n enabled: boolean;\n}\n\nexport function getOrCall<T>(o?: Provider<T>): T | undefined {\n return typeof o === \"function\" ? (o as () => T)() : o;\n}\n\nexport function matchRegex(v: string | undefined, name: string, pattern: RegExp, defaultValue?: string) {\n if(v && pattern.exec(v)){\n return v;\n }\n if(!defaultValue){\n if(v != undefined){\n throw new Error(`bad value ${name}=${v}, pattern=${pattern}`);\n }else {\n throw new Error(`${name} property is required`);\n }\n }\n return defaultValue;\n}\n\nexport function requirePostitiveValue(v: number | undefined, name: string, defaultValue:number){\n if(v && v > 0) {\n return v;\n }\n if(v == undefined){\n return defaultValue;\n }\n throw new Error(`bad value ${name}=${v} <= 0`);\n}\n\nexport function require(v: string | undefined, name: string){\n if(v != undefined){\n return v;\n }\n throw new Error(`${name} property is required`);\n}\n\nexport function adaptedConfig(conf: CollectorConfig) {\n return {\n ...conf,\n scheduling: {\n ...conf.scheduling,\n interval: conf.scheduling?.interval && conf.scheduling.interval / 1000\n },\n monitoring: {\n ...conf.monitoring,\n additionalProperties: String(conf.additionalProperties),\n name: String(conf.name),\n version: String(conf.version),\n env: String(conf.env),\n user: String(conf.user),\n httpRoute: {\n ...conf.monitoring?.httpRoute,\n excludes: {\n path: (conf?.monitoring?.httpRoute?.excludes?.path as RegExp[]).map(r => r.source)\n }\n }\n },\n tracing: {\n ...conf.tracing,\n remote: {\n ...conf.tracing?.remote,\n '@type': TRACE_TYPE_COLLECTOR_CONFIGURATION,\n retentionMaxAge : (conf.tracing?.remote?.retentionMaxAge ?? 10) * 60 * 60 * 24\n }\n }\n }\n}\n\nexport function validateAndGetConfig(conf: CollectorConfig, instanceId: string) : TechnicalConf {\n const host = matchRegex(getOrCall<string>(conf?.tracing?.remote?.host), \"host\", HOST_PATERN);\n return {\n user: conf?.user,\n queueCapacity: requirePostitiveValue(getOrCall<number>(conf?.tracing?.queueCapacity), \"queueCapacity\", 1000),\n interval: requirePostitiveValue(getOrCall<number>(conf?.scheduling?.interval), \"interval\", 60000),\n instanceApi: new URL('v4/trace/instance', host).href,\n sessionApi : new URL(`v4/trace/instance/${instanceId}/session`, host).href,\n exclude: getOrCall<RegExp[]>(conf?.monitoring?.httpRoute?.excludes?.path) || [],\n hostExcludes: conf?.monitoring?.httpRequest?.excludes?.host || [],\n debugMode: !!conf.debugMode,\n analytics: !!conf?.monitoring?.analytics?.enabled,\n resources: !!conf?.monitoring?.resources?.enabled,\n storage: !!conf?.monitoring?.storage?.enabled,\n enabled: !!conf.enabled\n }\n}\n\nexport function createInstance(conf: CollectorConfig, instanceId: string): InstanceEnvironment {\n return {\n id: instanceId,\n instant: dateNow(),\n name: require(getOrCall<string>(conf?.name), 'configuration.name'),\n version: getOrCall<string>(conf?.version),\n address: getClientID(), //server side\n env: require(getOrCall<string>(conf?.env), 'env'),\n os: detectOs(),\n re: detectBrowser(),\n user: undefined, // cannot get user\n type: \"CLIENT\",\n collector: \"inspect-ng-collector-1.3.2-beta.1\",\n resource: { maxHeap: (('memory' in performance) && (performance as any).memory.jsHeapSizeLimit / (1024 * 1024)) || undefined },\n additionalProperties: conf?.additionalProperties?.(),\n configuration: adaptedConfig(conf)\n }\n}\n\nfunction getClientID() {\n let cid = localStorage.getItem(\"jarvis.inspect.cid\");\n if (!cid) {\n localStorage.setItem(\"jarvis.inspect.cid\", cid = crypto.randomUUID());\n }\n return cid;\n}\n\nfunction detectOs() {\n try {\n let versionMatch, version;\n const agent = globalThis.navigator.userAgent.toLowerCase() //TODO see also https://developer.mozilla.org/en-US/docs/Web/API/Navigator/userAgentData\n switch (true) {\n case (/windows/.test(agent)):\n versionMatch = /windows nt (\\d+\\.\\d+)/.exec(agent);\n version = versionMatch ? versionMatch[1] : '?';\n return `Windows ${version}`;\n case (/linux/.test(agent)):\n return 'Linux';\n\n case (/macintosh/.test(agent)):\n versionMatch = /mac os x (\\d+[._]\\d+[._]\\d+)/.exec(agent);\n version = versionMatch ? versionMatch[1] : '?';\n return `MacOs ${version}`\n }\n }\n catch (e) {\n dispatchReport(\"detectOs\", e) ;\n }\n return undefined;\n}\n\nfunction detectBrowser() {\n try {\n const agent = globalThis.navigator.userAgent.toLowerCase()\n switch (true) {\n case agent.includes('edg'):\n return 'Edge';\n case agent.includes('opr'):\n return 'Opera';\n case agent.includes('chrome'):\n return 'Chrome';\n case agent.includes('firefox'):\n return 'Firefox';\n case agent.includes('safari'):\n return 'Safari';\n case agent.includes('msie'):\n return 'IE';\n }\n }\n catch (e) {\n dispatchReport(\"detectBrowser\", e)\n }\n return undefined;\n}\n\nexport function refreshConfig(id: string, tech: TechnicalConf) {\n const uuidRegex = /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i;\n tech.sessionApi = tech.sessionApi.replace(uuidRegex, id);\n return id;\n}\n","import { dispatchTraces, dispatchReport, WIN, dispatchLog } from './event-bus';\nimport {\n dateNow,\n LogLevel,\n MainSession,\n MainSessionCallBack,\n RequestMask,\n SessionMaskUpdate,\n TRACE_TYPE_MAIN_SESSION,\n TRACE_TYPE_MAIN_SESSION_CALLBACK,\n TRACE_TYPE_SESSION_MASK_UPDATE\n} from \"./trace.model\";\nimport {getOrCall, TechnicalConf} from \"./configuration\";\n\nexport class SessionManager {\n\n static _instance: SessionManager;\n constructor(private readonly _techConfig: TechnicalConf) {\n }\n\n currentSession?: MainSession;\n currentSessionCallBack?: MainSessionCallBack;\n\n static get instance(): SessionManager {\n return SessionManager._instance;\n }\n\n navigate(url?: string) {\n const now = dateNow();\n this.endSession(now);\n if (url) {\n const id = crypto.randomUUID();\n this.currentSession = {\n '@type': TRACE_TYPE_MAIN_SESSION,\n id: id,\n type: \"VIEW\",\n user: getOrCall<string>(this._techConfig.user),\n start: now,\n location: url,\n requestMask: 0,\n };\n this.currentSessionCallBack = {\n '@type': TRACE_TYPE_MAIN_SESSION_CALLBACK,\n id: id,\n requestMask: 0,\n }\n }\n }\n\n private endSession(end : number){\n this.getCurrentSessionCallBack(call =>{\n call.end = end;\n dispatchTraces(call);\n });\n this.currentSessionCallBack = undefined;\n }\n\n updateSession() {\n if (this.currentSession) {\n this.currentSession.name = document.title; // add settimeout\n this.currentSession.location = document.URL;\n if (!this._techConfig.exclude?.some((e: any) => e.test(this.currentSession?.location))) {\n dispatchTraces(this.currentSession)\n }\n this.currentSession = undefined;\n }\n else{\n dispatchReport('updateSession', 'no active session');\n }\n }\n\n getCurrentSessionCallBack(fn: (s: MainSessionCallBack) => any) {\n if (this.currentSessionCallBack) {\n return fn(this.currentSessionCallBack);\n }\n dispatchReport('getCurrentSessionCallBack', 'no active session');\n return undefined;\n }\n\n currentSessionID(): string | undefined {\n return this.getCurrentSessionCallBack(s=> s.id);\n }\n\n initRestRequest(mask: RequestMask){\n const req = this.getCurrentSessionCallBack(s=>{\n if ((s.requestMask & mask) !== mask) {\n s.requestMask |= mask;\n dispatchTraces({\n \"@type\": TRACE_TYPE_SESSION_MASK_UPDATE,\n id: s.id,\n main: true,\n mask: s.requestMask\n } as SessionMaskUpdate);\n }\n return {sessionId:s.id};\n });\n return req || {};\n }\n\n initUserAction(){\n const req = this.getCurrentSessionCallBack(s=> ({sessionId:s.id}));\n return req || {};\n }\n\n addException(exception: any) {\n this.getCurrentSessionCallBack(s => s.exception = exception)\n }\n\n info(message: string) {\n this.log(\"INFO\", message);\n }\n\n warn(message: string) {\n this.log(\"WARN\", message);\n }\n\n error(message: string) {\n this.log(\"ERROR\", message);\n }\n\n private log(level: LogLevel, message: string){\n if (message) {\n this.getCurrentSessionCallBack(s=> dispatchLog(level, message, s.id));\n }\n }\n}\n\nexport function sessionlogger(): SessionManager {\n return SessionManager.instance;\n}\n\nexport function sessionManager(tech: TechnicalConf){\n SessionManager._instance = new SessionManager(tech);\n WIN[\"inspect-session-manager\"] = SessionManager._instance;\n}\n","import {\n dateNow,\n ExceptionInfo,\n HttpRequestStage,\n RestRequest,\n RestRequestCallBack,\n RequestMask,\n TRACE_TYPE_HTTP_REQUEST_STAGE,\n TRACE_TYPE_REST_REQUEST,\n TRACE_TYPE_REST_REQUEST_CALLBACK,\n UUID\n} from \"./trace.model\";\nimport { dispatchTraces, dispatchReport } from \"./event-bus\";\nimport { HttpErrorResponse, HttpHeaders, HttpRequest, HttpResponse, HttpResponseBase } from \"@angular/common/http\";\nimport { SessionManager } from \"./session-manager.service\";\n\nexport const TRACE_HEADER = 'x-tracert';\n\nexport class RestRequestMonitor {\n\n readonly id: UUID;\n readonly start: number;\n\n constructor() {\n this.start = dateNow();\n this.id = crypto.randomUUID();\n }\n\n preProcess(restRequest: HttpRequest<any>) {\n const url = new URL(restRequest.urlWithParams, globalThis.location.origin);\n const auth_user = extractAuthSchemeAnduser(restRequest.headers);\n dispatchTraces({...SessionManager.instance.initRestRequest(RequestMask.REST),\n \"@type\": TRACE_TYPE_REST_REQUEST,\n id: this.id,\n method: restRequest.method,\n protocol: url.protocol.slice(0, -1),\n host: url.hostname,\n port: url.port? Number(url.port) : 0,\n path: url.pathname,\n query: url.search.slice(1, url.search.length),\n contentType: restRequest.responseType,\n authScheme: auth_user.authScheme,\n user: auth_user.user,\n dataSize: sizeOf(restRequest.body),\n start: this.start,\n } as RestRequest);\n }\n\n postProcess(response: HttpResponseBase | null, error: HttpErrorResponse | null) {\n const end = dateNow();\n const callback: RestRequestCallBack = {\n \"@type\": TRACE_TYPE_REST_REQUEST_CALLBACK,\n id: this.id,\n dataSize: -1,\n linked: false,\n end: end\n }\n let status: number = 0, exception!: ExceptionInfo;\n\n // HttpResponseBase couvre à la fois HttpResponse (succès) et HttpErrorResponse (erreur HTTP)\n if (response) {\n status = response.status;\n callback.dataSize = response instanceof HttpResponse ? sizeOf(response.body) : -1;\n callback.contentType = extractContentType(response.headers);\n callback.linked = assertSessionID(this.id, response.headers);\n }\n\n // Erreur réseau/annulation\n if (error) {\n status = error.status || 0;\n exception = {\n type: error.name,\n message: error.error && error.status ? JSON.stringify(error.error) : error.message\n }\n callback.bodyContent = JSON.stringify(error.error);\n callback.dataSize = sizeOf(error.error);\n callback.contentType = extractContentType(error.headers);\n callback.linked = assertSessionID(this.id, error.headers);\n }\n\n callback.status = status;\n dispatchTraces(callback, {\n \"@type\": TRACE_TYPE_HTTP_REQUEST_STAGE,\n name: \"PROCESS\",\n start: this.start, // use request\n end: end,\n order: 0,\n exception: exception,\n requestId: this.id\n } as HttpRequestStage);\n }\n}\n\nfunction assertSessionID(id: string, headers: HttpHeaders) { //browser cache !?\n return headers?.get(TRACE_HEADER) == id;\n}\n\nfunction extractAuthSchemeAnduser(headers: any): { user: string | null, authScheme: string | null } {\n const authHeader = headers?.get('authorization');\n if (!authHeader) {\n return { authScheme: null, user: null };\n }\n\n const [scheme, credentials] = authHeader.split(' ');\n\n if (!scheme || !credentials || !['Basic', 'Bearer'].includes(scheme)) {\n return { authScheme: null, user: null };\n }\n\n return {\n authScheme: scheme,\n user: extractUser(scheme as 'Basic' | 'Bearer', credentials) ?? null\n };\n}\n\nfunction extractUser(scheme: 'Basic' | 'Bearer', authorization: string) {\n try {\n switch (scheme) {\n case \"Basic\":\n return atob(authorization).split(':')[0] || undefined;\n case \"Bearer\": {\n const payloadMatch = authorization.match(/^[^.]+\\.([^.]+)\\.[^.]+$/);\n if (payloadMatch?.[1]) {\n return JSON.parse(atob(payloadMatch[1])).sub;\n }\n dispatchReport('extractUser', 'Invalid Bearer token format');\n return undefined;\n }\n default:\n dispatchReport('extractUser', `Unknown auth scheme: ${scheme}`);\n }\n } catch (e) {\n dispatchReport('extractUser', e);\n }\n return undefined;\n}\n\nfunction extractContentType(headers: any): string | undefined {\n try {\n if (headers?.has('Content-Type')) {\n return headers.get('Content-Type');\n }\n } catch (err) {\n dispatchReport('extractContentType', err);\n }\n return undefined;\n}\n\nfunction sizeOf(body: any): number {\n if (body) {\n try {\n return new Blob([JSON.stringify(body)]).size;\n }\n catch (e) {\n dispatchReport('sizeOf', e);\n }\n }\n return -1;\n}\n","import { Injectable, Inject, InjectionToken, Optional } from '@angular/core';\nimport { HttpInterceptor, HttpEvent, HttpHandler, HttpRequest, HttpResponse, HttpErrorResponse, HttpResponseBase } from '@angular/common/http';\nimport { finalize, Observable } from 'rxjs';\nimport { tap } from 'rxjs/operators'\nimport { RestRequestMonitor, TRACE_HEADER } from \"./rest-request.monitor\";\nimport { TechnicalConf} from \"./configuration\";\nimport { InstanceEnvironment } from \"./trace.model\";\n\nexport const COLLECTOR_CONFIG = new InjectionToken<TechnicalConf>('COLLECTOR_CONFIG');\n\n@Injectable({ providedIn: 'root' })\nexport class HttpInterceptorService implements HttpInterceptor {\n\n constructor(@Inject(COLLECTOR_CONFIG) private readonly techConfig: {tech: TechnicalConf, instance: InstanceEnvironment}) {}\n\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n const monitor = new RestRequestMonitor();\n monitor.preProcess(req);\n\n const host = new URL(req.url, window.location.origin).host;\n if (!this.techConfig.tech.hostExcludes?.some((e: any) => e == host)) { // exclude les hôtes qui ne permet pas la modification des headers\n req = req.clone({ headers: req.headers.set(TRACE_HEADER, monitor.id) });\n }\n\n let response: HttpResponseBase | null = null;\n let error: HttpErrorResponse | null = null;\n\n return next.handle(req).pipe(tap({\n next: (event: HttpEvent<any>) => {\n if (event instanceof HttpResponse) {\n response = event;\n }\n //todo autres types d'événements (UploadProgress, DownloadProgress, etc.) ignorés pour les traces\n },\n error: (err: HttpErrorResponse) => {\n error = err;\n }\n }),\n finalize(() => {\n // Si pas de réponse et pas d'erreur capturé, la requête a été annulée\n if (!response && !error) {\n error = new HttpErrorResponse({\n error: 'The request was cancelled before completion',\n status: 0,\n statusText: 'Cancelled',\n url: req.url\n });\n }\n monitor.postProcess(response, error);\n }));\n }\n}\n","import { ErrorHandler, Injectable } from \"@angular/core\";\nimport { SessionManager } from \"./session-manager.service\";\nimport { dispatchReport } from \"./event-bus\";\n\n@Injectable({ providedIn: 'root' })\nexport class GlobalErrorHandler implements ErrorHandler {\n\n handleError(error: any) {\n try {\n SessionManager.instance.addException({\n type: error?.name,\n message: error?.message\n })\n } catch (e) {\n dispatchReport(\"GlobalErrorHandlerService.handleError\", e);\n }\n throw error;\n }\n}\n","import { interval, startWith, tap, Subscription } from \"rxjs\";\nimport {EventTrace, InstanceEnvironment} from \"./trace.model\";\nimport { dispatchExport, addTraceListener, addShutdownListener, dispatchReport } from \"./event-bus\";\nimport {TechnicalConf} from \"./configuration\";\n\nconst EMPTY_ARRAY : EventTrace[] = <[]>Object.freeze([]);\n\nclass EventTraceScheduledDispatcherService {\n\n static _instance: EventTraceScheduledDispatcherService;\n\n readonly subscription: Subscription\n readonly traceQueue: EventTrace[] = [];\n\n dispatchAttempts: number = 0\n dispatching: boolean = false;\n instanceDispatched: boolean = false;\n wasDestroyed : boolean = false;\n\n instance?: InstanceEnvironment ;\n constructor(private readonly _techConfig: TechnicalConf) {\n this.subscription = interval(_techConfig.interval)\n .pipe(startWith(0))\n .pipe(tap(() => {\n if (!this.dispatching && !this.wasDestroyed && this.instance) {\n this.dispatching = true;\n dispatchExport();\n this.dispatch()\n .then(arr => this.revertQueueSize(arr))\n .catch(err => dispatchReport('EventTraceScheduledDispatcher.dispatch', err))\n .finally(() => { this.dispatching = false })\n }\n }))\n .subscribe();\n addTraceListener(e => this.appendTrace((e as CustomEvent).detail.traces));\n addShutdownListener(e => this.destroy());\n }\n\n appendTrace(events: EventTrace[]) {\n if(!this.wasDestroyed){\n events?.forEach(event => this.traceQueue.push(event));\n }\n }\n\n trace(instance: InstanceEnvironment) {\n this.instance = instance;\n }\n\n dispatch(): Promise<any> {\n if (this.instanceDispatched) {\n return this.dispatchTraces();\n }\n return this.dispatchInstance().then(ok => {\n if (ok) {\n this.instanceDispatched = true;\n return this.dispatchTraces();\n }\n console.warn(`Error while attempting to send Environement instance, attempts ${this.dispatchAttempts}`);\n return Promise.reject(new Error('No instance id'));\n });\n }\n\n dispatchTraces(destroy?: boolean): Promise<EventTrace[]> {\n if (this.traceQueue.length === 0) {\n return Promise.resolve(EMPTY_ARRAY);\n }\n let uri = this._techConfig.sessionApi + \"?attempts=\" + ++this.dispatchAttempts;\n if (destroy) {\n uri += \"&end=\" + new Date().toISOString();\n }\n const traces = [...this.traceQueue];\n this.traceQueue.length = 0;\n return fetch(uri, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n mode: 'cors',\n keepalive: true,\n body: JSON.stringify(traces)\n })\n .then(res=> {\n if (res.ok) {\n this.dispatchAttempts = 0;\n return EMPTY_ARRAY;\n }\n console.warn(`Error while attempting to send sessions, attempts: ${this.dispatchAttempts}`);\n if (res.status >= 400 && res.status < 500) {\n return traces; //retry on bad request !?\n }\n return res.json()\n .then(body => body?.retry ? traces : EMPTY_ARRAY)\n .catch(() => EMPTY_ARRAY);\n })\n .catch(() => {\n console.warn(`Error while attempting to send sessions, attempts: ${this.dispatchAttempts}`); //no cnx !\n return traces;\n });\n }\n\n dispatchInstance(): Promise<boolean> {\n this.dispatchAttempts++;\n return fetch(this._techConfig.instanceApi, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n mode: 'cors',\n keepalive: true,\n body: JSON.stringify(this.instance)\n })\n .then(res => res.ok ? res.text().then(id => {\n this.dispatchAttempts = 0;\n return true;\n }) : false)\n .catch(err => false);\n }\n\n revertQueueSize(traces: EventTrace[]) {\n if(!this.wasDestroyed){\n this.traceQueue.unshift(...traces);\n if (this.traceQueue.length > this._techConfig.queueCapacity) {\n this.traceQueue.splice(this._techConfig.queueCapacity);\n }\n }\n }\n\n destroy() {\n this.subscription?.unsubscribe();\n this.wasDestroyed = true;\n dispatchExport(); //last metric ??\n this.dispatchTraces(true);\n }\n}\n\nexport function eventTraceScheduledDispatcher(tech: TechnicalConf): EventTraceScheduledDispatcherService {\n return EventTraceScheduledDispatcherService._instance = new EventTraceScheduledDispatcherService(tech);\n}\n","import { dateNow, UserAction, TRACE_TYPE_USER_ACTION } from \"./trace.model\";\nimport { SessionManager } from \"./session-manager.service\";\nimport { dispatchReport, dispatchTraces } from \"./event-bus\";\n\nconst eventHandlers: { [key: string]: (target: HTMLElement) => boolean } = {\n 'click': (target: HTMLElement) => lookUpChild(target, 1),\n}\nexport function initUserActionMonitor() {\n try {\n const body = window.document.body;\n body.addEventListener('click', globalHandler, true);\n body.addEventListener('change', globalHandler, true);\n body.addEventListener('scrollend', globalHandler, true);\n body.addEventListener('dragend', globalHandler, true);\n window.document.addEventListener('DOMContentLoaded', globalHandler, true);\n }\n catch (e) {\n dispatchReport(\"initUserActionMonitor\", e);\n }\n}\n\nfunction globalHandler(event: Event | MouseEvent) {\n const target = event.target as HTMLElement;\n const eventType = event.type;\n try {\n if (eventHandlers.hasOwnProperty(eventType) && !eventHandlers[eventType](target)) {\n return;\n }\n addActionUser(eventType, target);\n } catch (err) {\n dispatchReport(\"UserACTION.globalHandler\", err)\n }\n}\n\nfunction lookUpChild(t: HTMLElement, depth: number): boolean {\n if (t.hasChildNodes() && t.children.length <= 5) {\n if (++depth > 5) {\n return false;\n }\n return Array.from(t.childNodes).reduce((acc, c) =>\n acc && lookUpChild(c as HTMLElement, depth), true);\n }\n return true;\n}\n\nfunction addActionUser(eventType: string, target: HTMLElement) {\n dispatchTraces({\n ...SessionManager.instance.initUserAction(),\n '@type': TRACE_TYPE_USER_ACTION,\n type: eventType,\n instant: dateNow(),\n name: extractName(target),\n nodeName: target.tagName?.toLowerCase()\n } as UserAction);\n}\n\nfunction getFirst(c: ((t: HTMLElement) => string | null)[], t: HTMLElement) {\n for (const o of c) {\n let r = o(t)?.trim();\n if (r) {\n return r;\n }\n }\n return null;\n}\n\nfunction extractName(t: HTMLElement) {\n try {\n let tagName = t.tagName\n if (tagName) {\n let name;\n let c = MAP[tagName.toLowerCase()];\n if (c) {\n name = getFirst(c, t);\n }\n return name ?? getFirst(genericMap, t)!;\n }\n\n } catch (err) {\n console.warn(err)\n }\n return null\n}\n\nconst genericMap: ((t: HTMLElement) => string | null)[] = [\n t => t.getAttribute('placeholder'),\n t => t.getAttribute('title'),\n t => t.innerText,\n t => t.getAttribute('name'),\n t => t.getAttribute('id'),\n]\n\nconst MAP: { [key: string]: ((t: HTMLElement) => string | null)[] } = {\n 'img': [\n t => t.getAttribute('alt'),\n t => t.getAttribute('src'),\n ],\n 'input': [\n t => t.getAttribute('name'),\n ],\n 'a': [\n t => t.getAttribute('href'),\n ],\n 'label': [\n t => t.getAttribute('for'),\n ],\n}\n\n","import { NavigationCancel, NavigationEnd, NavigationStart, Router } from \"@angular/router\";\nimport { SessionManager } from \"./session-manager.service\";\nimport { dispatchReload, dispatchReport, dispatchShutown } from \"./event-bus\";\n\nexport function initNavigationMonitor(router: Router){\n try{\n router.events.subscribe(routeHandler);\n window.addEventListener('pageshow', bfCacheHandler);\n window.addEventListener(\"beforeunload\", windowUnloadHandler);\n }\n catch(e){\n dispatchReport('initNavigationMonitor', e)\n }\n}\n\nfunction routeHandler(event: any) {\n if (event instanceof NavigationStart) {\n SessionManager.instance.navigate(event.url);\n }\n if (event instanceof NavigationEnd || event instanceof NavigationCancel) {\n setTimeout(()=>SessionManager.instance.updateSession(),0)\n }\n}\n\nfunction windowUnloadHandler(event: any) {\n SessionManager.instance.navigate();\n dispatchShutown();\n}\n\nfunction bfCacheHandler(event: any) {\n if (event.persisted) { // if the page was restored from bfcache\n dispatchReload();\n SessionManager.instance.navigate(document.URL);\n setTimeout(() => SessionManager.instance.updateSession(), 0);\n }\n}\n","import { dateNow, MachineRessourceUsage, TRACE_TYPE_RESOURCE_USAGE } from \"./trace.model\";\nimport { dispatchTraces, dispatchReport, addExportListener } from \"./event-bus\";\n\nexport function initResourceUsageMonitor(){\n try{\n if ('memory' in performance) {\n addExportListener(ressourceUsageHandler);\n }\n }\n catch(e){\n dispatchReport('initResourceUsageMonitor', e)\n }\n}\n\nfunction ressourceUsageHandler() {\n try {\n const memory = (performance as any).memory;\n dispatchTraces({\n '@type': TRACE_TYPE_RESOURCE_USAGE,\n instant: dateNow(),\n usedHeap: memory.usedJSHeapSize / (1024 * 1024),\n commitedHeap: memory.totalJSHeapSize / (1024 * 1024),\n } as MachineRessourceUsage);\n } catch (e) {\n dispatchReport('ressourceUsageHandler', e);\n }\n}\n","import {\n NgModule,\n ModuleWithProviders,\n ErrorHandler,\n APP_INITIALIZER,\n InjectionToken\n} from '@angular/core';\nimport { HTTP_INTERCEPTORS, } from '@angular/common/http';\nimport { HttpInterceptorService } from './http-interceptor.service';\nimport { GlobalErrorHandler } from \"./global-error-handler.service\";\nimport {\n CollectorConfig,\n createInstance, refreshConfig,\n TechnicalConf,\n validateAndGetConfig\n} from \"./configuration\";\nimport {\n eventTraceScheduledDispatcher,\n} from \"./event-trace-scheduled-dispatcher.service\";\n\nimport { Router } from \"@angular/router\";\nimport { initUserActionMonitor } from \"./user-action.monitor\";\nimport { initNavigationMonitor } from './navigation.monitor';\nimport { initResourceUsageMonitor } from './resource-usage.monitor';\nimport { addReloadListener } from './event-bus';\nimport {sessionManager} from \"./session-manager.service\";\nimport {eventTraceDebugger} from \"./event-trace-debugger\";\nimport {InstanceEnvironment} from \"./trace.model\";\n\nconst COLLECTOR_CONFIG = new InjectionToken<CollectorConfig>('COLLECTOR_CONFIG');\n\n@NgModule()\nexport class NgCollectorModule {\n\n static forRoot(configuration: CollectorConfig): ModuleWithProviders<NgCollectorModule> {\n const providers = [];\n if (configuration?.enabled) {\n try {\n let config = initializeCollector(configuration);\n providers.push(\n { provide: COLLECTOR_CONFIG, useValue: config },\n { provide: APP_INITIALIZER, useFactory: initializeEventsFactory, deps: [COLLECTOR_CONFIG, Router], multi: true },\n { provide: HTTP_INTERCEPTORS, useClass: HttpInterceptorService, deps:[COLLECTOR_CONFIG], multi: true },\n { provide: ErrorHandler, useClass: GlobalErrorHandler }\n );\n } catch (e: any) {\n console.warn(`invalid Configuration, Ng-collector is disabled because of this ${e.message}`);\n }\n }\n return {ngModule: NgCollectorModule, providers : providers}\n }\n}\n\nexport function initializeEventsFactory(config: {tech: TechnicalConf, instance: InstanceEnvironment }, router: Router) {\n return () => {\n if (config.tech.analytics) {\n initUserActionMonitor();\n }\n if (config.tech.resources) {\n initResourceUsageMonitor();\n }\n initNavigationMonitor(router);\n //storageEventListener();\n //eventTraceDebugger\n addReloadListener(e=>{\n reloadCollector(config)\n });\n }\n}\n\nexport function initializeCollector(config: CollectorConfig) {\n const id = crypto.randomUUID();\n const tech = validateAndGetConfig(config, id);\n const dispatch = eventTraceScheduledDispatcher(tech);\n const instance = createInstance(config, id)\n dispatch.trace(instance);\n sessionManager(tech)\n return {tech: tech, instance: instance};\n}\n\nexport function reloadCollector(config: {tech: TechnicalConf, instance: InstanceEnvironment }) {\n const id = crypto.randomUUID();\n refreshConfig(id, config.tech);\n const dispatch = eventTraceScheduledDispatcher(config.tech);\n config.instance.id= id;\n dispatch.trace(config.instance);\n sessionManager(config.tech)\n}\n\n\n","import {\n dateNow,\n LocalRequest, LocalRequestCallBack,\n RequestMask,\n TRACE_TYPE_LOCAL_REQUEST,\n TRACE_TYPE_LOCAL_REQUEST_CALLBACK,\n UUID\n} from \"./trace.model\";\nimport {dispatchTraces, WIN} from \"./event-bus\";\n\nexport class LocalRequestMonitor {\n\n readonly id: UUID;\n readonly start: number;\n\n constructor() {\n this.start = dateNow();\n this.id = crypto.randomUUID();\n }\n\n preProcess(propertyKey: string, target: any){\n dispatchTraces({\n ...WIN[\"inspect-session-manager\"]?.initRestRequest(RequestMask.LOCAL),\n \"@type\": TRACE_TYPE_LOCAL_REQUEST,\n id: this.id,\n name: propertyKey,\n location: target.constructor.name,\n user: WIN[\"inspect-session-manager\"]?.currentSession?.user, //bad access\n start: this.start\n } as LocalRequest);\n }\n\n postProcess(exception?: any){\n dispatchTraces({\n \"@type\": TRACE_TYPE_LOCAL_REQUEST_CALLBACK,\n id: this.id,\n exception: exception,\n end: dateNow()\n } as LocalRequestCallBack);\n }\n}\n","import {LocalRequestMonitor} from \"./local-request.monitor\";\n\nexport function TraceableStage() {\n\n return function (\n target: any,\n propertyKey: string,\n descriptor: PropertyDescriptor\n ) {\n const originalMethod = descriptor.value;\n descriptor.value = function (...args: any[]) {\n const monitor = new LocalRequestMonitor();\n let exception;\n try {\n monitor.preProcess(propertyKey,target);\n return originalMethod.apply(this, args);\n } catch (e: any) {\n exception = resolveException(e);\n throw e;\n } finally {\n monitor.postProcess(exception)\n }\n }\n return descriptor;\n }\n}\nexport function resolveException(e: any): { type: string | null; message: string | null } {\n let type = null, message = null;\n if (e) {\n if (typeof e === \"string\") {\n message = e;\n } else if (e instanceof Error) {\n type = e.name;\n message = e.message;\n } else {\n message = JSON.stringify(e)\n }\n }\n return { type, message };\n}\n\n","/*\n * Public API Surface of inspect-ng-collector\n */\n\nexport * from './lib/ng-collector.module';\nexport * from './lib/traceable-stage.decorator';\nexport { sessionlogger } from './lib/session-manager.service';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["require","COLLECTOR_CONFIG","tap"],"mappings":"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"}
|
package/lib/configuration.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { InstanceEnvironment } from "./trace.model";
|
|
2
|
-
|
|
2
|
+
type Provider<T> = T | (() => T);
|
|
3
3
|
export interface CollectorConfig {
|
|
4
4
|
enabled?: boolean;
|
|
5
5
|
debugMode?: boolean;
|
|
@@ -79,37 +79,37 @@ export declare function adaptedConfig(conf: CollectorConfig): {
|
|
|
79
79
|
};
|
|
80
80
|
httpRequest?: {
|
|
81
81
|
excludes?: {
|
|
82
|
-
host?: string[]
|
|
83
|
-
}
|
|
84
|
-
}
|
|
82
|
+
host?: string[];
|
|
83
|
+
};
|
|
84
|
+
};
|
|
85
85
|
resources?: {
|
|
86
|
-
enabled?: boolean
|
|
87
|
-
}
|
|
86
|
+
enabled?: boolean;
|
|
87
|
+
};
|
|
88
88
|
analytics?: {
|
|
89
|
-
enabled?: boolean
|
|
90
|
-
}
|
|
89
|
+
enabled?: boolean;
|
|
90
|
+
};
|
|
91
91
|
storage?: {
|
|
92
92
|
enabled: boolean;
|
|
93
|
-
}
|
|
93
|
+
};
|
|
94
94
|
};
|
|
95
95
|
tracing: {
|
|
96
96
|
remote: {
|
|
97
97
|
'@type': string;
|
|
98
98
|
retentionMaxAge: number;
|
|
99
|
-
mode?: string
|
|
100
|
-
host?: string
|
|
99
|
+
mode?: string;
|
|
100
|
+
host?: string;
|
|
101
101
|
};
|
|
102
|
-
queueCapacity?: number
|
|
102
|
+
queueCapacity?: number;
|
|
103
103
|
};
|
|
104
|
-
enabled?: boolean
|
|
105
|
-
debugMode?: boolean
|
|
104
|
+
enabled?: boolean;
|
|
105
|
+
debugMode?: boolean;
|
|
106
106
|
name: Provider<string>;
|
|
107
|
-
version?: Provider<string
|
|
108
|
-
env?: Provider<string
|
|
109
|
-
user?: Provider<string
|
|
110
|
-
additionalProperties?: (
|
|
107
|
+
version?: Provider<string>;
|
|
108
|
+
env?: Provider<string>;
|
|
109
|
+
user?: Provider<string>;
|
|
110
|
+
additionalProperties?: () => {
|
|
111
111
|
[key: string]: any;
|
|
112
|
-
}
|
|
112
|
+
};
|
|
113
113
|
};
|
|
114
114
|
export declare function validateAndGetConfig(conf: CollectorConfig, instanceId: string): TechnicalConf;
|
|
115
115
|
export declare function createInstance(conf: CollectorConfig, instanceId: string): InstanceEnvironment;
|