@nsshunt/stsuxvue 1.0.74 → 1.0.75

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/dist/stsuxvue.cjs CHANGED
@@ -42,8 +42,8 @@ const ModelStore = pinia.defineStore("__sts__ModelStore", {
42
42
  state: () => {
43
43
  return {
44
44
  _models: {},
45
- _state: {},
46
- _observabilitySubscriberManager: {}
45
+ _state: {}
46
+ //_observabilitySubscriberManager: { }
47
47
  };
48
48
  },
49
49
  // Getters
@@ -115,13 +115,15 @@ const ModelStore = pinia.defineStore("__sts__ModelStore", {
115
115
  UpdateSate(modelId, newSate) {
116
116
  this._state[modelId] = newSate;
117
117
  },
118
- UpdateObservabilitySubscriberManager(modelId, observabilitySubscriberManager) {
119
- if (observabilitySubscriberManager === null) {
120
- delete this._observabilitySubscriberManager[modelId];
121
- } else {
122
- this._observabilitySubscriberManager[modelId] = observabilitySubscriberManager;
123
- }
118
+ /*
119
+ UpdateObservabilitySubscriberManager(modelId: string, observabilitySubscriberManager: ObservabilitySubscriberManager | null): void {
120
+ if (observabilitySubscriberManager === null) {
121
+ delete this._observabilitySubscriberManager[modelId];
122
+ } else {
123
+ this._observabilitySubscriberManager[modelId] = observabilitySubscriberManager;
124
+ }
124
125
  },
126
+ */
125
127
  SetupNewModelId(modelId) {
126
128
  this._models[modelId] = {
127
129
  serviceModel: {},
@@ -10014,11 +10016,11 @@ function v4(options, buf, offset) {
10014
10016
  }
10015
10017
  return _v4(options);
10016
10018
  }
10017
- var tinyEmitter$1 = { exports: {} };
10018
- var hasRequiredTinyEmitter$1;
10019
- function requireTinyEmitter$1() {
10020
- if (hasRequiredTinyEmitter$1) return tinyEmitter$1.exports;
10021
- hasRequiredTinyEmitter$1 = 1;
10019
+ var tinyEmitter = { exports: {} };
10020
+ var hasRequiredTinyEmitter;
10021
+ function requireTinyEmitter() {
10022
+ if (hasRequiredTinyEmitter) return tinyEmitter.exports;
10023
+ hasRequiredTinyEmitter = 1;
10022
10024
  function E() {
10023
10025
  }
10024
10026
  E.prototype = {
@@ -10063,13 +10065,13 @@ function requireTinyEmitter$1() {
10063
10065
  return this;
10064
10066
  }
10065
10067
  };
10066
- tinyEmitter$1.exports = E;
10067
- tinyEmitter$1.exports.TinyEmitter = E;
10068
- return tinyEmitter$1.exports;
10068
+ tinyEmitter.exports = E;
10069
+ tinyEmitter.exports.TinyEmitter = E;
10070
+ return tinyEmitter.exports;
10069
10071
  }
10070
- var tinyEmitterExports$1 = requireTinyEmitter$1();
10072
+ var tinyEmitterExports = requireTinyEmitter();
10071
10073
  const isNode = Object.prototype.toString.call(typeof process !== "undefined" ? process : 0) === "[object process]";
10072
- class SocketIoClient extends tinyEmitterExports$1.TinyEmitter {
10074
+ class SocketIoClient extends tinyEmitterExports.TinyEmitter {
10073
10075
  #agentManager;
10074
10076
  #logger;
10075
10077
  #name;
@@ -10153,14 +10155,18 @@ class SocketIoClient extends tinyEmitterExports$1.TinyEmitter {
10153
10155
  this.#EstablishSocketConnect();
10154
10156
  return this;
10155
10157
  }
10158
+ // Engine Errors / Events
10159
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
10160
+ EngineError(error) {
10161
+ }
10156
10162
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
10157
- ConnectCallBack(socket) {
10163
+ EngineReconnectError(error) {
10158
10164
  }
10159
10165
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
10160
- SocketEventsCallBack(socket) {
10166
+ EngineConnectError(error) {
10161
10167
  }
10162
10168
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
10163
- ErrorCallBack(error) {
10169
+ EngineReconnect(attempt) {
10164
10170
  }
10165
10171
  /*
10166
10172
  emit<Ev extends EventNames<ClientToServerEvents>>(ev: Ev, ...args: EventParams<ClientToServerEvents, Ev>): Socket<ServerToClientEvents, ClientToServerEvents> {
@@ -10213,31 +10219,36 @@ class SocketIoClient extends tinyEmitterExports$1.TinyEmitter {
10213
10219
  this.#socket = socket_ioClient.io(this.#address, socketOptions);
10214
10220
  this.#socket.io.on("error", (err) => {
10215
10221
  this.LogErrorMessage(`socketDetail.socket.io.on('error'): [${err}] Address: [${this.#address}]`);
10222
+ this.EngineError(err);
10216
10223
  });
10217
10224
  this.#socket.io.on("reconnect_error", (err) => {
10218
10225
  this.LogErrorMessage(`socketDetail.socket.io.on('reconnect_error'): [${err}] Address: [${this.#address}]`);
10226
+ this.EngineReconnectError(err);
10219
10227
  });
10220
10228
  this.#socket.on("connect_error", (err) => {
10221
10229
  this.LogErrorMessage(`socketDetail.socket.on('connect_error'): [${err}] Address: [${this.#address}]`);
10230
+ this.EngineConnectError(err);
10222
10231
  });
10223
10232
  this.#socket.io.on("reconnect", (attempt) => {
10224
10233
  this.LogErrorMessage(`socketDetail.socket.io.on('reconnect'): Number: [${attempt}] Address: [${this.#address}]`);
10234
+ this.EngineReconnect(attempt);
10225
10235
  });
10226
10236
  this.#socket.on("connect", () => {
10227
10237
  if (this.#socket) {
10228
10238
  this.LogDebugMessage(`Socket: [${this.#socket.id}]: connected, Address: [${this.#address}]`);
10229
10239
  setTimeout(() => {
10230
- this.ConnectCallBack(this.#socket);
10240
+ this.SocketConnect(this.#socket);
10231
10241
  }, 0);
10232
- this.SocketEventsCallBack(this.#socket);
10242
+ this.SetupSocketEvents(this.#socket);
10233
10243
  } else {
10234
10244
  const errorMessage = "Could not get socket object from socket.io, Address: [${socketDetail.address}]";
10235
10245
  this.LogErrorMessage(errorMessage);
10236
- this.ErrorCallBack(new Error(errorMessage));
10246
+ this.SocketConnectError(new Error(errorMessage));
10237
10247
  }
10238
10248
  });
10239
10249
  this.#socket.on("disconnect", (reason) => {
10240
10250
  this.LogDebugMessage("socket disconnect: " + reason);
10251
+ this.SocketDisconnect(reason);
10241
10252
  switch (reason) {
10242
10253
  case "io server disconnect":
10243
10254
  {
@@ -10282,81 +10293,20 @@ class SocketIoClient extends tinyEmitterExports$1.TinyEmitter {
10282
10293
  });
10283
10294
  }
10284
10295
  }
10285
- var tinyEmitter = { exports: {} };
10286
- var hasRequiredTinyEmitter;
10287
- function requireTinyEmitter() {
10288
- if (hasRequiredTinyEmitter) return tinyEmitter.exports;
10289
- hasRequiredTinyEmitter = 1;
10290
- function E() {
10291
- }
10292
- E.prototype = {
10293
- on: function(name, callback, ctx) {
10294
- var e = this.e || (this.e = {});
10295
- (e[name] || (e[name] = [])).push({
10296
- fn: callback,
10297
- ctx
10298
- });
10299
- return this;
10300
- },
10301
- once: function(name, callback, ctx) {
10302
- var self = this;
10303
- function listener() {
10304
- self.off(name, listener);
10305
- callback.apply(ctx, arguments);
10306
- }
10307
- listener._ = callback;
10308
- return this.on(name, listener, ctx);
10309
- },
10310
- emit: function(name) {
10311
- var data = [].slice.call(arguments, 1);
10312
- var evtArr = ((this.e || (this.e = {}))[name] || []).slice();
10313
- var i = 0;
10314
- var len = evtArr.length;
10315
- for (i; i < len; i++) {
10316
- evtArr[i].fn.apply(evtArr[i].ctx, data);
10317
- }
10318
- return this;
10319
- },
10320
- off: function(name, callback) {
10321
- var e = this.e || (this.e = {});
10322
- var evts = e[name];
10323
- var liveEvents = [];
10324
- if (evts && callback) {
10325
- for (var i = 0, len = evts.length; i < len; i++) {
10326
- if (evts[i].fn !== callback && evts[i].fn._ !== callback)
10327
- liveEvents.push(evts[i]);
10328
- }
10329
- }
10330
- liveEvents.length ? e[name] = liveEvents : delete e[name];
10331
- return this;
10332
- }
10333
- };
10334
- tinyEmitter.exports = E;
10335
- tinyEmitter.exports.TinyEmitter = E;
10336
- return tinyEmitter.exports;
10337
- }
10338
- var tinyEmitterExports = requireTinyEmitter();
10339
10296
  const SOCKET_NAMESPACE = "stsinstrumentmanager/stsmonitor";
10340
- class ObservabilitySubscriberManager extends SocketIoClient {
10341
- #socket = null;
10342
- #observabilitySocketIOSubscriber = null;
10343
- #observabilitySubscriptionManager = null;
10344
- #store;
10345
- #state = "init";
10346
- #modelId;
10297
+ class SocketClientSubscriber extends SocketIoClient {
10347
10298
  #options;
10348
- #tinyEmitter;
10349
10299
  #id;
10300
+ #currentSubscriptions = [];
10301
+ subscriptions = {};
10350
10302
  constructor(options) {
10351
10303
  super("STSVueTilsTester");
10352
10304
  this.#id = v4();
10353
10305
  this.#options = options;
10354
- this.#modelId = options.modelId;
10355
- this.#store = ModelStore();
10356
- this.#tinyEmitter = new tinyEmitterExports.TinyEmitter();
10357
- if (!this.#options.consumeInstrumentationMode) {
10358
- this.#options.consumeInstrumentationMode = "PROXY";
10359
- }
10306
+ this.LogDebugMessage(chalk.cyan(`${this.logPrefix}Start()`));
10307
+ const url = `${this.#options.instrumentManagerEndpoint}:${this.#options.instrumentManagerPort}/${SOCKET_NAMESPACE}/`;
10308
+ this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SetupSocket() url: [${url}]`));
10309
+ this.WithAddress(url).WithLogger(this.logger ?? stsutils.defaultLogger).SetupSocket();
10360
10310
  }
10361
10311
  get id() {
10362
10312
  return this.#id;
@@ -10368,242 +10318,75 @@ class ObservabilitySubscriberManager extends SocketIoClient {
10368
10318
  return `stsuxvue:ObservabilitySubscriberManager:`;
10369
10319
  }
10370
10320
  }
10371
- #SocketIOConnect = (socket) => {
10372
- try {
10373
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SocketIOConnect(): Starting`));
10374
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SocketIOConnect(): State: [${this.#state}]`));
10375
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SocketIOConnect(): Current Model Subscriptions: [${JSON.stringify(this.#observabilitySubscriptionManager?.subscriptions)}]`));
10376
- if (this.#observabilitySocketIOSubscriber instanceof stsobservability.ObservabilitySocketIOSubscriber) {
10377
- const observabilitySocketIOSubscriber = this.#observabilitySocketIOSubscriber;
10378
- if (socket.id) {
10379
- if (observabilitySocketIOSubscriber.socket) {
10380
- const observabilitySocketIOSubscriberSocketId = observabilitySocketIOSubscriber.socket.id;
10381
- if (observabilitySocketIOSubscriberSocketId) {
10382
- if (socket.id.localeCompare(observabilitySocketIOSubscriberSocketId) === 0) {
10383
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SocketIOConnect(): Socket IDs are the same, Socket ID: [${observabilitySocketIOSubscriberSocketId}]`));
10384
- }
10385
- }
10386
- } else {
10387
- (this.logger ?? stsutils.defaultLogger).warn(chalk.rgb(255, 165, 0)(`${this.logPrefix}SocketIOConnect(): observabilitySocketIOSubscriber.socket does not exist`));
10388
- (this.logger ?? stsutils.defaultLogger).warn(chalk.rgb(255, 165, 0)(`${this.logPrefix}SocketIOConnect(): this should have been set when the initial subscription manager was created`));
10389
- }
10390
- }
10391
- if (this.#state.localeCompare("init") === 0) {
10392
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SocketIOConnect(): state = init`));
10393
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SocketIOConnect(): state = started`));
10394
- this.#state = "started";
10395
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SocketIOConnect(): tinyEmitter.emit('connected')`));
10396
- this.#tinyEmitter.emit("connected");
10397
- } else {
10398
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SocketIOConnect(): Socket ids are different - update with new socket`));
10399
- if (observabilitySocketIOSubscriber.socket) {
10400
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SocketIOConnect(): -> Current Socket ID: [${observabilitySocketIOSubscriber.socket.id}]`));
10401
- } else {
10402
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SocketIOConnect(): -> Current Socket ID: [NONE - No current socket exists]`));
10403
- }
10404
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SocketIOConnect(): -> New (updated) Socket ID: [${socket.id}]`));
10405
- if (this.#observabilitySubscriptionManager) {
10406
- if (this.#observabilitySubscriptionManager.runState !== stsobservability.runStates.stopped) {
10407
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SocketIOConnect(): observabilitySubscriptionManager.Stop()`));
10408
- this.#observabilitySubscriptionManager?.Stop();
10321
+ UpdateModelCursor = (subscriptions) => {
10322
+ this.UnSubscribe(this.#currentSubscriptions);
10323
+ this.#currentSubscriptions = subscriptions;
10324
+ this.Subscribe(this.#currentSubscriptions);
10325
+ };
10326
+ Subscribe(subscriptions) {
10327
+ subscriptions.map(async (subId) => {
10328
+ try {
10329
+ if (this.socket) {
10330
+ this.LogDebugMessage(chalk.yellow(`ObservabilitySocketIOSubscriber:Subscribe(): Sending subscribe: subscriptionKey: [${subId.subscriptionKey.id}]`));
10331
+ this.socket.timeout(1e3).emit("subscribe", subId.subscriptionKey, (error, data) => {
10332
+ if (error) {
10333
+ this.LogErrorMessage(chalk.red(`ObservabilitySocketIOSubscriber:Subscribe(): Error: [${error}], data: [${data}]`));
10409
10334
  } else {
10410
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SocketIOConnect(): observabilitySubscriptionManager.runState: [${this.#observabilitySubscriptionManager.runState}] already stopped.`));
10335
+ this.LogDebugMessage(chalk.green(`ObservabilitySocketIOSubscriber:Subscribe(): Response: [${JSON.stringify(data)}]`));
10336
+ this.subscriptions[subId.subscriptionKey.id] = subId;
10411
10337
  }
10412
- } else {
10413
- this.LogErrorMessage(chalk.red(`${this.logPrefix}SocketIOConnect(): observabilitySubscriptionManager does not exist`));
10414
- }
10415
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SocketIOConnect(): Setting new socket into observabilitySocketIOSubscriber, Socket ID: [${socket.id}]`));
10416
- observabilitySocketIOSubscriber.socket = socket;
10417
- if (this.#state.localeCompare("started") === 0) {
10418
- setTimeout(() => {
10419
- if (this.#observabilitySubscriptionManager?.runState !== stsobservability.runStates.started) {
10420
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SocketIOConnect(): observabilitySubscriptionManager Start`));
10421
- this.#observabilitySubscriptionManager?.Start();
10422
- } else {
10423
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SocketIOConnect(): observabilitySubscriptionManager runState: [${this.#observabilitySubscriptionManager?.runState}] already started.`));
10424
- }
10425
- this.#tinyEmitter.emit("connected");
10426
- }, 2500);
10427
- } else {
10428
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SocketIOConnect(): state not in the started state, current state: [${this.#state}]`));
10429
- this.#tinyEmitter.emit("connected");
10430
- }
10431
- }
10432
- } else {
10433
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SocketIOConnect(): this.#observabilitySocketIOSubscriber not instance of ObservabilitySocketIOSubscriber`));
10434
- this.LogDebugMessage(chalk.cyan(this.#observabilitySocketIOSubscriber));
10435
- this.#tinyEmitter.emit("connected");
10436
- }
10437
- } catch (error) {
10438
- this.LogErrorMessage(chalk.red(`${this.logPrefix}SocketIOConnect(): Error: [${error}]`));
10439
- this.#tinyEmitter.emit("connected");
10440
- } finally {
10441
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SocketIOConnect(): Ended`));
10442
- }
10443
- };
10444
- #SetupObservabilitySubscriber = (socket) => {
10445
- this.LogDebugMessage(`${this.logPrefix}SetupObservabilitySubscriber(): consumeInstrumentationMode: [${this.#options.consumeInstrumentationMode}]`);
10446
- switch (this.#options.consumeInstrumentationMode) {
10447
- case "PROXY":
10448
- {
10449
- if (socket) {
10450
- const keepAlive = 2500;
10451
- this.LogDebugMessage(`${this.logPrefix}SetupObservabilitySubscriber(): Creating ObservabilitySocketIOSubscriber(): Socket ID: [${socket.id}], keepAlive: [${keepAlive}]`);
10452
- this.#observabilitySocketIOSubscriber = new stsobservability.ObservabilitySocketIOSubscriber({
10453
- socket,
10454
- keepAlive,
10455
- logger: this.logger ?? stsutils.defaultLogger
10456
- });
10457
- } else {
10458
- this.LogErrorMessage(chalk.red(`${this.logPrefix}SetupObservabilitySubscriber(): Socket not defined. Cannot create ObservabilitySocketIOSubscriber() without socket defined.`));
10459
- }
10460
- }
10461
- break;
10462
- case "REST":
10463
- {
10464
- const urlBase = `${this.#options.instrumentManagerEndpoint}:${this.#options.instrumentManagerPort}${this.#options.instrumentManagerAPIRoot}`;
10465
- const keepAlive = 1e3;
10466
- this.LogDebugMessage(`${this.logPrefix}SetupObservabilitySubscriber(): Creating ObservabilityRESTAPISubscriber(): Url Base: [${urlBase}], keepAlive: [${keepAlive}]`);
10467
- this.#observabilitySocketIOSubscriber = new stsobservability.ObservabilityRESTAPISubscriber({
10468
- keepAlive,
10469
- urlBase,
10470
- logger: this.logger ?? stsutils.defaultLogger
10471
10338
  });
10472
10339
  }
10473
- break;
10474
- default:
10475
- this.LogErrorMessage(chalk.red(`${this.logPrefix}SetupObservabilitySubscriber(): Unsupported consumeInstrumentationMode mode: [${this.#options.consumeInstrumentationMode}]`));
10476
- return;
10477
- }
10478
- this.#observabilitySubscriptionManager = new stsobservability.ObservabilitySubscriptionManager({
10479
- logger: this.logger ?? stsutils.defaultLogger,
10480
- maxLogLength: 100
10481
- });
10482
- this.#observabilitySubscriptionManager.observabilitySocketIOSubscriber = this.#observabilitySocketIOSubscriber;
10483
- };
10484
- UpdateModelCursor(subscriptions) {
10485
- if (this.#observabilitySubscriptionManager?.runState !== stsobservability.runStates.stopped) {
10486
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}UpdateModelCursor(): observabilitySubscriptionManager.Stop()`));
10487
- this.#observabilitySubscriptionManager?.Stop();
10488
- } else {
10489
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}UpdateModelCursor(): observabilitySubscriptionManager runState: [${this.#observabilitySubscriptionManager?.runState}] already stopped.`));
10490
- }
10491
- this.#state = "stopped";
10492
- setTimeout(() => {
10493
- if (this.#observabilitySubscriptionManager) {
10494
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}UpdateModelCursor(): observabilitySubscriptionManager.subscriptions: [${JSON.stringify(subscriptions)}]`));
10495
- this.#observabilitySubscriptionManager.subscriptions = subscriptions;
10496
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}UpdateModelCursor(): observabilitySubscriptionManager.Start()`));
10497
- this.#observabilitySubscriptionManager.Start();
10498
- } else {
10499
- this.LogDebugMessage(chalk.yellow(`${this.logPrefix}UpdateModelCursor(): Could not update subscriptions, this.#observabilitySubscriptionManager not set`));
10340
+ } catch (error) {
10341
+ this.LogErrorMessage(chalk.red(`ObservabilitySocketIOSubscriber:Subscribe(): Error: response: [${JSON.stringify(error)}]`));
10500
10342
  }
10501
- this.#state = "started";
10502
- }, 0);
10343
+ });
10503
10344
  }
10504
- TransformSubscriptionPayloadCallback(subscriptionPayload) {
10505
- try {
10506
- if (this.#observabilitySubscriptionManager) {
10507
- this.#observabilitySubscriptionManager.TransformSubscriptionPayloadCallback(subscriptionPayload, false);
10508
- if (subscriptionPayload.subscriptionKey.topic.localeCompare(stsobservability.SubscriptionTopic.AllAgentsCombined) === 0) {
10509
- const agentModel = this.#observabilitySubscriptionManager.agentModel;
10510
- this.#store.UpdateAgentModel(this.#modelId, agentModel, subscriptionPayload.subscriptionKey);
10511
- }
10512
- if (subscriptionPayload.subscriptionKey.topic.localeCompare(stsobservability.SubscriptionTopic.AllServicesCombined) === 0) {
10513
- const serviceModel = this.#observabilitySubscriptionManager.serviceModel;
10514
- this.#store.UpdateServiceModel(this.#modelId, serviceModel, subscriptionPayload.subscriptionKey);
10515
- }
10516
- if (subscriptionPayload.subscriptionKey.topic.localeCompare(stsobservability.SubscriptionTopic.Services) === 0) {
10517
- const serviceModel = this.#observabilitySubscriptionManager.serviceModel;
10518
- this.#store.UpdateServiceModel(this.#modelId, serviceModel, subscriptionPayload.subscriptionKey);
10519
- }
10520
- if (subscriptionPayload.subscriptionKey.topic.localeCompare(stsobservability.SubscriptionTopic.ServiceInstances) === 0) {
10521
- const serviceModel = this.#observabilitySubscriptionManager.serviceModel;
10522
- this.#store.UpdateServiceModel(this.#modelId, serviceModel, subscriptionPayload.subscriptionKey);
10523
- }
10524
- if (subscriptionPayload.subscriptionKey.topic.localeCompare(stsobservability.SubscriptionTopic.ServiceInstance) === 0) {
10525
- const serviceModel = this.#observabilitySubscriptionManager.serviceModel;
10526
- this.#store.UpdateServiceModel(this.#modelId, serviceModel, subscriptionPayload.subscriptionKey);
10345
+ UnSubscribe(subscriptions) {
10346
+ subscriptions.map(async (subId) => {
10347
+ try {
10348
+ if (this.socket) {
10349
+ this.LogDebugMessage(chalk.yellow(`ObservabilitySocketIOSubscriber:UnSubscribe(): Sending unsubscribe: subscriptionKey: [${subId.subscriptionKey.id}]`));
10350
+ this.socket.timeout(1e3).emit("unsubscribe", subId.subscriptionKey, (error, data) => {
10351
+ if (error) {
10352
+ this.LogErrorMessage(chalk.red(`ObservabilitySocketIOSubscriber:UnSubscribe(): Error: [${error}], data: [${data}]`));
10353
+ } else {
10354
+ this.LogDebugMessage(chalk.green(`ObservabilitySocketIOSubscriber:UnSubscribe(): Response: [${JSON.stringify(data)}]`));
10355
+ delete this.subscriptions[subId.subscriptionKey.id];
10356
+ }
10357
+ });
10527
10358
  }
10528
- } else {
10529
- this.LogErrorMessage(`${this.logPrefix}TransformSubscriptionPayloadCallback(): observabilitySubscriptionManager not set`);
10359
+ } catch (error) {
10360
+ this.LogErrorMessage(chalk.red(`ObservabilitySocketIOSubscriber:UnSubscribe(): Error response: [${JSON.stringify(error)}]`));
10530
10361
  }
10531
- } catch (error) {
10532
- this.LogErrorMessage(`${this.logPrefix}TransformSubscriptionPayloadCallback(): #modelId: [${this.#modelId}], Error: [${error}]`);
10533
- }
10362
+ });
10534
10363
  }
10535
- Unsubscribe() {
10536
- this.#state = "stopped";
10537
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}Unsubscribe() observabilitySubscriptionManager.Stop()`));
10538
- this.#observabilitySubscriptionManager?.Stop();
10539
- if (this.#options.consumeInstrumentationMode.localeCompare("PROXY") === 0) {
10540
- setTimeout(() => {
10541
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}Unsubscribe() socket.disconnect`));
10542
- this.#socket?.disconnect();
10543
- this.#socket = null;
10544
- }, 1e3);
10545
- }
10364
+ SocketConnect(socket) {
10365
+ this.LogDebugMessage(chalk.magenta(`${this.logPrefix}SocketConnect(): Socket ID: [${socket.id}]`));
10366
+ this.UpdateModelCursor(this.#currentSubscriptions);
10546
10367
  }
10547
- Start = () => {
10548
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}Start() return promise`));
10549
- return new Promise((resolve) => {
10550
- if (this.#options.consumeInstrumentationMode.localeCompare("PROXY") === 0) {
10551
- const onConnected = () => {
10552
- this.#tinyEmitter.off("connected", onConnected);
10553
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}Start(): connected`));
10554
- resolve(true);
10555
- };
10556
- this.#tinyEmitter.on("connected", onConnected);
10557
- const url = `${this.#options.instrumentManagerEndpoint}:${this.#options.instrumentManagerPort}/${SOCKET_NAMESPACE}/`;
10558
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SetupSocket() url: [${url}]`));
10559
- this.WithAddress(url).WithLogger(this.logger ?? stsutils.defaultLogger).SetupSocket();
10368
+ SocketError(error) {
10369
+ this.LogErrorMessage(chalk.red(`${this.logPrefix}SocketError(): Error: [${error}]`));
10370
+ }
10371
+ SetupSocketEvents(socket) {
10372
+ this.LogDebugMessage(chalk.magenta(`${this.logPrefix}SetupSocketEvents(): Socket ID: [${socket.id}]`));
10373
+ this.socket?.on("subscriptionData", (data, cb) => {
10374
+ this.LogDebugMessage(chalk.magenta(`${this.logPrefix}SetupSocketEvents(): on subscriptionData(): Socket ID: [${socket.id}]`));
10375
+ const subId = data.subscriptionKey.id;
10376
+ if (this.subscriptions[subId]) {
10377
+ this.subscriptions[subId].cb(data);
10378
+ cb(`subscriptionData Response: [${data}]`);
10560
10379
  } else {
10561
- this.#SetupObservabilitySubscriber();
10562
- resolve(true);
10380
+ cb(`subscriptionData Response: Not subscription found in subscriptions: [${data}]`);
10563
10381
  }
10564
10382
  });
10565
- };
10566
- ConnectCallBack(socket) {
10567
- this.LogDebugMessage(chalk.magenta(`${this.logPrefix}ConnectCallBack(): Socket ID: [${socket.id}]`));
10568
- if (this.#observabilitySubscriptionManager === null) {
10569
- this.#SetupObservabilitySubscriber(socket);
10570
- }
10571
- this.#SocketIOConnect(socket);
10572
10383
  }
10573
- ErrorCallBack(error) {
10574
- this.LogErrorMessage(chalk.red(`${this.logPrefix}ErrorCallBack(): Error callback: [${error}]`));
10384
+ SocketConnectError(error) {
10385
+ this.LogErrorMessage(chalk.red(`${this.logPrefix}SocketConnectError(): Error: [${error}]`));
10575
10386
  }
10576
- SocketEventsCallBack(socket) {
10387
+ SocketDisconnect(reason) {
10388
+ this.LogErrorMessage(chalk.red(`${this.logPrefix}SocketDisconnect(): reason: [${reason}]`));
10577
10389
  }
10578
- /*
10579
- #SetupSocketIO = () => {
10580
- const socketUtils = new SocketIoClientHelper({});
10581
-
10582
- this.#socket = socketUtils.SetupClientSideSocket('STSVueTilsTester',
10583
- `${this.#options.instrumentManagerEndpoint}:${this.#options.instrumentManagerPort}/${SOCKET_NAMESPACE}/`,
10584
- '', // use default /socket.io/ path
10585
- this.#SocketConnect as any, // Connected call back
10586
- this.#ProcessSocketEvents as any, // Custom Events
10587
- this.#ProcessSocketError // Handle socket errors
10588
- ) as any;
10589
- }
10590
-
10591
- #SocketConnect = (socket: Socket) => {
10592
- defaultLogger.debug(chalk.magenta(`SocketIOConnect(): Socket ID: [${socket.id}]`));
10593
- if (this.#observabilitySubscriptionManager === null) {
10594
- this.#SetupObservabilitySubscriber();
10595
- }
10596
- this.#SocketIOConnect(socket);
10597
- }
10598
-
10599
- #ProcessSocketError = (error: any) => {
10600
- defaultLogger.error(chalk.red(`SetupClientSideSocket error callback: [${error}]`))
10601
- }
10602
-
10603
- #ProcessSocketEvents = (socket: Socket) => {
10604
-
10605
- }
10606
- */
10607
10390
  }
10608
10391
  const _hoisted_1$1 = { class: "d-flex flex-wrap justify-space-between" };
10609
10392
  const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
@@ -10615,16 +10398,47 @@ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
10615
10398
  chalk.level = 3;
10616
10399
  const props = __props;
10617
10400
  const store = ModelStore();
10618
- let observabilitySubscriberManager = null;
10401
+ let observabilitySubscriptionManager = new stsobservability.ObservabilitySubscriptionManager({
10402
+ logger: stsutils.defaultLogger,
10403
+ maxLogLength: 200
10404
+ });
10405
+ let socketClientSubscriber;
10619
10406
  const baseColour = chalk.hex("#57A1A8");
10620
10407
  const LogDebug = (message) => {
10621
10408
  stsutils.defaultLogger.debug(baseColour(`stsuxvue:UXModelNavigator:${message}`));
10622
10409
  };
10410
+ const LogError = (message) => {
10411
+ stsutils.defaultLogger.error(baseColour(`stsuxvue:UXModelNavigator:${message}`));
10412
+ };
10623
10413
  const LogWarning = (message) => {
10624
10414
  stsutils.defaultLogger.warn(baseColour(`stsuxvue:UXModelNavigator:${message}`));
10625
10415
  };
10626
10416
  const TransformSubscriptionPayloadCallback = (subscriptionPayload) => {
10627
- observabilitySubscriberManager?.TransformSubscriptionPayloadCallback(subscriptionPayload);
10417
+ try {
10418
+ observabilitySubscriptionManager.TransformSubscriptionPayloadCallback(subscriptionPayload);
10419
+ if (subscriptionPayload.subscriptionKey.topic.localeCompare(stsobservability.SubscriptionTopic.AllAgentsCombined) === 0) {
10420
+ const agentModel = observabilitySubscriptionManager.agentModel;
10421
+ store.UpdateAgentModel(props.modelId, agentModel, subscriptionPayload.subscriptionKey);
10422
+ }
10423
+ if (subscriptionPayload.subscriptionKey.topic.localeCompare(stsobservability.SubscriptionTopic.AllServicesCombined) === 0) {
10424
+ const serviceModel = observabilitySubscriptionManager.serviceModel;
10425
+ store.UpdateServiceModel(props.modelId, serviceModel, subscriptionPayload.subscriptionKey);
10426
+ }
10427
+ if (subscriptionPayload.subscriptionKey.topic.localeCompare(stsobservability.SubscriptionTopic.Services) === 0) {
10428
+ const serviceModel = observabilitySubscriptionManager.serviceModel;
10429
+ store.UpdateServiceModel(props.modelId, serviceModel, subscriptionPayload.subscriptionKey);
10430
+ }
10431
+ if (subscriptionPayload.subscriptionKey.topic.localeCompare(stsobservability.SubscriptionTopic.ServiceInstances) === 0) {
10432
+ const serviceModel = observabilitySubscriptionManager.serviceModel;
10433
+ store.UpdateServiceModel(props.modelId, serviceModel, subscriptionPayload.subscriptionKey);
10434
+ }
10435
+ if (subscriptionPayload.subscriptionKey.topic.localeCompare(stsobservability.SubscriptionTopic.ServiceInstance) === 0) {
10436
+ const serviceModel = observabilitySubscriptionManager.serviceModel;
10437
+ store.UpdateServiceModel(props.modelId, serviceModel, subscriptionPayload.subscriptionKey);
10438
+ }
10439
+ } catch (error) {
10440
+ LogError(`TransformSubscriptionPayloadCallback(): #modelId: [${props.modelId}], Error: [${error}]`);
10441
+ }
10628
10442
  };
10629
10443
  const GetRootLevelSubscriptions = () => [{
10630
10444
  subscriptionKey: {
@@ -10668,10 +10482,10 @@ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
10668
10482
  }];
10669
10483
  };
10670
10484
  let navigationSubscriptions = {
10671
- subscriptions: [],
10485
+ subscriptionHistoryStack: [],
10672
10486
  currentSubscriptions: null
10673
10487
  };
10674
- let obj = vue.reactive(navigationSubscriptions);
10488
+ let reactiveNavigationSubscriptions = vue.reactive(navigationSubscriptions);
10675
10489
  const getPathString = (sub2) => {
10676
10490
  if (sub2.subscriptionKey.key && sub2.subscriptionKey.subkey) {
10677
10491
  return `${sub2.subscriptionKey.topic}[${sub2.subscriptionKey.key}/${sub2.subscriptionKey.subkey}]`;
@@ -10684,17 +10498,17 @@ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
10684
10498
  const navigationPath = vue.computed(() => {
10685
10499
  let pathString = "";
10686
10500
  let sep = "";
10687
- obj.subscriptions.forEach((s) => {
10501
+ reactiveNavigationSubscriptions.subscriptionHistoryStack.forEach((s) => {
10688
10502
  pathString += sep + getPathString(s[0]);
10689
10503
  sep = "/";
10690
10504
  });
10691
- if (obj.currentSubscriptions) {
10692
- return pathString + sep + getPathString(obj.currentSubscriptions[0]);
10505
+ if (reactiveNavigationSubscriptions.currentSubscriptions) {
10506
+ return pathString + sep + getPathString(reactiveNavigationSubscriptions.currentSubscriptions[0]);
10693
10507
  }
10694
10508
  return pathString;
10695
10509
  });
10696
10510
  const BackDisabled = vue.computed(() => {
10697
- return obj.subscriptions.length < 1;
10511
+ return reactiveNavigationSubscriptions.subscriptionHistoryStack.length < 1;
10698
10512
  });
10699
10513
  const modelNode = vue.reactive({
10700
10514
  node: {}
@@ -10722,23 +10536,29 @@ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
10722
10536
  }
10723
10537
  }
10724
10538
  };
10725
- const navigate = function(subscriptions) {
10726
- if (obj.currentSubscriptions) {
10727
- obj.subscriptions.push(obj.currentSubscriptions);
10539
+ const UpdateModelCursor = () => {
10540
+ const subscriptions2 = reactiveNavigationSubscriptions.currentSubscriptions;
10541
+ if (subscriptions2) {
10542
+ socketClientSubscriber.UpdateModelCursor(subscriptions2);
10543
+ }
10544
+ };
10545
+ const navigate = function(subscriptions2) {
10546
+ if (reactiveNavigationSubscriptions.currentSubscriptions) {
10547
+ reactiveNavigationSubscriptions.subscriptionHistoryStack.push(reactiveNavigationSubscriptions.currentSubscriptions);
10728
10548
  } else {
10729
10549
  LogWarning(`navigate: obj.currentSubscriptions not defined`);
10730
10550
  }
10731
- obj.currentSubscriptions = subscriptions;
10732
- LogDebug(`navigate: observabilitySubscriberManager().UpdateModelCursor(${JSON.stringify(subscriptions)})`);
10733
- observabilitySubscriberManager?.UpdateModelCursor(subscriptions);
10551
+ reactiveNavigationSubscriptions.currentSubscriptions = subscriptions2;
10552
+ LogDebug(`navigate: observabilitySubscriberManager().UpdateModelCursor(${JSON.stringify(subscriptions2)})`);
10553
+ UpdateModelCursor();
10734
10554
  };
10735
10555
  const GoBack = function() {
10736
- if (obj.subscriptions.length > 0) {
10737
- let key = obj.subscriptions.pop();
10556
+ if (reactiveNavigationSubscriptions.subscriptionHistoryStack.length > 0) {
10557
+ let key = reactiveNavigationSubscriptions.subscriptionHistoryStack.pop();
10738
10558
  if (key) {
10739
- obj.currentSubscriptions = key;
10740
- LogDebug(`GoBack: observabilitySubscriberManager().UpdateModelCursor(${JSON.stringify(obj.currentSubscriptions)})`);
10741
- observabilitySubscriberManager?.UpdateModelCursor(obj.currentSubscriptions);
10559
+ reactiveNavigationSubscriptions.currentSubscriptions = key;
10560
+ LogDebug(`GoBack: observabilitySubscriberManager().UpdateModelCursor(${JSON.stringify(reactiveNavigationSubscriptions.currentSubscriptions)})`);
10561
+ UpdateModelCursor();
10742
10562
  } else {
10743
10563
  LogDebug(`GoBack: subscriptions key not defined`);
10744
10564
  }
@@ -10747,10 +10567,10 @@ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
10747
10567
  }
10748
10568
  };
10749
10569
  const TopLevel = function() {
10750
- obj.subscriptions = [];
10751
- obj.currentSubscriptions = GetRootLevelSubscriptions();
10752
- LogDebug(`TopLevel: observabilitySubscriberManager().UpdateModelCursor(${JSON.stringify(obj.currentSubscriptions)})`);
10753
- observabilitySubscriberManager?.UpdateModelCursor(obj.currentSubscriptions);
10570
+ reactiveNavigationSubscriptions.subscriptionHistoryStack = [];
10571
+ reactiveNavigationSubscriptions.currentSubscriptions = GetRootLevelSubscriptions();
10572
+ LogDebug(`TopLevel: observabilitySubscriberManager().UpdateModelCursor(${JSON.stringify(reactiveNavigationSubscriptions.currentSubscriptions)})`);
10573
+ UpdateModelCursor();
10754
10574
  };
10755
10575
  vue.onMounted(() => {
10756
10576
  LogDebug(`onMounted()`);
@@ -10763,25 +10583,21 @@ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
10763
10583
  const Stop = () => {
10764
10584
  LogDebug(`Stop()`);
10765
10585
  store.UpdateSate(props.modelId, _estate.STOPPING);
10766
- if (observabilitySubscriberManager) {
10767
- LogDebug(`Stop(): Unsubscribe()`);
10768
- observabilitySubscriberManager.Unsubscribe();
10769
- store.UpdateObservabilitySubscriberManager(observabilitySubscriberManager.id, null);
10770
- }
10771
- observabilitySubscriberManager = null;
10772
10586
  store.UpdateSate(props.modelId, _estate.IDLE);
10773
10587
  };
10774
10588
  const Start = async (options) => {
10775
10589
  LogDebug(`Start()`);
10776
10590
  store.UpdateSate(props.modelId, _estate.STARTING);
10777
- LogDebug(`Start(): new ObservabilitySubscriberManager(), Options: ${JSON.stringify(options)}`);
10778
- observabilitySubscriberManager = new ObservabilitySubscriberManager(options);
10779
- store.UpdateObservabilitySubscriberManager(observabilitySubscriberManager.id, observabilitySubscriberManager);
10780
- LogDebug(`Start(): observabilitySubscriberManager().Start(): Mode: [${options.consumeInstrumentationMode}]`);
10781
- await observabilitySubscriberManager.Start();
10782
- obj.currentSubscriptions = GetRootLevelSubscriptions();
10783
- LogDebug(`Start(): observabilitySubscriberManager().UpdateModelCursor(): Mode: [${options.consumeInstrumentationMode}] rootLevelSubscriptions: [(${JSON.stringify(obj.currentSubscriptions)}]`);
10784
- observabilitySubscriberManager?.UpdateModelCursor(obj.currentSubscriptions);
10591
+ socketClientSubscriber = new SocketClientSubscriber({
10592
+ instrumentManagerEndpoint: options.instrumentManagerEndpoint,
10593
+ instrumentManagerPort: options.instrumentManagerPort,
10594
+ consumeInstrumentationMode: options.consumeInstrumentationMode,
10595
+ instrumentManagerAPIRoot: options.instrumentManagerAPIRoot,
10596
+ modelId: options.modelId
10597
+ });
10598
+ reactiveNavigationSubscriptions.currentSubscriptions = GetRootLevelSubscriptions();
10599
+ LogDebug(`Start(): observabilitySubscriberManager().UpdateModelCursor(): Mode: [${options.consumeInstrumentationMode}] rootLevelSubscriptions: [(${JSON.stringify(reactiveNavigationSubscriptions.currentSubscriptions)}]`);
10600
+ UpdateModelCursor();
10785
10601
  store.UpdateSate(props.modelId, _estate.STARTED);
10786
10602
  };
10787
10603
  __expose({