@nsshunt/stsuxvue 1.0.73 → 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,15 +10398,49 @@ 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
+ };
10413
+ const LogWarning = (message) => {
10414
+ stsutils.defaultLogger.warn(baseColour(`stsuxvue:UXModelNavigator:${message}`));
10415
+ };
10623
10416
  const TransformSubscriptionPayloadCallback = (subscriptionPayload) => {
10624
- 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
+ }
10625
10442
  };
10626
- let rootLevelSubscriptions = [{
10443
+ const GetRootLevelSubscriptions = () => [{
10627
10444
  subscriptionKey: {
10628
10445
  id: v4(),
10629
10446
  topic: stsobservability.SubscriptionTopic.AllServicesCombined
@@ -10636,7 +10453,7 @@ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
10636
10453
  },
10637
10454
  cb: TransformSubscriptionPayloadCallback
10638
10455
  }];
10639
- const ServicesSubscriptions = [{
10456
+ const GetServicesSubscriptions = () => [{
10640
10457
  subscriptionKey: {
10641
10458
  id: v4(),
10642
10459
  topic: stsobservability.SubscriptionTopic.Services
@@ -10664,12 +10481,11 @@ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
10664
10481
  cb: TransformSubscriptionPayloadCallback
10665
10482
  }];
10666
10483
  };
10667
- let navSubscriptions = rootLevelSubscriptions;
10668
10484
  let navigationSubscriptions = {
10669
- subscriptions: [],
10485
+ subscriptionHistoryStack: [],
10670
10486
  currentSubscriptions: null
10671
10487
  };
10672
- let obj = vue.reactive(navigationSubscriptions);
10488
+ let reactiveNavigationSubscriptions = vue.reactive(navigationSubscriptions);
10673
10489
  const getPathString = (sub2) => {
10674
10490
  if (sub2.subscriptionKey.key && sub2.subscriptionKey.subkey) {
10675
10491
  return `${sub2.subscriptionKey.topic}[${sub2.subscriptionKey.key}/${sub2.subscriptionKey.subkey}]`;
@@ -10682,17 +10498,17 @@ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
10682
10498
  const navigationPath = vue.computed(() => {
10683
10499
  let pathString = "";
10684
10500
  let sep = "";
10685
- obj.subscriptions.forEach((s) => {
10501
+ reactiveNavigationSubscriptions.subscriptionHistoryStack.forEach((s) => {
10686
10502
  pathString += sep + getPathString(s[0]);
10687
10503
  sep = "/";
10688
10504
  });
10689
- if (obj.currentSubscriptions) {
10690
- return pathString + sep + getPathString(obj.currentSubscriptions[0]);
10505
+ if (reactiveNavigationSubscriptions.currentSubscriptions) {
10506
+ return pathString + sep + getPathString(reactiveNavigationSubscriptions.currentSubscriptions[0]);
10691
10507
  }
10692
10508
  return pathString;
10693
10509
  });
10694
10510
  const BackDisabled = vue.computed(() => {
10695
- return obj.subscriptions.length < 1;
10511
+ return reactiveNavigationSubscriptions.subscriptionHistoryStack.length < 1;
10696
10512
  });
10697
10513
  const modelNode = vue.reactive({
10698
10514
  node: {}
@@ -10708,7 +10524,7 @@ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
10708
10524
  if (store._models[props.modelId].serviceModelSubscriptionKey) {
10709
10525
  switch (store._models[props.modelId].serviceModelSubscriptionKey?.topic) {
10710
10526
  case stsobservability.SubscriptionTopic.AllServicesCombined:
10711
- navigate(ServicesSubscriptions);
10527
+ navigate(GetServicesSubscriptions());
10712
10528
  break;
10713
10529
  case stsobservability.SubscriptionTopic.Services:
10714
10530
  navigate(GetServiceInstancesSubscriptions(id));
@@ -10720,21 +10536,29 @@ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
10720
10536
  }
10721
10537
  }
10722
10538
  };
10723
- const navigate = function(subscriptions) {
10724
- obj.subscriptions.push(navSubscriptions);
10725
- navSubscriptions = subscriptions;
10726
- obj.currentSubscriptions = subscriptions;
10727
- LogDebug(`navigate: observabilitySubscriberManager().UpdateModelCursor(${JSON.stringify(subscriptions)})`);
10728
- observabilitySubscriberManager?.UpdateModelCursor(subscriptions);
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);
10548
+ } else {
10549
+ LogWarning(`navigate: obj.currentSubscriptions not defined`);
10550
+ }
10551
+ reactiveNavigationSubscriptions.currentSubscriptions = subscriptions2;
10552
+ LogDebug(`navigate: observabilitySubscriberManager().UpdateModelCursor(${JSON.stringify(subscriptions2)})`);
10553
+ UpdateModelCursor();
10729
10554
  };
10730
10555
  const GoBack = function() {
10731
- if (obj.subscriptions.length > 0) {
10732
- let key = obj.subscriptions.pop();
10556
+ if (reactiveNavigationSubscriptions.subscriptionHistoryStack.length > 0) {
10557
+ let key = reactiveNavigationSubscriptions.subscriptionHistoryStack.pop();
10733
10558
  if (key) {
10734
- navSubscriptions = key;
10735
- obj.currentSubscriptions = key;
10736
- LogDebug(`GoBack: observabilitySubscriberManager().UpdateModelCursor(${JSON.stringify(navSubscriptions)})`);
10737
- observabilitySubscriberManager?.UpdateModelCursor(navSubscriptions);
10559
+ reactiveNavigationSubscriptions.currentSubscriptions = key;
10560
+ LogDebug(`GoBack: observabilitySubscriberManager().UpdateModelCursor(${JSON.stringify(reactiveNavigationSubscriptions.currentSubscriptions)})`);
10561
+ UpdateModelCursor();
10738
10562
  } else {
10739
10563
  LogDebug(`GoBack: subscriptions key not defined`);
10740
10564
  }
@@ -10743,11 +10567,10 @@ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
10743
10567
  }
10744
10568
  };
10745
10569
  const TopLevel = function() {
10746
- obj.subscriptions = [];
10747
- navSubscriptions = rootLevelSubscriptions;
10748
- obj.currentSubscriptions = rootLevelSubscriptions;
10749
- LogDebug(`TopLevel: observabilitySubscriberManager().UpdateModelCursor(${JSON.stringify(navSubscriptions)})`);
10750
- observabilitySubscriberManager?.UpdateModelCursor(navSubscriptions);
10570
+ reactiveNavigationSubscriptions.subscriptionHistoryStack = [];
10571
+ reactiveNavigationSubscriptions.currentSubscriptions = GetRootLevelSubscriptions();
10572
+ LogDebug(`TopLevel: observabilitySubscriberManager().UpdateModelCursor(${JSON.stringify(reactiveNavigationSubscriptions.currentSubscriptions)})`);
10573
+ UpdateModelCursor();
10751
10574
  };
10752
10575
  vue.onMounted(() => {
10753
10576
  LogDebug(`onMounted()`);
@@ -10760,25 +10583,21 @@ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
10760
10583
  const Stop = () => {
10761
10584
  LogDebug(`Stop()`);
10762
10585
  store.UpdateSate(props.modelId, _estate.STOPPING);
10763
- if (observabilitySubscriberManager) {
10764
- LogDebug(`Stop(): Unsubscribe()`);
10765
- observabilitySubscriberManager.Unsubscribe();
10766
- store.UpdateObservabilitySubscriberManager(observabilitySubscriberManager.id, null);
10767
- }
10768
- observabilitySubscriberManager = null;
10769
10586
  store.UpdateSate(props.modelId, _estate.IDLE);
10770
10587
  };
10771
10588
  const Start = async (options) => {
10772
10589
  LogDebug(`Start()`);
10773
10590
  store.UpdateSate(props.modelId, _estate.STARTING);
10774
- LogDebug(`Start(): new ObservabilitySubscriberManager(), Options: ${JSON.stringify(options)}`);
10775
- observabilitySubscriberManager = new ObservabilitySubscriberManager(options);
10776
- store.UpdateObservabilitySubscriberManager(observabilitySubscriberManager.id, observabilitySubscriberManager);
10777
- LogDebug(`Start(): observabilitySubscriberManager().Start(): Mode: [${options.consumeInstrumentationMode}]`);
10778
- await observabilitySubscriberManager.Start();
10779
- obj.currentSubscriptions = rootLevelSubscriptions;
10780
- LogDebug(`Start(): observabilitySubscriberManager().UpdateModelCursor(): Mode: [${options.consumeInstrumentationMode}] rootLevelSubscriptions: [(${JSON.stringify(rootLevelSubscriptions)}]`);
10781
- observabilitySubscriberManager?.UpdateModelCursor(rootLevelSubscriptions);
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();
10782
10601
  store.UpdateSate(props.modelId, _estate.STARTED);
10783
10602
  };
10784
10603
  __expose({