diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 00000000..fcc37b2b --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,37 @@ +# /******************************************************************************** +# * Copyright (c) 2024 Contributors to the Eclipse Foundation +# * +# * See the NOTICE file(s) distributed with this work for additional +# * information regarding copyright ownership. +# * +# * This program and the accompanying materials are made available under the +# * terms of the Apache License 2.0 which is available at +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * SPDX-License-Identifier: Apache-2.0 +# ********************************************************************************/ + +FROM mcr.microsoft.com/devcontainers/rust:1-1-bookworm +ARG DEBIAN_FRONTEND=noninteractive +ENV CROSS_CONTAINER_IN_CONTAINER=true +ENV TZ=Europe/Berlin +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone +RUN apt-get update -y +RUN apt install software-properties-common build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev curl git libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev -y + +USER vscode +RUN cargo install cross cargo-license cargo-cyclonedx + +# Installing pyEnv to set up specific version of Python +ENV HOME=/home/vscode +WORKDIR ${HOME} +RUN git clone --depth=1 https://github.com/pyenv/pyenv.git .pyenv +ENV PYENV_ROOT="${HOME}/.pyenv" +ENV PATH="${PYENV_ROOT}/shims:${PYENV_ROOT}/bin:${PATH}" +ENV PYTHON_VERSION=3.12 +RUN pyenv install ${PYTHON_VERSION} +RUN pyenv global ${PYTHON_VERSION} + +# Fails due to gpg keyserver not accessible via corporate proxy +# Moved to postStartCommand.sh for DevContainer +# RUN pip install "git+https://github.com/eclipse-kuksa/kuksa-common.git@v1#subdirectory=sbom-tools" diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 00000000..30f6768d --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,19 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the +// README at: https://github.com/devcontainers/templates/tree/main/src/rust +{ + "name": "Kuksa DevContainer", + "build": { + "dockerfile": "Dockerfile" + }, + "features": { + "ghcr.io/devcontainers/features/docker-in-docker:2": {} + }, + "postStartCommand": "bash .devcontainer/postStartCommand.sh", + "mounts": [ + { + "target": "/var/run/docker.sock", + "source": "/var/run/docker.sock", + "type": "bind" + } + ] +} diff --git a/.devcontainer/postStartCommand.sh b/.devcontainer/postStartCommand.sh new file mode 100755 index 00000000..4f3091d4 --- /dev/null +++ b/.devcontainer/postStartCommand.sh @@ -0,0 +1,15 @@ +#!/bin/bash +# +# Copyright (c) 2024 Contributors to the Eclipse Foundation +# +# Building all currently supported targets for databroker-cli. +# Uses cross for cross-compiling. Needs to be executed +# before docker build, as docker collects the artifacts +# created by this script +# this needs the have cross, cargo-license and kuksa sbom helper +# installed +# +# SPDX-License-Identifier: Apache-2.0 + +pip install "git+https://github.com/eclipse-kuksa/kuksa-common.git@v1#subdirectory=sbom-tools" +pip install pre-commit diff --git a/.github/workflows/create_draft_release.yml b/.github/workflows/create_draft_release.yml index 221d5f9d..e46a7ca4 100644 --- a/.github/workflows/create_draft_release.yml +++ b/.github/workflows/create_draft_release.yml @@ -61,6 +61,11 @@ jobs: secrets: QUAY_IO_TOKEN: ${{ secrets.QUAY_IO_TOKEN }} QUAY_IO_USERNAME: ${{ secrets.QUAY_IO_USERNAME }} + call_debug_build: + uses: ./.github/workflows/debug_build.yml + secrets: + QUAY_IO_TOKEN: ${{ secrets.QUAY_IO_TOKEN }} + QUAY_IO_USERNAME: ${{ secrets.QUAY_IO_USERNAME }} create_release: runs-on: ubuntu-latest @@ -69,6 +74,7 @@ jobs: get_version, call_kuksa_databroker_build, call_kuksa_databroker-cli_build, + call_debug_build, ] steps: - name: Checkout diff --git a/.github/workflows/debug_build.yml b/.github/workflows/debug_build.yml new file mode 100644 index 00000000..8dfa68dd --- /dev/null +++ b/.github/workflows/debug_build.yml @@ -0,0 +1,318 @@ +# /******************************************************************************** +# * Copyright (c) 2024 Contributors to the Eclipse Foundation +# * +# * See the NOTICE file(s) distributed with this work for additional +# * information regarding copyright ownership. +# * +# * This program and the accompanying materials are made available under the +# * terms of the Apache License 2.0 which is available at +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * SPDX-License-Identifier: Apache-2.0 +# ********************************************************************************/ + +name: Debug build databroker + +on: + push: + branches: [ main] + pull_request: + workflow_call: + secrets: + QUAY_IO_TOKEN: + required: true + QUAY_IO_USERNAME: + required: true + workflow_dispatch: + +# suffix to avoid cancellation when running from release workflow +concurrency: + group: ${{ github.ref }}-${{ github.workflow }}-databroker-debug + cancel-in-progress: true + +# Needed as default_workflow_permissions is "read" +permissions: + packages: write + +jobs: + lint: + name: Lint + runs-on: ubuntu-latest + env: + CARGO_TERM_COLOR: always + steps: + - uses: actions/checkout@v4 + - uses: actions/cache@v4 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + ~/.cargo/.crates.toml + ~/.cargo/.crates2.json + target/ + key: databroker-lint-${{ hashFiles('**/Cargo.lock') }} + - name: Show toolchain information + working-directory: ${{github.workspace}} + run: | + rustup toolchain list + cargo --version + - name: cargo fmt + working-directory: ${{github.workspace}} + run: cargo fmt -- --check + - name: cargo clippy + working-directory: ${{github.workspace}} + run: cargo clippy --all-targets -- -W warnings -D warnings + - name: cargo clippy (feature viss) + working-directory: ${{github.workspace}} + run: cargo clippy --features viss --all-targets -- -W warnings -D warnings + + + kuksa-lib: + name: Build Kuksa lib + runs-on: ubuntu-latest + env: + CARGO_TERM_COLOR: always + steps: + - uses: actions/checkout@v4 + - uses: actions/cache@v4 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + ~/.cargo/.crates.toml + ~/.cargo/.crates2.json + target/ + key: databroker-lint-${{ hashFiles('**/Cargo.lock') }} + - name: Show toolchain information + working-directory: ${{github.workspace}} + run: | + rustup toolchain list + cargo --version + - name: Build lib + working-directory: ${{github.workspace}} + run: | + cd lib + cargo build --release + + test: + name: Run unit tests + runs-on: ubuntu-latest + env: + CARGO_TERM_COLOR: always + steps: + - uses: actions/checkout@v4 + - uses: actions/cache@v4 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + ~/.cargo/.crates.toml + ~/.cargo/.crates2.json + ~/.cache/pip/ + target/ + key: databroker-coverage-${{ hashFiles('**/Cargo.lock') }} + - name: Install cargo-llvm-cov + uses: taiki-e/install-action@cargo-llvm-cov + - name: Generate code coverage + run: cargo llvm-cov --all-features --workspace --lcov --output-path lcov.info + - name: Upload coverage to Codecov + # Uploaded result available at https://app.codecov.io/gh/eclipse-kuksa/kuksa-databroker + uses: codecov/codecov-action@v4 + with: + files: lcov.info + token: ${{ secrets.CODECOV_TOKEN }} + + build: + name: Build + runs-on: ubuntu-latest + env: + CARGO_TERM_COLOR: always + strategy: + matrix: + platform: + - name: amd64 + - name: arm64 + - name: riscv64 + steps: + - uses: actions/checkout@v4 + + - uses: actions/cache@v4 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + ~/.cargo/.crates.toml + ~/.cargo/.crates2.json + target-*/ + key: databroker-release-${{ matrix.platform.name }}-${{ hashFiles('**/Cargo.lock') }} + - uses: actions/setup-python@v5 + # Needed for pip + with: + python-version: '3.12' + - name: Install build prerequisites + working-directory: ${{github.workspace}}/ + run: | + cargo install cross cargo-license cargo-cyclonedx + pip install "git+https://github.com/eclipse-kuksa/kuksa-common.git@v1#subdirectory=sbom-tools" + - name: Build + working-directory: ${{github.workspace}} + env: + KUKSA_DATABROKER_FEATURES: databroker/viss,databroker/tls + KUKSA_DATABROKER_SBOM: y + run: | + export KUKSA_DATABROKER_PROFILE=release-with-debug + ./scripts/build-databroker.sh ${{ matrix.platform.name }} + + - name: Find debug symbol for receiving signal updates + run: | + export DEBUGSYMBOL=$(nm ${{github.workspace}}/dist/${{ matrix.platform.name }}/databroker | grep -E 'DatabaseWriteAccess.*update[^_]+' | cut -d' ' -f3) + echo ${DEBUGSYMBOL} > ${{github.workspace}}/dist/${{ matrix.platform.name }}/debugsymbols.txt + echo "Debug Symbol for eBPF Tracing: ${DEBUGSYMBOL}" >> $GITHUB_STEP_SUMMARY + + - name: "Archiving artifacts" + shell: bash + working-directory: ${{github.workspace}}/dist/${{ matrix.platform.name }} + run: | + tar -czf ../databroker-${{ matrix.platform.name }}-release-with-debug.tar.gz * + + - name: "Uploading artifacts" + uses: actions/upload-artifact@v4 + with: + name: databroker-${{ matrix.platform.name }}-release-with-debug + path: ${{github.workspace}}/dist/databroker-${{ matrix.platform.name}}-release-with-debug.tar.gz + if-no-files-found: error + + check_ghcr_push: + name: Check access rights + uses: eclipse-kuksa/kuksa-actions/.github/workflows/check_ghcr_push.yml@4 + secrets: inherit + + create-container: + name: Create multiarch container + runs-on: ubuntu-latest + + needs: [build, check_ghcr_push] + + steps: + - uses: actions/checkout@v4 + - name: Retrieve artifacts + uses: actions/download-artifact@v4 + with: + path: artifacts + pattern: databroker-* + merge-multiple: true + + - name: Unpack binaries + run: | + mkdir -p dist/amd64 dist/arm64 dist/riscv64 + tar xf artifacts/databroker-arm64-release-with-debug.tar.gz -C dist/arm64 + tar xf artifacts/databroker-amd64-release-with-debug.tar.gz -C dist/amd64 + tar xf artifacts/databroker-riscv64-release-with-debug.tar.gz -C dist/riscv64 + + - name: Set container metadata + id: meta + uses: docker/metadata-action@v5 + with: + # list of Docker images to use as base name for tags + images: | + ghcr.io/eclipse-kuksa/kuksa-databroker-release-with-debug + quay.io/eclipse-kuksa/kuksa-databroker-release-with-debug + # generate Docker tags based on the following events/attributes + tags: | + type=ref,event=branch + type=ref,event=pr + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=semver,pattern={{major}} + + - name: Setup Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to ghcr.io container registry + if: needs.check_ghcr_push.outputs.push == 'true' + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Log in to quay.io container registry + if: needs.check_ghcr_push.outputs.push == 'true' + uses: docker/login-action@v3 + with: + registry: quay.io + username: ${{ secrets.QUAY_IO_USERNAME }} + password: ${{ secrets.QUAY_IO_TOKEN }} + + - name: Build kuksa-databroker container and push to ghcr.io, quay.io and ttl.sh + id: ghcr-build + if: needs.check_ghcr_push.outputs.push == 'true' + uses: docker/build-push-action@v5 + with: + platforms: | + linux/amd64 + linux/arm64 + linux/riscv64 + file: ./scripts/Dockerfile + context: . + push: true + tags: | + ${{ steps.meta.outputs.tags }} + ttl.sh/eclipse-kuksa/kuksa-databroker-${{github.sha}}-release-with-debug + labels: ${{ steps.meta.outputs.labels }} + # Provenance to solve that an unknown/unkown image is shown on ghcr.io + # Same problem as described in https://github.com/orgs/community/discussions/45969 + provenance: false + + - name: Build ephemeral kuksa-databroker container and push to ttl.sh + if: needs.check_ghcr_push.outputs.push == 'false' + id: tmp-build + uses: docker/build-push-action@v5 + with: + platforms: | + linux/amd64 + linux/arm64 + linux/riscv64 + file: ./scripts/Dockerfile + context: . + push: true + tags: "ttl.sh/eclipse-kuksa/kuksa-databroker-${{github.sha}}-release-with-debug" + labels: ${{ steps.meta.outputs.labels }} + # Provenance to solve that an unknown/unkown image is shown on ghcr.io + # Same problem as described in https://github.com/orgs/community/discussions/45969 + provenance: false + + - name: Posting message + uses: eclipse-kuksa/kuksa-actions/post-container-location@4 + with: + image: ttl.sh/eclipse-kuksa/kuksa-databroker-${{github.sha}}-release-with-debug + + integration-test: + name: Run integration test + runs-on: ubuntu-latest + needs: [create-container] + strategy: + matrix: + platform: ["arm64", "amd64", "riscv64"] + + steps: + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - uses: actions/checkout@v4 + + - name: Run integration test on ${{ matrix.platform }} container + env: + DATABROKER_IMAGE: ttl.sh/eclipse-kuksa/kuksa-databroker-${{github.sha}}-release-with-debug + CONTAINER_PLATFORM: linux/${{ matrix.platform }} + run: | + ${{github.workspace}}/integration_test/run.sh diff --git a/.gitignore b/.gitignore index d22c11d0..33628b2d 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,5 @@ __pycache__ databroker/thirdparty databroker-cli/thirdparty .venv/ +databroker/databroker_bin.cdx.json +databroker-cli/databroker-cli_bin.cdx.json diff --git a/Cargo.lock b/Cargo.lock index e2c18b2a..cc557db0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -603,7 +603,7 @@ checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" [[package]] name = "databroker" -version = "0.6.0-dev.0" +version = "0.5.0-dev.1" dependencies = [ "anyhow", "async-trait", @@ -640,7 +640,7 @@ dependencies = [ [[package]] name = "databroker-cli" -version = "0.6.0-dev.0" +version = "0.5.0-dev.1" dependencies = [ "ansi_term", "clap", @@ -660,7 +660,7 @@ dependencies = [ [[package]] name = "databroker-proto" -version = "0.6.0-dev.0" +version = "0.5.0-dev.1" dependencies = [ "prost", "prost-types", @@ -1940,7 +1940,7 @@ dependencies = [ [[package]] name = "kuksa" -version = "0.6.0-dev.0" +version = "0.5.0-dev.1" dependencies = [ "databroker-proto", "http", @@ -1952,7 +1952,7 @@ dependencies = [ [[package]] name = "kuksa-common" -version = "0.6.0-dev.0" +version = "0.5.0-dev.1" dependencies = [ "databroker-proto", "http", @@ -1963,7 +1963,7 @@ dependencies = [ [[package]] name = "kuksa-sdv" -version = "0.6.0-dev.0" +version = "0.5.0-dev.1" dependencies = [ "databroker-proto", "http", diff --git a/databroker-cli/Cargo.toml b/databroker-cli/Cargo.toml index 59f146c7..d5f0b6b0 100644 --- a/databroker-cli/Cargo.toml +++ b/databroker-cli/Cargo.toml @@ -13,7 +13,7 @@ [package] name = "databroker-cli" -version = "0.6.0-dev.0" +version = "0.5.0-dev.1" authors = ["Eclipse KUKSA Project"] edition = "2021" license = "Apache-2.0" diff --git a/databroker-proto/Cargo.toml b/databroker-proto/Cargo.toml index a038556e..dcc0e7c8 100644 --- a/databroker-proto/Cargo.toml +++ b/databroker-proto/Cargo.toml @@ -13,7 +13,7 @@ [package] name = "databroker-proto" -version = "0.6.0-dev.0" +version = "0.5.0-dev.1" authors = ["Eclipse KUKSA Project"] edition = "2021" license = "Apache-2.0" diff --git a/databroker/Cargo.toml b/databroker/Cargo.toml index 2cf7f8b6..a7d190c2 100644 --- a/databroker/Cargo.toml +++ b/databroker/Cargo.toml @@ -13,7 +13,7 @@ [package] name = "databroker" -version = "0.6.0-dev.0" +version = "0.5.0-dev.1" authors = ["Eclipse KUKSA Project"] edition = "2021" license = "Apache-2.0" diff --git a/databroker/src/broker.rs b/databroker/src/broker.rs index ec6bb3db..c0e05788 100644 --- a/databroker/src/broker.rs +++ b/databroker/src/broker.rs @@ -1670,10 +1670,13 @@ impl<'a, 'b> AuthorizedAccess<'a, 'b> { .await .add_change_subscription(subscription); - let stream = BroadcastStream::new(receiver).filter_map(|result| match result { + let stream = BroadcastStream::new(receiver).filter_map(move |result| match result { Ok(message) => Some(message), Err(err) => { - debug!("Lagged entries: {}", err); + warn!( + "Slow subscriber with capacity {} lagged and missed signal updates: {}", + channel_capacity, err + ); None } }); diff --git a/lib/Cargo.lock b/lib/Cargo.lock index e56be362..b792db35 100644 --- a/lib/Cargo.lock +++ b/lib/Cargo.lock @@ -185,9 +185,20 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "databroker-examples" +version = "0.1.0" +dependencies = [ + "kuksa", + "kuksa-common", + "kuksa-sdv", + "tokio", + "tokio-stream", +] + [[package]] name = "databroker-proto" -version = "0.6.0-dev.0" +version = "0.5.0-dev.1" dependencies = [ "prost", "prost-types", @@ -442,7 +453,7 @@ checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "kuksa" -version = "0.6.0-dev.0" +version = "0.5.0-dev.1" dependencies = [ "databroker-proto", "http", @@ -454,7 +465,7 @@ dependencies = [ [[package]] name = "kuksa-common" -version = "0.6.0-dev.0" +version = "0.5.0-dev.1" dependencies = [ "databroker-proto", "http", @@ -465,7 +476,7 @@ dependencies = [ [[package]] name = "kuksa-sdv" -version = "0.6.0-dev.0" +version = "0.5.0-dev.1" dependencies = [ "databroker-proto", "http", @@ -487,6 +498,16 @@ version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + [[package]] name = "log" version = "0.4.22" @@ -553,6 +574,29 @@ version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +[[package]] +name = "parking_lot" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets", +] + [[package]] name = "percent-encoding" version = "2.3.1" @@ -730,6 +774,15 @@ dependencies = [ "getrandom", ] +[[package]] +name = "redox_syscall" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" +dependencies = [ + "bitflags 2.6.0", +] + [[package]] name = "regex" version = "1.11.1" @@ -839,6 +892,12 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + [[package]] name = "serde" version = "1.0.215" @@ -865,6 +924,15 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "signal-hook-registry" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +dependencies = [ + "libc", +] + [[package]] name = "slab" version = "0.4.9" @@ -874,6 +942,12 @@ dependencies = [ "autocfg", ] +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + [[package]] name = "socket2" version = "0.5.7" @@ -936,7 +1010,9 @@ dependencies = [ "bytes", "libc", "mio", + "parking_lot", "pin-project-lite", + "signal-hook-registry", "socket2", "tokio-macros", "windows-sys 0.52.0", diff --git a/lib/Cargo.toml b/lib/Cargo.toml index 0aa82b4c..0f83dbca 100644 --- a/lib/Cargo.toml +++ b/lib/Cargo.toml @@ -4,7 +4,8 @@ resolver = "2" members = [ "common", "kuksa", - "sdv" + "sdv", + "databroker-examples" ] [workspace.dependencies] diff --git a/lib/common/Cargo.toml b/lib/common/Cargo.toml index cdb532bc..45eeb90c 100644 --- a/lib/common/Cargo.toml +++ b/lib/common/Cargo.toml @@ -13,7 +13,7 @@ [package] name = "kuksa-common" -version = "0.6.0-dev.0" +version = "0.5.0-dev.1" authors = ["Eclipse KUKSA Project"] edition = "2021" license = "Apache-2.0" diff --git a/lib/databroker-examples/Cargo.toml b/lib/databroker-examples/Cargo.toml new file mode 100644 index 00000000..fef04772 --- /dev/null +++ b/lib/databroker-examples/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "databroker-examples" +version = "0.1.0" +edition = "2021" + +[dependencies] +kuksa-common = { path = "../common"} +kuksa = { path = "../kuksa"} +kuksa-sdv = { path = "../sdv"} +tokio = {version = "1.17.0", features = ["full"]} +tokio-stream = "0.1.8" diff --git a/lib/databroker-examples/examples/slow_subscriber.rs b/lib/databroker-examples/examples/slow_subscriber.rs new file mode 100644 index 00000000..2575f834 --- /dev/null +++ b/lib/databroker-examples/examples/slow_subscriber.rs @@ -0,0 +1,49 @@ +/******************************************************************************** +* Copyright (c) 2024 Contributors to the Eclipse Foundation +* +* See the NOTICE file(s) distributed with this work for additional +* information regarding copyright ownership. +* +* This program and the accompanying materials are made available under the +* terms of the Apache License 2.0 which is available at +* http://www.apache.org/licenses/LICENSE-2.0 +* +* SPDX-License-Identifier: Apache-2.0 +********************************************************************************/ + +use kuksa::KuksaClient; +use tokio::time::{sleep, Duration}; +use kuksa_common::to_uri; +use std::thread; + +#[tokio::main] +async fn main() { + + // Paths to subscribe + let paths = vec!["Vehicle.Speed"]; + + // Initialize the KuksaClient + let mut client: KuksaClient = KuksaClient::new(to_uri("127.0.0.1:55555").unwrap()); + + // Subscribe to paths + let mut stream = client.subscribe(paths.clone()).await.unwrap(); + + println!("Subscribed to {:?}", paths); + + loop { + match stream.message().await { + Ok(msg) => { + println!("Got message, will wait 5 seconds: {:?}", msg); + // Simulate slow processing by sleeping + sleep(Duration::from_secs(1)).await; + thread::sleep(Duration::from_secs(5)); + } + Err(e) => { + println!("Error while receiving message: {:?}", e); + break; // Exit loop on error + } + } + } + + println!("Exiting subscriber..."); +} \ No newline at end of file diff --git a/lib/kuksa/Cargo.toml b/lib/kuksa/Cargo.toml index c1796cb8..013f2aa2 100644 --- a/lib/kuksa/Cargo.toml +++ b/lib/kuksa/Cargo.toml @@ -13,7 +13,7 @@ [package] name = "kuksa" -version = "0.6.0-dev.0" +version = "0.5.0-dev.1" authors = ["Eclipse KUKSA Project"] edition = "2021" license = "Apache-2.0" diff --git a/lib/sdv/Cargo.toml b/lib/sdv/Cargo.toml index a8a3b702..02cacc36 100644 --- a/lib/sdv/Cargo.toml +++ b/lib/sdv/Cargo.toml @@ -13,7 +13,7 @@ [package] name = "kuksa-sdv" -version = "0.6.0-dev.0" +version = "0.5.0-dev.1" authors = ["Eclipse KUKSA Project"] edition = "2021" license = "Apache-2.0" diff --git a/scripts/build-databroker.sh b/scripts/build-databroker.sh index 7567d913..fc5950e8 100755 --- a/scripts/build-databroker.sh +++ b/scripts/build-databroker.sh @@ -44,7 +44,9 @@ # https://github.com/eclipse-kuksa/kuksa-common/tree/main/sbom-tools # to be available # - +# KUKSA_DATABROKER_PROFILE +# Set the cargo profile to use. Defaults to "release" +# # exit on error, to not waste any time set -e @@ -72,6 +74,12 @@ if [ -z "$KUKSA_DATABROKER_FEATURES" ]; then KUKSA_DATABROKER_FEATURES="databroker/default" fi +# Check if a certain profile is requested +if [ -z "$KUKSA_DATABROKER_PROFILE" ]; then + # If not set, assign a default value + KUKSA_DATABROKER_PROFILE="release" +fi + SBOM=0 # Check whether to build SBOM if [ ! -z "$KUKSA_DATABROKER_SBOM" ]; then @@ -111,13 +119,16 @@ function build_target() { # /target/release/build/libc-2dd22ab6b5fb9fd2/build-script-build: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.29' not found (required by /target/release/build/libc-2dd22ab6b5fb9fd2/build-script-build) # # this is solved by using different target-dirs for each platform + echo "Environmant variables related to the build:" + env | grep -i -E 'cargo|cross|kuksa' + echo "Building databroker for target $target_rust" - cross build --target $target_rust --target-dir ./target-$target_docker --features $KUKSA_DATABROKER_FEATURES --bin databroker --release + cross build --target $target_rust --target-dir ./target-$target_docker --features $KUKSA_DATABROKER_FEATURES --bin databroker --profile ${KUKSA_DATABROKER_PROFILE} echo "Prepare $target_docker dist folder" rm -rf ./dist/$target_docker || true mkdir ./dist/$target_docker - cp ./target-$target_docker/$target_rust/release/databroker ./dist/$target_docker + cp ./target-$target_docker/$target_rust/${KUKSA_DATABROKER_PROFILE}/databroker ./dist/$target_docker if [[ $SBOM -eq 1 ]]; then echo "Create $target_rust SBOM"