Skip to content

Commit

Permalink
Misc improvements (#51)
Browse files Browse the repository at this point in the history
* RD: Added device-view.html for viewing and editing device details. Fixed and improved devices.html. Modified DeviceManagementController so that the '/monitor/device' endpoint returns the devices of the current user, and also plain users can retrieve info for the devices they own.

* RD: Moved 'metrics' section side-by-side to 'device info' section in device-view.html, for better viewing

* RD: changed mongo db name to 'resource_discovery' in application.yml

* RD: Minor GUI improvements

* RD: Added DeviceMonitorService to watch the status updates from EMS. Added DeviceStatusUpdate class used in DeviceMonitorService, and added field statusUpdate in Device class. Restructured and improved ResourceDiscoveryProperties.

* RD: Created AbstractMonitorService (to factor out common topic monitoring code). Renamed DeviceMonitorService to DeviceStatusMonitorService and made it subclass of AbstractMonitorService. Changed DeviceStatusUpdate class to ignore unknown properties during deserialization.

* RD: Added banner

* RD: Added DeviceMetricsMonitorService and DeviceMetrics classes. Updated Device class to store device metrics received from EMS

* RD: Updated application.yml

* RD: Added device metrics display in device-view.html. Added (EMS) device status in devices.html

* RD: Updated device-view.html to display device metrics

* RD: Modified Device in monitoring subsystem to not have its credentials serialized (and returned to browser). Also updated the affected code

* RD: Added check for a request's device IP address being in use (in another request or a registered device)

* RD: various minor code improvements

* RD: Added better error reporting in request-edit.html

* RD: Various small GUI improvements and a fix

* RD: Fixed registration Device in order toString() not to print credentials. Fixed RegistrationRequest in order to have its 'messages' and 'history' fields copied by BeanUtils. Fixed 2 bugs in RegistrationRequestProcessor and added a few more logs.

* RD: Minor change in device-view.html to move 'count-' metrics to the end of the device metrics list

* RD: Changed monitoring Device to not serialize credentials

* RD: Code cleanup in RegistrationRequestProcessor

* RD: Improved GUI (added page shortcuts at top-right)

* RD: Implementing re-onboarding, off-boarding, and request-for-info (device status and metrics) [WIP]

* RD: Added DeviceLifeCycleRequestService and DeviceLifeCycleResponseService classes for handling reinstall and uninstall actions (via EMS broker). Moved LC request event sending from DeviceManagementService to DeviceLifeCycleRequestService. Updated ResourceDiscoveryProperties with settings for DeviceLifeCycleRequest/ResponseService's.

* RD: Added device archiving and unarchiving in GUI

* RD: Implemented DeviceProcessor to periodically archive off-boarded devices. Added configurable immediate archiving of Success registration requests, and off-boarded devices, and added relevant settings in ResourceDiscoveryProperties  and in GUI.

* RD: Changed devices.html to always display 'Archive' button to Admin users

* RD: Added archived-device-view.html, renamed archived-view.html to archived-request-view.html. Updated archived.html

* RD: Fixed DeviceManagementController to allow plain users (device owners) to access their device info (and archived devices), and control re-installing and off-boarding. Added device colouring based on their status.

* RD: Extended DeviceProcessor to check for suspect and failed devices. Added SUSPECT and FAILED statues in DeviceStatus (and in devices.html and archived.html for colouring). Added relevant settings in ResourceDiscoveryProperties. Fixed a few naming errors.

* RD: Added shortcuts (top-right corner) to all detail pages

* RD: Minor change in index.html (grayed out settings image)

* RD: Improved AbstractMonitorService (reuse of single connection, better logs). Updated affected code.

* RD: Minor code (mostly logging) and GUI improvements

* RD: Added 'UnknownDeviceRegistrationService' class to monitor for unknown devices (based on IP address and reference in messages received from EMS), and registering them to RD. Added NODE_DETAILS in REQUEST_TYPE enum for messages sent to/received from EMS about acquiring detailed node info (including credentials). Added 'deviceInfoRequestsTopic' and 'deviceInfoReportsTopic' settings in ResourceDiscoveryProperties.

* RD: Added prompting admin to provide device credentials when un-archiving a previously archived request or device.

* RD: Moved REQUEST_TYPE enum to 'common' package and updated code

* RD: Changed authentication to use BCrypt-encrypted passwords

* RD: Moved message broker communication code to BrokerUtil class, and updated using classes accordingly. Implemented EncryptionUtil for encrypting and decrypting broker messages [TO BE TESTED]. Few minor code improvements.

* RD: Minor code tidy up

* RD: Added support for SSL connections to ActiveMQ broker in BrokerUtil. Added the needed settings in ResourceDiscoveryProperties and application.yml

* RD: Fixed issue where UnknownDeviceRegistrationService registers a device before RegistrationRequestProcessor does

* RD: Modified pom.xml to build an image named 'eu.nebulous.resource-discovery' and tagged with current project version

* RD: Added 'DeviceLocation' class and 'location' field in both 'Device' classes. Also updated all 4 details pages to include Location (name, lat, lon). Fixed the Restore button of the modal dialog in archived.html to display 'Restore Request' or 'Restore Device' depending on the restore type.

* RD: Added StatusController to report current application status (currently returns 'OK')

* RD: Fixed a few minor issues:
* Fixed 'spring.web.resources.static-locations'
* Changed Docker image name to 'resource-discovery'
* Set BPE_LANG value to C.UTF-8 in order to render banner correctly

* RD: Changes in pom.xml and application.yml:
* Changed groupId in pom.xml to 'eu.nebulous.resource-management', and artifactId to 'resource-discovery'
* Corrected service name and description
* Set 'imageName' property to derive from artifactId
* Fixed application.yml to use '@project.version@' placeholder for app version

* RD: Renamed 'management' module to 'resource-discovery'

* RD:
* Commented out Buildpacks related settings in pom.xml
* Added Dockerfile, run.sh (entrypoint script) and .dockerignore

* RD: Modified base images in Dockerfile

* RD: Modified Dockerfile in order to both compile the app and build the Docker image

* RD: Improved Dockerfile

* RD: Improved Dockerfile

* RD: Upgraded SB version to SB 3.2.1 and JRE to version 21. Updated dependency to their latest versions. Modified model classes to avoid Lombok SuperBuilder warnings.

* RD: Fixed Dockerfile

* Initial changes to support registration and deregistration of edge devices to SAL

Introduction of Broker publisher and subscriber utilities
Introduction of new device registration service

I94a6fdb4612de192c24511445f1236cdce94b000

* EMS: Added K8sNetdataCollector [WIP]

* RD: Added 'port' in forms and models

* RD: Added two TODOs

* RD: Deactivated UnknownDeviceRegistrationService

* Initial changes to support registration and deregistration of edge devices to SAL

Introduction of Broker publisher and subscriber utilities
Introduction of new device registration service

I94a6fdb4612de192c24511445f1236cdce94b000

* Improvement in the initialization of SALRegistrationService
I94a6fdb4612de192c24511445f1236cdce94b000

* Improvement in the initialization of SALRegistrationService
I94a6fdb4612de192c24511445f1236cdce94b000

* Increased logging to debug setting of processorProperties I94a6fdb4612de192c24511445f1236cdce94b000

* Modified logging to debug the setting of processorProperties I94a6fdb4612de192c24511445f1236cdce94b000

* Correction of syntactic error I94a6fdb4612de192c24511445f1236cdce94b000

* Addition of needed configuration properties I94a6fdb4612de192c24511445f1236cdce94b000

* Testing of alternative initialization of SAL registration service I94a6fdb4612de192c24511445f1236cdce94b000

* Testing of alternative initialization of SAL registration service I94a6fdb4612de192c24511445f1236cdce94b000

* Updates on the topic and the payload format used to communicate with SAL for the registration of a device
I94a6fdb4612de192c24511445f1236cdce94b000

* Allow setting and using a custom broker port
I94a6fdb4612de192c24511445f1236cdce94b000

* Pass a default port to the configuration of the Resource discovery server
I94a6fdb4612de192c24511445f1236cdce94b000

* Log debugging information related to the port of the NebulOuS broker
I94a6fdb4612de192c24511445f1236cdce94b000

* Publishing of the appropriate message to the broker
I94a6fdb4612de192c24511445f1236cdce94b000

* RD: Removed truststore settings from application.yml. Upgraded to SB 3.2.4 and fixed pom.xml

* RD: Fixed banner.txt

* RD: Modified application.yml

* RD: Added temp. debug messages

* RD: Added temp. debug messages 2

* Revert "RD: Added temp. debug messages 2"

This reverts commit 738f6048a8b88b4cfc7410db2146c7d7855c03bd.

* Revert "RD: Added temp. debug messages"

This reverts commit 31b103c207dd900689c94fe5b608a0a03db8fc80.

* RD: Modified SALRegistrationService to run SAL registration in dedicated worker thread, and interrupt registration if it takes too long. Added related settings and assigned defaults.

* RD: Added temp. log messages

* Revert "RD: Added temp. log messages"

This reverts commit 2dae6582de0359a4f33b0d8c066b1b55ecad2227.

* RD: Updated DeviceMetricsMonitorService to match metric events to device using first the IP address and the client Id (stored in Device.StatusUpdate)

* Improvements on edge device data propagation
I94a6fdb4612de192c24511445f1236cdce94b000

* Integration of changes performed in commit e3bd3852 but accidentally overriden
I94a6fdb4612de192c24511445f1236cdce94b000

* RD: Updated Dockerfile

* RD: Updated run.sh and added wait_for_mongodb.sh

* RD: Improved wait_for_mongodb.sh script

* Various Improvements
Addition of the port attribute in the registration of an edge device
Modification of the edge device registration to allow for more dynamic registration json field population
I94a6fdb4612de192c24511445f1236cdce94b000

* Attempt to fix a problem when publishing to the broker to register information to SAL or notify the SLO Violation detector
I94a6fdb4612de192c24511445f1236cdce94b000

* Miscellaneous improvements

Updated the registration of architecture/jar files for each edge device registered

Preliminary work to support 'Compromised state'

* RD: Added API Key authentication

* RD: Upgraded SB to 3.2.10, and Lombok, commons-lang3 dependencies to their latest versions. Improved Dockerfile.

* RD: Code improvements (esp. wrt @PreAuthorize annotations)

* RD: Made SALRegistrationService service conditionally enabled (by 'discovery.sal-registration.enabled' property). Its uses were updated accordingly.

* RD: Updated RegistrationRequestService (and its uses) to take authenticated user into consideration during checks of requests and devices sent from GUI. Also added checks for the device data provided.

* RD: Added 'Device.ref' field and added its initialization. Ref field will be populated with a unique device reference following the Nebulous naming convention (including app id).

* RD: Updated GUI pages to include the new 'ref' field. A few more improvements were introduced.

* Use device reference instead of name to register to SAL

* Improvements in device registration and component communication with the broker

* Small improvements in device registration

* Small improvement in getting device registration details

* Small improvement in getting device registration details

* RD: Fix in SALRegistrationService class

* RD: Fixed fontawesome cdn url

* Initial deregistration support

* RD: Made device on-boarding authorization configurable (MANUAL, ALWAYS_AUTHORIZE, and ALWAYS_REJECT)

* RD: Updated RegistrationRequestProcessor to include Device Ref in onboarding request to EMS

* Improvements in the handling of AMQP connections

* Addition of provider field, miscellaneous improvements

- Addition of provider field in device registration
- Small improvements the Synchronous Broker publisher

* Minor logging improvements

* Deregistration process improvement

* Stopping the device lost publisher

* Refactoring to use the original Connector class instead of ExtendedConnector

* Minor logging improvement

* Only try to stop the connector if it has been previously initialized

* Miscellaneous improvements

Implementation of edge device/byon hourly cost (price) field
Only try to stop the connector if it has been previously initialized

* Password improvements

Removal of plaintext passwords and replacement with environmental variable values

* Debugging message commit

* Work on Deregistration support

* Added more logging statements to debug device registration (work by ipatini)

* Fix parsing the json response of SAL

* Changes to avoid stopping the connector

* Sal response parsing improvement and other improvements (#35)

* Debugging message (#32)

* RD: Added device-view.html for viewing and editing device details. Fixed and improved devices.html. Modified DeviceManagementController so that the '/monitor/device' endpoint returns the devices of the current user, and also plain users can retrieve info for the devices they own.

* RD: Moved 'metrics' section side-by-side to 'device info' section in device-view.html, for better viewing

* RD: changed mongo db name to 'resource_discovery' in application.yml

* RD: Minor GUI improvements

* RD: Added DeviceMonitorService to watch the status updates from EMS. Added DeviceStatusUpdate class used in DeviceMonitorService, and added field statusUpdate in Device class. Restructured and improved ResourceDiscoveryProperties.

* RD: Created AbstractMonitorService (to factor out common topic monitoring code). Renamed DeviceMonitorService to DeviceStatusMonitorService and made it subclass of AbstractMonitorService. Changed DeviceStatusUpdate class to ignore unknown properties during deserialization.

* RD: Added banner

* RD: Added DeviceMetricsMonitorService and DeviceMetrics classes. Updated Device class to store device metrics received from EMS

* RD: Updated application.yml

* RD: Added device metrics display in device-view.html. Added (EMS) device status in devices.html

* RD: Updated device-view.html to display device metrics

* RD: Modified Device in monitoring subsystem to not have its credentials serialized (and returned to browser). Also updated the affected code

* RD: Added check for a request's device IP address being in use (in another request or a registered device)

* RD: various minor code improvements

* RD: Added better error reporting in request-edit.html

* RD: Various small GUI improvements and a fix

* RD: Fixed registration Device in order toString() not to print credentials. Fixed RegistrationRequest in order to have its 'messages' and 'history' fields copied by BeanUtils. Fixed 2 bugs in RegistrationRequestProcessor and added a few more logs.

* RD: Minor change in device-view.html to move 'count-' metrics to the end of the device metrics list

* RD: Changed monitoring Device to not serialize credentials

* RD: Code cleanup in RegistrationRequestProcessor

* RD: Improved GUI (added page shortcuts at top-right)

* RD: Implementing re-onboarding, off-boarding, and request-for-info (device status and metrics) [WIP]

* RD: Added DeviceLifeCycleRequestService and DeviceLifeCycleResponseService classes for handling reinstall and uninstall actions (via EMS broker). Moved LC request event sending from DeviceManagementService to DeviceLifeCycleRequestService. Updated ResourceDiscoveryProperties with settings for DeviceLifeCycleRequest/ResponseService's.

* RD: Added device archiving and unarchiving in GUI

* RD: Implemented DeviceProcessor to periodically archive off-boarded devices. Added configurable immediate archiving of Success registration requests, and off-boarded devices, and added relevant settings in ResourceDiscoveryProperties  and in GUI.

* RD: Changed devices.html to always display 'Archive' button to Admin users

* RD: Added archived-device-view.html, renamed archived-view.html to archived-request-view.html. Updated archived.html

* RD: Fixed DeviceManagementController to allow plain users (device owners) to access their device info (and archived devices), and control re-installing and off-boarding. Added device colouring based on their status.

* RD: Extended DeviceProcessor to check for suspect and failed devices. Added SUSPECT and FAILED statues in DeviceStatus (and in devices.html and archived.html for colouring). Added relevant settings in ResourceDiscoveryProperties. Fixed a few naming errors.

* RD: Added shortcuts (top-right corner) to all detail pages

* RD: Minor change in index.html (grayed out settings image)

* RD: Improved AbstractMonitorService (reuse of single connection, better logs). Updated affected code.

* RD: Minor code (mostly logging) and GUI improvements

* RD: Added 'UnknownDeviceRegistrationService' class to monitor for unknown devices (based on IP address and reference in messages received from EMS), and registering them to RD. Added NODE_DETAILS in REQUEST_TYPE enum for messages sent to/received from EMS about acquiring detailed node info (including credentials). Added 'deviceInfoRequestsTopic' and 'deviceInfoReportsTopic' settings in ResourceDiscoveryProperties.

* RD: Added prompting admin to provide device credentials when un-archiving a previously archived request or device.

* RD: Moved REQUEST_TYPE enum to 'common' package and updated code

* RD: Changed authentication to use BCrypt-encrypted passwords

* RD: Moved message broker communication code to BrokerUtil class, and updated using classes accordingly. Implemented EncryptionUtil for encrypting and decrypting broker messages [TO BE TESTED]. Few minor code improvements.

* RD: Minor code tidy up

* RD: Added support for SSL connections to ActiveMQ broker in BrokerUtil. Added the needed settings in ResourceDiscoveryProperties and application.yml

* RD: Fixed issue where UnknownDeviceRegistrationService registers a device before RegistrationRequestProcessor does

* RD: Modified pom.xml to build an image named 'eu.nebulous.resource-discovery' and tagged with current project version

* RD: Added 'DeviceLocation' class and 'location' field in both 'Device' classes. Also updated all 4 details pages to include Location (name, lat, lon). Fixed the Restore button of the modal dialog in archived.html to display 'Restore Request' or 'Restore Device' depending on the restore type.

* RD: Added StatusController to report current application status (currently returns 'OK')

* RD: Fixed a few minor issues:
* Fixed 'spring.web.resources.static-locations'
* Changed Docker image name to 'resource-discovery'
* Set BPE_LANG value to C.UTF-8 in order to render banner correctly

* RD: Changes in pom.xml and application.yml:
* Changed groupId in pom.xml to 'eu.nebulous.resource-management', and artifactId to 'resource-discovery'
* Corrected service name and description
* Set 'imageName' property to derive from artifactId
* Fixed application.yml to use '@project.version@' placeholder for app version

* RD: Renamed 'management' module to 'resource-discovery'

* RD:
* Commented out Buildpacks related settings in pom.xml
* Added Dockerfile, run.sh (entrypoint script) and .dockerignore

* RD: Modified base images in Dockerfile

* RD: Modified Dockerfile in order to both compile the app and build the Docker image

* RD: Improved Dockerfile

* RD: Improved Dockerfile

* RD: Upgraded SB version to SB 3.2.1 and JRE to version 21. Updated dependency to their latest versions. Modified model classes to avoid Lombok SuperBuilder warnings.

* RD: Fixed Dockerfile

* Initial changes to support registration and deregistration of edge devices to SAL

Introduction of Broker publisher and subscriber utilities
Introduction of new device registration service

I94a6fdb4612de192c24511445f1236cdce94b000

* EMS: Added K8sNetdataCollector [WIP]

* RD: Added 'port' in forms and models

* RD: Added two TODOs

* RD: Deactivated UnknownDeviceRegistrationService

* Initial changes to support registration and deregistration of edge devices to SAL

Introduction of Broker publisher and subscriber utilities
Introduction of new device registration service

I94a6fdb4612de192c24511445f1236cdce94b000

* Improvement in the initialization of SALRegistrationService
I94a6fdb4612de192c24511445f1236cdce94b000

* Improvement in the initialization of SALRegistrationService
I94a6fdb4612de192c24511445f1236cdce94b000

* Increased logging to debug setting of processorProperties I94a6fdb4612de192c24511445f1236cdce94b000

* Modified logging to debug the setting of processorProperties I94a6fdb4612de192c24511445f1236cdce94b000

* Correction of syntactic error I94a6fdb4612de192c24511445f1236cdce94b000

* Addition of needed configuration properties I94a6fdb4612de192c24511445f1236cdce94b000

* Testing of alternative initialization of SAL registration service I94a6fdb4612de192c24511445f1236cdce94b000

* Testing of alternative initialization of SAL registration service I94a6fdb4612de192c24511445f1236cdce94b000

* Updates on the topic and the payload format used to communicate with SAL for the registration of a device
I94a6fdb4612de192c24511445f1236cdce94b000

* Allow setting and using a custom broker port
I94a6fdb4612de192c24511445f1236cdce94b000

* Pass a default port to the configuration of the Resource discovery server
I94a6fdb4612de192c24511445f1236cdce94b000

* Log debugging information related to the port of the NebulOuS broker
I94a6fdb4612de192c24511445f1236cdce94b000

* Publishing of the appropriate message to the broker
I94a6fdb4612de192c24511445f1236cdce94b000

* RD: Removed truststore settings from application.yml. Upgraded to SB 3.2.4 and fixed pom.xml

* RD: Fixed banner.txt

* RD: Modified application.yml

* RD: Added temp. debug messages

* RD: Added temp. debug messages 2

* Revert "RD: Added temp. debug messages 2"

This reverts commit 738f6048a8b88b4cfc7410db2146c7d7855c03bd.

* Revert "RD: Added temp. debug messages"

This reverts commit 31b103c207dd900689c94fe5b608a0a03db8fc80.

* RD: Modified SALRegistrationService to run SAL registration in dedicated worker thread, and interrupt registration if it takes too long. Added related settings and assigned defaults.

* RD: Added temp. log messages

* Revert "RD: Added temp. log messages"

This reverts commit 2dae6582de0359a4f33b0d8c066b1b55ecad2227.

* RD: Updated DeviceMetricsMonitorService to match metric events to device using first the IP address and the client Id (stored in Device.StatusUpdate)

* Improvements on edge device data propagation
I94a6fdb4612de192c24511445f1236cdce94b000

* Integration of changes performed in commit e3bd3852 but accidentally overriden
I94a6fdb4612de192c24511445f1236cdce94b000

* RD: Updated Dockerfile

* RD: Updated run.sh and added wait_for_mongodb.sh

* RD: Improved wait_for_mongodb.sh script

* Various Improvements
Addition of the port attribute in the registration of an edge device
Modification of the edge device registration to allow for more dynamic registration json field population
I94a6fdb4612de192c24511445f1236cdce94b000

* Attempt to fix a problem when publishing to the broker to register information to SAL or notify the SLO Violation detector
I94a6fdb4612de192c24511445f1236cdce94b000

* Miscellaneous improvements

Updated the registration of architecture/jar files for each edge device registered

Preliminary work to support 'Compromised state'

* RD: Added API Key authentication

* RD: Upgraded SB to 3.2.10, and Lombok, commons-lang3 dependencies to their latest versions. Improved Dockerfile.

* RD: Code improvements (esp. wrt @PreAuthorize annotations)

* RD: Made SALRegistrationService service conditionally enabled (by 'discovery.sal-registration.enabled' property). Its uses were updated accordingly.

* RD: Updated RegistrationRequestService (and its uses) to take authenticated user into consideration during checks of requests and devices sent from GUI. Also added checks for the device data provided.

* RD: Added 'Device.ref' field and added its initialization. Ref field will be populated with a unique device reference following the Nebulous naming convention (including app id).

* RD: Updated GUI pages to include the new 'ref' field. A few more improvements were introduced.

* Use device reference instead of name to register to SAL

* Improvements in device registration and component communication with the broker

* Small improvements in device registration

* Small improvement in getting device registration details

* Small improvement in getting device registration details

* RD: Fix in SALRegistrationService class

* RD: Fixed fontawesome cdn url

* Initial deregistration support

* RD: Made device on-boarding authorization configurable (MANUAL, ALWAYS_AUTHORIZE, and ALWAYS_REJECT)

* RD: Updated RegistrationRequestProcessor to include Device Ref in onboarding request to EMS

* Improvements in the handling of AMQP connections

* Addition of provider field, miscellaneous improvements

- Addition of provider field in device registration
- Small improvements the Synchronous Broker publisher

* Minor logging improvements

* Deregistration process improvement

* Stopping the device lost publisher

* Refactoring to use the original Connector class instead of ExtendedConnector

* Minor logging improvement

* Only try to stop the connector if it has been previously initialized

* Miscellaneous improvements

Implementation of edge device/byon hourly cost (price) field
Only try to stop the connector if it has been previously initialized

* Password improvements

Removal of plaintext passwords and replacement with environmental variable values

* Debugging message commit

---------

Co-authored-by: ipatini <[email protected]>
Co-authored-by: Andreas Tsagkaropoulos <[email protected]>

* Logging improvements (#33)

* RD: Added device-view.html for viewing and editing device details. Fixed and improved devices.html. Modified DeviceManagementController so that the '/monitor/device' endpoint returns the devices of the current user, and also plain users can retrieve info for the devices they own.

* RD: Moved 'metrics' section side-by-side to 'device info' section in device-view.html, for better viewing

* RD: changed mongo db name to 'resource_discovery' in application.yml

* RD: Minor GUI improvements

* RD: Added DeviceMonitorService to watch the status updates from EMS. Added DeviceStatusUpdate class used in DeviceMonitorService, and added field statusUpdate in Device class. Restructured and improved ResourceDiscoveryProperties.

* RD: Created AbstractMonitorService (to factor out common topic monitoring code). Renamed DeviceMonitorService to DeviceStatusMonitorService and made it subclass of AbstractMonitorService. Changed DeviceStatusUpdate class to ignore unknown properties during deserialization.

* RD: Added banner

* RD: Added DeviceMetricsMonitorService and DeviceMetrics classes. Updated Device class to store device metrics received from EMS

* RD: Updated application.yml

* RD: Added device metrics display in device-view.html. Added (EMS) device status in devices.html

* RD: Updated device-view.html to display device metrics

* RD: Modified Device in monitoring subsystem to not have its credentials serialized (and returned to browser). Also updated the affected code

* RD: Added check for a request's device IP address being in use (in another request or a registered device)

* RD: various minor code improvements

* RD: Added better error reporting in request-edit.html

* RD: Various small GUI improvements and a fix

* RD: Fixed registration Device in order toString() not to print credentials. Fixed RegistrationRequest in order to have its 'messages' and 'history' fields copied by BeanUtils. Fixed 2 bugs in RegistrationRequestProcessor and added a few more logs.

* RD: Minor change in device-view.html to move 'count-' metrics to the end of the device metrics list

* RD: Changed monitoring Device to not serialize credentials

* RD: Code cleanup in RegistrationRequestProcessor

* RD: Improved GUI (added page shortcuts at top-right)

* RD: Implementing re-onboarding, off-boarding, and request-for-info (device status and metrics) [WIP]

* RD: Added DeviceLifeCycleRequestService and DeviceLifeCycleResponseService classes for handling reinstall and uninstall actions (via EMS broker). Moved LC request event sending from DeviceManagementService to DeviceLifeCycleRequestService. Updated ResourceDiscoveryProperties with settings for DeviceLifeCycleRequest/ResponseService's.

* RD: Added device archiving and unarchiving in GUI

* RD: Implemented DeviceProcessor to periodically archive off-boarded devices. Added configurable immediate archiving of Success registration requests, and off-boarded devices, and added relevant settings in ResourceDiscoveryProperties  and in GUI.

* RD: Changed devices.html to always display 'Archive' button to Admin users

* RD: Added archived-device-view.html, renamed archived-view.html to archived-request-view.html. Updated archived.html

* RD: Fixed DeviceManagementController to allow plain users (device owners) to access their device info (and archived devices), and control re-installing and off-boarding. Added device colouring based on their status.

* RD: Extended DeviceProcessor to check for suspect and failed devices. Added SUSPECT and FAILED statues in DeviceStatus (and in devices.html and archived.html for colouring). Added relevant settings in ResourceDiscoveryProperties. Fixed a few naming errors.

* RD: Added shortcuts (top-right corner) to all detail pages

* RD: Minor change in index.html (grayed out settings image)

* RD: Improved AbstractMonitorService (reuse of single connection, better logs). Updated affected code.

* RD: Minor code (mostly logging) and GUI improvements

* RD: Added 'UnknownDeviceRegistrationService' class to monitor for unknown devices (based on IP address and reference in messages received from EMS), and registering them to RD. Added NODE_DETAILS in REQUEST_TYPE enum for messages sent to/received from EMS about acquiring detailed node info (including credentials). Added 'deviceInfoRequestsTopic' and 'deviceInfoReportsTopic' settings in ResourceDiscoveryProperties.

* RD: Added prompting admin to provide device credentials when un-archiving a previously archived request or device.

* RD: Moved REQUEST_TYPE enum to 'common' package and updated code

* RD: Changed authentication to use BCrypt-encrypted passwords

* RD: Moved message broker communication code to BrokerUtil class, and updated using classes accordingly. Implemented EncryptionUtil for encrypting and decrypting broker messages [TO BE TESTED]. Few minor code improvements.

* RD: Minor code tidy up

* RD: Added support for SSL connections to ActiveMQ broker in BrokerUtil. Added the needed settings in ResourceDiscoveryProperties and application.yml

* RD: Fixed issue where UnknownDeviceRegistrationService registers a device before RegistrationRequestProcessor does

* RD: Modified pom.xml to build an image named 'eu.nebulous.resource-discovery' and tagged with current project version

* RD: Added 'DeviceLocation' class and 'location' field in both 'Device' classes. Also updated all 4 details pages to include Location (name, lat, lon). Fixed the Restore button of the modal dialog in archived.html to display 'Restore Request' or 'Restore Device' depending on the restore type.

* RD: Added StatusController to report current application status (currently returns 'OK')

* RD: Fixed a few minor issues:
* Fixed 'spring.web.resources.static-locations'
* Changed Docker image name to 'resource-discovery'
* Set BPE_LANG value to C.UTF-8 in order to render banner correctly

* RD: Changes in pom.xml and application.yml:
* Changed groupId in pom.xml to 'eu.nebulous.resource-management', and artifactId to 'resource-discovery'
* Corrected service name and description
* Set 'imageName' property to derive from artifactId
* Fixed application.yml to use '@project.version@' placeholder for app version

* RD: Renamed 'management' module to 'resource-discovery'

* RD:
* Commented out Buildpacks related settings in pom.xml
* Added Dockerfile, run.sh (entrypoint script) and .dockerignore

* RD: Modified base images in Dockerfile

* RD: Modified Dockerfile in order to both compile the app and build the Docker image

* RD: Improved Dockerfile

* RD: Improved Dockerfile

* RD: Upgraded SB version to SB 3.2.1 and JRE to version 21. Updated dependency to their latest versions. Modified model classes to avoid Lombok SuperBuilder warnings.

* RD: Fixed Dockerfile

* Initial changes to support registration and deregistration of edge devices to SAL

Introduction of Broker publisher and subscriber utilities
Introduction of new device registration service

I94a6fdb4612de192c24511445f1236cdce94b000

* EMS: Added K8sNetdataCollector [WIP]

* RD: Added 'port' in forms and models

* RD: Added two TODOs

* RD: Deactivated UnknownDeviceRegistrationService

* Initial changes to support registration and deregistration of edge devices to SAL

Introduction of Broker publisher and subscriber utilities
Introduction of new device registration service

I94a6fdb4612de192c24511445f1236cdce94b000

* Improvement in the initialization of SALRegistrationService
I94a6fdb4612de192c24511445f1236cdce94b000

* Improvement in the initialization of SALRegistrationService
I94a6fdb4612de192c24511445f1236cdce94b000

* Increased logging to debug setting of processorProperties I94a6fdb4612de192c24511445f1236cdce94b000

* Modified logging to debug the setting of processorProperties I94a6fdb4612de192c24511445f1236cdce94b000

* Correction of syntactic error I94a6fdb4612de192c24511445f1236cdce94b000

* Addition of needed configuration properties I94a6fdb4612de192c24511445f1236cdce94b000

* Testing of alternative initialization of SAL registration service I94a6fdb4612de192c24511445f1236cdce94b000

* Testing of alternative initialization of SAL registration service I94a6fdb4612de192c24511445f1236cdce94b000

* Updates on the topic and the payload format used to communicate with SAL for the registration of a device
I94a6fdb4612de192c24511445f1236cdce94b000

* Allow setting and using a custom broker port
I94a6fdb4612de192c24511445f1236cdce94b000

* Pass a default port to the configuration of the Resource discovery server
I94a6fdb4612de192c24511445f1236cdce94b000

* Log debugging information related to the port of the NebulOuS broker
I94a6fdb4612de192c24511445f1236cdce94b000

* Publishing of the appropriate message to the broker
I94a6fdb4612de192c24511445f1236cdce94b000

* RD: Removed truststore settings from application.yml. Upgraded to SB 3.2.4 and fixed pom.xml

* RD: Fixed banner.txt

* RD: Modified application.yml

* RD: Added temp. debug messages

* RD: Added temp. debug messages 2

* Revert "RD: Added temp. debug messages 2"

This reverts commit 738f6048a8b88b4cfc7410db2146c7d7855c03bd.

* Revert "RD: Added temp. debug messages"

This reverts commit 31b103c207dd900689c94fe5b608a0a03db8fc80.

* RD: Modified SALRegistrationService to run SAL registration in dedicated worker thread, and interrupt registration if it takes too long. Added related settings and assigned defaults.

* RD: Added temp. log messages

* Revert "RD: Added temp. log messages"

This reverts commit 2dae6582de0359a4f33b0d8c066b1b55ecad2227.

* RD: Updated DeviceMetricsMonitorService to match metric events to device using first the IP address and the client Id (stored in Device.StatusUpdate)

* Improvements on edge device data propagation
I94a6fdb4612de192c24511445f1236cdce94b000

* Integration of changes performed in commit e3bd3852 but accidentally overriden
I94a6fdb4612de192c24511445f1236cdce94b000

* RD: Updated Dockerfile

* RD: Updated run.sh and added wait_for_mongodb.sh

* RD: Improved wait_for_mongodb.sh script

* Various Improvements
Addition of the port attribute in the registration of an edge device
Modification of the edge device registration to allow for more dynamic registration json field population
I94a6fdb4612de192c24511445f1236cdce94b000

* Attempt to fix a problem when publishing to the broker to register information to SAL or notify the SLO Violation detector
I94a6fdb4612de192c24511445f1236cdce94b000

* Miscellaneous improvements

Updated the registration of architecture/jar files for each edge device registered

Preliminary work to support 'Compromised state'

* RD: Added API Key authentication

* RD: Upgraded SB to 3.2.10, and Lombok, commons-lang3 dependencies to their latest versions. Improved Dockerfile.

* RD: Code improvements (esp. wrt @PreAuthorize annotations)

* RD: Made SALRegistrationService service conditionally enabled (by 'discovery.sal-registration.enabled' property). Its uses were updated accordingly.

* RD: Updated RegistrationRequestService (and its uses) to take authenticated user into consideration during checks of requests and devices sent from GUI. Also added checks for the device data provided.

* RD: Added 'Device.ref' field and added its initialization. Ref field will be populated with a unique device reference following the Nebulous naming convention (including app id).

* RD: Updated GUI pages to include the new 'ref' field. A few more improvements were introduced.

* Use device reference instead of name to register to SAL

* Improvements in device registration and component communication with the broker

* Small improvements in device registration

* Small improvement in getting device registration details

* Small improvement in getting device registration details

* RD: Fix in SALRegistrationService class

* RD: Fixed fontawesome cdn url

* Initial deregistration support

* RD: Made device on-boarding authorization configurable (MANUAL, ALWAYS_AUTHORIZE, and ALWAYS_REJECT)

* RD: Updated RegistrationRequestProcessor to include Device Ref in onboarding request to EMS

* Improvements in the handling of AMQP connections

* Addition of provider field, miscellaneous improvements

- Addition of provider field in device registration
- Small improvements the Synchronous Broker publisher

* Minor logging improvements

* Deregistration process improvement

* Stopping the device lost publisher

* Refactoring to use the original Connector class instead of ExtendedConnector

* Minor logging improvement

* Only try to stop the connector if it has been previously initialized

* Miscellaneous improvements

Implementation of edge device/byon hourly cost (price) field
Only try to stop the connector if it has been previously initialized

* Password improvements

Removal of plaintext passwords and replacement with environmental variable values

* Debugging message commit

* Work on Deregistration support

* Added more logging statements to debug device registration (work by ipatini)

---------

Co-authored-by: ipatini <[email protected]>
Co-authored-by: Andreas Tsagkaropoulos <[email protected]>

* Sal response parsing improvement (#34)

* RD: Added device-view.html for viewing and editing device details. Fixed and improved devices.html. Modified DeviceManagementController so that the '/monitor/device' endpoint returns the devices of the current user, and also plain users can retrieve info for the devices they own.

* RD: Moved 'metrics' section side-by-side to 'device info' section in device-view.html, for better viewing

* RD: changed mongo db name to 'resource_discovery' in application.yml

* RD: Minor GUI improvements

* RD: Added DeviceMonitorService to watch the status updates from EMS. Added DeviceStatusUpdate class used in DeviceMonitorService, and added field statusUpdate in Device class. Restructured and improved ResourceDiscoveryProperties.

* RD: Created AbstractMonitorService (to factor out common topic monitoring code). Renamed DeviceMonitorService to DeviceStatusMonitorService and made it subclass of AbstractMonitorService. Changed DeviceStatusUpdate class to ignore unknown properties during deserialization.

* RD: Added banner

* RD: Added DeviceMetricsMonitorService and DeviceMetrics classes. Updated Device class to store device metrics received from EMS

* RD: Updated application.yml

* RD: Added device metrics display in device-view.html. Added (EMS) device status in devices.html

* RD: Updated device-view.html to display device metrics

* RD: Modified Device in monitoring subsystem to not have its credentials serialized (and returned to browser). Also updated the affected code

* RD: Added check for a request's device IP address being in use (in another request or a registered device)

* RD: various minor code improvements

* RD: Added better error reporting in request-edit.html

* RD: Various small GUI improvements and a fix

* RD: Fixed registration Device in order toString() not to print credentials. Fixed RegistrationRequest in order to have its 'messages' and 'history' fields copied by BeanUtils. Fixed 2 bugs in RegistrationRequestProcessor and added a few more logs.

* RD: Minor change in device-view.html to move 'count-' metrics to the end of the device metrics list

* RD: Changed monitoring Device to not serialize credentials

* RD: Code cleanup in RegistrationRequestProcessor

* RD: Improved GUI (added page shortcuts at top-right)

* RD: Implementing re-onboarding, off-boarding, and request-for-info (device status and metrics) [WIP]

* RD: Added DeviceLifeCycleRequestService and DeviceLifeCycleResponseService classes for handling reinstall and uninstall actions (via EMS broker). Moved LC request event sending from DeviceManagementService to DeviceLifeCycleRequestService. Updated ResourceDiscoveryProperties with settings for DeviceLifeCycleRequest/ResponseService's.

* RD: Added device archiving and unarchiving in GUI

* RD: Implemented DeviceProcessor to periodically archive off-boarded devices. Added configurable immediate archiving of Success registration requests, and off-boarded devices, and added relevant settings in ResourceDiscoveryProperties  and in GUI.

* RD: Changed devices.html to always display 'Archive' button to Admin users

* RD: Added archived-device-view.html, renamed archived-view.html to archived-request-view.html. Updated archived.html

* RD: Fixed DeviceManagementController to allow plain users (device owners) to access their device info (and archived devices), and control re-installing and off-boarding. Added device colouring based on their status.

* RD: Extended DeviceProcessor to check for suspect and failed devices. Added SUSPECT and FAILED statues in DeviceStatus (and in devices.html and archived.html for colouring). Added relevant settings in ResourceDiscoveryProperties. Fixed a few naming errors.

* RD: Added shortcuts (top-right corner) to all detail pages

* RD: Minor change in index.html (grayed out settings image)

* RD: Improved AbstractMonitorService (reuse of single connection, better logs). Updated affected code.

* RD: Minor code (mostly logging) and GUI improvements

* RD: Added 'UnknownDeviceRegistrationService' class to monitor for unknown devices (based on IP address and reference in messages received from EMS), and registering them to RD. Added NODE_DETAILS in REQUEST_TYPE enum for messages sent to/received from EMS about acquiring detailed node info (including credentials). Added 'deviceInfoRequestsTopic' and 'deviceInfoReportsTopic' settings in ResourceDiscoveryProperties.

* RD: Added prompting admin to provide device credentials when un-archiving a previously archived request or device.

* RD: Moved REQUEST_TYPE enum to 'common' package and updated code

* RD: Changed authentication to use BCrypt-encrypted passwords

* RD: Moved message broker communication code to BrokerUtil class, and updated using classes accordingly. Implemented EncryptionUtil for encrypting and decrypting broker messages [TO BE TESTED]. Few minor code improvements.

* RD: Minor code tidy up

* RD: Added support for SSL connections to ActiveMQ broker in BrokerUtil. Added the needed settings in ResourceDiscoveryProperties and application.yml

* RD: Fixed issue where UnknownDeviceRegistrationService registers a device before RegistrationRequestProcessor does

* RD: Modified pom.xml to build an image named 'eu.nebulous.resource-discovery' and tagged with current project version

* RD: Added 'DeviceLocation' class and 'location' field in both 'Device' classes. Also updated all 4 details pages to include Location (name, lat, lon). Fixed the Restore button of the modal dialog in archived.html to display 'Restore Request' or 'Restore Device' depending on the restore type.

* RD: Added StatusController to report current application status (currently returns 'OK')

* RD: Fixed a few minor issues:
* Fixed 'spring.web.resources.static-locations'
* Changed Docker image name to 'resource-discovery'
* Set BPE_LANG value to C.UTF-8 in order to render banner correctly

* RD: Changes in pom.xml and application.yml:
* Changed groupId in pom.xml to 'eu.nebulous.resource-management', and artifactId to 'resource-discovery'
* Corrected service name and description
* Set 'imageName' property to derive from artifactId
* Fixed application.yml to use '@project.version@' placeholder for app version

* RD: Renamed 'management' module to 'resource-discovery'

* RD:
* Commented out Buildpacks related settings in pom.xml
* Added Dockerfile, run.sh (entrypoint script) and .dockerignore

* RD: Modified base images in Dockerfile

* RD: Modified Dockerfile in order to both compile the app and build the Docker image

* RD: Improved Dockerfile

* RD: Improved Dockerfile

* RD: Upgraded SB version to SB 3.2.1 and JRE to version 21. Updated dependency to their latest versions. Modified model classes to avoid Lombok SuperBuilder warnings.

* RD: Fixed Dockerfile

* Initial changes to support registration and deregistration of edge devices to SAL

Introduction of Broker publisher and subscriber utilities
Introduction of new device registration service

I94a6fdb4612de192c24511445f1236cdce94b000

* EMS: Added K8sNetdataCollector [WIP]

* RD: Added 'port' in forms and models

* RD: Added two TODOs

* RD: Deactivated UnknownDeviceRegistrationService

* Initial changes to support registration and deregistration of edge devices to SAL

Introduction of Broker publisher and subscriber utilities
Introduction of new device registration service

I94a6fdb4612de192c24511445f1236cdce94b000

* Improvement in the initialization of SALRegistrationService
I94a6fdb4612de192c24511445f1236cdce94b000

* Improvement in the initialization of SALRegistrationService
I94a6fdb4612de192c24511445f1236cdce94b000

* Increased logging to debug setting of processorProperties I94a6fdb4612de192c24511445f1236cdce94b000

* Modified logging to debug the setting of processorProperties I94a6fdb4612de192c24511445f1236cdce94b000

* Correction of syntactic error I94a6fdb4612de192c24511445f1236cdce94b000

* Addition of needed configuration properties I94a6fdb4612de192c24511445f1236cdce94b000

* Testing of alternative initialization of SAL registration service I94a6fdb4612de192c24511445f1236cdce94b000

* Testing of alternative initialization of SAL registration service I94a6fdb4612de192c24511445f1236cdce94b000

* Updates on the topic and the payload format used to communicate with SAL for the registration of a device
I94a6fdb4612de192c24511445f1236cdce94b000

* Allow setting and using a custom broker port
I94a6fdb4612de192c24511445f1236cdce94b000

* Pass a default port to the configuration of the Resource discovery server
I94a6fdb4612de192c24511445f1236cdce94b000

* Log debugging information related to the port of the NebulOuS broker
I94a6fdb4612de192c24511445f1236cdce94b000

* Publishing of the appropriate message to the broker
I94a6fdb4612de192c24511445f1236cdce94b000

* RD: Removed truststore settings from application.yml. Upgraded to SB 3.2.4 and fixed pom.xml

* RD: Fixed banner.txt

* RD: Modified application.yml

* RD: Added temp. debug messages

* RD: Added temp. debug messages 2

* Revert "RD: Added temp. debug messages 2"

This reverts commit 738f6048a8b88b4cfc7410db2146c7d7855c03bd.

* Revert "RD: Added temp. debug messages"

This reverts commit 31b103c207dd900689c94fe5b608a0a03db8fc80.

* RD: Modified SALRegistrationService to run SAL registration in dedicated worker thread, and interrupt registration if it takes too long. Added related settings and assigned defaults.

* RD: Added temp. log messages

* Revert "RD: Added temp. log messages"

This reverts commit 2dae6582de0359a4f33b0d8c066b1b55ecad2227.

* RD: Updated DeviceMetricsMonitorService to match metric events to device using first the IP address and the client Id (stored in Device.StatusUpdate)

* Improvements on edge device data propagation
I94a6fdb4612de192c24511445f1236cdce94b000

* Integration of changes performed in commit e3bd3852 but accidentally overriden
I94a6fdb4612de192c24511445f1236cdce94b000

* RD: Updated Dockerfile

* RD: Updated run.sh and added wait_for_mongodb.sh

* RD: Improved wait_for_mongodb.sh script

* Various Improvements
Addition of the port attribute in the registration of an edge device
Modification of the edge device registration to allow for more dynamic registration json field population
I94a6fdb4612de192c24511445f1236cdce94b000

* Attempt to fix a problem when publishing to the broker to register information to SAL or notify the SLO Violation detector
I94a6fdb4612de192c24511445f1236cdce94b000

* Miscellaneous improvements

Updated the registration of architecture/jar files for each edge device registered

Preliminary work to support 'Compromised state'

* RD: Added API Key authentication

* RD: Upgraded SB to 3.2.10, and Lombok, commons-lang3 dependencies to their latest versions. Improved Dockerfile.

* RD: Code improvements (esp. wrt @PreAuthorize annotations)

* RD: Made SALRegistrationService service conditionally enabled (by 'discovery.sal-registration.enabled' property). Its uses were updated accordingly.

* RD: Updated RegistrationRequestService (and its uses) to take authenticated user into consideration during checks of requests and devices sent from GUI. Also added checks for the device data provided.

* RD: Added 'Device.ref' field and added its initialization. Ref field will be populated with a unique device reference following the Nebulous naming convention (including app id).

* RD: Updated GUI pages to include the new 'ref' field. A few more improvements were introduced.

* Use device reference instead of name to register to SAL

* Improvements in device registration and component communication with the broker

* Small improvements in device registration

* Small improvement in getting device registration details

* Small improvement in getting device registration details

* RD: Fix in SALRegistrationService class

* RD: Fixed fontawesome cdn url

* Initial deregistration support

* RD: Made device on-boarding authorization configurable (MANUAL, ALWAYS_AUTHORIZE, and ALWAYS_REJECT)

* RD: Updated RegistrationRequestProcessor to include Device Ref in onboarding request to EMS

* Improvements in the handling of AMQP connections

* Addition of provider field, miscellaneous improvements

- Addition of provider field in device registration
- Small improvements the Synchronous Broker publisher

* Minor logging improvements

* Deregistration process improvement

* Stopping the device lost publisher

* Refactoring to use the original Connector class instead of ExtendedConnector

* Minor logging improvement

* Only try to stop the connector if it has been previously initialized

* Miscellaneous improvements

Implementation of edge device/byon hourly cost (price) field
Only try to stop the connector if it has been previously initialized

* Password improvements

Removal of plaintext passwords and replacement with environmental variable values

* Debugging message commit

* Work on Deregistration support

* Added more logging statements to debug device registration (work by ipatini)

* Fix parsing the json response of SAL

---------

Co-authored-by: ipatini <[email protected]>
Co-authored-by: Andreas Tsagkaropoulos <[email protected]>

* Avoid publish connector stop (#36)

* RD: Added device-view.html for viewing and editing device details. Fixed and improved devices.html. Modified DeviceManagementController so that the '/monitor/device' endpoint returns the devices of the current user, and also plain users can retrieve info for the devices they own.

* RD: Moved 'metrics' section side-by-side to 'device info' section in device-view.html, for better viewing

* RD: changed mongo db name to 'resource_discovery' in application.yml

* RD: Minor GUI improvements

* RD: Added DeviceMonitorService to watch the status updates from EMS. Added DeviceStatusUpdate class used in DeviceMonitorService, and added field statusUpdate in Device class. Restructured and improved ResourceDiscoveryProperties.

* RD: Created AbstractMonitorService (to factor out common topic monitoring code). Renamed DeviceMonitorService to DeviceStatusMonitorService and made it subclass of AbstractMonitorService. Changed DeviceStatusUpdate class to ignore unknown properties during deserialization.

* RD: Added banner

* RD: Added DeviceMetricsMonitorService and DeviceMetrics classes. Updated Device class to store device metrics received from EMS

* RD: Updated application.yml

* RD: Added device metrics display in device-view.html. Added (EMS) device status in devices.html

* RD: Updated device-view.html to display device metrics

* RD: Modified Device in monitoring subsystem to not have its credentials serialized (and returned to browser). Also updated the affected code

* RD: Added check for a request's device IP address being in use (in another request or a registered device)

* RD: various minor code improvements

* RD: Added better error reporting in request-edit.html

* RD: Various small GUI improvements and a fix

* RD: Fixed registration Device in order toString() not to print credentials. Fixed RegistrationRequest in order to have its 'messages' and 'history' fields copied by BeanUtils. Fixed 2 bugs in RegistrationRequestProcessor and added a few more logs.

* RD: Minor change in device-view.html to move 'count-' metrics to the end of the device metrics list

* RD: Changed monitoring Device to not serialize credentials

* RD: Code cleanup in RegistrationRequestProcessor

* RD: Improved GUI (added page shortcuts at top-right)

* RD: Implementing re-onboarding, off-boarding, and request-for-info (device status and metrics) [WIP]

* RD: Added DeviceLifeCycleRequestService and DeviceLifeCycleResponseService classes for handling reinstall and uninstall actions (via EMS broker). Moved LC request event sending from DeviceManagementService to DeviceLifeCycleRequestService. Updated ResourceDiscoveryProperties with settings for DeviceLifeCycleRequest/ResponseService's.

* RD: Added device archiving and unarchiving in GUI

* RD: Implemented DeviceProcessor to periodically archive off-boarded devices. Added configurable immediate archiving of Success registration requests, and off-boarded devices, and added relevant settings in ResourceDiscoveryProperties  and in GUI.

* RD: Changed devices.html to always display 'Archive' button to Admin users

* RD: Added archived-device-view.html, renamed archived-view.html to archived-request-view.html. Updated archived.html

* RD: Fixed DeviceManagementController to allow plain users (device owners) to access their device info (and archived devices), and control re-installing and off-boarding. Added device colouring based on their status.

* RD: Extended DeviceProcessor to check for suspect and failed devices. Added SUSPECT and FAILED statues in DeviceStatus (and in devices.html and archived.html for colouring). Added relevant settings in ResourceDiscoveryProperties. Fixed a few naming errors.

* RD: Added shortcuts (top-right corner) to all detail pages

* RD: Minor change in index.html (grayed out settings image)

* RD: Improved AbstractMonitorService (reuse of single connection, better logs). Updated affected code.

* RD: Minor code (mostly logging) and GUI improvements

* RD: Added 'UnknownDeviceRegistrationService' class to monitor for unknown devices (based on IP address and reference in messages received from EMS), and registering them to RD. Added NODE_DETAILS in REQUEST_TYPE enum for messages sent to/received from EMS about acquiring detailed node info (including credentials). Added 'deviceInfoRequestsTopic' and 'deviceInfoReportsTopic' settings in ResourceDiscoveryProperties.

* RD: Added prompting admin to provide device credentials when un-archiving a previously archived request or device.

* RD: Moved REQUEST_TYPE enum to 'common' package and updated code

* RD: Changed authentication to use BCrypt-encrypted passwords

* RD: Moved message broker communication code to BrokerUtil class, and updated using classes accordingly. Implemented EncryptionUtil for encrypting and decrypting broker messages [TO BE TESTED]. Few minor code improvements.

* RD: Minor code tidy up

* RD: Added support for SSL connections to ActiveMQ broker in BrokerUtil. Added the needed settings in ResourceDiscoveryProperties and application.yml

* RD: Fixed issue where UnknownDeviceRegistrationService registers a device before RegistrationRequestProcessor does

* RD: Modified pom.xml to build an image named 'eu.nebulous.resource-discovery' and tagged with current project version

* RD: Added 'DeviceLocation' class and 'location' field in both 'Device' classes. Also updated all 4 details pages to include Location (name, lat, lon). Fixed the Restore button of the modal dialog in archived.html to display 'Restore Request' or 'Restore Device' depending on the restore type.

* RD: Added StatusController to report current application status (currently returns 'OK')

* RD: Fixed a few minor issues:
* Fixed 'spring.web.resources.static-locations'
* Changed Docker image name to 'resource-discovery'
* Set BPE_LANG value to C.UTF-8 in order to render banner correctly

* RD: Changes in pom.xml and application.yml:
* Changed groupId in pom.xml to 'eu.nebulous.resource-management', and artifactId to 'resource-discovery'
* Corrected service name and description
* Set 'imageName' property to derive from artifactId
* Fixed application.yml to use '@project.version@' placeholder for app version

* RD: Renamed 'management' module to 'resource-discovery'

* RD:
* Commented out Buildpacks related settings in pom.xml
* Added Dockerfile, run.sh (entrypoint script) and .dockerignore

* RD: Modified base images in Dockerfile

* RD: Modified Dockerfile in order to both compile the app and build the Docker image

* RD: Improved Dockerfile

* RD: Improved Dockerfile

* RD: Upgraded SB version to SB 3.2.1 and JRE to version 21. Updated dependency to their latest versions. Modified model classes to avoid Lombok SuperBuilder warnings.

* RD: Fixed Dockerfile

* Initial changes to support registration and deregistration of edge devices to SAL

Introduction of Broker publisher and subscriber utilities
Introduction of new device registration service

I94a6fdb4612de192c24511445f1236cdce94b000

* EMS: Added K8sNetdataCollector [WIP]

* RD: Added 'port' in forms and models

* RD: Added two TODOs

* RD: Deactivated UnknownDeviceRegistrationService

* Initial changes to support registration and deregistration of edge devices to SAL

Introduction of Broker publisher and subscriber utilities
Introduction of new device registration service

I94a6fdb4612de192c24511445f1236cdce94b000

* Improvement in the initialization of SALRegistrationService
I94a6fdb4612de192c24511445f1236cdce94b000

* Improvement in the initialization of SALRegistrationService
I94a6fdb4612de192c24511445f1236cdce94b000

* Increased logging to debug setting of processorProperties I94a6fdb4612de192c24511445f1236cdce94b000

* Modified logging to debug the setting of processorProperties I94a6fdb4612de192c24511445f1236cdce94b000

* Correction of syntactic error I94a6fdb4612de192c24511445f1236cdce94b000

* Addition of needed configuration properties I94a6fdb4612de192c24511445f1236cdce94b000

* Testing of alternative initialization of SAL registration service I94a6fdb4612de192c24511445f1236cdce94b000

* Testing of alternative initialization of SAL registration service I94a6fdb4612de192c24511445f1236cdce94b000

* Updates on the topic and the payload format used to communicate with SAL for the registration of a device
I94a6fdb4612de192c24511445f1236cdce94b000

* Allow setting and using a custom broker port
I94a6fdb4612de192c24511445f1236cdce94b000

* Pass a default port to the configuration of the Resource discovery server
I94a6fdb4612de192c24511445f1236cdce94b000

* Log debugging information related to the port of the NebulOuS broker
I94a6fdb4612de192c24511445f1236cdce94b000

* Publishing of the appropriate message to the broker
I94a6fdb4612de192c24511445f1236cdce94b000

* RD: Removed truststore settings from application.yml. Upgraded to SB 3.2.4 and fixed pom.xml

* RD: Fixed banner.txt

* RD: Modified application.yml

* RD: Added temp. debug messages

* RD: Added temp. debug messages 2

* Revert "RD: Added temp. debug messages 2"

This reverts commit 738f6048a8b88b4cfc7410db2146c7d7855c03bd.

* Revert "RD: Added temp. debug messages"

This reverts commit 31b103c207dd900689c94fe5b608a0a03db8fc80.

* RD: Modified SALRegistrationService to run SAL registration in dedicated worker thread, and interrupt registration if it takes too long. Added related settings and assigned defaults.

* RD: Added temp. log messages

* Revert "RD: Added temp. log messages"

This reverts commit 2dae6582de0359a4f33b0d8c066b1b55ecad2227.

* RD: Updated DeviceMetricsMonitorService to match metric events to device using first the IP address and the client Id (stored in Device.StatusUpdate)

* Improvements on edge device data propagation
I94a6fdb4612de192c24511445f1236cdce94b000

* Integration of changes performed in commit e3bd3852 but accidentally overriden
I94a6fdb4612de192c24511445f1236cdce94b000

* RD: Updated Dockerfile

* RD: Updated run.sh and added wait_for_mongodb.sh

* RD: Improved wait_for_mongodb.sh script

* Various Improvements
Addition of the port attribute in the registration of an edge device
Modification of the edge device registration to allow for more dynamic registration json field population
I94a6fdb4612de192c24511445f1236cdce94b000

* Attempt to fix a problem when publishing to the broker to register information to SAL or notify the SLO Violation detector
I94a6fdb4612de192c24511445f1236cdce94b000

* Miscellaneous improvements

Updated the registration of architecture/jar files for each edge device registered

Preliminary work to support 'Compromised state'

* RD: Added API Key authentication

* RD: Upgraded SB to 3.2.10, and Lombok, commons-lang3 dependencies to their latest versions. Improved Dockerfile.

* RD: Code improvements (esp. wrt @PreAuthorize annotations)

* RD: Made SALRegistrationService service conditionally enabled (by 'discovery.sal-registration.enabled' property). Its uses were updated accordingly.

* RD: Updated RegistrationRequestService (and its uses) to take authenticated user into consideration during checks of requests and devices sent from GUI. Also added checks for the device data provided.

* RD: Added 'Device.ref' field and added its initialization. Ref field will be populated with a unique device reference following the Nebulous naming convention (including app id).

* RD: Updated GUI pages to include the new 'ref' field. A few more improvements were introduced.

* Use device reference instead of name to register to SAL

* Improvements in device registration and component communication with the broker

* Small improvements in devic…
  • Loading branch information
5 people authored Dec 5, 2024
1 parent b3eec9e commit 8bdfd81
Show file tree
Hide file tree
Showing 4 changed files with 284 additions and 39 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package eu.nebulous.resource.discovery;

import eu.nebulous.resource.discovery.registration.controller.RegistrationRequestController;
import jakarta.servlet.Filter;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
Expand All @@ -15,6 +16,7 @@
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.User;
Expand All @@ -26,6 +28,7 @@

import java.security.SecureRandom;
import java.util.Collections;
import java.util.HashMap;

import static org.springframework.security.config.Customizer.withDefaults;

Expand All @@ -37,6 +40,8 @@
public class SecurityConfig {
private final static String USERNAME_REQUEST_HEADER = "X-SSO-USER";
private final static String USERNAME_REQUEST_PARAM = "ssoUser";
private final static String NONCE_REQUEST_PARAM = "nonce";
private final static String APPID_REQUEST_PARAM = "appId";
private final static String API_KEY_REQUEST_HEADER = "X-API-KEY";
private final static String API_KEY_REQUEST_PARAM = "apiKey";

Expand All @@ -54,6 +59,7 @@ public SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity) throws
"/discovery/**", "/*.html").authenticated())
.authorizeHttpRequests(authorize -> authorize.anyRequest().permitAll())
.addFilterAfter(apiKeyAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class)
.addFilterAfter(nonceAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class)
.csrf(AbstractHttpConfigurer::disable)
.sessionManagement(sm -> sm.sessionCreationPolicy(SessionCreationPolicy.ALWAYS));

Expand Down Expand Up @@ -100,6 +106,13 @@ public boolean matches(CharSequence rawPassword, String encodedPassword) {

public Filter apiKeyAuthenticationFilter() {
return (servletRequest, servletResponse, filterChain) -> {

Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if (auth!=null && auth.isAuthenticated()) {
filterChain.doFilter(servletRequest, servletResponse);
return;
}

if (properties.isApiKeyAuthenticationEnabled() && StringUtils.isNotBlank(properties.getApiKeyValue())) {
if (servletRequest instanceof HttpServletRequest request && servletResponse instanceof HttpServletResponse) {

Expand Down Expand Up @@ -149,4 +162,65 @@ public Filter apiKeyAuthenticationFilter() {
filterChain.doFilter(servletRequest, servletResponse);
};
}

public Filter nonceAuthenticationFilter(){
return (servletRequest, servletResponse, filterChain) -> {
try {
HttpServletRequest request = ((HttpServletRequest )servletRequest);
// HttpSession session = request.getSession(false);
//
// if(session!=null){
// filterChain.doFilter(servletRequest, servletResponse);
// return;
// }
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if (auth!=null && auth.isAuthenticated()) {
filterChain.doFilter(servletRequest, servletResponse);
return;
}
StringBuilder requestURL = new StringBuilder(request.getRequestURL().toString());
String queryString = request.getQueryString();

if (queryString == null) {
log.warn( requestURL.toString());
} else {
log.warn(requestURL.append('?').append(queryString).toString());
}
log.warn(servletRequest.toString());

String nonce = servletRequest.getParameter(NONCE_REQUEST_PARAM);
String appId = servletRequest.getParameter(APPID_REQUEST_PARAM);

String username =null;
HashMap<String, String> map = new HashMap<>();
map.put(NONCE_REQUEST_PARAM, nonce);
map.put(APPID_REQUEST_PARAM, appId);
username = RegistrationRequestController.getNonceUsername(map);
// if ((nonce != null && appId != null) && (!nonce.isEmpty())) {
// HashMap<String, String> map = new HashMap<>();
// map.put(NONCE_REQUEST_PARAM, nonce);
// map.put(APPID_REQUEST_PARAM, appId);
// username = RegistrationRequestController.getNonceUsername(map);
// }

if (username != null) {
UsernamePasswordAuthenticationToken authentication =
new UsernamePasswordAuthenticationToken(username, nonce,
Collections.singletonList(new SimpleGrantedAuthority(SSO_USER_ROLE)));
// store completed authentication in security context
SecurityContextHolder.getContext().setAuthentication(authentication);
log.debug("User was authenticated using a nonce token");
}

} catch (Exception e) {
log.error("nonceAuthenticationFilter: EXCEPTION: ", e);
}

// continue down the chain
filterChain.doFilter(servletRequest, servletResponse);

};
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import eu.nebulouscloud.exn.settings.StaticExnConfig;
import lombok.extern.slf4j.Slf4j;
import org.apache.qpid.protonj2.client.Message;
import org.apache.qpid.protonj2.client.exceptions.ClientException;
import org.json.simple.JSONValue;

import java.util.*;
Expand All @@ -15,11 +16,13 @@

import static eu.nebulous.resource.discovery.broker_communication.BrokerPublisher.EMPTY;


@Slf4j
public class BrokerSubscriber {

private AtomicBoolean stop_signal = new AtomicBoolean();

private Connector connector;
private final AtomicBoolean stop_signal = new AtomicBoolean(false);

private class MessageProcessingHandler extends Handler {
private BrokerSubscriptionDetails broker_details;
private static final BiFunction temporary_function = (Object o, Object o2) -> {
Expand All @@ -31,8 +34,18 @@ private class MessageProcessingHandler extends Handler {

@Override
public void onMessage(String key, String address, Map body, Message message, Context context) {
log.info("Handling message for address " + address);
processing_function.apply(broker_details, JSONValue.toJSONString(body));
log.warn("Handling message for address " + address);
String precise_topic;
try {
precise_topic = message.to();
} catch (ClientException e) {
throw new RuntimeException(e);
}
if (precise_topic!=null){
broker_details.setTopic(precise_topic);
}

processing_function.apply(new BrokerSubscriptionDetails(broker_ip,broker_port,brokerUsername,brokerPassword,application_name,precise_topic), JSONValue.toJSONString(body));
}

public MessageProcessingHandler(BrokerSubscriptionDetails broker_details) {
Expand All @@ -56,10 +69,11 @@ public void setProcessing_function(BiFunction processing_function) {

private static HashMap<String, HashSet<String>> broker_and_topics_to_subscribe_to = new HashMap<>();
private static HashMap<String, HashMap<String, Consumer>> active_consumers_per_topic_per_broker_ip = new HashMap<>();
private static HashMap<String, Connector> current_connectors = new HashMap<>();
private static final HashMap<String, CustomConnectorHandler> current_connector_handlers = new HashMap<>();
ArrayList<Consumer> consumers = new ArrayList<>();
private String topic;
private String broker_ip;
private String application_name;
private int broker_port;
private String brokerUsername;
private String brokerPassword;
Expand Down Expand Up @@ -101,32 +115,77 @@ public BrokerSubscriber(String topic, String broker_ip, int broker_port, String
}
}
if (subscriber_configuration_changed) {
Consumer current_consumer;
if (application_name != null && !application_name.equals(EMPTY)) { //Create a consumer for one application
log.info("APP level subscriber " + topic);
current_consumer = new Consumer(topic, topic, new MessageProcessingHandler(broker_details), application_name, true, true);
} else { //Allow the consumer to get information from any publisher
current_consumer = new Consumer(topic, topic, new MessageProcessingHandler(broker_details), true, true);
log.info("HIGH level subscriber " + topic);
}
active_consumers_per_topic_per_broker_ip.get(broker_ip).put(topic, current_consumer);

this.application_name = application_name;
this.topic = topic;
this.broker_ip = broker_ip;
this.broker_port = broker_port;
this.brokerUsername = brokerUsername;
this.brokerPassword = brokerPassword;
add_topic_consumer_to_broker_connector(current_consumer);

}
}


public void stop(){
synchronized (stop_signal) {
stop_signal.set(true);
}
}

/**
* This method updates the global connector of Resource manager to the AMQP server, by adding support for one more component
*/
private void add_topic_consumer_to_broker_connector(Consumer new_consumer) {
if (current_connectors.get(broker_ip) != null) {
//current_connectors.get(broker_ip).stop(consumers,new ArrayList<>());
current_connectors.get(broker_ip).stop();
/* Consumer current_consumer;
if (application_name != null && !application_name.equals(EMPTY)) { //Create a consumer for one application
Logger.getAnonymousLogger().log(INFO,"APP level subscriber " + topic);
current_consumer = new Consumer(topic, topic, new MessageProcessingHandler(broker_details), application_name, true, true);
} else { //Allow the consumer to get information from any publisher
current_consumer = new Consumer(topic, topic, new MessageProcessingHandler(broker_details), true, true);
Logger.getAnonymousLogger().log(INFO,"HIGH level subscriber " + topic);
}
current_consumer.setProperty("topic",topic);*/

active_consumers_per_topic_per_broker_ip.get(broker_ip).put(topic, new_consumer);

CustomConnectorHandler current_connector_handler = current_connector_handlers.get(broker_ip);
if (current_connector_handler==null){
current_connector_handler = new CustomConnectorHandler() {};
this.connector = new Connector("slo_violation_detector_consumer",
current_connector_handler,
List.of(),
List.of(new_consumer),
false,
false,
new StaticExnConfig(
broker_ip,
broker_port,
brokerUsername,
brokerPassword,
60,
EMPTY
)
);
connector.start();
}else if (!active_consumers_per_topic_per_broker_ip.get(broker_ip).containsKey(topic)){
//current_connector_handler.remove_consumer_with_key(topic);

synchronized (current_connector_handler.getReady()) {
while (!current_connector_handler.getReady().get()) {
try {
current_connector_handler.getReady().wait();
log.info("Unable to register connector handler as the connector is unexpectedly not ready");
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
log.warn("Adding new consumer " + new_consumer.key());
current_connector_handler.add_consumer(new_consumer);
}
/*if (current_connectors.get(broker_ip) != null) {
current_connectors.get(broker_ip).stop(consumers,new ArrayList<>());
}
if (consumers.isEmpty()){
consumers = new ArrayList<>();
Expand All @@ -140,7 +199,7 @@ private void add_topic_consumer_to_broker_connector(Consumer new_consumer) {
if(!do_not_add_new_consumer) {
consumers.add(new_consumer);
}
Connector connector = new Connector("resource_manager",
Connector extended_connector = new Connector("resource_manager",
new CustomConnectorHandler() {
},
List.of(),
Expand All @@ -156,21 +215,13 @@ private void add_topic_consumer_to_broker_connector(Consumer new_consumer) {
EMPTY
)
);
connector.start();
current_connectors.put(broker_ip, connector);
}

private void remove_topic_from_broker_connector(String topic_key) {
if (current_connectors.get(broker_ip) != null) {
//current_connectors.get(broker_ip).remove_consumer_with_key(topic_key);
}
extended_connector.start();
current_connectors.put(broker_ip, extended_connector);*/
}


public int subscribe (BiFunction function, String application_name) {
return subscribe(function,application_name,stop_signal);
}

public int subscribe(BiFunction function, String application_name, AtomicBoolean stop_signal) {

int exit_status = -1;
log.info("ESTABLISHING SUBSCRIPTION for " + topic);
/*
Expand All @@ -181,7 +232,8 @@ public int subscribe(BiFunction function, String application_name, AtomicBoolean
} else {
active_consumers_per_topic_per_broker_ip.put(broker_ip, new HashMap<>());
}
*/
*/
//Then add the new consumer
Consumer new_consumer;
if (application_name != null && !application_name.equals(EMPTY)) {
Expand All @@ -191,7 +243,13 @@ public int subscribe(BiFunction function, String application_name, AtomicBoolean
new_consumer = new Consumer(topic, topic, new MessageProcessingHandler(function, broker_details), true, true);
}
new_consumer.setProperty("topic", topic);
active_consumers_per_topic_per_broker_ip.get(broker_ip).put(topic, new_consumer);

if (active_consumers_per_topic_per_broker_ip.containsKey(broker_ip)){
active_consumers_per_topic_per_broker_ip.get(broker_ip).put(topic, new_consumer);
}else {
active_consumers_per_topic_per_broker_ip.put(broker_ip, new HashMap<>());
}

add_topic_consumer_to_broker_connector(new_consumer);

log.info("ESTABLISHED SUBSCRIPTION to topic " + topic);
Expand All @@ -209,8 +267,9 @@ public int subscribe(BiFunction function, String application_name, AtomicBoolean
}
active_consumers_per_topic_per_broker_ip.get(broker_ip).remove(topic);
//remove_topic_from_broker_connector(topic);
current_connectors.get(broker_ip).stop();
//current_connectors.get(broker_ip).stop();
exit_status = 0;
return exit_status;
}

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package eu.nebulous.resource.discovery.broker_communication;

import eu.nebulouscloud.exn.core.Consumer;
import eu.nebulouscloud.exn.core.Context;
import eu.nebulouscloud.exn.handlers.ConnectorHandler;

Expand All @@ -20,6 +21,10 @@ public void onReady(Context context) {
public void remove_consumer_with_key(String key){
context.unregisterConsumer(key);
}

public void add_consumer(Consumer consumer){
context.registerConsumer(consumer);
}

public Context getContext() {
return context;
Expand Down
Loading

0 comments on commit 8bdfd81

Please sign in to comment.