Skip to content

Commit

Permalink
Merge pull request #512 from usdot-jpo-ode/release_1.4.0
Browse files Browse the repository at this point in the history
Merge release branch into master branch Release 1.4.0
  • Loading branch information
SaikrishnaBairamoni authored Jul 5, 2023
2 parents f2caf7d + a3fd03e commit 81f9336
Show file tree
Hide file tree
Showing 31 changed files with 115 additions and 52 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,4 @@ jobs:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
run: |
ls -la && pwd
mvn -e -X clean org.jacoco:jacoco-maven-plugin:prepare-agent package sonar:sonar -Dsonar.projectKey=usdot-jpo-ode_jpo-ode -Dsonar.projectName=jpo-ode -Dsonar.organization=usdot-jpo-ode-1 -Dsonar.host.url=https://sonarcloud.io -Dsonar.branch.name=$GITHUB_REF_NAM
mvn -e -X clean org.jacoco:jacoco-maven-plugin:prepare-agent package sonar:sonar -Dsonar.projectKey=usdot-jpo-ode-1_jpo-ode -Dsonar.projectName=jpo-ode -Dsonar.organization=usdot-jpo-ode-1 -Dsonar.host.url=https://sonarcloud.io -Dsonar.branch.name=$GITHUB_REF_NAME
2 changes: 2 additions & 0 deletions .github/workflows/dockerhub.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ on:
push:
branches:
- "develop"
- "master"
- "release/*"

jobs:
dockerhub-Jpo-ode:
Expand Down
65 changes: 62 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,19 +43,21 @@ The current version and release history of the JPO-ODE: [ODE Release Notes](<doc
10. [Credits and Acknowledgement](#credits-and-acknowledgement)
11. [Code.gov Registration Info](#codegov-registration-info)
12. [Kubernetes](#kubernetes)
13. Sonar Token Configuration([#Sonar cloud](https://sonarqube.ow2.org/documentation/user-guide/user-token/))

<!--
#########################################
############# Usage Example #############
#########################################
-->

<a name="usgage-example"/>
<a name="usage-example"/>

## 1. Usage Example

Once the ODE is deployed and running locally, you may access the ODE's demonstration console by opening your browser and navigating to `http://localhost:8080`.
Once the ODE is deployed and running locally, you may access the ODE's demonstration console by opening your browser and navigating to `http://localhost:8080`. This portal can only be used to decode a subset of the supported message types: BSM and TIM messages. To decode messages such as MAP, SPaT, SRM and SSM, the ODE UDP ports must be utilized. The following sections will describe how to utilize both methods.

<b>For testing BSM and TIM decoding only:</b>
1. Press the `Connect` button to connect to the ODE WebSocket service.
2. Press `Select File` button to select an OBU log file containing BSMs and/or TIM messages as specified by the WYDOT CV Pilot project. See below documents for details:
- [Wyoming CV Pilot Log File Design](data/Wyoming_CV_Pilot_Log_File_Design.docx)
Expand All @@ -74,9 +76,31 @@ _Figure 2: ODE UI demonstrating message subscription_

Notice that the empty fields in the J2735 message are represented by a `null` value. Also note that ODE output strips the MessageFrame header and returns a pure BSM or TIM in the subscription topic.


With the PPM module running, all filtered BSMs that are uploaded through the web interface will be captured and processed. You will see an output of both submitted BSM and processed data unless the entire record was filtered out.

<b>For testing decoding with all supported ODE message types:</b>

To test decoding all supported ODE messages, the UDP endpoints must be utilized. These endpoints specifically take hex ASN.1 UPER encoded message data. These messages are allowed to have headers but do not need to. The headers are trimmed out currently once the UDP receiver receives the message so this data will not affect the output.

Supported message types:
- BSM
- TIM
- MAP
- SPaT
- SRM
- SSM

1. Navigate to the [UDP sender Python scripts](<./scripts/tests/>) in the project.
2. Ensure the environment variable "DOCKER_HOST_IP" has been set in the shell that will be running the script. This must be set to the same IP that the ODE deployments are using.
3. Run the script of your choosing: `python3 ./scripts/tests/udpsender_spat.py`
4. View the output Kafka messages from kafkacat: `kafkacat -b $DOCKER_HOST_IP:9092 -G udp_test_group topic.OdeSpatJson -f '\nTopic: %t, Key: %k, Offset: %o, Timestamp: %T\nValue: %s\n'`
5. The script should continue to send the same message every 5 seconds and kafkacat should continue to output the latest message.
6. You may modify the content of the UDP sender scripts to test different payloads of your own.

<p align="center">
<img src="./docs/images/readme/figure3.png" width="80%" height="50%">
</p>

[Back to top](#toc)

<!--
Expand Down Expand Up @@ -117,6 +141,10 @@ Read the following guides to familiarize yourself with ODE's Docker and Kafka mo
- [Docker README](docker.md)
- [Kafka README](kafka.md)

The following guide contains information about the data flow diagrams for the ODE.

- [Data Flow Diagrams README](docs/data-flow-diagrams/README.md)

**Installation and Deployment:**

- Docker builds may fail if you are on a corporate network due to DNS resolution errors.
Expand Down Expand Up @@ -574,3 +602,34 @@ The ODE can be run in a k8s environment.
See [this document](./docs/Kubernetes.md) for more details about this.

[Back to top](#toc)

## 13. Sonar Token Configuration
Generating and Using Tokens
Users can generate tokens that can be used to run analyses or invoke web services without access to the user's actual credentials.

USDOT-JPO-ODE SonarCloud Organization : https://sonarcloud.io/organizations/usdot-jpo-ode-1/

## Generating a token
You can generate new tokens at User > My Account > Security.
The form at the bottom of the page allows you to generate new tokens. Once you click the Generate button, you will see the token value. Copy it immediately; once you dismiss the notification you will not be able to retrieve it.

## Using a token
SonarScanners running in GitHub Actions can automatically detect branches and pull requests being built so you don't need to specifically pass them as parameters to the scanner.

**<ins>To analyze your projects with GitHub Actions, you need to: </ins>**

**<ins> Creating your GitHub secrets </ins>**
You can create repository secrets from your GitHub repository as below:

Sonar Token: Generate a SonarQube token and, in GitHub, create a new repository secret in GitHub with SONAR_TOKEN as the Name and the token you generated as the Value.
Sonar Host URL: In GitHub, create a new repository secret with SONAR_HOST_URL as the Name and your SonarQube server URL as the Value.

Configure your workflow YAML file as below:

1. Add GitHub Secrets in ci.yml workflow as SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }
2. Update the sonar properties in Sonar scan step (- name: Run Sonar) with new sonar project properties.

Commit and push your code to start the analysis.

## Revoking a token
You can revoke an existing token at User > My Account > Security by clicking the Revoke button next to the token.
Binary file removed data/spatTx_test_binary
Binary file not shown.
Binary file removed data/spatTx_test_binary.bin
Binary file not shown.
2 changes: 1 addition & 1 deletion docs/data-flow-diagrams/ODE Data Flow Overview.drawio
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<mxfile host="Electron" modified="2022-04-14T19:40:36.983Z" agent="5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/17.4.2 Chrome/100.0.4896.60 Electron/18.0.1 Safari/537.36" etag="hnHgc1VZttJfM0MdCy9P" version="17.4.2" type="device"><diagram id="C5RBs43oDa-KdzZeNtuy" name="Page-1">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</diagram></mxfile>
<mxfile host="Electron" modified="2023-06-27T17:09:08.786Z" agent="5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/17.4.2 Chrome/100.0.4896.60 Electron/18.0.1 Safari/537.36" etag="uuR-LWwAbBXx5Qu2ZVIU" version="17.4.2" type="device"><diagram id="C5RBs43oDa-KdzZeNtuy" name="Page-1">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</diagram></mxfile>
Binary file modified docs/data-flow-diagrams/ODE Data Flow Overview.drawio.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit 81f9336

Please sign in to comment.