Version 1.3.X - Curious Penguin¶
Version 1.3.1¶
Release date : November 2024
Features enhancing¶
#1359: The OPC UA modules now accept
nsu
notation. You can declare anodeId
ofowner.opc-ua
oroutput.opc-ua
as follow (raw string or json object)“nodeId”: “nsu=http://microsoft.com/Opc/OpcPlc/;s=AlternatingBoolean”
“nodeId”: “ns=3;s=AlternatingBoolean”
“nodeId”:
{ "ns"=3, "s"="AlternatingBoolean" }
“nodeId”:
{ "nsu"="http://microsoft.com/Opc/OpcPlc/", "s"="AlternatingBoolean" }
Bug fix¶
#1377: Alarm/Collection table settings (filters and views) were not reset to default value correctly when using along side url history paramters.
#1361: Keycloak group aggregator was not handling properly the
attributes
andsubGroups
.#1364: Collection table create operation not working properly when using url history on the table.
#1365: Script were not executed properly if a
RegExp
was used. The error wasNo language for id regex found. Supported languages are: [js]
.#1367: The validation of override menu file was invalid with IO error
.. `Cannot construct instance of `ch.swissdotnet.osp.runner.configuration.ConfigurationFile` ...
#1370: SNMP Get of the same OID on multiple values was not possible for one target. One of the value was staying
Uninitialized
.#1372: Avoid creating multiple value websocket by front-end.
#1369: Some issues could occur when attempting to pull an object from an array within a collection.
Issues were linked to the declared order of the fields not matching between the element stored in the database and the object used for the pull update request. Changes were made to assure that upon inserting or updating a collection, data is ordered to guarantee that the order is always the same.
Additionally, we recommended you to add an unique id to each object, allowing to pull the content only based on this unique id and not the full object. Please check Updates for more detail about this.
#1368: Retrieve user
AlarmTable
andAlarmHistoryTable
last filter and view whenuserPreference
is set toLOCAL_STORAGE
.#1368: Toolbar for
CollectionTable
when in form view might disappear.#1368: Avoid
CollectionTable
not responding when clearing schema, filter or view.#1368: Properly store user preferences for tables (
AlarmTable
,AlarmHistoryTable
,CollectionTable
). For each schema and view, whenuserPreference
is set toLOCAL_STORAGE
, the system uses stored preferences.#1368: Align journal side panel text on the left rather than centered.
#1368: Use Swiss French and German locales by default for date formatting.
Language was not set properly on Firefox which prevent the loading of the front-end.
Security fix¶
Update Graalvm to 23.0.1.
Update docker-compose to 2.29.7.
Update msal4j to 1.17.2.
Update jetty to 11.0.24.
Version 1.3.0¶
Release date : October 2024
Note
Operating systems and container engines dependencies have been updated. See System for more information.
New OS supported: Ubuntu 24.04 Noble
New Docker engine supported: 26.0.1 or 27.0.3
Ubuntu 20.04 Focal not supported anymore.
Docker engine 20.10, 23.0 not supported anymore.
Upgrading warnings¶
Warning
The fact that we are now checking the types of values upon creation may cause errors in existing configurations.
Why was it working before? It was because some value types were previously ignored and automatically converted to the correct type.
With the new change, you will need to reconfigure some value.ospp
with the correct type.
To find the values that have a problem you can either:
Load an ObjectBrowser with all your values and check the error message
Type of the value and the content are not compatible.
.Check the module logs containing the module error message
The value [itemId] was created with an incompatible content [content] and type [type]
.
Performance update¶
Version 1.3.0 marks a significant milestone in automated performance analytics, setting the stage for automatic monitoring and analysis of performances in future releases. This new development tool introduces several performance updates that are available immediately. However, it’s important to note that performance monitoring is yet fully automated within the Software Development Life Cycle (SDLC).
New update method for module¶
Significant reduction in downtime when the integrator pushes a new configuration. The module lifecycle has been modified to allow a module to be started with a new configuration before the oldest one is stopped. This significantly reduces downtime and jitter for each new version of the configuration. The integrator can now configure the module update process.
List of supported modules availables in modules capabilities.
Enforcing starting order of modules¶
Since Docker Swarm doesn’t accommodate depends_on
tags, OnSphere now incorporates the wait-for-it script for all modules. This adjustment is aimed at enhancing the startup sequence, optimizing CPU usage and times, particularly during full stack restarts or initial deployment phases.
See startup order for details.
Multi-threading of configuration dispatcher parsing¶
Previously the osp-configuration-dispatcher was mono-threading for the first validation step, this is not the case anymore.
See dispatcher-threads-file-hierarchy for configuration.
Avoiding costly GIT commands¶
When a new configuration is pushed, an automatic merge process, involving many Git commands, used to be triggered. These commands can be slow on large repositories. The new version skips these commands if no local changes are detected.
Minor changes¶
Use optimized flags for keycloak see official documentation for details
#1358: Script logs whenever a backpressure occurs for further analysis.
Improving the docker image size¶
Major reduction of
osp-keycloak
size by removing not used lib (freeipa-client) (-280mo)Major reduction of
osp-configuration-dispatcher
size by improving external library usage (-330mo)Major reduction of
osp-scripts
size (-200 mo)
New features¶
New form component filter builder - #1332¶
Two new form components were added allowing building a filter for either alarm or collection values.
More information on the form components documentation.
New dashboard search settings and dashboard folders - #1314¶
Dashboard can now be part of one or more folders. Folders are simply represented by their path and allow grouping dashboard together. With folders, new settings were added to the dashboard search bar.
You can now choose to display the results of the search with either:
Show dashboards grouped by folders, allowing navigating into a folder
Show dashboards grouped by tags, allowing navigating into a tag
Show dashboards on their own (previous behavior), with no grouping at all
Look for more information regarding dashboard search settings in the dashboard documentation page.
New collection owners parameters to control return content - #1336¶
New parameters for collection owners add new functionalities:
watchList
: Define a list of properties to watch when a change occurs. Only if at least one of the updated fields matches an element of this list, update the value. If the list is empty, the value will always be updated.scope
: Define the scope of the result content. Either return the full entry of the collection, only the changes or both at the same time.targetProperty
: Define a specific path using JsonPath to retrieve only a portion of the element.
More information on the collection features documentation.
Reports request collections data with historic - #1307¶
New report template method allows retrieving collection entries with their full historic added to them.
More information on the reports collections methods documentation.
Collection table with multiple collection sources - #1271¶
By default, a collection table displays the content of only one collection, but now you can change this behavior. Using the multiple
setting, the table will allow you to select more than one collection and merged their content together.
When so, you will be able to edit as well any element of the table, with a form that is chosen based on the collection the element is from. Creating a new element will also let you choose the form you want, allowing you to choose in which collection the new element is inserted.
When more than one collection is selected, the only available views and filters are limited to the ones that share an id in common.
Look at collection table for further details on how do set the table settings.
Table Collection column filters can depend on other column filter values - #1274¶
Table columns using render type COLLECTION
now have an option dependsOn
which allow filtering the result of the query with another column filter value. This new option is meant to be used with the schemaId
option that allows making a query to a collection in order to populate the filter options with the query result.
Dependencies are represented by two properties:
column
: name of the other column from which we take the filter value.field
: name of the field of the collection we query (collection specified with theschemaId
option)
Once a dependency declared, a match operation is added to the collection query as such: filter values where field == column.filter. As an example, with two collections location
and subLocation
and two columns with queries on each of these collections, adding dependence to location
for the subLocation
column in order to have the filter options for the subLocation
column being filtered by the value of the location
column filter.
Browser history can track some widgets changes - #1217¶
Some changes on a few front-end widgets will now push a new entry into the browser historic. This was added to improve the navigation of the front-end. As an example, you can now select a filter form an alarm table, change it and go back with the browser to retrieve the previous filter automatically.
This behavior is available for :
AlarmTable: filter, view and search
AlarmHistoryTable: filter, view and search
CollectionTable: schema, filter, view, search, display type and current selected entry id
Schematic: page
This is enabled by default on any widget of one of these types but can be disabled if necessary in the widget settings.
This work in tandem with the next described feature.
Set widgets state by passing parameters in the url - #1217¶
You can a widget state by passing parameters in the url. The matching widget will use these parameters to set his state. These url parameters must be formatted like <widgetId>.<property>=<value>
. Be careful with the names of your widgets and the values as it could break the overall url. Symbols like ?
, #
, &
, =
or .
among others must be avoided in order to guarantee this functionality correct behavior.
As an example, the url https://<onsphere-host>/home/root#D2H2STZ3.filter=root.alarms.filters.all
will set the current filter of the widget D2H2STZ3
with the filter Id root.alarms.filters.all
.
This behavior is available for :
AlarmTable: filters, views and search
AlarmHistoryTable: filters, views and search
CollectionTable: schema, filters, views, search, display type and current selected entry id
Schematic: page
This work in tandem with the previous described feature.
Collection table expand row shows detailed view - #1100¶
You can now define the row detail view component in a schema view, allowing to have an expanded row with more information about the expanded entry.
You can set tableRowDetail
to either display:
detail
: shows every property and their values.journal
: shows the journal entries if present in the schema and view
This property can also be set for alarm views, letting you display the alarm journal in the expanded row of an alarm. For it to work for either alarms or collections, you need a column with the render type JOURNAL
in the view.
Get started with this feature by following this example.
Beta features¶
Warning
Features currently under evaluation may be modified in the next version without prior notice. If you are using these beta features, we welcome your feedback and experience. Your input is crucial to refining and improving these features before their official release. Please share your thoughts and experiences with us, and contribute to the evaluation process.
Configuration Validation¶
The osp-configuration-validation tool is a new integration designed to enable users to validate their configurations without applying them. This functionality ensures that configurations are thoroughly verified prior to deployment, reducing potential errors during implementation.
Full Configuration Validation: The tool runs a comprehensive validation aggregation process, checking the integrity and correctness of the configuration without requiring it to be applied.
Seamless Integration: The validation tool is fully integrated into the Composer manual, allowing users to execute validation directly within their existing workflow.
Bug fix¶
#1282: The values are now type checked before being created.
Warning
The fact that we are now checking the types of values upon creation may cause errors in existing configurations.
Why was it working before? It was because some value types were previously ignored and automatically converted to the correct type.
With the new change, you will need to reconfigure some
value.ospp
with the correct type.To find the values that have a problem you can either:
Load an ObjectBrowser with all your values and check the error message
Type of the value and the content are not compatible.
.Check the module logs containing the module error message
The value [itemId] was created with an incompatible content [content] and type [type]
.
#1330: Alarms were not deleted properly under rare conditions.
#1356: BACNet was not supporting Multi State Input and Output properly.
Security fix¶
Update commons-io to 2.17.0 to fix GHSA-78wr-2p64-hpwj.
Configuration changes¶
#1310: Output now requires an output.onvif file. Doors and cameras can’t be directly configured from a callback to respect basics Onsphere concepts.
External modules update¶
MongoDb was upgraded to the version 6.
Keycloak was upgraded to 25.0.6