Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

165 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Azure Digital Twins connector

The aim of this project is to :

  • read data from an ADT
  • flatten these data in a list of CSVData Pojo defined in the library simulator-connector-commons
  • Export Csv Files containing these data

Changelog

Version 2.5.0

New Features

  • Add filters for twins and relationships which enable subgraph querying of an ADT instance: N.B:
  • Filter conditional is defined regarding a JSON format: e.g. {"propertyName": "propertyValue"}
  • Filters are optional (ADT connector will fetch everything in ADT instance when not defined)
  • Several filters will generate queries with AND condition:
    • e.g:
    • filters: {"propertyName1": "propertyValue1","propertyName2": "propertyValue2"}
    • resulting queries:
      • "SELECT * FROM digitaltwins T WHERE T.propertyName1 = 'propertyValue1' AND T.propertyName2 = 'propertyValue2'"
      • "SELECT * FROM RELATIONSHIPS R WHERE R.propertyName1 = 'propertyValue1' AND R.propertyName2 = 'propertyValue2'"

Documentation:

  • Add doc for TWIN_FILTERS environment variable
  • Add doc for RELATION_FILTERS environment variable

Dependency updates

  • Bump kotlin.version from 1.6.10 to 1.7.10
  • Bump smallrye-config from 2.9.1 to 3.1.1
  • Bump azure-digitaltwins-core from 1.2.0 to 1.3.4
  • Bump azure-identity from 1.4.6 to 1.7.2
  • Replace javax.annotation-api:1.3.2 by jakarta.annotation-api:2.1.1
  • Bump log4j-api from 2.17.2 to 2.19.0
  • Bump log4j-core from 2.17.2 to 2.19.0
  • Bump jib-maven-plugin from 3.2.0 to 3.3.1
  • Bump maven-clean-plugin from 3.1.0 to 3.2.0
  • Bump maven-install-plugin from 2.5.2 to 3.1.0
  • Bump maven-deploy-plugin from 2.8.2 to 3.0.0

Version 2.4.0

New Features

  • Add multithreading for twin fetching

Documentation:

  • Add doc for CSM_NUMBER_OF_THREAD environment variable

Version 2.3.3

Fix:

  • Warning at runtime Failed to load class "org.slf4j.impl.StaticLoggerBinder"

Dependency updates:

  • Bump actions/checkout from 2.3.4 to 3
  • Bump actions/setup-java from 2.3.0 to 3
  • Bump azure-digitaltwins-core from 1.1.2 to 1.2.0
  • Bump azure-identity from 1.3.6 to 1.4.6
  • Bump docker/login-action from 1.10.0 to 1.14.1
  • Bump jib-maven-plugin from 3.1.4 to 3.2.0
  • Bump junit-bom from 5.8.0 to 5.8.2
  • Bump klaxon from 5.5 to 5.6
  • Bump kotlin.version from 1.5.31 to 1.6.10
  • Bump log4j-core from 2.17.0 to 2.17.2
  • Bump log4j-api from 2.17.0 to 2.17.2
  • Bump maven-compiler-plugin from 3.8.1 to 3.10.1
  • Bump maven-jar-plugin from 3.2.0 to 3.2.2
  • Bump smallrye-config from 2.5.0 to 2.9.1

Documentation:

  • Add doc for AZURE_ADT_TENANT_ID environment variable

Version 2.3.2

  • Bump log4j-api and log4j-core to 2.16.0 in remediation to the Log4Shell (CVE-2021-44228) (and its variants, like CVE-2021-45105) vulnerabilities

Version 2.3.1

  • Bump log4j-api and log4j-core from 2.14.1 to 2.16.0 to fix Log4Shell (CVE-2021-44228) vulnerability

Version 2.3.0

New Features

  • The connector logs additional information that could be helpful for debugging, like the overall execution time

Performance Improvements

  • Relationships are now fetched via a bulk retrieval query, allowing for substantial performance improvements on the overall execution time when there are lots of relationships.

Dependency updates

  • Bump commons-csv from 1.8 to 1.9.0
  • Bump smallrye-config from 2.4.2 to 2.4.4
  • Bump azure-identity from 1.3.3 to 1.3.5
  • Bump jib-maven-plugin from 3.1.2 to 3.1.4
  • Bump kotlin.version from 1.5.21 to 1.5.30

Version 2.2.0

New Features

  • The container image for this project is continuously scanned for vulnerabilities
  • Multi-inheritance in DTDL is now handled

Bug fixes

  • DTDL extends can be a string or a list

Version 2.1.0

  • Write ADT relationship IDs in the corresponding relationship CSV files generated

Version 2.0.1

  • Fix an issue with unexisting target directories
  • Added Cosmo Tech Digital Twins Platform manifest for the connector in platform/Connector.yaml

Version 2.0.0

  • Change of target directory property and Env var export.csv.file.absolute.path -> csm.fetch.absolute.path EXPORT_CSV_FILE_ABSOLUTE_PATH -> CSM_FETCH_ABSOLUTE_PATH
  • use simulator-connector-commons which now default target directory to /mnt/scenariorun-data/
  • Add a / at the end of target path if not present
  • Remove Application Insights Java Agent
  • Watcher for build
  • Default registry is localhost:5000
  • Github packaging workflow to ghcr.io
  • Dependencies updates

Properties to overwrite :

Here is the list of properties that should be changed (in META-INF/microprofile-config.properties file):

  • azure.client.id
  • azure.tenant.id
  • azure.client.secret
  • azure.digital.twins.url
  • csm.fetch.absolute.path
  • csm.number.of.thread
  • twin.filters
  • relation.filters

If you want to overwrite these properties, you can write your own property values in the META-INF/microprofile-config.properties file, or set a property's system, or an environment variable named :

  • AZURE_CLIENT_ID : the Azure client id (can be found under the App registration screen)
  • AZURE_TENANT_ID : the Azure Tenant id (can be found under the App registration screen)
  • AZURE_CLIENT_SECRET : the app client secret (a already created secret can not be retrieved, thus it must be asked from its creator or a new one should be created)
  • AZURE_ADT_TENANT_ID : the ADT tenant id
  • AZURE_DIGITAL_TWINS_URL : the url of the ADT targeted (can be found in the specific resource screen)
  • CSM_FETCH_ABSOLUTE_PATH : the absolute path to export all csv files (don't forget the / at the end)
  • CSM_NUMBER_OF_THREAD : The amount of thread used to retrieve twin information from ADT (default 1)
  • TWIN_FILTERS : Filters you want to apply to twins in your ADT instance to query a sub graph (default blank) (example: {"propertyName","propertyValue"})
  • RELATION_FILTERS : Filters you want to apply to relationships in your ADT instance to query a sub graph (default blank) (example: {"propertyName","propertyValue"})

Log level

Default log level defined is "info". We use the logging API log4j2. You can change the log threshold by setting an environment variable named: LOG_THRESHOLD_LEVEL. Log levels used for identifying the severity of an event. Log levels are organized from most specific to least:

  • OFF (most specific, no logging)
  • FATAL (most specific, little data)
  • ERROR
  • WARN
  • INFO
  • DEBUG
  • TRACE (least specific, a lot of data)
  • ALL (least specific, all data)

Application insights

FEATURE IS DISABLED IN V2 The connector comes with a javaagent for adding connector's outputs to an application insights.

Create an application insight through portal.azure and set the connection string into the file /src/main/jib/applicationinsights.json

Application Insights

##Change the default container registry

Modify the pom.xml or set options directly in jib:build command

See [Jib project Configuration]("https://github.com/GoogleContainerTools/jib/tree/master/jib-maven-plugin#configuration") to set correctly your container registry (GCR, ECR, ACR, Docker Hub Registry)

Build your container image with:

```shell
mvn compile jib:build -Djib.allowInsecureRegistries=true

Subsequent builds are much faster than the initial build.

##Build to GitHub Registry This project defines a GitHub workflow which build to ghcr.io. Example:

mvn compile jib:build \
  -Djib.to.image="ghcr.io/cosmo-tech/azure-digital-twins-simulator-connector:latest" \
  -Djib.to.auth.username="${{ github.actor }}" \
  -Djib.to.auth.password="${GITHUB_TOKEN}"

Build to Docker daemon

Jib can also build your image directly to a Docker daemon. This uses the docker command line tool and requires that you have docker available on your PATH.

mvn compile jib:dockerBuild

For more information, see Jib project Build

Watch build

To watch for file modifications and do continuous build run

mvn fizzed-watcher:run

How to run your image locally

docker run \ 
-v <<local_export_dir_path>>:/tmp \
-e CSM_FETCH_ABSOLUTE_PATH=/tmp/ \
-e AZURE_DIGITAL_TWINS_URL=https://XXX.XXX.XXX.digitaltwins.azure.net \
-e AZURE_TENANT_ID=<<azure_tenant_id>> \
-e AZURE_CLIENT_ID=<<azure_client_id>> \
-e AZURE_CLIENT_SECRET=<<azure_client_secret>> \
<your_container_registry>/azure-digital-twins-simulator-connector

You can find all export files under the directory "local_export_dir_path" specified above

How-to

    <dependency>
      <groupId>com.github.Cosmo-Tech</groupId>
      <artifactId>azure-digital-twins-simulator-connector</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>

Tasks :

  • Create a Dockerfile instead of using JIB (and manage applicationinsights-agent download in it)
  • Add more logs (maybe with some metrics: e.g. amount of twins/relationships)
  • Handle properties on relationship
  • Handle multiple extends for properties
  • Handle multiple extends

About

Connector between Azure Digital Twins and CosmoTech Simulator

Topics

Resources

Stars

0 stars

Watchers

6 watching

Forks

Releases

Packages

Used by

Contributors

Languages