Skip to content

Commit 2e9d735

Browse files
Rework local (Dapr) runtime setup (#73)
* Rework local (Dapr) runtime setup * Replace deprecated call to publish_mqtt_event
1 parent c12c44d commit 2e9d735

File tree

28 files changed

+321
-381
lines changed

28 files changed

+321
-381
lines changed

.github/workflows/ci.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright (c) 2022 Robert Bosch GmbH and Microsoft Corporation
1+
# Copyright (c) 2022-2023 Robert Bosch GmbH and Microsoft Corporation
22
#
33
# This program and the accompanying materials are made available under the
44
# terms of the Apache License, Version 2.0 which is available at
@@ -61,6 +61,7 @@ jobs:
6161

6262
- name: Run the daparized databroker binary
6363
run: |
64+
./.vscode/scripts/ensure-dapr.sh DAPR --task
6465
./.vscode/scripts/run-mosquitto.sh --task &
6566
./.vscode/scripts/run-vehicledatabroker.sh DAPR --task &
6667
sleep 10s

.vscode/launch.json

Lines changed: 27 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -8,120 +8,51 @@
88
{
99
"type": "python",
1010
"request": "launch",
11-
"name": "examples/seat-adjuster (dapr)",
12-
"cwd": "${workspaceFolder}/examples/seat-adjuster",
13-
"program": "${workspaceFolder}/examples/seat-adjuster/src/main.py",
14-
"console": "integratedTerminal",
15-
"preLaunchTask": "dapr-SeatAdjuster-run",
16-
"postDebugTask": "dapr-SeatAdjuster-stop",
17-
"env": {
18-
"SDV_MIDDLEWARE_TYPE": "dapr",
19-
"DAPR_GRPC_PORT": "50001",
20-
"DAPR_HTTP_PORT": "3500",
21-
"SEATSERVICE_DAPR_APP_ID": "seatservice",
22-
"VEHICLEDATABROKER_DAPR_APP_ID": "vehicledatabroker"
23-
}
24-
},
25-
{
26-
"type": "python",
27-
"request": "launch",
28-
"name": "examples/seat-adjuster (native)",
29-
"cwd": "${workspaceFolder}/examples/seat-adjuster",
30-
"program": "${workspaceFolder}/examples/seat-adjuster/src/main.py",
31-
"console": "integratedTerminal",
32-
"env": {
33-
"SDV_MIDDLEWARE_TYPE": "native",
34-
"SDV_MQTT_ADDRESS": "mqtt://localhost:1883",
35-
"SDV_VEHICLEDATABROKER_ADDRESS": "grpc://localhost:55555",
36-
"SDV_SEATSERVICE_ADDRESS": "grpc://localhost:50051"
37-
}
38-
},
39-
{
40-
"type": "python",
41-
"request": "launch",
42-
"name": "examples/array-datatype (native)",
43-
"cwd": "${workspaceFolder}/examples/array-datatype",
44-
"program": "${workspaceFolder}/examples/array-datatype/src/main.py",
11+
"name": "Example, native middleware",
12+
"cwd": "${workspaceFolder}/examples/${input:example}",
13+
"program": "${workspaceFolder}/examples/${input:example}/src/main.py",
4514
"console": "integratedTerminal",
4615
"env": {
4716
"SDV_MIDDLEWARE_TYPE": "native",
4817
"SDV_MQTT_ADDRESS": "mqtt://localhost:1883",
18+
"SDV_HVACSERVICE_ADDRESS": "grpc://localhost:50052",
19+
"SDV_SEATSERVICE_ADDRESS": "grpc://localhost:50051",
4920
"SDV_VEHICLEDATABROKER_ADDRESS": "grpc://localhost:55555"
5021
}
5122
},
5223
{
5324
"type": "python",
5425
"request": "launch",
55-
"name": "examples/vdb-queries (native)",
56-
"cwd": "${workspaceFolder}/examples/vdb-queries",
57-
"program": "${workspaceFolder}/examples/vdb-queries/src/main.py",
58-
"console": "integratedTerminal",
59-
"env": {
60-
"SDV_MIDDLEWARE_TYPE": "native",
61-
"SDV_MQTT_ADDRESS": "mqtt://localhost:1883",
62-
"SDV_VEHICLEDATABROKER_ADDRESS": "grpc://localhost:55555",
63-
"SDV_SEATSERVICE_ADDRESS": "grpc://localhost:50051"
64-
}
65-
},
66-
{
67-
"type": "python",
68-
"request": "launch",
69-
"name": "examples/static-rule (native)",
70-
"cwd": "${workspaceFolder}/examples/static-rule",
71-
"program": "${workspaceFolder}/examples/static-rule/src/main.py",
26+
"name": "Example, Dapr middleware",
27+
"cwd": "${workspaceFolder}/examples/${input:example}",
28+
"program": "${workspaceFolder}/examples/${input:example}/src/main.py",
7229
"console": "integratedTerminal",
73-
"env": {
74-
"SDV_MIDDLEWARE_TYPE": "native",
75-
"SDV_MQTT_ADDRESS": "mqtt://localhost:1883",
76-
"SDV_VEHICLEDATABROKER_ADDRESS": "grpc://localhost:55555"
77-
}
78-
},
79-
{
80-
"type": "python",
81-
"request": "launch",
82-
"name": "examples/dynamic-rule (native)",
83-
"cwd": "${workspaceFolder}/examples/dynamic-rule",
84-
"program": "${workspaceFolder}/examples/dynamic-rule/src/main.py",
85-
"console": "integratedTerminal",
86-
"env": {
87-
"SDV_MIDDLEWARE_TYPE": "native",
88-
"SDV_MQTT_ADDRESS": "mqtt://localhost:1883",
89-
"SDV_VEHICLEDATABROKER_ADDRESS": "grpc://localhost:55555"
90-
}
91-
},
92-
{
93-
"type": "python",
94-
"request": "launch",
95-
"name": "examples/datapoint-set (dapr)",
96-
"cwd": "${workspaceFolder}/examples/datapoint-set",
97-
"program": "${workspaceFolder}/examples/datapoint-set/src/main.py",
98-
"console": "integratedTerminal",
99-
"preLaunchTask": "dapr-SeatAdjuster-run",
100-
"postDebugTask": "dapr-SeatAdjuster-stop",
101-
"env": {
102-
"SDV_MIDDLEWARE_TYPE": "dapr",
103-
"DAPR_GRPC_PORT": "50001",
104-
"DAPR_HTTP_PORT": "3500",
105-
"SEATSERVICE_DAPR_APP_ID": "seatservice",
106-
"VEHICLEDATABROKER_DAPR_APP_ID": "vehicledatabroker"
107-
}
108-
},
109-
{
110-
"type": "python",
111-
"request": "launch",
112-
"name": "examples/atomic-set (dapr)",
113-
"cwd": "${workspaceFolder}/examples/atomic-set",
114-
"program": "${workspaceFolder}/examples/atomic-set/src/main.py",
115-
"console": "integratedTerminal",
116-
"preLaunchTask": "dapr-SeatAdjuster-run",
117-
"postDebugTask": "dapr-SeatAdjuster-stop",
30+
"preLaunchTask": "dapr-VehicleApp-run",
31+
"postDebugTask": "dapr-VehicleApp-stop",
11832
"env": {
11933
"SDV_MIDDLEWARE_TYPE": "dapr",
12034
"DAPR_GRPC_PORT": "50001",
12135
"DAPR_HTTP_PORT": "3500",
36+
"HVACSERVICE_DAPR_APP_ID": "hvacservice",
12237
"SEATSERVICE_DAPR_APP_ID": "seatservice",
12338
"VEHICLEDATABROKER_DAPR_APP_ID": "vehicledatabroker"
12439
}
12540
}
41+
],
42+
"inputs": [
43+
{
44+
"description": "Select an example to launch",
45+
"id": "example",
46+
"type": "pickString",
47+
"options": [
48+
"array-datatype",
49+
"atomic-set",
50+
"datapoint-set",
51+
"dog-mode",
52+
"dynamic-rule",
53+
"static-rule",
54+
"vdb-queries"
55+
]
56+
}
12657
]
12758
}

.vscode/scripts/broker_config/vss_rel_3.0.json

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.

.vscode/scripts/run-feedercan.sh

Lines changed: 42 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#!/bin/bash
2-
# Copyright (c) 2022 Robert Bosch GmbH and Microsoft Corporation
2+
# Copyright (c) 2022-2023 Robert Bosch GmbH and Microsoft Corporation
33
#
44
# This program and the accompanying materials are made available under the
55
# terms of the Apache License, Version 2.0 which is available at
@@ -20,59 +20,65 @@ echo "#######################################################"
2020
ROOT_DIRECTORY=$( realpath "$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )/../.." )
2121
source $ROOT_DIRECTORY/.vscode/scripts/exec-check.sh "$@" $(basename $BASH_SOURCE .sh)
2222

23-
FEEDERCAN_VERSION=$(cat $ROOT_DIRECTORY/prerequisite_settings.json | jq .feedercan.version | tr -d '"')
24-
DATABROKER_GRPC_PORT='52001'
25-
sudo chown $(whoami) $HOME
23+
FEEDERCAN_IMAGE=$(cat $ROOT_DIRECTORY/prerequisite_settings.json | jq .feedercan.image | tr -d '"')
24+
FEEDERCAN_TAG=$(cat $ROOT_DIRECTORY/prerequisite_settings.json | jq .feedercan.version | tr -d '"')
2625

27-
# Downloading feedercan
28-
FEEDERCAN_SOURCE="kuksa.val.feeders"
29-
FEEDERCAN_EXEC_PATH="$ROOT_DIRECTORY/.vscode/scripts/assets/feedercan/$FEEDERCAN_VERSION"
30-
31-
DOWNLOAD_URL=https://github.com/eclipse/kuksa.val.feeders/tarball
32-
33-
if [[ ! -f "$FEEDERCAN_EXEC_PATH/dbc2val/dbcfeeder.py" ]]
26+
RUNNING_CONTAINER=$(docker ps | grep "$FEEDERCAN_IMAGE" | awk '{ print $1 }')
27+
if [ -n "$RUNNING_CONTAINER" ];
3428
then
35-
echo "Downloading FEEDERCAN:$FEEDERCAN_VERSION"
36-
curl --create-dirs -o "$ROOT_DIRECTORY/.vscode/scripts/assets/feedercan/$FEEDERCAN_VERSION/$FEEDERCAN_SOURCE" --location --remote-header-name --remote-name "$DOWNLOAD_URL/$FEEDERCAN_VERSION"
37-
FEEDERCAN_BASE_DIRECTORY=$(tar -tzf $ROOT_DIRECTORY/.vscode/scripts/assets/feedercan/$FEEDERCAN_VERSION/$FEEDERCAN_SOURCE | head -1 | cut -f1 -d"/")
38-
tar -xf $ROOT_DIRECTORY/.vscode/scripts/assets/feedercan/$FEEDERCAN_VERSION/$FEEDERCAN_SOURCE -C $ROOT_DIRECTORY/.vscode/scripts/assets/feedercan/$FEEDERCAN_VERSION/
39-
cp -r $ROOT_DIRECTORY/.vscode/scripts/assets/feedercan/$FEEDERCAN_VERSION/$FEEDERCAN_BASE_DIRECTORY/dbc2val $ROOT_DIRECTORY/.vscode/scripts/assets/feedercan/$FEEDERCAN_VERSION
40-
rm -rf $ROOT_DIRECTORY/.vscode/scripts/assets/feedercan/$FEEDERCAN_VERSION/$FEEDERCAN_BASE_DIRECTORY
29+
docker container stop $RUNNING_CONTAINER
4130
fi
42-
cd $ROOT_DIRECTORY/.vscode/scripts/assets/feedercan/$FEEDERCAN_VERSION/dbc2val
43-
pip3 install -r requirements.txt
4431

45-
export DAPR_GRPC_PORT=$DATABROKER_GRPC_PORT
4632
export VEHICLEDATABROKER_DAPR_APP_ID=vehicledatabroker
33+
export DATABROKER_NATIVE_PORT=55555
4734
export LOG_LEVEL=info,databroker=info,dbcfeeder.broker_client=debug,dbcfeeder=debug
48-
49-
CONFIG_DIR="$ROOT_DIRECTORY/.vscode/scripts/feeder_config"
5035
export USECASE="databroker"
36+
5137
if [ $2 == "DOGMODE" ]; then
5238
echo "Use DogMode feeder config ...!"
53-
# DogMode CAN feeder config
54-
export DBC_FILE="$CONFIG_DIR/dogmode/DogMode.dbc"
55-
export MAPPING_FILE="$CONFIG_DIR/dogmode/mapping_DogMode.yml"
56-
export CANDUMP_FILE="$CONFIG_DIR/dogmode/candump_DogMode.log"
39+
CONFIG_DIR="$ROOT_DIRECTORY/.vscode/scripts/feeder_config/dogmode"
40+
export DBC_FILE="/data/DogMode.dbc"
41+
export MAPPING_FILE="/data/mapping_DogMode.yml"
42+
export CANDUMP_FILE="/data/candump_DogMode.log"
5743
else
58-
# Default CAN feeder config
59-
export DBC_FILE="$CONFIG_DIR/default/Model3CAN.dbc"
60-
export MAPPING_FILE="$CONFIG_DIR/default/mapping.yml"
61-
export CANDUMP_FILE="$CONFIG_DIR/default/candump.log"
44+
echo "Use default feeder config ...!"
45+
CONFIG_DIR="$ROOT_DIRECTORY/.vscode/scripts/feeder_config/default"
46+
export DBC_FILE="/data/Model3CAN.dbc"
47+
export MAPPING_FILE="/data/mapping.yml"
48+
export CANDUMP_FILE="/data/candump.log"
6249
fi
6350

6451
if [ $1 == "DAPR" ]; then
65-
echo "Run Dapr ...!"
52+
echo "Run with Dapr ...!"
6653
dapr run \
6754
--app-id feedercan \
6855
--app-protocol grpc \
69-
--components-path $ROOT_DIRECTORY/.dapr/components \
70-
--config $ROOT_DIRECTORY/.dapr/config.yaml -- python3 dbcfeeder.py
56+
--resources-path $ROOT_DIRECTORY/.dapr/components \
57+
--config $ROOT_DIRECTORY/.dapr/config.yaml \
58+
-- docker run \
59+
-v ${CONFIG_DIR}:/data \
60+
-e VEHICLEDATABROKER_DAPR_APP_ID \
61+
-e DAPR_GRPC_PORT \
62+
-e DAPR_HTTP_PORT \
63+
-e LOG_LEVEL \
64+
-e USECASE \
65+
-e CANDUMP_FILE \
66+
-e DBC_FILE \
67+
-e MAPPING_FILE \
68+
--network host \
69+
$FEEDERCAN_IMAGE:$FEEDERCAN_TAG
7170
elif [ $1 == "NATIVE" ]; then
7271
echo "Run native ...!"
73-
DATABROKER_GRPC_PORT='55555'
74-
export DAPR_GRPC_PORT=$DATABROKER_GRPC_PORT
75-
python3 dbcfeeder.py
72+
docker run \
73+
-v ${CONFIG_DIR}:/data \
74+
-e DAPR_GRPC_PORT=$DATABROKER_NATIVE_PORT \
75+
-e LOG_LEVEL \
76+
-e USECASE \
77+
-e CANDUMP_FILE \
78+
-e DBC_FILE \
79+
-e MAPPING_FILE \
80+
--network host \
81+
$FEEDERCAN_IMAGE:$FEEDERCAN_TAG
7682
else
7783
echo "Error: Unsupported middleware type ($1)!"
7884
exit 1

.vscode/scripts/run-hvacservice.sh

Lines changed: 38 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
# Copyright (c) 2022 Robert Bosch GmbH and Microsoft Corporation
1+
#!/bin/bash
2+
# Copyright (c) 2022-2023 Robert Bosch GmbH and Microsoft Corporation
23
#
34
# This program and the accompanying materials are made available under the
45
# terms of the Apache License, Version 2.0 which is available at
@@ -13,46 +14,48 @@
1314
# SPDX-License-Identifier: Apache-2.0
1415

1516
echo "#######################################################"
16-
echo "### Running HVAC Service from VAL ###"
17+
echo "### Running HVAC Service ###"
1718
echo "#######################################################"
1819

1920
ROOT_DIRECTORY=$( realpath "$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )/../.." )
2021
source $ROOT_DIRECTORY/.vscode/scripts/exec-check.sh "$@" $(basename $BASH_SOURCE .sh)
2122

22-
SERVICE_VERSION=$(cat $ROOT_DIRECTORY/prerequisite_settings.json | jq .hvacservice.version | tr -d '"')
23-
SERVICE_PORT='50052'
24-
SERVICE_GRPC_PORT='52005'
25-
HVACSERVICE_DAPR_APP_ID='hvacservice'
23+
HVACSERVICE_IMAGE=$(cat $ROOT_DIRECTORY/prerequisite_settings.json | jq .hvacservice.image | tr -d '"')
24+
HVACSERVICE_TAG=$(cat $ROOT_DIRECTORY/prerequisite_settings.json | jq .hvacservice.version | tr -d '"')
2625

27-
VEHICLEDATABROKER_DAPR_APP_ID='vehicledatabroker'
28-
sudo chown $(whoami) $HOME
29-
30-
# Downloading Service Source
31-
SERVICE_SOURCE="hvacservice_source"
32-
SERVICE_EXEC_PATH="$ROOT_DIRECTORY/.vscode/scripts/assets/hvacservice/$SERVICE_VERSION"
33-
34-
API_URL=https://github.com/eclipse/kuksa.val.services/tarball
35-
36-
if [[ ! -f "$SERVICE_EXEC_PATH/hvac_service/hvacservice.py" ]]
26+
RUNNING_CONTAINER=$(docker ps | grep "$HVACSERVICE_IMAGE" | awk '{ print $1 }')
27+
if [ -n "$RUNNING_CONTAINER" ];
3728
then
38-
echo "Downloading Service Sources:$SERVICE_VERSION"
39-
curl --create-dirs -o "$ROOT_DIRECTORY/.vscode/scripts/assets/hvacservice/$SERVICE_VERSION/$SERVICE_SOURCE" --location --remote-header-name --remote-name "$API_URL/$SERVICE_VERSION"
40-
SERVICE_BASE_DIRECTORY=$(tar -tzf $ROOT_DIRECTORY/.vscode/scripts/assets/hvacservice/$SERVICE_VERSION/$SERVICE_SOURCE | head -1 | cut -f1 -d"/")
41-
tar -xf $ROOT_DIRECTORY/.vscode/scripts/assets/hvacservice/$SERVICE_VERSION/$SERVICE_SOURCE -C $ROOT_DIRECTORY/.vscode/scripts/assets/hvacservice/$SERVICE_VERSION/
42-
cp -r $ROOT_DIRECTORY/.vscode/scripts/assets/hvacservice/$SERVICE_VERSION/$SERVICE_BASE_DIRECTORY/hvac_service $ROOT_DIRECTORY/.vscode/scripts/assets/hvacservice/$SERVICE_VERSION
43-
rm -rf $ROOT_DIRECTORY/.vscode/scripts/assets/hvacservice/$SERVICE_VERSION/$SERVICE_BASE_DIRECTORY
29+
docker container stop $RUNNING_CONTAINER
4430
fi
45-
cd $ROOT_DIRECTORY/.vscode/scripts/assets/hvacservice/$SERVICE_VERSION/hvac_service
46-
pip3 install -r requirements.txt
4731

48-
export DAPR_GRPC_PORT=$SERVICE_GRPC_PORT
49-
export HVACSERVICE_DAPR_APP_ID=$HVACSERVICE_DAPR_APP_ID
50-
export VEHICLEDATABROKER_DAPR_APP_ID=$VEHICLEDATABROKER_DAPR_APP_ID
51-
52-
dapr run \
53-
--app-id hvacservice \
54-
--app-protocol grpc \
55-
--app-port $SERVICE_PORT \
56-
--dapr-grpc-port $SERVICE_GRPC_PORT \
57-
--components-path $ROOT_DIRECTORY/.dapr/components \
58-
--config $ROOT_DIRECTORY/.dapr/config.yaml -- python3 hvacservice.py
32+
export VEHICLEDATABROKER_DAPR_APP_ID=vehicledatabroker
33+
export VEHICLEDATABROKER_NATIVE_PORT=55555
34+
export SERVICE_PORT=50052
35+
36+
if [ $1 == "DAPR" ]; then
37+
echo "Run with Dapr ...!"
38+
dapr run \
39+
--app-id hvacservice \
40+
--app-protocol grpc \
41+
--app-port $SERVICE_PORT \
42+
--resources-path $ROOT_DIRECTORY/.dapr/components \
43+
--config $ROOT_DIRECTORY/.dapr/config.yaml \
44+
-- docker run \
45+
-e VEHICLEDATABROKER_DAPR_APP_ID \
46+
-e DAPR_GRPC_PORT \
47+
-e DAPR_HTTP_PORT \
48+
-e HVAC_ADDR="0.0.0.0:${SERVICE_PORT}" \
49+
--network host \
50+
$HVACSERVICE_IMAGE:$HVACSERVICE_TAG
51+
elif [ $1 == "NATIVE" ]; then
52+
echo "Run native ...!"
53+
docker run \
54+
-e DAPR_GRPC_PORT=$VEHICLEDATABROKER_NATIVE_PORT \
55+
-e HVAC_ADDR="0.0.0.0:${SERVICE_PORT}" \
56+
--network host \
57+
$HVACSERVICE_IMAGE:$HVACSERVICE_TAG
58+
else
59+
echo "Error: Unsupported middleware type ($1)!"
60+
exit 1
61+
fi

.vscode/scripts/run-mosquitto.sh

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#!/bin/bash
2-
# Copyright (c) 2022 Robert Bosch GmbH and Microsoft Corporation
2+
# Copyright (c) 2022-2023 Robert Bosch GmbH and Microsoft Corporation
33
#
44
# This program and the accompanying materials are made available under the
55
# terms of the Apache License, Version 2.0 which is available at
@@ -14,18 +14,20 @@
1414
# SPDX-License-Identifier: Apache-2.0
1515

1616
echo "#######################################################"
17-
echo "### Running Mosquitto ###"
17+
echo "### Running MQTT Broker ###"
1818
echo "#######################################################"
1919

2020
ROOT_DIRECTORY=$( realpath "$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )/../.." )
2121
source $ROOT_DIRECTORY/.vscode/scripts/exec-check.sh "$@" $(basename $BASH_SOURCE .sh)
2222

23-
#Terminate existing running VAL services
24-
RUNNING_CONTAINER=$(docker ps | grep "eclipse-mosquitto" | awk '{ print $1 }')
25-
MOSQUITTO_VERSION=$(cat $ROOT_DIRECTORY/prerequisite_settings.json | jq .mosquitto.version | tr -d '"')
23+
MOSQUITTO_IMAGE=$(cat $ROOT_DIRECTORY/prerequisite_settings.json | jq .mosquitto.image | tr -d '"')
24+
MOSQUITTO_TAG=$(cat $ROOT_DIRECTORY/prerequisite_settings.json | jq .mosquitto.version | tr -d '"')
2625

26+
#Terminate existing running services
27+
RUNNING_CONTAINER=$(docker ps | grep "$MOSQUITTO_IMAGE" | awk '{ print $1 }')
2728
if [ -n "$RUNNING_CONTAINER" ];
2829
then
2930
docker container stop $RUNNING_CONTAINER
3031
fi
31-
docker run -p 1883:1883 -p 9001:9001 eclipse-mosquitto:$MOSQUITTO_VERSION
32+
33+
docker run -p 1883:1883 -p 9001:9001 $MOSQUITTO_IMAGE:$MOSQUITTO_TAG mosquitto -c /mosquitto-no-auth.conf

0 commit comments

Comments
 (0)