Skip to content

Commit

Permalink
Sync develop to master (#610)
Browse files Browse the repository at this point in the history
<!-- Thanks for the contribution, this is awesome. -->

# PR Details
## Description
This is an intermediate branch cut from master which includes fixes to
the branch coupling of build and checkout scripts. This coupling can not
yet be removed from CI processes because this repository still uses
CircleCI. The functionality to decouple CI from branches is currently
only available through our GitHub actions
<!--- Describe your changes in detail -->

## Related GitHub Issue

<!--- This project only accepts pull requests related to open GitHub
issues or Jira Keys -->
<!--- If suggesting a new feature or change, please discuss it in an
issue first -->
<!--- If fixing a bug, there should be an issue describing it with steps
to reproduce -->
<!--- Please DO NOT name partially fixed issues, instead open an issue
specific to this fix -->
<!--- Please link to the issue here: -->

## Related Jira Key

<!-- e.g. CAR-123 -->

## Motivation and Context
Decouple build/checkout from branch to make release process simpler
<!--- Why is this change required? What problem does it solve? -->

## How Has This Been Tested?
CI
<!--- Please describe in detail how you tested your changes. -->
<!--- Include details of your testing environment, and the tests you ran
to -->
<!--- see how your change affects other areas of the code, etc. -->

## Types of changes

<!--- What types of changes does your code introduce? Put an `x` in all
the boxes that apply: -->

- [ ] Defect fix (non-breaking change that fixes an issue)
- [x] New feature (non-breaking change that adds functionality)
- [ ] Breaking change (fix or feature that cause existing functionality
to change)

## Checklist:

<!--- Go over all the following points, and put an `x` in all the boxes
that apply. -->
<!--- If you're unsure about any of these, don't hesitate to ask. We're
here to help! -->

- [ ] I have added any new packages to the sonar-scanner.properties file
- [ ] My change requires a change to the documentation.
- [ ] I have updated the documentation accordingly.
- [x] I have read the
[**CONTRIBUTING**](https://github.com/usdot-fhwa-stol/carma-platform/blob/develop/Contributing.md)
document.
- [ ] I have added tests to cover my changes.
- [ ] All new and existing tests passed.
  • Loading branch information
paulbourelly999 authored Apr 30, 2024
2 parents c1759dd + 23be0ae commit 2cc9a4a
Show file tree
Hide file tree
Showing 29 changed files with 121 additions and 55 deletions.
4 changes: 4 additions & 0 deletions .github/workflows/sonar-scanner.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ on:
branches:
- develop
- master
- "release/*"
pull_request:
types: [opened, synchronize, reopened]
name: Sonar Workflow
Expand All @@ -13,6 +14,9 @@ jobs:
image: ubuntu:jammy-20230126
steps:
- name: Install curl, zip, git, gcovr
# Installing gcovr for unit test code coverage
# Installing git for checkout action
# installing curl/zip for sonar-cpp action
run: |
apt update
export DEBIAN_FRONTEND=noninteractive
Expand Down
42 changes: 42 additions & 0 deletions configuration/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
## Deployment Configuration
### Introduction
This directory contains deployment configurations for deploying V2X-Hub on both ARM64(arm64) and x86(amd64) architectures.
### Deployment Instructions
Once downloaded, navigate to the directory corresponding to your computer’s processor (1) or (2):
```
cd ~/V2X-Hub/configuration/arm64/
cd ~/V2X-Hub/configuration/amd64/
```
Run the initialization script:
```
./initialization.sh
```
Follow the prompts during installation.

You will be prompted to create a mysql_password and mysql_root_password. You may make the passwords whatever you like, but you will need to remember them.
```
Example: ivp
```
You will also be prompted to create a V2X Hub username and password. You may make these whatever you’d like, but will need to use them to log into the web UI. Example:
```
Username: v2xadmin
Password: V2xHub#321
```
You will then need to enter the mysql_password you created in step 5a:
```
Example: ivp
```
After installation is complete, the script will automatically open a web browser with two tabs.

Navigate to the tab labeled as “Privacy Error” and select the “Advanced” button.

Click on “proceed to 127.0.0.1 (unsafe)”

Note: This page will not do anything when clicking proceed

Close the Privacy Error tab and wait for the initial V2X Hub tab to finish loading

Enter the login credentials you created in step 5b and login.

Installation complete!
20 changes: 15 additions & 5 deletions configuration/amd64/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ services:
- mysql-datavolume:/var/lib/mysql

php:
image: usdotfhwaops/php:develop
image: usdotfhwaops/php:${V2XHUB_VERSION:-develop}
container_name: php
network_mode: host
depends_on:
Expand All @@ -30,23 +30,33 @@ services:
tty: true

v2xhub:
image: usdotfhwaops/v2xhub:develop
image: usdotfhwaops/v2xhubamd:${V2XHUB_VERSION:-develop}
container_name: v2xhub
network_mode: host
restart: always
depends_on:
- db
environment:
- MYSQL_PASSWORD=/run/secrets/mysql_password
- INFRASTRUCTURE_ID=rsu_<J2735 MAP MESSAGE INTERSECTION ID>
- INFRASTRUCTURE_NAME=<RSU_NAME>
- SIMULATION_MODE=${SIMULATION_MODE:-false}
- SIMULATION_IP=${SIMULATION_IP:-127.0.0.1}
- SIMULATION_REGISTRATION_PORT=6767
- LOCAL_IP=${LOCAL_IP:-127.0.0.1}
- TIME_SYNC_TOPIC=time_sync
- TIME_SYNC_PORT=7575
- SIM_V2X_PORT=5757
- SIM_INTERACTION_PORT=7576
- V2X_PORT=8686
- INFRASTRUCTURE_ID=${INFRASTRUCTURE_ID:-rsu_1234}
- INFRASTRUCTURE_NAME=${INFRASTRUCTURE_NAME:-East Intersection}
- SENSOR_JSON_FILE_PATH=${SENSOR_JSON_FILE_PATH:-/var/www/plugins/MAP/sensors.json}
secrets:
- mysql_password
volumes:
- ./logs:/var/log/tmx
- ./MAP:/var/www/plugins/MAP
port_drayage_webservice:
image: usdotfhwaops/port-drayage-webservice:develop
image: usdotfhwaops/port-drayage-webservice:${V2XHUB_VERSION:-develop}
container_name: port_drayage_webservice
network_mode: host
secrets:
Expand Down
1 change: 1 addition & 0 deletions configuration/amd64/initialization.sh
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ else
#remove endline characters from password files
tr -d '\n' <sql_pass.txt> mysql_password.txt && rm sql_pass.txt
fi
# TODO VH-1303 Allow for version and configuration selection in initialization script

#AMD64 initialzation
cd $directory
Expand Down
6 changes: 3 additions & 3 deletions configuration/arm64/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ services:
- mysql-datavolume:/var/lib/mysql

php:
image: usdotfhwaops/php:develop
image: usdotfhwaops/php_arm:${V2XHUB_VERSION:-develop}
container_name: php
network_mode: host
depends_on:
Expand All @@ -30,7 +30,7 @@ services:
tty: true

v2xhub:
image: usdotfhwaops/v2xhub:develop
image: usdotfhwaops/v2xhubarm:${V2XHUB_VERSION:-develop}
container_name: v2xhub
network_mode: host
restart: always
Expand All @@ -44,7 +44,7 @@ services:
- ./logs:/var/log/tmx
- ./MAP:/var/www/plugins/MAP
port_drayage_webservice:
image: usdotfhwaops/port-drayage-webservice:develop
image: usdotfhwaops/port-drayage-webservice_arm:${V2XHUB_VERSION:-develop}
container_name: port_drayage_webservice
network_mode: host
secrets:
Expand Down
1 change: 1 addition & 0 deletions configuration/arm64/initialization.sh
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ else
#remove endline characters from password files
tr -d '\n' <sql_pass.txt> mysql_password.txt && rm sql_pass.txt
fi
# TODO VH-1303 Allow for version and configuration selection in initialization script

#ARM initialization
cd $directory
Expand Down
2 changes: 1 addition & 1 deletion src/v2i-hub/CARMACloudPlugin/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
PROJECT ( CARMACloudPlugin VERSION 7.5.1 LANGUAGES CXX )
PROJECT ( CARMACloudPlugin VERSION 7.6.0 LANGUAGES CXX )

SET (TMX_PLUGIN_NAME "CARMACloud")
add_compile_options(-fPIC)
Expand Down
2 changes: 1 addition & 1 deletion src/v2i-hub/CARMAStreetsPlugin/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
PROJECT ( CARMAStreetsPlugin VERSION 7.5.1 LANGUAGES CXX )
PROJECT ( CARMAStreetsPlugin VERSION 7.6.0 LANGUAGES CXX )

BuildTmxPlugin ( )

Expand Down
2 changes: 1 addition & 1 deletion src/v2i-hub/CDASimAdapter/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
PROJECT ( CDASimAdapter VERSION 7.5.1 LANGUAGES CXX )
PROJECT ( CDASimAdapter VERSION 7.6.0 LANGUAGES CXX )
set(CMAKE_CXX_STANDARD 17)

FIND_PACKAGE( carma-clock )
Expand Down
58 changes: 33 additions & 25 deletions src/v2i-hub/CDASimAdapter/src/CDASimAdapter.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#include "include/CDASimAdapter.hpp"

#include <chrono>

using namespace tmx::utils;

Expand All @@ -18,12 +18,12 @@ namespace CDASimAdapter{
success = GetConfigValue<double>("X", location.X);
success = success && GetConfigValue<double>("Y", location.Y);
success = success && GetConfigValue<double>("Z", location.Z);
PLOG(logINFO) << "Location of Simulated V2X-Hub updated to : {" << location.X << ", "
PLOG(logINFO) << "Location of Simulated V2X-Hub updated to : {" << location.X << ", "
<< location.Y << ", " << location.Z << "}." << std::endl;
success = success && GetConfigValue<int>("MaxConnectionAttempts", max_connection_attempts);
success = success && GetConfigValue<uint>("ConnectionSleepTime", connection_sleep_time);
if (connection_sleep_time < 1 ) {
PLOG(logWARNING) << "ConnectionSleepTime of " << connection_sleep_time << " is invalid. Valid values are <= 1." << std::endl;
PLOG(logWARNING) << "ConnectionSleepTime of " << connection_sleep_time << " is invalid. Valid values are <= 1." << std::endl;
connection_sleep_time = 1;
}
if (!success) {
Expand All @@ -33,15 +33,15 @@ namespace CDASimAdapter{

void CDASimAdapter::OnConfigChanged(const char *key, const char *value) {
PluginClient::OnConfigChanged(key, value);
UpdateConfigSettings();
UpdateConfigSettings();
}

void CDASimAdapter::OnStateChange(IvpPluginState state) {
PluginClient::OnStateChange(state);

if (state == IvpPluginState_registered) {
UpdateConfigSettings();

// While CARMA Simulation connection is down, attempt to reconnect
int connection_attempts = 0;
while ( (!connection || !connection->is_connected()) && (connection_attempts < max_connection_attempts || max_connection_attempts < 1 ) ) {
Expand All @@ -66,22 +66,30 @@ namespace CDASimAdapter{
}else {
PLOG(logERROR) << "CDASim connection failed!" << std::endl;
}

}
}



void CDASimAdapter::forward_time_sync_message(tmx::messages::TimeSyncMessage &msg) {

std::string payload =msg.to_string();
PLOG(logDEBUG1) << "Sending Time Sync Message " << msg << std::endl;
// A script to validate time synchronization of tools in CDASim currently relies on the following
// log line. TODO: This line is meant to be removed in the future upon completion of this work:
// https://github.com/usdot-fhwa-stol/carma-analytics-fotda/pull/43
auto time_now = std::chrono::system_clock::now();
auto epoch = time_now.time_since_epoch();
auto milliseconds = std::chrono::duration_cast<std::chrono::milliseconds>(epoch);
PLOG(logDEBUG1) << "Simulation Time: " << msg.get_timestep() << " where current system time is: " << milliseconds.count() << ", where msgs: " << msg << std::endl;

this->BroadcastMessage<tmx::messages::TimeSyncMessage>(msg, _name, 0 , IvpMsgFlags_None);

}

void CDASimAdapter::forward_simulated_detected_message(tmx::messages::simulation::SensorDetectedObject &msg) {
PLOG(logDEBUG1) << "Sending Simulated SensorDetectedObject Message " << msg << std::endl;
this->BroadcastMessage<tmx::messages::simulation::SensorDetectedObject>(msg, _name, 0 , IvpMsgFlags_None);
this->BroadcastMessage<tmx::messages::simulation::SensorDetectedObject>(msg, _name, 0 , IvpMsgFlags_None);
}

bool CDASimAdapter::connect() {
Expand All @@ -97,7 +105,7 @@ namespace CDASimAdapter{
std::string infrastructure_id = sim::get_sim_config(sim::INFRASTRUCTURE_ID);
std::string sensor_json_file_path = sim::get_sim_config(sim::SENSOR_JSON_FILE_PATH);

PLOG(logINFO) << "CDASim connecting " << simulation_ip <<
PLOG(logINFO) << "CDASim connecting " << simulation_ip <<
"\nUsing Registration Port : " << std::to_string( simulation_registration_port) <<
" Time Sync Port: " << std::to_string( time_sync_port) << " and V2X Port: " << std::to_string(v2x_port) << std::endl;
if ( connection ) {
Expand All @@ -108,20 +116,20 @@ namespace CDASimAdapter{
connection = std::make_unique<CDASimConnection>(simulation_ip, infrastructure_id, simulation_registration_port, sim_v2x_port, local_ip,
time_sync_port, simulated_interaction_port, v2x_port, location, sensor_json_file_path);
}
}
}
catch (const TmxException &e) {
PLOG(logERROR) << "Exception occured attempting to initialize CDASim Connection : " << e.what() << std::endl;
return false;
}
catch (const std::invalid_argument &e ) {
// std::stoul throws invalid arguement exception when provided with a string that contains characters that are not numbers.
PLOG(logERROR) << "Exception occured attempting to initialize CDASim Connection : " << e.what() <<
PLOG(logERROR) << "Exception occured attempting to initialize CDASim Connection : " << e.what() <<
". Check environment variables are set to the correct type!";
return false;
}
}
return connection->connect();
}



void CDASimAdapter::start_immediate_forward_thread() {
Expand All @@ -130,10 +138,10 @@ namespace CDASimAdapter{
}
immediate_forward_tick_id = immediate_forward_timer->AddPeriodicTick([this]() {
this->attempt_message_from_v2xhub();

} // end of lambda expression
, std::chrono::milliseconds(5) );

immediate_forward_timer->Start();

}
Expand Down Expand Up @@ -170,27 +178,27 @@ namespace CDASimAdapter{

void CDASimAdapter::start_sensor_detected_object_detection_thread() {
PLOG(logDEBUG) << "Creating Thread Timer for simulated external object" << std::endl;
try
try
{
if(!external_object_detection_thread_timer)
{
external_object_detection_thread_timer = std::make_unique<tmx::utils::ThreadTimer>(std::chrono::milliseconds(5));
}
}
external_object_detection_thread_timer->AddPeriodicTick([this](){
PLOG(logDEBUG1) << "Listening for Sensor Detected Message from CDASim." << std::endl;
auto msg = connection->consume_sensor_detected_object_message();
if ( !msg.is_empty()) {
if ( !msg.is_empty()) {
this->forward_simulated_detected_message(msg);
}
else
else
{
PLOG(logDEBUG1) << "CDASim connection has not yet received an simulated sensor detected message!" << std::endl;
}
}//End lambda
, std::chrono::milliseconds(5));
external_object_detection_thread_timer->Start();
}
catch ( const UdpServerRuntimeError &e )
catch ( const UdpServerRuntimeError &e )
{
PLOG(logERROR) << "Error occured :" << e.what() << std::endl;
}
Expand Down Expand Up @@ -238,23 +246,23 @@ namespace CDASimAdapter{
}
}


int CDASimAdapter::Main() {


PLOG(logINFO) << "Starting plugin " << _name << std::endl;
PLOG(logINFO) << "Starting plugin " << _name << std::endl;

while (_plugin->state != IvpPluginState_error) {

if (IsPluginState(IvpPluginState_registered))
{

}
}

return EXIT_SUCCESS;
}

}


Expand Down
2 changes: 1 addition & 1 deletion src/v2i-hub/CommandPlugin/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
PROJECT ( CommandPlugin VERSION 7.5.1 LANGUAGES CXX )
PROJECT ( CommandPlugin VERSION 7.6.0 LANGUAGES CXX )

FIND_PACKAGE (OpenSSL REQUIRED)

Expand Down
2 changes: 1 addition & 1 deletion src/v2i-hub/CswPlugin/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
PROJECT ( CswPlugin VERSION 7.5.1 LANGUAGES CXX )
PROJECT ( CswPlugin VERSION 7.6.0 LANGUAGES CXX )

SET (TMX_PLUGIN_NAME "CSW")

Expand Down
2 changes: 1 addition & 1 deletion src/v2i-hub/DmsPlugin/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
PROJECT ( DmsPlugin VERSION 7.5.1 LANGUAGES CXX )
PROJECT ( DmsPlugin VERSION 7.6.0 LANGUAGES CXX )

SET (TMX_PLUGIN_NAME "Dynamic Message Sign")

Expand Down
2 changes: 1 addition & 1 deletion src/v2i-hub/ERVCloudForwardingPlugin/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
PROJECT(ERVCloudForwardingPlugin VERSION 7.5.1 LANGUAGES CXX)
PROJECT(ERVCloudForwardingPlugin VERSION 7.6.0 LANGUAGES CXX)

SET(TMX_PLUGIN_NAME "ERVCloudForwarding")
add_compile_options(-fPIC)
Expand Down
2 changes: 1 addition & 1 deletion src/v2i-hub/ImmediateForwardPlugin/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
PROJECT ( ImmediateForwardPlugin VERSION 7.5.1 LANGUAGES CXX )
PROJECT ( ImmediateForwardPlugin VERSION 7.6.0 LANGUAGES CXX )

SET (TMX_PLUGIN_NAME "Immediate Forward")

Expand Down
2 changes: 1 addition & 1 deletion src/v2i-hub/LocationPlugin/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
project( LocationPlugin VERSION 7.5.1 LANGUAGES CXX )
project( LocationPlugin VERSION 7.6.0 LANGUAGES CXX )

SET (TMX_PLUGIN_NAME Location)

Expand Down
2 changes: 1 addition & 1 deletion src/v2i-hub/MapPlugin/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
PROJECT ( MapPlugin VERSION 7.5.1 LANGUAGES CXX )
PROJECT ( MapPlugin VERSION 7.6.0 LANGUAGES CXX )

SET (TMX_PLUGIN_NAME "MAP")

Expand Down
2 changes: 1 addition & 1 deletion src/v2i-hub/MessageLoggerPlugin/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
PROJECT ( MessageLoggerPlugin VERSION 7.5.1 LANGUAGES CXX )
PROJECT ( MessageLoggerPlugin VERSION 7.6.0 LANGUAGES CXX )

SET (TMX_PLUGIN_NAME "MessageLoggerPlugin")

Expand Down
Loading

0 comments on commit 2cc9a4a

Please sign in to comment.