Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[config] Implementation of new configuration management #1505

Merged
merged 120 commits into from
Jun 11, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
120 commits
Select commit Hold shift + click to select a range
382d9ef
First working implementation for config management.
Peguen Feb 20, 2024
0e9c039
Merge branch 'master' into feature/user_config_implementation
Peguen Feb 20, 2024
49e8ade
Resolved some merging problems.
Peguen Feb 21, 2024
70366d5
Fixed copy paste issue values for receivingOptions in ecal_config_ini…
Peguen Feb 21, 2024
00b2ec1
Config Adaptions: Set LimitSize default paramaeter to template MIN va…
Peguen Feb 21, 2024
eb31c72
Refactored options and config access.
Peguen Mar 27, 2024
548037f
Changed defines to constexpr in ecal_dev_ini.h
Peguen Mar 27, 2024
5b07971
Removed doubled constexpr.
Peguen Mar 27, 2024
9cd3594
Removed former ecal_config cpp and h from core/CMakesLists
Peguen Mar 28, 2024
9e1be9a
Removed ms_t from registration_options and handling in using functions.
Peguen Mar 28, 2024
c5ab1dc
Fixed ecal_registration cpp time config import.
Peguen Mar 28, 2024
05ec616
Refactored config options in application.
Peguen Mar 28, 2024
a861b01
Added process_options.terminal_emulator to config.
Peguen Mar 28, 2024
e35df5a
Refactored sys- and processoptions as sub to application options.
Peguen Mar 28, 2024
4a0ce13
Refactored default config to use ecal_def.h defines.
Peguen Mar 28, 2024
153ee9e
Refactored ini config to use ecal_def.h
Peguen Mar 28, 2024
94f91ae
Moved IpAddressV4 definitions to private space.
Peguen Mar 28, 2024
b196ab4
Removed unused fields.
Peguen Mar 28, 2024
afe2332
Fixed some GH actions compiling issues.
Peguen Mar 28, 2024
4887b02
Removed unnecessary comments in header files.
Peguen Mar 28, 2024
c768ba9
Changed #include <limits> to correct header.
Peguen Apr 2, 2024
6306d99
Merge branch 'master' into feature/user_config_implementation
Peguen Apr 2, 2024
b4690a0
Some updates regarding new configuration management to ecal_core.
Peguen Apr 2, 2024
4694927
Updated submodules
Peguen Apr 3, 2024
388f5bc
Checked out versions of thirdparty modules equal to master branch.
Peguen Apr 3, 2024
9303795
Implemented termination, when wrong values are assigned to custom dat…
Peguen Apr 3, 2024
848c572
Changed g_ecal_config() return value (PathWarning)
Peguen Apr 3, 2024
2370814
Added basic configuration tests.
Peguen Apr 3, 2024
e20d510
Added ECAL_API macro for config calls.
Peguen Apr 3, 2024
7cafa3e
Added operator overloading of == for LimitSize(LS), LS == int, LS == …
Peguen Apr 4, 2024
a6936d1
Fixed warnings because of implicit types conversions by implementing …
Peguen Apr 4, 2024
ca428d1
Created deathtests and more type tests for configuration tests.
Peguen Apr 4, 2024
5a5fe2c
Merge branch 'master' into feature/user_config_implementation
Peguen Apr 4, 2024
0370d47
Removed GetDefaultConfig().
Peguen Apr 4, 2024
ae7e608
Setting new_initialization to true in ecal_globals when ecal_config g…
Peguen Apr 5, 2024
6530bec
Removed const from custom_data_types as recommended.
Peguen Apr 5, 2024
3f95473
Review 1: Moved GetCurrentConfig to config.h.
Peguen Apr 8, 2024
a435621
Changed defines to constexpr in ecal_dev_ini.h
Peguen Mar 27, 2024
832c811
Changed defines to constexpr in ecal_def, ecal_def_ini + added uint a…
Peguen Apr 8, 2024
673a4b0
Merge remote-tracking branch 'origin/master' into feature/defines_to_…
Peguen Apr 8, 2024
ca14568
Merge branch 'feature/defines_to_constexpr' into feature/user_config_…
Peguen Apr 8, 2024
e05f398
Removed ecal_internal_options.h.
Peguen Apr 8, 2024
a8da1ce
Introduced logging options.
Peguen Apr 8, 2024
2dc3cbc
Renamed ProcessOptions to StartupOptions.
Peguen Apr 8, 2024
b2af134
Renamed ProcessOptions to StartupOptions in application_options.h.
Peguen Apr 9, 2024
71cc7e5
Adapted IpAddressV4 to exclude some addresses. Added test cases.
Peguen Apr 9, 2024
3c7b05d
Reverted changes to ecal.cpp and ecal_globals.cpp.
Peguen Apr 9, 2024
3db1f9d
ecal_config as reference, not pointer.
Peguen Apr 9, 2024
f3bbc96
Review 1: Config not as ptr. Optimized handling. Clangtidy happiness.
Peguen Apr 10, 2024
c19c4ff
Merge remote-tracking branch 'origin/master' into feature/user_config…
Peguen Apr 11, 2024
e0a1656
Changed constexpr in ecal_config_initializer.cpp
Peguen Apr 11, 2024
063b484
Added some clang tidy improvements (e.g. usage of const)
Peguen Apr 11, 2024
ceb4419
Added operator int() to LimitSize.
Peguen Apr 11, 2024
3a811a4
Added operator std::string() to IpV4Address.
Peguen Apr 11, 2024
4893564
Added default constructors to custom types classes.
Peguen Apr 11, 2024
32dfc18
... also for Limitsize.
Peguen Apr 11, 2024
9395da5
Added config example.
Peguen Apr 11, 2024
482ae05
CGlobals initializing in global space.
Peguen Apr 11, 2024
284f873
Adapted config sample.
Peguen Apr 11, 2024
a18e9de
config_test.cpp const happiness for clangtidy.
Peguen Apr 11, 2024
8da505e
Added timesync_module_replay to config and removed eCALPar from timeg…
Peguen Apr 12, 2024
2e8b9d4
Made github-actions bot a bit happier.
Peguen Apr 12, 2024
e7a9642
IpAddressV4 operator= improvement.
Peguen Apr 15, 2024
ddbbc99
Removed some PG TODOS.
Peguen Apr 15, 2024
10a3835
Started with documentation adaptions for config.
Peguen Apr 16, 2024
d19e55e
Updated docu for config with types.
Peguen Apr 17, 2024
733d4c6
TODO comment.
Peguen Apr 17, 2024
a7072fc
Small update to config doc.
Peguen Apr 17, 2024
c946cc6
Small update to config example.
Peguen Apr 17, 2024
19512cf
Small update to config example._2
Peguen Apr 17, 2024
8df8937
Renamed LimitSize to ConstrainedInteger.
Peguen Apr 17, 2024
4e049db
Changed behaviour of custom types: throwing invalid_argument exceptio…
Peguen Apr 18, 2024
0667980
Merge remote-tracking branch 'origin/master' into feature/user_config…
Peguen Apr 18, 2024
0511bed
Reverted Config Getters to previous integration.
Peguen Apr 18, 2024
da0a991
Added user_args to config file.
Peguen Apr 24, 2024
543949e
Refactored ecal Initialize with the config handling.
Peguen Apr 26, 2024
eb1a4ee
Throw exception for ecal registration options.
Peguen Apr 26, 2024
a362f26
Refactored ecal_registration_options.
Peguen Apr 26, 2024
521d70b
Merge remote-tracking branch 'origin/master' into feature/user_config…
Peguen Apr 26, 2024
ba0a6c1
cmd parser: path sep renaming.
Peguen Apr 26, 2024
51308c0
Cmd parser: throw error message, when cmd line ini file was not found.
Peguen Apr 26, 2024
aca5d69
Changed ini handling for config file.
Peguen Apr 26, 2024
557637a
Updated docu for config and example.
Peguen Apr 26, 2024
d910ef2
give user the freedom to initialize with specified ini file.
Peguen Apr 26, 2024
676facf
Merge remote-tracking branch 'origin/master' into feature/user_config…
Peguen May 13, 2024
5476f04
Some whitespaces.
Peguen May 15, 2024
1435ee8
Added RegistrationOptions test.
Peguen May 15, 2024
602212f
Changed ini file handling for cmd parser -> return complete path in e…
Peguen May 16, 2024
0dc7398
Added cmd parser ini test and death test.
Peguen May 16, 2024
e454368
Added cmd parser config key test + store config keys in map.
Peguen May 16, 2024
d72adbc
Removed generated ini file in test after usage.
Peguen May 16, 2024
82d8d11
Added config keys map to user cli arguments and provided the struct t…
Peguen May 16, 2024
b7e0bed
Merge remote-tracking branch 'origin/master' into feature/user_config…
Peguen May 16, 2024
287c24f
Clean up code and make clangtidy happy.
Peguen May 17, 2024
e3bb375
Merge remote-tracking branch 'origin/master' into feature/user_config…
Peguen May 17, 2024
ac9dbe9
Merge remote-tracking branch 'origin/master' into feature/user_config…
Peguen May 17, 2024
fed863b
Refactored to current publisher options. TimeoutAcknowledge test not …
Peguen May 17, 2024
31b0c6e
Make clang tidy a bit more happy.
Peguen May 21, 2024
295f998
Enable shm for pubsub acknowledge test.
Peguen May 21, 2024
915a7f7
Included ecal_subscriber_config
Peguen May 21, 2024
a2aca3e
Renamend Configuration member.
Peguen May 21, 2024
cf2148c
Moved config to globalgalactic space. Implemented default config cons…
Peguen May 21, 2024
80ef2a0
Restructure eCAL Application Options and default init for publisher/s…
Peguen May 22, 2024
cafb419
Use custom types in publisher config.
Peguen May 22, 2024
25116ea
Restructered config file structure, config namespaces and and file na…
Peguen May 22, 2024
f7b8470
Added comments to config structs from ini file.
Peguen May 22, 2024
f6f3dd5
Some file renaming.
Peguen May 23, 2024
913fee0
Updated docu for config.
Peguen May 23, 2024
fd80bad
Changes for transportlayer config.
Peguen May 24, 2024
e126b12
Try taking .ini file in normal initializing, as it was before.
Peguen May 24, 2024
f876c26
Merge remote-tracking branch 'origin/master' into feature/user_config…
Peguen May 24, 2024
25dd3e0
Added doc for publisher config.
Peguen May 24, 2024
7be0dd9
Defaulted publisher test again.
Peguen May 24, 2024
aa1d1ca
Removed unncessary constructor/destructor in custom config classes.
Peguen May 27, 2024
db16ff6
Some ecal_cmd_parser cleanup.
Peguen May 27, 2024
9613db0
Merge remote-tracking branch 'origin/master' into feature/user_config…
Peguen May 27, 2024
11044f1
Fix ecal_cmd_parser checkForValidConfigFilePath function.
Peguen May 28, 2024
a9a4a41
Fixed ecal_cmd_parser problem with path separator attachments.
Peguen May 29, 2024
d1c606d
Merge remote-tracking branch 'origin/master' into feature/user_config…
Peguen Jun 4, 2024
23ac095
Changed handling of cli arguments to std::vector<string> by default.
Peguen Jun 4, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions doc/rst/configuration.rst
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,4 @@ Configuration
configuration/npcap
configuration/player
configuration/options
configuration/runtime_configuration
68 changes: 68 additions & 0 deletions doc/rst/configuration/runtime_configuration.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
.. include:: /include.txt

.. _configuration_runtime_configuration:

=====================
Runtime configuration
=====================

eCAL provides an interface to access and modify its options before initialization.
The corresponding structure reflects the configuration file (:ref:`configuration_options`).

Custom types
============

In order to rule out configuration errors, custom datatypes for IP addresses (IpAddressV4) and sizes (constrained integer) are introduced.

**IpAddressV4:** For assigning an IP address simply assign a string with the desired address.
Decimal and hexadecimal format is supported.
In case the IP address is not valid, the type will throw a std::invalid_argument exception.

The IP address can be used like a normal string object. For example:

.. code-block:: c++

eCAL::Types::IpAddressV4 ip_address = std::string("192.168.7.1"); // in hex: "C0.A8.7.1"
std::cout << ip_address << "\n";

**ConstrainedInteger**: ConstrainedInteger are specified with a minimum (default: 0), step (default: 1) and maximum (default: maximum of int) value.
In case the assigned value does not fit into the specified limitation, the type will throw a std::invalid_argument exception.

The size object can be used like a normal integer.

.. code-block:: c++

eCAL::Types::ConstrainedInteger<1024, 512, 8192> size_4mb = 1024 + 6 * 512;
std::cout << size_4mb << "\n";

For specifying sizes in the ecal configuration object, refer to the .ini file or "ecal/config/configuration.h" for the limitations.

Global configuration initialization
===================================

The configuration will be first initialized with the default values specified by eCAL.
If you want to use the systems eCAL .ini file, call the ``InitConfigWithDefaultIni()`` function of the config object.

In case the .ini to use is specified via command line parameter, this one is chosen instead.
The object will throw an error, in case the specified .ini file cannot be found.

It is also possible to specify the .ini by calling the function ``InitConfig(std::string _ini_path)`` of the config object.

* |fa-file-alt| :file:`hello_config/main.cpp`:

.. literalinclude:: src/hello_config/main.cpp
:language: cpp
:linenos:

Individual publisher/subscriber configuration
=============================================

Like a global configuration to pass at initialization, it is also possible to create indiviual configurations for publisher and subscriber.
That means it is possible to, e.g., create two publisher which send on different transport layers:

* |fa-file-alt| :file:`publisher/main.cpp`:

.. literalinclude:: src/publisher_config/main.cpp
:language: cpp
:linenos:

19 changes: 19 additions & 0 deletions doc/rst/configuration/src/hello_config/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
cmake_minimum_required(VERSION 3.0)
set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ON)

project(hello_config)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(eCAL REQUIRED)

set(source_files
main.cpp
)

add_executable(${PROJECT_NAME} ${source_files})

target_link_libraries(${PROJECT_NAME}
eCAL::core
)
46 changes: 46 additions & 0 deletions doc/rst/configuration/src/hello_config/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
#include <ecal/ecal.h>
Peguen marked this conversation as resolved.
Show resolved Hide resolved
#include <ecal/ecal_config.h>
#include <string>
#include <stdexcept>

int main(int argc, char** argv)
Peguen marked this conversation as resolved.
Show resolved Hide resolved
Peguen marked this conversation as resolved.
Show resolved Hide resolved
{
// Create a configuration object with the command line arguments
eCAL::Configuration custom_config(argc, argv);

// Use the .ini file of the system if available
custom_config.InitConfigWithDefaultIni();

// Set the values in a try/catch block, as wrong configuration leads to exceptions
try
{
// In case you decided to specify an own .ini file to use
// Configuration based on previous ini file will be overwritten
custom_config.InitConfig("C:\\eCAL_local.ini");

// Set the communication layer to network
custom_config.transport_layer.network_enabled = true;

// Set a custom udp multicast group, correct IP address necessary
custom_config.transport_layer.mc_options.group = std::string("239.0.1.1");

// Increase the send buffer, size increase in 1024 bytes steps
custom_config.transport_layer.mc_options.sndbuf = (5242880 + 10 * 1024);
}
catch (std::invalid_argument& e)
{
throw std::runtime_error("Error while configuring eCALConfig: " + std::string(e.what()));
}

// Initialize eCAL with the prepared configuration object
eCAL::Initialize(custom_config, "UserConfigExample", eCAL::Init::Default);

// ...
// Use eCAL for your needs
// ...

// Finalize eCAL API
eCAL::Finalize();

return 0;
}
19 changes: 19 additions & 0 deletions doc/rst/configuration/src/publisher_config/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
cmake_minimum_required(VERSION 3.0)
set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ON)

project(publisher_config)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(eCAL REQUIRED)

set(source_files
main.cpp
)

add_executable(${PROJECT_NAME} ${source_files})

target_link_libraries(${PROJECT_NAME}
eCAL::core
)
44 changes: 44 additions & 0 deletions doc/rst/configuration/src/publisher_config/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#include <ecal/ecal.h>
Peguen marked this conversation as resolved.
Show resolved Hide resolved
#include <ecal/msg/string/publisher.h>
#include <string>
#include <stdexcept>
#include <thread>
#include <chrono>

int main(int argc, char** argv)
Peguen marked this conversation as resolved.
Show resolved Hide resolved
Peguen marked this conversation as resolved.
Show resolved Hide resolved
{
// initialize eCAL API
eCAL::Initialize(0, nullptr, "PublisherConfig", eCAL::Init::All);

// create publisher config
eCAL::Publisher::Configuration pub_config;
Peguen marked this conversation as resolved.
Show resolved Hide resolved

// disable all layers except for SHM
pub_config.shm.enable = true;
pub_config.udp.enable = false;
pub_config.tcp.enable = false;

// create publisher 1
eCAL::string::CPublisher<std::string> pub_1("topic_1", pub_config);

// enable for the second publisher also tcp
pub_config.tcp.enable = true;

// create publisher 2
eCAL::string::CPublisher<std::string> pub_2("topic_2", pub_config);

int counter {0};
while (eCAL::Ok())
{
std::string msg = "Send message number: " + std::to_string(counter++);

// send message
pub_1.Send(msg);
pub_2.Send(msg);

std::this_thread::sleep_for(std::chrono::milliseconds(500));
}

// finalize eCAL API
eCAL::Finalize();
}
10 changes: 7 additions & 3 deletions ecal/core/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -63,10 +63,14 @@ endif()
# config
######################################
set(ecal_config_src
src/config/ecal_cmd_parser.cpp
src/config/ecal_config.cpp
src/config/ecal_config_initializer.cpp
src/config/ecal_config_reader.cpp
src/config/ecal_config_reader.h
src/config/ecal_config_reader_hlp.h
src/types/ecal_custom_data_types.cpp
src/types/ecal_registration_options.cpp
)

######################################
Expand Down Expand Up @@ -450,10 +454,11 @@ endif()
set(ecal_header_cmn
include/ecal/types/logging.h
include/ecal/types/monitoring.h
include/ecal/config/publisher.h
include/ecal/config/subscriber.h
include/ecal/ecal.h
include/ecal/ecal_callback.h
include/ecal/ecal_client.h
include/ecal/ecal_config.h
include/ecal/ecal_core.h
include/ecal/ecal_deprecate.h
include/ecal/ecal_init.h
Expand All @@ -465,16 +470,15 @@ set(ecal_header_cmn
include/ecal/ecal_process.h
include/ecal/ecal_process_severity.h
include/ecal/ecal_publisher.h
include/ecal/ecal_publisher_config.h
include/ecal/ecal_server.h
include/ecal/ecal_service_info.h
include/ecal/ecal_subscriber.h
include/ecal/ecal_subscriber_config.h
include/ecal/ecal_time.h
include/ecal/ecal_timer.h
include/ecal/ecal_tlayer.h
include/ecal/ecal_types.h
include/ecal/ecal_util.h
include/ecal/config/configuration.h
)

set(ecal_header_cimpl
Expand Down
4 changes: 2 additions & 2 deletions ecal/core/cfg/ecal.ini
Original file line number Diff line number Diff line change
Expand Up @@ -178,13 +178,13 @@ filter_excl = ^eCALSysClient$|^eCALSysGUI$|^eCALSys$
; shm_monitoring_enabled = false Enable distribution of monitoring/registration information via shared memory
; shm_monitoring_domain = ecal_monitoring Domain name for shared memory based monitoring/registration
; shm_monitoring_queue_size = 1024 Queue size of monitoring/registration events
; network_monitoring_disabled = false Disable distribution of monitoring/registration information via network
; network_monitoring_enabled = true Enable distribution of monitoring/registration information via network
;
; drop_out_of_order_messages = false Enable dropping of payload messages that arrive out of order
; --------------------------------------------------
[experimental]
shm_monitoring_enabled = false
shm_monitoring_domain = ecal_mon
shm_monitoring_queue_size = 1024
network_monitoring_disabled = false
network_monitoring_enabled = true
drop_out_of_order_messages = false
57 changes: 57 additions & 0 deletions ecal/core/include/ecal/config/application.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
/* =========================== LICENSE =================================
*
* Copyright (C) 2016 - 2024 Continental Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* =========================== LICENSE =================================
*/

/**
* @file ecal_application_config.h
* @brief eCAL configuration for applications
**/

#pragma once

#include <string>
#include <ecal/ecal_os.h>
#include <cstddef>

namespace eCAL
{
namespace Application
{
namespace Sys
{
struct Configuration
{
std::string filter_excl; //!<
};
}

namespace Startup
{
struct Configuration
{
std::string terminal_emulator; //!<
};
}

struct Configuration
{
Sys::Configuration sys; //!<
Startup::Configuration startup; //!<
};
}
}
Loading
Loading