npm package: @nsshunt/stspublisherserver
Description: STS Publisher Server. Provide instrument publishing capabilities within a nodejs server context. Use stspublisheragent for a browser context.
Author: Marcus Bettens
Latest version: 3.0.4

# stspublisherserver
STS Publisher - Server

To add a new entity type, the following needs to happen

decide on the new structure and levels, e.g. technology/subtechnology/lambdafunction/instance
	constraint: the current solution has been setup for 4 levels

	future: Could potentially re-factor to handle any number of levels

--- context structure and default instruments ---------------------------------------

create a context interface for the new entity
	stspublisherserver/src/publishers/publisher.ts

create the default instrument list
	stspublisherserver/src/publishers/publishInstrumentControllerV2.ts

--- redis processing ----------------------------------------------------------------

define time series prefix	time series data are values that are recorded with the current datetime stamp.
	The series will exists within a defined time window. Old values are removed from the time series.

define instant data prefix	instant data are values that represent current near-real time values. This data is
	always overwritten with the current versions of instruments.

define index for time series	index for time series values. Keys are created for query purposes.

define index for instant data	index for instant data values. Keys are created for query purposes.

All prefix values declared in:-
	stsinstrumentmanager/src/redisInstrumentProcessorBase.ts
	(*) these should be specified with a new object that defines all this setup-meta-data

Define field names, guage types and data types within a IFieldRecord array
	stsinstrumentmanager/src/redisInstrumentProcessorBase.ts
	(*) these should be specified with a new object that defines all this setup-meta-data

Handle object types better than 'memory' in IsString
	stsinstrumentmanager/src/redisInstrumentProcessorBase.ts

(*) Add indexes and prefix defined above to drop and create the indexes
	stsinstrumentmanager/src/redisInstrumentProcessorLeader.ts
	(*) these should be specified with a new object that defines all this setup-meta-data

(*) RemoveOldHashRecords updated to include new index time series
	stsinstrumentmanager/src/redisInstrumentProcessorLeader.ts
	(*) these should be specified with a new object that defines all this setup-meta-data

(*) Create a new GetPath function to return formatted path for new entity
	stsinstrumentmanager/src/redisInstrumentProcessorWorker.ts
	(*) these should come at the root level of a new object that defines all this setup-meta-data

(*) Update ProcessInstrumentPayload to handle the new entity.
	(*) These needs to be refactored based on the new object structure definition from above
		stsinstrumentmanager/src/redisInstrumentProcessorWorker.ts

(*) Update GetCompleteRedisDataExByLevel to handle the new entity.
	(*) New object structure processing required.
	stsinstrumentmanager/src/redisInstrumentProcessorWorker.ts

Update GetRedisDataExByLevel
	need to be able to handle object types better than hard coding for 'memory'
		stsinstrumentmanager/src/redisInstrumentProcessorWorker.ts
Update all the methods such as GetServiceRootLevel to have one method based on the object definition
	stsinstrumentmanager/src/redisInstrumentProcessorWorker.ts
	The setup object could potentially define the methods

--- express http server processing ----------------------------------------------------------------

change stsmonitorroute to use :level1, :level2, etc. rather than app names
	stsinstrumentmanager/src/routes/stsmonitorroute.ts

change stsmonitorcontrollerV3 to use a config option for process influxdb (change stsconfig)
	stsinstrumentmanager/src/routes/stsmonitorroute.ts

change metricscontroller to use new methods updated from the redis sections above
	also update influxdb gets methods to handle all types - just provide stubs if required
		for non influxdb supported types
	stsinstrumentmanager/src/routes/metricscontroller.ts

update GetLogMessagesLambdaInstanceThread methods to handle kafka message processing
	stsinstrumentmanager/src/routes/metricscontroller.ts

--- socketio processing -------------------------------------------------------------------------

Define new interface types
	stssocketio-client/src/commonTypes

Update ParseModelNode methds (3) to use new interface types
	stssocketio-client/src/observabilitymodelutils

Update GetInfluxDBModelLambda methods (3) to use output types - these should come from the config object in 
	the notes above
	stssocketio-client/src/observabilitymodelutils

Update InvokeRESTAPI to invoke correct restapis
	stssocketio-client/src/observabilityrestapisubscriber

Update ObservabilitySubscriptionManager to handle new type
	stssocketio-client/src/observabilitysubscriptionmanager

--- uiterm processing -------------------------------------------------------------------------

Update GetViewTemplate to support new type
	stsuiterm/src/uisubscription/uicontrollersubscriptionbase

update uicontrollerlanding to support new type
	stsuiterm/src/uisubscription/uicontrollerlanding

create new view class to handle all levels of new type. If 4 levels, 3 views will need to be defined.
	stsuiterm/src/uisubscription/uicontroller<<new type>>

Update appsingle to include the new routes for the 3 new views
	stsuiterm/src/appsingle

Update uicontrollertemplates to crate the new handlebars templates for the new type
	stsuiterm/src/uicontrollertemplates