@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.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  import { defineStore } from "pinia";
2
2
  import _cloneDeep from "lodash.clonedeep";
3
3
  import { defineComponent, defineAsyncComponent, ref, createElementBlock, openBlock, createVNode, unref, reactive, computed, watch, resolveComponent, createBlock, withCtx, createTextVNode, toDisplayString, createElementVNode, createCommentVNode, Fragment, renderList, onMounted, onBeforeUnmount, resolveDynamicComponent, isRef } from "vue";
4
- import { Gauge, ObservabilitySocketIOSubscriber, runStates, ObservabilityRESTAPISubscriber, ObservabilitySubscriptionManager, SubscriptionTopic } from "@nsshunt/stsobservability";
4
+ import { Gauge, ObservabilitySubscriptionManager, SubscriptionTopic } from "@nsshunt/stsobservability";
5
5
  import { defaultLogger } from "@nsshunt/stsutils";
6
6
  import { io } from "socket.io-client";
7
7
  var _estate = /* @__PURE__ */ ((_estate2) => {
@@ -18,8 +18,8 @@ const ModelStore = defineStore("__sts__ModelStore", {
18
18
  state: () => {
19
19
  return {
20
20
  _models: {},
21
- _state: {},
22
- _observabilitySubscriberManager: {}
21
+ _state: {}
22
+ //_observabilitySubscriberManager: { }
23
23
  };
24
24
  },
25
25
  // Getters
@@ -91,13 +91,15 @@ const ModelStore = defineStore("__sts__ModelStore", {
91
91
  UpdateSate(modelId, newSate) {
92
92
  this._state[modelId] = newSate;
93
93
  },
94
- UpdateObservabilitySubscriberManager(modelId, observabilitySubscriberManager) {
95
- if (observabilitySubscriberManager === null) {
96
- delete this._observabilitySubscriberManager[modelId];
97
- } else {
98
- this._observabilitySubscriberManager[modelId] = observabilitySubscriberManager;
99
- }
94
+ /*
95
+ UpdateObservabilitySubscriberManager(modelId: string, observabilitySubscriberManager: ObservabilitySubscriberManager | null): void {
96
+ if (observabilitySubscriberManager === null) {
97
+ delete this._observabilitySubscriberManager[modelId];
98
+ } else {
99
+ this._observabilitySubscriberManager[modelId] = observabilitySubscriberManager;
100
+ }
100
101
  },
102
+ */
101
103
  SetupNewModelId(modelId) {
102
104
  this._models[modelId] = {
103
105
  serviceModel: {},
@@ -9990,11 +9992,11 @@ function v4(options, buf, offset) {
9990
9992
  }
9991
9993
  return _v4(options);
9992
9994
  }
9993
- var tinyEmitter$1 = { exports: {} };
9994
- var hasRequiredTinyEmitter$1;
9995
- function requireTinyEmitter$1() {
9996
- if (hasRequiredTinyEmitter$1) return tinyEmitter$1.exports;
9997
- hasRequiredTinyEmitter$1 = 1;
9995
+ var tinyEmitter = { exports: {} };
9996
+ var hasRequiredTinyEmitter;
9997
+ function requireTinyEmitter() {
9998
+ if (hasRequiredTinyEmitter) return tinyEmitter.exports;
9999
+ hasRequiredTinyEmitter = 1;
9998
10000
  function E() {
9999
10001
  }
10000
10002
  E.prototype = {
@@ -10039,13 +10041,13 @@ function requireTinyEmitter$1() {
10039
10041
  return this;
10040
10042
  }
10041
10043
  };
10042
- tinyEmitter$1.exports = E;
10043
- tinyEmitter$1.exports.TinyEmitter = E;
10044
- return tinyEmitter$1.exports;
10044
+ tinyEmitter.exports = E;
10045
+ tinyEmitter.exports.TinyEmitter = E;
10046
+ return tinyEmitter.exports;
10045
10047
  }
10046
- var tinyEmitterExports$1 = requireTinyEmitter$1();
10048
+ var tinyEmitterExports = requireTinyEmitter();
10047
10049
  const isNode = Object.prototype.toString.call(typeof process !== "undefined" ? process : 0) === "[object process]";
10048
- class SocketIoClient extends tinyEmitterExports$1.TinyEmitter {
10050
+ class SocketIoClient extends tinyEmitterExports.TinyEmitter {
10049
10051
  #agentManager;
10050
10052
  #logger;
10051
10053
  #name;
@@ -10129,14 +10131,18 @@ class SocketIoClient extends tinyEmitterExports$1.TinyEmitter {
10129
10131
  this.#EstablishSocketConnect();
10130
10132
  return this;
10131
10133
  }
10134
+ // Engine Errors / Events
10135
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
10136
+ EngineError(error) {
10137
+ }
10132
10138
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
10133
- ConnectCallBack(socket) {
10139
+ EngineReconnectError(error) {
10134
10140
  }
10135
10141
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
10136
- SocketEventsCallBack(socket) {
10142
+ EngineConnectError(error) {
10137
10143
  }
10138
10144
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
10139
- ErrorCallBack(error) {
10145
+ EngineReconnect(attempt) {
10140
10146
  }
10141
10147
  /*
10142
10148
  emit<Ev extends EventNames<ClientToServerEvents>>(ev: Ev, ...args: EventParams<ClientToServerEvents, Ev>): Socket<ServerToClientEvents, ClientToServerEvents> {
@@ -10189,31 +10195,36 @@ class SocketIoClient extends tinyEmitterExports$1.TinyEmitter {
10189
10195
  this.#socket = io(this.#address, socketOptions);
10190
10196
  this.#socket.io.on("error", (err) => {
10191
10197
  this.LogErrorMessage(`socketDetail.socket.io.on('error'): [${err}] Address: [${this.#address}]`);
10198
+ this.EngineError(err);
10192
10199
  });
10193
10200
  this.#socket.io.on("reconnect_error", (err) => {
10194
10201
  this.LogErrorMessage(`socketDetail.socket.io.on('reconnect_error'): [${err}] Address: [${this.#address}]`);
10202
+ this.EngineReconnectError(err);
10195
10203
  });
10196
10204
  this.#socket.on("connect_error", (err) => {
10197
10205
  this.LogErrorMessage(`socketDetail.socket.on('connect_error'): [${err}] Address: [${this.#address}]`);
10206
+ this.EngineConnectError(err);
10198
10207
  });
10199
10208
  this.#socket.io.on("reconnect", (attempt) => {
10200
10209
  this.LogErrorMessage(`socketDetail.socket.io.on('reconnect'): Number: [${attempt}] Address: [${this.#address}]`);
10210
+ this.EngineReconnect(attempt);
10201
10211
  });
10202
10212
  this.#socket.on("connect", () => {
10203
10213
  if (this.#socket) {
10204
10214
  this.LogDebugMessage(`Socket: [${this.#socket.id}]: connected, Address: [${this.#address}]`);
10205
10215
  setTimeout(() => {
10206
- this.ConnectCallBack(this.#socket);
10216
+ this.SocketConnect(this.#socket);
10207
10217
  }, 0);
10208
- this.SocketEventsCallBack(this.#socket);
10218
+ this.SetupSocketEvents(this.#socket);
10209
10219
  } else {
10210
10220
  const errorMessage = "Could not get socket object from socket.io, Address: [${socketDetail.address}]";
10211
10221
  this.LogErrorMessage(errorMessage);
10212
- this.ErrorCallBack(new Error(errorMessage));
10222
+ this.SocketConnectError(new Error(errorMessage));
10213
10223
  }
10214
10224
  });
10215
10225
  this.#socket.on("disconnect", (reason) => {
10216
10226
  this.LogDebugMessage("socket disconnect: " + reason);
10227
+ this.SocketDisconnect(reason);
10217
10228
  switch (reason) {
10218
10229
  case "io server disconnect":
10219
10230
  {
@@ -10258,81 +10269,20 @@ class SocketIoClient extends tinyEmitterExports$1.TinyEmitter {
10258
10269
  });
10259
10270
  }
10260
10271
  }
10261
- var tinyEmitter = { exports: {} };
10262
- var hasRequiredTinyEmitter;
10263
- function requireTinyEmitter() {
10264
- if (hasRequiredTinyEmitter) return tinyEmitter.exports;
10265
- hasRequiredTinyEmitter = 1;
10266
- function E() {
10267
- }
10268
- E.prototype = {
10269
- on: function(name, callback, ctx) {
10270
- var e = this.e || (this.e = {});
10271
- (e[name] || (e[name] = [])).push({
10272
- fn: callback,
10273
- ctx
10274
- });
10275
- return this;
10276
- },
10277
- once: function(name, callback, ctx) {
10278
- var self = this;
10279
- function listener() {
10280
- self.off(name, listener);
10281
- callback.apply(ctx, arguments);
10282
- }
10283
- listener._ = callback;
10284
- return this.on(name, listener, ctx);
10285
- },
10286
- emit: function(name) {
10287
- var data = [].slice.call(arguments, 1);
10288
- var evtArr = ((this.e || (this.e = {}))[name] || []).slice();
10289
- var i = 0;
10290
- var len = evtArr.length;
10291
- for (i; i < len; i++) {
10292
- evtArr[i].fn.apply(evtArr[i].ctx, data);
10293
- }
10294
- return this;
10295
- },
10296
- off: function(name, callback) {
10297
- var e = this.e || (this.e = {});
10298
- var evts = e[name];
10299
- var liveEvents = [];
10300
- if (evts && callback) {
10301
- for (var i = 0, len = evts.length; i < len; i++) {
10302
- if (evts[i].fn !== callback && evts[i].fn._ !== callback)
10303
- liveEvents.push(evts[i]);
10304
- }
10305
- }
10306
- liveEvents.length ? e[name] = liveEvents : delete e[name];
10307
- return this;
10308
- }
10309
- };
10310
- tinyEmitter.exports = E;
10311
- tinyEmitter.exports.TinyEmitter = E;
10312
- return tinyEmitter.exports;
10313
- }
10314
- var tinyEmitterExports = requireTinyEmitter();
10315
10272
  const SOCKET_NAMESPACE = "stsinstrumentmanager/stsmonitor";
10316
- class ObservabilitySubscriberManager extends SocketIoClient {
10317
- #socket = null;
10318
- #observabilitySocketIOSubscriber = null;
10319
- #observabilitySubscriptionManager = null;
10320
- #store;
10321
- #state = "init";
10322
- #modelId;
10273
+ class SocketClientSubscriber extends SocketIoClient {
10323
10274
  #options;
10324
- #tinyEmitter;
10325
10275
  #id;
10276
+ #currentSubscriptions = [];
10277
+ subscriptions = {};
10326
10278
  constructor(options) {
10327
10279
  super("STSVueTilsTester");
10328
10280
  this.#id = v4();
10329
10281
  this.#options = options;
10330
- this.#modelId = options.modelId;
10331
- this.#store = ModelStore();
10332
- this.#tinyEmitter = new tinyEmitterExports.TinyEmitter();
10333
- if (!this.#options.consumeInstrumentationMode) {
10334
- this.#options.consumeInstrumentationMode = "PROXY";
10335
- }
10282
+ this.LogDebugMessage(chalk.cyan(`${this.logPrefix}Start()`));
10283
+ const url = `${this.#options.instrumentManagerEndpoint}:${this.#options.instrumentManagerPort}/${SOCKET_NAMESPACE}/`;
10284
+ this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SetupSocket() url: [${url}]`));
10285
+ this.WithAddress(url).WithLogger(this.logger ?? defaultLogger).SetupSocket();
10336
10286
  }
10337
10287
  get id() {
10338
10288
  return this.#id;
@@ -10344,242 +10294,75 @@ class ObservabilitySubscriberManager extends SocketIoClient {
10344
10294
  return `stsuxvue:ObservabilitySubscriberManager:`;
10345
10295
  }
10346
10296
  }
10347
- #SocketIOConnect = (socket) => {
10348
- try {
10349
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SocketIOConnect(): Starting`));
10350
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SocketIOConnect(): State: [${this.#state}]`));
10351
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SocketIOConnect(): Current Model Subscriptions: [${JSON.stringify(this.#observabilitySubscriptionManager?.subscriptions)}]`));
10352
- if (this.#observabilitySocketIOSubscriber instanceof ObservabilitySocketIOSubscriber) {
10353
- const observabilitySocketIOSubscriber = this.#observabilitySocketIOSubscriber;
10354
- if (socket.id) {
10355
- if (observabilitySocketIOSubscriber.socket) {
10356
- const observabilitySocketIOSubscriberSocketId = observabilitySocketIOSubscriber.socket.id;
10357
- if (observabilitySocketIOSubscriberSocketId) {
10358
- if (socket.id.localeCompare(observabilitySocketIOSubscriberSocketId) === 0) {
10359
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SocketIOConnect(): Socket IDs are the same, Socket ID: [${observabilitySocketIOSubscriberSocketId}]`));
10360
- }
10361
- }
10362
- } else {
10363
- (this.logger ?? defaultLogger).warn(chalk.rgb(255, 165, 0)(`${this.logPrefix}SocketIOConnect(): observabilitySocketIOSubscriber.socket does not exist`));
10364
- (this.logger ?? defaultLogger).warn(chalk.rgb(255, 165, 0)(`${this.logPrefix}SocketIOConnect(): this should have been set when the initial subscription manager was created`));
10365
- }
10366
- }
10367
- if (this.#state.localeCompare("init") === 0) {
10368
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SocketIOConnect(): state = init`));
10369
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SocketIOConnect(): state = started`));
10370
- this.#state = "started";
10371
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SocketIOConnect(): tinyEmitter.emit('connected')`));
10372
- this.#tinyEmitter.emit("connected");
10373
- } else {
10374
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SocketIOConnect(): Socket ids are different - update with new socket`));
10375
- if (observabilitySocketIOSubscriber.socket) {
10376
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SocketIOConnect(): -> Current Socket ID: [${observabilitySocketIOSubscriber.socket.id}]`));
10377
- } else {
10378
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SocketIOConnect(): -> Current Socket ID: [NONE - No current socket exists]`));
10379
- }
10380
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SocketIOConnect(): -> New (updated) Socket ID: [${socket.id}]`));
10381
- if (this.#observabilitySubscriptionManager) {
10382
- if (this.#observabilitySubscriptionManager.runState !== runStates.stopped) {
10383
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SocketIOConnect(): observabilitySubscriptionManager.Stop()`));
10384
- this.#observabilitySubscriptionManager?.Stop();
10297
+ UpdateModelCursor = (subscriptions) => {
10298
+ this.UnSubscribe(this.#currentSubscriptions);
10299
+ this.#currentSubscriptions = subscriptions;
10300
+ this.Subscribe(this.#currentSubscriptions);
10301
+ };
10302
+ Subscribe(subscriptions) {
10303
+ subscriptions.map(async (subId) => {
10304
+ try {
10305
+ if (this.socket) {
10306
+ this.LogDebugMessage(chalk.yellow(`ObservabilitySocketIOSubscriber:Subscribe(): Sending subscribe: subscriptionKey: [${subId.subscriptionKey.id}]`));
10307
+ this.socket.timeout(1e3).emit("subscribe", subId.subscriptionKey, (error, data) => {
10308
+ if (error) {
10309
+ this.LogErrorMessage(chalk.red(`ObservabilitySocketIOSubscriber:Subscribe(): Error: [${error}], data: [${data}]`));
10385
10310
  } else {
10386
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SocketIOConnect(): observabilitySubscriptionManager.runState: [${this.#observabilitySubscriptionManager.runState}] already stopped.`));
10311
+ this.LogDebugMessage(chalk.green(`ObservabilitySocketIOSubscriber:Subscribe(): Response: [${JSON.stringify(data)}]`));
10312
+ this.subscriptions[subId.subscriptionKey.id] = subId;
10387
10313
  }
10388
- } else {
10389
- this.LogErrorMessage(chalk.red(`${this.logPrefix}SocketIOConnect(): observabilitySubscriptionManager does not exist`));
10390
- }
10391
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SocketIOConnect(): Setting new socket into observabilitySocketIOSubscriber, Socket ID: [${socket.id}]`));
10392
- observabilitySocketIOSubscriber.socket = socket;
10393
- if (this.#state.localeCompare("started") === 0) {
10394
- setTimeout(() => {
10395
- if (this.#observabilitySubscriptionManager?.runState !== runStates.started) {
10396
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SocketIOConnect(): observabilitySubscriptionManager Start`));
10397
- this.#observabilitySubscriptionManager?.Start();
10398
- } else {
10399
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SocketIOConnect(): observabilitySubscriptionManager runState: [${this.#observabilitySubscriptionManager?.runState}] already started.`));
10400
- }
10401
- this.#tinyEmitter.emit("connected");
10402
- }, 2500);
10403
- } else {
10404
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SocketIOConnect(): state not in the started state, current state: [${this.#state}]`));
10405
- this.#tinyEmitter.emit("connected");
10406
- }
10407
- }
10408
- } else {
10409
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SocketIOConnect(): this.#observabilitySocketIOSubscriber not instance of ObservabilitySocketIOSubscriber`));
10410
- this.LogDebugMessage(chalk.cyan(this.#observabilitySocketIOSubscriber));
10411
- this.#tinyEmitter.emit("connected");
10412
- }
10413
- } catch (error) {
10414
- this.LogErrorMessage(chalk.red(`${this.logPrefix}SocketIOConnect(): Error: [${error}]`));
10415
- this.#tinyEmitter.emit("connected");
10416
- } finally {
10417
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SocketIOConnect(): Ended`));
10418
- }
10419
- };
10420
- #SetupObservabilitySubscriber = (socket) => {
10421
- this.LogDebugMessage(`${this.logPrefix}SetupObservabilitySubscriber(): consumeInstrumentationMode: [${this.#options.consumeInstrumentationMode}]`);
10422
- switch (this.#options.consumeInstrumentationMode) {
10423
- case "PROXY":
10424
- {
10425
- if (socket) {
10426
- const keepAlive = 2500;
10427
- this.LogDebugMessage(`${this.logPrefix}SetupObservabilitySubscriber(): Creating ObservabilitySocketIOSubscriber(): Socket ID: [${socket.id}], keepAlive: [${keepAlive}]`);
10428
- this.#observabilitySocketIOSubscriber = new ObservabilitySocketIOSubscriber({
10429
- socket,
10430
- keepAlive,
10431
- logger: this.logger ?? defaultLogger
10432
- });
10433
- } else {
10434
- this.LogErrorMessage(chalk.red(`${this.logPrefix}SetupObservabilitySubscriber(): Socket not defined. Cannot create ObservabilitySocketIOSubscriber() without socket defined.`));
10435
- }
10436
- }
10437
- break;
10438
- case "REST":
10439
- {
10440
- const urlBase = `${this.#options.instrumentManagerEndpoint}:${this.#options.instrumentManagerPort}${this.#options.instrumentManagerAPIRoot}`;
10441
- const keepAlive = 1e3;
10442
- this.LogDebugMessage(`${this.logPrefix}SetupObservabilitySubscriber(): Creating ObservabilityRESTAPISubscriber(): Url Base: [${urlBase}], keepAlive: [${keepAlive}]`);
10443
- this.#observabilitySocketIOSubscriber = new ObservabilityRESTAPISubscriber({
10444
- keepAlive,
10445
- urlBase,
10446
- logger: this.logger ?? defaultLogger
10447
10314
  });
10448
10315
  }
10449
- break;
10450
- default:
10451
- this.LogErrorMessage(chalk.red(`${this.logPrefix}SetupObservabilitySubscriber(): Unsupported consumeInstrumentationMode mode: [${this.#options.consumeInstrumentationMode}]`));
10452
- return;
10453
- }
10454
- this.#observabilitySubscriptionManager = new ObservabilitySubscriptionManager({
10455
- logger: this.logger ?? defaultLogger,
10456
- maxLogLength: 100
10457
- });
10458
- this.#observabilitySubscriptionManager.observabilitySocketIOSubscriber = this.#observabilitySocketIOSubscriber;
10459
- };
10460
- UpdateModelCursor(subscriptions) {
10461
- if (this.#observabilitySubscriptionManager?.runState !== runStates.stopped) {
10462
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}UpdateModelCursor(): observabilitySubscriptionManager.Stop()`));
10463
- this.#observabilitySubscriptionManager?.Stop();
10464
- } else {
10465
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}UpdateModelCursor(): observabilitySubscriptionManager runState: [${this.#observabilitySubscriptionManager?.runState}] already stopped.`));
10466
- }
10467
- this.#state = "stopped";
10468
- setTimeout(() => {
10469
- if (this.#observabilitySubscriptionManager) {
10470
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}UpdateModelCursor(): observabilitySubscriptionManager.subscriptions: [${JSON.stringify(subscriptions)}]`));
10471
- this.#observabilitySubscriptionManager.subscriptions = subscriptions;
10472
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}UpdateModelCursor(): observabilitySubscriptionManager.Start()`));
10473
- this.#observabilitySubscriptionManager.Start();
10474
- } else {
10475
- this.LogDebugMessage(chalk.yellow(`${this.logPrefix}UpdateModelCursor(): Could not update subscriptions, this.#observabilitySubscriptionManager not set`));
10316
+ } catch (error) {
10317
+ this.LogErrorMessage(chalk.red(`ObservabilitySocketIOSubscriber:Subscribe(): Error: response: [${JSON.stringify(error)}]`));
10476
10318
  }
10477
- this.#state = "started";
10478
- }, 0);
10319
+ });
10479
10320
  }
10480
- TransformSubscriptionPayloadCallback(subscriptionPayload) {
10481
- try {
10482
- if (this.#observabilitySubscriptionManager) {
10483
- this.#observabilitySubscriptionManager.TransformSubscriptionPayloadCallback(subscriptionPayload, false);
10484
- if (subscriptionPayload.subscriptionKey.topic.localeCompare(SubscriptionTopic.AllAgentsCombined) === 0) {
10485
- const agentModel = this.#observabilitySubscriptionManager.agentModel;
10486
- this.#store.UpdateAgentModel(this.#modelId, agentModel, subscriptionPayload.subscriptionKey);
10487
- }
10488
- if (subscriptionPayload.subscriptionKey.topic.localeCompare(SubscriptionTopic.AllServicesCombined) === 0) {
10489
- const serviceModel = this.#observabilitySubscriptionManager.serviceModel;
10490
- this.#store.UpdateServiceModel(this.#modelId, serviceModel, subscriptionPayload.subscriptionKey);
10491
- }
10492
- if (subscriptionPayload.subscriptionKey.topic.localeCompare(SubscriptionTopic.Services) === 0) {
10493
- const serviceModel = this.#observabilitySubscriptionManager.serviceModel;
10494
- this.#store.UpdateServiceModel(this.#modelId, serviceModel, subscriptionPayload.subscriptionKey);
10495
- }
10496
- if (subscriptionPayload.subscriptionKey.topic.localeCompare(SubscriptionTopic.ServiceInstances) === 0) {
10497
- const serviceModel = this.#observabilitySubscriptionManager.serviceModel;
10498
- this.#store.UpdateServiceModel(this.#modelId, serviceModel, subscriptionPayload.subscriptionKey);
10499
- }
10500
- if (subscriptionPayload.subscriptionKey.topic.localeCompare(SubscriptionTopic.ServiceInstance) === 0) {
10501
- const serviceModel = this.#observabilitySubscriptionManager.serviceModel;
10502
- this.#store.UpdateServiceModel(this.#modelId, serviceModel, subscriptionPayload.subscriptionKey);
10321
+ UnSubscribe(subscriptions) {
10322
+ subscriptions.map(async (subId) => {
10323
+ try {
10324
+ if (this.socket) {
10325
+ this.LogDebugMessage(chalk.yellow(`ObservabilitySocketIOSubscriber:UnSubscribe(): Sending unsubscribe: subscriptionKey: [${subId.subscriptionKey.id}]`));
10326
+ this.socket.timeout(1e3).emit("unsubscribe", subId.subscriptionKey, (error, data) => {
10327
+ if (error) {
10328
+ this.LogErrorMessage(chalk.red(`ObservabilitySocketIOSubscriber:UnSubscribe(): Error: [${error}], data: [${data}]`));
10329
+ } else {
10330
+ this.LogDebugMessage(chalk.green(`ObservabilitySocketIOSubscriber:UnSubscribe(): Response: [${JSON.stringify(data)}]`));
10331
+ delete this.subscriptions[subId.subscriptionKey.id];
10332
+ }
10333
+ });
10503
10334
  }
10504
- } else {
10505
- this.LogErrorMessage(`${this.logPrefix}TransformSubscriptionPayloadCallback(): observabilitySubscriptionManager not set`);
10335
+ } catch (error) {
10336
+ this.LogErrorMessage(chalk.red(`ObservabilitySocketIOSubscriber:UnSubscribe(): Error response: [${JSON.stringify(error)}]`));
10506
10337
  }
10507
- } catch (error) {
10508
- this.LogErrorMessage(`${this.logPrefix}TransformSubscriptionPayloadCallback(): #modelId: [${this.#modelId}], Error: [${error}]`);
10509
- }
10338
+ });
10510
10339
  }
10511
- Unsubscribe() {
10512
- this.#state = "stopped";
10513
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}Unsubscribe() observabilitySubscriptionManager.Stop()`));
10514
- this.#observabilitySubscriptionManager?.Stop();
10515
- if (this.#options.consumeInstrumentationMode.localeCompare("PROXY") === 0) {
10516
- setTimeout(() => {
10517
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}Unsubscribe() socket.disconnect`));
10518
- this.#socket?.disconnect();
10519
- this.#socket = null;
10520
- }, 1e3);
10521
- }
10340
+ SocketConnect(socket) {
10341
+ this.LogDebugMessage(chalk.magenta(`${this.logPrefix}SocketConnect(): Socket ID: [${socket.id}]`));
10342
+ this.UpdateModelCursor(this.#currentSubscriptions);
10522
10343
  }
10523
- Start = () => {
10524
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}Start() return promise`));
10525
- return new Promise((resolve) => {
10526
- if (this.#options.consumeInstrumentationMode.localeCompare("PROXY") === 0) {
10527
- const onConnected = () => {
10528
- this.#tinyEmitter.off("connected", onConnected);
10529
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}Start(): connected`));
10530
- resolve(true);
10531
- };
10532
- this.#tinyEmitter.on("connected", onConnected);
10533
- const url = `${this.#options.instrumentManagerEndpoint}:${this.#options.instrumentManagerPort}/${SOCKET_NAMESPACE}/`;
10534
- this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SetupSocket() url: [${url}]`));
10535
- this.WithAddress(url).WithLogger(this.logger ?? defaultLogger).SetupSocket();
10344
+ SocketError(error) {
10345
+ this.LogErrorMessage(chalk.red(`${this.logPrefix}SocketError(): Error: [${error}]`));
10346
+ }
10347
+ SetupSocketEvents(socket) {
10348
+ this.LogDebugMessage(chalk.magenta(`${this.logPrefix}SetupSocketEvents(): Socket ID: [${socket.id}]`));
10349
+ this.socket?.on("subscriptionData", (data, cb) => {
10350
+ this.LogDebugMessage(chalk.magenta(`${this.logPrefix}SetupSocketEvents(): on subscriptionData(): Socket ID: [${socket.id}]`));
10351
+ const subId = data.subscriptionKey.id;
10352
+ if (this.subscriptions[subId]) {
10353
+ this.subscriptions[subId].cb(data);
10354
+ cb(`subscriptionData Response: [${data}]`);
10536
10355
  } else {
10537
- this.#SetupObservabilitySubscriber();
10538
- resolve(true);
10356
+ cb(`subscriptionData Response: Not subscription found in subscriptions: [${data}]`);
10539
10357
  }
10540
10358
  });
10541
- };
10542
- ConnectCallBack(socket) {
10543
- this.LogDebugMessage(chalk.magenta(`${this.logPrefix}ConnectCallBack(): Socket ID: [${socket.id}]`));
10544
- if (this.#observabilitySubscriptionManager === null) {
10545
- this.#SetupObservabilitySubscriber(socket);
10546
- }
10547
- this.#SocketIOConnect(socket);
10548
10359
  }
10549
- ErrorCallBack(error) {
10550
- this.LogErrorMessage(chalk.red(`${this.logPrefix}ErrorCallBack(): Error callback: [${error}]`));
10360
+ SocketConnectError(error) {
10361
+ this.LogErrorMessage(chalk.red(`${this.logPrefix}SocketConnectError(): Error: [${error}]`));
10551
10362
  }
10552
- SocketEventsCallBack(socket) {
10363
+ SocketDisconnect(reason) {
10364
+ this.LogErrorMessage(chalk.red(`${this.logPrefix}SocketDisconnect(): reason: [${reason}]`));
10553
10365
  }
10554
- /*
10555
- #SetupSocketIO = () => {
10556
- const socketUtils = new SocketIoClientHelper({});
10557
-
10558
- this.#socket = socketUtils.SetupClientSideSocket('STSVueTilsTester',
10559
- `${this.#options.instrumentManagerEndpoint}:${this.#options.instrumentManagerPort}/${SOCKET_NAMESPACE}/`,
10560
- '', // use default /socket.io/ path
10561
- this.#SocketConnect as any, // Connected call back
10562
- this.#ProcessSocketEvents as any, // Custom Events
10563
- this.#ProcessSocketError // Handle socket errors
10564
- ) as any;
10565
- }
10566
-
10567
- #SocketConnect = (socket: Socket) => {
10568
- defaultLogger.debug(chalk.magenta(`SocketIOConnect(): Socket ID: [${socket.id}]`));
10569
- if (this.#observabilitySubscriptionManager === null) {
10570
- this.#SetupObservabilitySubscriber();
10571
- }
10572
- this.#SocketIOConnect(socket);
10573
- }
10574
-
10575
- #ProcessSocketError = (error: any) => {
10576
- defaultLogger.error(chalk.red(`SetupClientSideSocket error callback: [${error}]`))
10577
- }
10578
-
10579
- #ProcessSocketEvents = (socket: Socket) => {
10580
-
10581
- }
10582
- */
10583
10366
  }
10584
10367
  const _hoisted_1$1 = { class: "d-flex flex-wrap justify-space-between" };
10585
10368
  const _sfc_main$1 = /* @__PURE__ */ defineComponent({
@@ -10591,16 +10374,47 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
10591
10374
  chalk.level = 3;
10592
10375
  const props = __props;
10593
10376
  const store = ModelStore();
10594
- let observabilitySubscriberManager = null;
10377
+ let observabilitySubscriptionManager = new ObservabilitySubscriptionManager({
10378
+ logger: defaultLogger,
10379
+ maxLogLength: 200
10380
+ });
10381
+ let socketClientSubscriber;
10595
10382
  const baseColour = chalk.hex("#57A1A8");
10596
10383
  const LogDebug = (message) => {
10597
10384
  defaultLogger.debug(baseColour(`stsuxvue:UXModelNavigator:${message}`));
10598
10385
  };
10386
+ const LogError = (message) => {
10387
+ defaultLogger.error(baseColour(`stsuxvue:UXModelNavigator:${message}`));
10388
+ };
10599
10389
  const LogWarning = (message) => {
10600
10390
  defaultLogger.warn(baseColour(`stsuxvue:UXModelNavigator:${message}`));
10601
10391
  };
10602
10392
  const TransformSubscriptionPayloadCallback = (subscriptionPayload) => {
10603
- observabilitySubscriberManager?.TransformSubscriptionPayloadCallback(subscriptionPayload);
10393
+ try {
10394
+ observabilitySubscriptionManager.TransformSubscriptionPayloadCallback(subscriptionPayload);
10395
+ if (subscriptionPayload.subscriptionKey.topic.localeCompare(SubscriptionTopic.AllAgentsCombined) === 0) {
10396
+ const agentModel = observabilitySubscriptionManager.agentModel;
10397
+ store.UpdateAgentModel(props.modelId, agentModel, subscriptionPayload.subscriptionKey);
10398
+ }
10399
+ if (subscriptionPayload.subscriptionKey.topic.localeCompare(SubscriptionTopic.AllServicesCombined) === 0) {
10400
+ const serviceModel = observabilitySubscriptionManager.serviceModel;
10401
+ store.UpdateServiceModel(props.modelId, serviceModel, subscriptionPayload.subscriptionKey);
10402
+ }
10403
+ if (subscriptionPayload.subscriptionKey.topic.localeCompare(SubscriptionTopic.Services) === 0) {
10404
+ const serviceModel = observabilitySubscriptionManager.serviceModel;
10405
+ store.UpdateServiceModel(props.modelId, serviceModel, subscriptionPayload.subscriptionKey);
10406
+ }
10407
+ if (subscriptionPayload.subscriptionKey.topic.localeCompare(SubscriptionTopic.ServiceInstances) === 0) {
10408
+ const serviceModel = observabilitySubscriptionManager.serviceModel;
10409
+ store.UpdateServiceModel(props.modelId, serviceModel, subscriptionPayload.subscriptionKey);
10410
+ }
10411
+ if (subscriptionPayload.subscriptionKey.topic.localeCompare(SubscriptionTopic.ServiceInstance) === 0) {
10412
+ const serviceModel = observabilitySubscriptionManager.serviceModel;
10413
+ store.UpdateServiceModel(props.modelId, serviceModel, subscriptionPayload.subscriptionKey);
10414
+ }
10415
+ } catch (error) {
10416
+ LogError(`TransformSubscriptionPayloadCallback(): #modelId: [${props.modelId}], Error: [${error}]`);
10417
+ }
10604
10418
  };
10605
10419
  const GetRootLevelSubscriptions = () => [{
10606
10420
  subscriptionKey: {
@@ -10644,10 +10458,10 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
10644
10458
  }];
10645
10459
  };
10646
10460
  let navigationSubscriptions = {
10647
- subscriptions: [],
10461
+ subscriptionHistoryStack: [],
10648
10462
  currentSubscriptions: null
10649
10463
  };
10650
- let obj = reactive(navigationSubscriptions);
10464
+ let reactiveNavigationSubscriptions = reactive(navigationSubscriptions);
10651
10465
  const getPathString = (sub2) => {
10652
10466
  if (sub2.subscriptionKey.key && sub2.subscriptionKey.subkey) {
10653
10467
  return `${sub2.subscriptionKey.topic}[${sub2.subscriptionKey.key}/${sub2.subscriptionKey.subkey}]`;
@@ -10660,17 +10474,17 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
10660
10474
  const navigationPath = computed(() => {
10661
10475
  let pathString = "";
10662
10476
  let sep = "";
10663
- obj.subscriptions.forEach((s) => {
10477
+ reactiveNavigationSubscriptions.subscriptionHistoryStack.forEach((s) => {
10664
10478
  pathString += sep + getPathString(s[0]);
10665
10479
  sep = "/";
10666
10480
  });
10667
- if (obj.currentSubscriptions) {
10668
- return pathString + sep + getPathString(obj.currentSubscriptions[0]);
10481
+ if (reactiveNavigationSubscriptions.currentSubscriptions) {
10482
+ return pathString + sep + getPathString(reactiveNavigationSubscriptions.currentSubscriptions[0]);
10669
10483
  }
10670
10484
  return pathString;
10671
10485
  });
10672
10486
  const BackDisabled = computed(() => {
10673
- return obj.subscriptions.length < 1;
10487
+ return reactiveNavigationSubscriptions.subscriptionHistoryStack.length < 1;
10674
10488
  });
10675
10489
  const modelNode = reactive({
10676
10490
  node: {}
@@ -10698,23 +10512,29 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
10698
10512
  }
10699
10513
  }
10700
10514
  };
10701
- const navigate = function(subscriptions) {
10702
- if (obj.currentSubscriptions) {
10703
- obj.subscriptions.push(obj.currentSubscriptions);
10515
+ const UpdateModelCursor = () => {
10516
+ const subscriptions2 = reactiveNavigationSubscriptions.currentSubscriptions;
10517
+ if (subscriptions2) {
10518
+ socketClientSubscriber.UpdateModelCursor(subscriptions2);
10519
+ }
10520
+ };
10521
+ const navigate = function(subscriptions2) {
10522
+ if (reactiveNavigationSubscriptions.currentSubscriptions) {
10523
+ reactiveNavigationSubscriptions.subscriptionHistoryStack.push(reactiveNavigationSubscriptions.currentSubscriptions);
10704
10524
  } else {
10705
10525
  LogWarning(`navigate: obj.currentSubscriptions not defined`);
10706
10526
  }
10707
- obj.currentSubscriptions = subscriptions;
10708
- LogDebug(`navigate: observabilitySubscriberManager().UpdateModelCursor(${JSON.stringify(subscriptions)})`);
10709
- observabilitySubscriberManager?.UpdateModelCursor(subscriptions);
10527
+ reactiveNavigationSubscriptions.currentSubscriptions = subscriptions2;
10528
+ LogDebug(`navigate: observabilitySubscriberManager().UpdateModelCursor(${JSON.stringify(subscriptions2)})`);
10529
+ UpdateModelCursor();
10710
10530
  };
10711
10531
  const GoBack = function() {
10712
- if (obj.subscriptions.length > 0) {
10713
- let key = obj.subscriptions.pop();
10532
+ if (reactiveNavigationSubscriptions.subscriptionHistoryStack.length > 0) {
10533
+ let key = reactiveNavigationSubscriptions.subscriptionHistoryStack.pop();
10714
10534
  if (key) {
10715
- obj.currentSubscriptions = key;
10716
- LogDebug(`GoBack: observabilitySubscriberManager().UpdateModelCursor(${JSON.stringify(obj.currentSubscriptions)})`);
10717
- observabilitySubscriberManager?.UpdateModelCursor(obj.currentSubscriptions);
10535
+ reactiveNavigationSubscriptions.currentSubscriptions = key;
10536
+ LogDebug(`GoBack: observabilitySubscriberManager().UpdateModelCursor(${JSON.stringify(reactiveNavigationSubscriptions.currentSubscriptions)})`);
10537
+ UpdateModelCursor();
10718
10538
  } else {
10719
10539
  LogDebug(`GoBack: subscriptions key not defined`);
10720
10540
  }
@@ -10723,10 +10543,10 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
10723
10543
  }
10724
10544
  };
10725
10545
  const TopLevel = function() {
10726
- obj.subscriptions = [];
10727
- obj.currentSubscriptions = GetRootLevelSubscriptions();
10728
- LogDebug(`TopLevel: observabilitySubscriberManager().UpdateModelCursor(${JSON.stringify(obj.currentSubscriptions)})`);
10729
- observabilitySubscriberManager?.UpdateModelCursor(obj.currentSubscriptions);
10546
+ reactiveNavigationSubscriptions.subscriptionHistoryStack = [];
10547
+ reactiveNavigationSubscriptions.currentSubscriptions = GetRootLevelSubscriptions();
10548
+ LogDebug(`TopLevel: observabilitySubscriberManager().UpdateModelCursor(${JSON.stringify(reactiveNavigationSubscriptions.currentSubscriptions)})`);
10549
+ UpdateModelCursor();
10730
10550
  };
10731
10551
  onMounted(() => {
10732
10552
  LogDebug(`onMounted()`);
@@ -10739,25 +10559,21 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
10739
10559
  const Stop = () => {
10740
10560
  LogDebug(`Stop()`);
10741
10561
  store.UpdateSate(props.modelId, _estate.STOPPING);
10742
- if (observabilitySubscriberManager) {
10743
- LogDebug(`Stop(): Unsubscribe()`);
10744
- observabilitySubscriberManager.Unsubscribe();
10745
- store.UpdateObservabilitySubscriberManager(observabilitySubscriberManager.id, null);
10746
- }
10747
- observabilitySubscriberManager = null;
10748
10562
  store.UpdateSate(props.modelId, _estate.IDLE);
10749
10563
  };
10750
10564
  const Start = async (options) => {
10751
10565
  LogDebug(`Start()`);
10752
10566
  store.UpdateSate(props.modelId, _estate.STARTING);
10753
- LogDebug(`Start(): new ObservabilitySubscriberManager(), Options: ${JSON.stringify(options)}`);
10754
- observabilitySubscriberManager = new ObservabilitySubscriberManager(options);
10755
- store.UpdateObservabilitySubscriberManager(observabilitySubscriberManager.id, observabilitySubscriberManager);
10756
- LogDebug(`Start(): observabilitySubscriberManager().Start(): Mode: [${options.consumeInstrumentationMode}]`);
10757
- await observabilitySubscriberManager.Start();
10758
- obj.currentSubscriptions = GetRootLevelSubscriptions();
10759
- LogDebug(`Start(): observabilitySubscriberManager().UpdateModelCursor(): Mode: [${options.consumeInstrumentationMode}] rootLevelSubscriptions: [(${JSON.stringify(obj.currentSubscriptions)}]`);
10760
- observabilitySubscriberManager?.UpdateModelCursor(obj.currentSubscriptions);
10567
+ socketClientSubscriber = new SocketClientSubscriber({
10568
+ instrumentManagerEndpoint: options.instrumentManagerEndpoint,
10569
+ instrumentManagerPort: options.instrumentManagerPort,
10570
+ consumeInstrumentationMode: options.consumeInstrumentationMode,
10571
+ instrumentManagerAPIRoot: options.instrumentManagerAPIRoot,
10572
+ modelId: options.modelId
10573
+ });
10574
+ reactiveNavigationSubscriptions.currentSubscriptions = GetRootLevelSubscriptions();
10575
+ LogDebug(`Start(): observabilitySubscriberManager().UpdateModelCursor(): Mode: [${options.consumeInstrumentationMode}] rootLevelSubscriptions: [(${JSON.stringify(reactiveNavigationSubscriptions.currentSubscriptions)}]`);
10576
+ UpdateModelCursor();
10761
10577
  store.UpdateSate(props.modelId, _estate.STARTED);
10762
10578
  };
10763
10579
  __expose({