rosotacom-dev 2.5.dev70__tar.gz → 2.5.dev71__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/PKG-INFO +1 -1
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/ota-pcap.md +10 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/ota_pcap.py +42 -5
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom_dev.egg-info/PKG-INFO +1 -1
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom_dev.egg-info/scm_version.json +2 -2
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_ota_pcap.py +42 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/.devcontainer/devcontainer.json.template +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/.devcontainer/re_generate_devcontainer_json.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/.github/CODEOWNERS +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/.github/ISSUE_TEMPLATE/documentation-audit.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/.github/ISSUE_TEMPLATE/implementation-cleanup.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/.github/ISSUE_TEMPLATE/quality-workflow.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/.github/ISSUE_TEMPLATE/redesign.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/.github/ISSUE_TEMPLATE/release-process.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/.github/ISSUE_TEMPLATE/repository-diagnosis.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/.github/ISSUE_TEMPLATE/test-ci-audit.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/.github/ISSUE_TEMPLATE/work-item.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/.github/actions/setup-just/action.yml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/.github/dependabot.yml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/.github/workflows/benchmark-calibrate.yml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/.github/workflows/benchmark-gate.yml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/.github/workflows/dev-release.yml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/.github/workflows/image-scan.yml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/.github/workflows/nightly-e2e.yml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/.github/workflows/pr-lightweight.yml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/.github/workflows/pr-merge-gate.yml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/.github/workflows/release.yml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/.pre-commit-config.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/AGENTS.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/CONCURRENCY.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/CONTRIBUTING.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/DEVELOPMENT_PRINCIPLES.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/LICENSE.txt +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/MANIFEST.in +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/README.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/budgets.jsonl +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/calibration/README.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/calibration/capacity-size-tight-cyclone.json +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/calibration/probe-loss-gop-tight-cyclone.json +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/calibration/probe-loss-nominal-cyclone.json +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/calibration/probe-loss-tight-cyclone.json +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/calibration/probe-loss-tight-fastdds.json +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/calibration/probe-loss-tight-zenoh.json +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/codecov.yml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/deployment-configuration.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/benchmark-ab.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/benchmark-bag-as-load.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/ci.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/ffmpeg-keyframes.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/findings/README.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/findings/a-transport-element-doubles-every-fastdds-sample.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/findings/cyclone-fragment-equal-to-max-drops-fragmented-samples.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/findings/cyclone-spdp-discovery-bursts.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/findings/delay-alone-no-loss.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/findings/fastdds-datagram-cap-drops-large-samples.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/findings/graph-derived-types-block-a-non-graph-transport.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/findings/head-of-line-irregularity.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/findings/jitter-loss-bandwidth-latency.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/findings/keyframe-loss-kills-the-next-deltas.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/findings/lifespan-is-enforced-by-one-reader-and-not-the-other.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/findings/lighter-message-loss.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/findings/one-domain-two-cyclone-configs-stop-interoperating.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/findings/oversubscription-queues-not-losses.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/findings/reorder-becomes-reader-loss.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/findings/repro/decode_chain_repro.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/findings/repro/reorder_drop_repro.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/findings/sender-rows-make-a-dead-link-look-loss-free.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/findings/zero-loss-boundaries-18kb-20hz.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/forensics-report.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/geo-link-map.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/github-repository-settings.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/link-bandwidth.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/link-trace.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/owner-runbook.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/performance-bands.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/playbooks/README.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/quality-model.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/release-notes/TEMPLATE.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/release-notes/v2.1.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/release-notes/v2.2.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/release-notes/v2.3.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/release-notes/v2.4.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/release.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/rfcs/0001-expectation-driven-test-suite.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/rfcs/0002-expectation-concepts.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/rfcs/0003-metric-backbone.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/rfcs/0004-network-profiles.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/rfcs/0005-benchmark-genres-and-ci.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/rfcs/0006-dynamic-qos.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/rfcs/0007-regression-gate.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/rfcs/README.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/testing.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/work-items.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/install.sh +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/justfile +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/media/control_center.png +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/media/echo_test.png +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/media/forensics-report-example.png +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/media/host.png +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/media/vehicle.png +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/pyproject.toml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/requirements.txt +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/rosotacom.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/session-configuration.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/setup.cfg +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/__init__.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/__main__.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/anonymize.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/bag_ground_truth.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/benched_set.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/benchmark.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/benchmark_delta.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/bundle_check.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/cli.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/cli_benchmark.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/deployment.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/ffmpeg_packet.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/forensics.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/geomap.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/image_cache.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/netem_dist.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/network_preflight.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/network_profiles.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/network_shaper.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/plots.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/py.typed +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/benched-set.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/.gitignore +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/README.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/__init__.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/bags/8_drop_reference/metadata.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/deployment.example.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/dist/field-20260817.dist +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/profiles.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/ros2docker.lyrical.json +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/rosotacom.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scenarios/2_native_chatter/scenario-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/1_heartbeat/run_machine_a.sh +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/1_heartbeat/run_machine_b.sh +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/external.lyrical.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/run_external.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/wait_for_echo_topic.sh +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_b/external.lyrical.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_b/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_b/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_b/run_external.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/external_session.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/foxglove.json +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/run_external.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/costmap_1second/costmap_1second_0.mcap +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/costmap_1second/metadata.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/run_external.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/external_session.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/foxglove.json +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/run_external.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/costmap_1second/costmap_1second_0.mcap +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/costmap_1second/metadata.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/run_external.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/external_session.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/run_external.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/external_session.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/run_external.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/external_session.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/run_external.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/external_session.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/run_external.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/sessions/10_restamp/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/sessions/11_trickle/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/sessions/12_content_integrity/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/sessions/13_link_latency/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/sessions/14_remote_assist_anonymized/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/sessions/15_remote_assist_anonymized_costmap/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/sessions/16_remote_assist_anonymized_camera/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/sessions/17_synthetic_camera_quality/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/sessions/1_heartbeat/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/sessions/1_heartbeat_status/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/sessions/2_native_chatter/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/sessions/3_comp_occ_grid/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/sessions/4_comp_occ_grid_zen/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/sessions/5_sized_payload/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/sessions/6_sized_payload_zen/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/sessions/7_latched_static/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/sessions/8_drop/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/sessions/9_throttle/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/sessions/bench_1_1_capacity/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/sessions/bench_1_2_load_sweep/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/sessions/bench_1_3_ramp/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/sessions/bench_1_4_recovery/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/sessions/bench_1_5_camera/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ros2docker.json.example +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ros2docker.lyrical.json.example +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/.vscode/c_cpp_properties.json +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/.vscode/settings.json +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_easy_mode.xml.template +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_initial_peer_list.xml.template +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v2.xml.template +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v3.xml.template +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v4.xml.template +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v5.xml.template +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ota_configs/create_zenoh_json5.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ota_configs/cyclonedds_local_participants.xml.template +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ota_configs/cyclonedds_minimal.xml.template +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ota_configs/cyclonedds_scoped.xml.template +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ota_configs/cyclonedds_tuned.xml.template +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ota_configs/fastdds_easy_mode.xml.template +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ota_configs/fastdds_local.xml.template +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ota_configs/fastdds_tuned.xml.template +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ota_configs/fastdds_unicast.xml.template +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ota_configs/get_ota_xml.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ota_configs/utils.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ota_configs/zenoh.json5.template +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/.gitkeep +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_cpp/CMakeLists.txt +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_cpp/COLCON_IGNORE +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_cpp/LICENSE.txt +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_cpp/package.xml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_cpp/src/hz_monitor.cpp +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_cpp/src/universal_compressor.cpp +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_cpp/src/universal_decompressor.cpp +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_msgs/CMakeLists.txt +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_msgs/LICENSE.txt +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/CompressedData.msg +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/EchoHeartbeat.msg +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/OtaStamped.msg +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/SizedPayload.msg +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_msgs/package.xml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/LICENSE.txt +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/__init__.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/base_bridge_relay.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/bridge_in.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/bridge_out.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/ffmpeg_flags.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/heartbeat_echo.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/hz_monitor.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/image_bandwidth_reducer.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/image_pixel_capper.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/lanelet_saver.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/latch_relay.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/costmap_remapper.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/marker_remapper.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/speed_test.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/tf_remapper.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/traffic_monitor.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/wifi_network_analysis_1.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/link_bytes.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/link_trace.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/local_global_frame_bridge.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/localization_map_split_reduce_saver.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/msg_transform.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/pair_management.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/playout_pacer.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/playout_pacer_core.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/pub_sub_pair.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/qos.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/relay_in.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/relay_out.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/restamp.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/sized_publisher.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/stage_latency.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/stage_latency_core.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/status_overview.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/status_overview_core.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/tf_map_to_cart_saver.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/topic_monitor.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/topic_resolution.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/trickle.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_compressor.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_decompressor.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_ota_unwrapper.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_ota_wrapper.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/package.xml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/resource/com_py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/setup.cfg +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/setup.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/test/test_copyright.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/test/test_flake8.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/ros2src/com_py/test/test_pep257.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/session/content/base/session_plugin_base.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/session/content/network/up_connectivity.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/session/content/network/wifi_network_analysis_2.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/session/creation/anonymize_bag.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/session/creation/catmux_log_setup.sh +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/session/creation/create_session_yaml.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/session/creation/generate_session_files.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/session/creation/run_session.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/session/creation/run_session_in_external_terminal.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/ws/session/creation/strip_ansi.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/status_eval.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/stream_stats.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/trace_profiles.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/transit.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/video_quality.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom_dev.egg-info/SOURCES.txt +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom_dev.egg-info/dependency_links.txt +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom_dev.egg-info/entry_points.txt +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom_dev.egg-info/requires.txt +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom_dev.egg-info/scm_file_list.json +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom_dev.egg-info/top_level.txt +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/terminology.md +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/contract/test_benched_set_registry.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/contract/test_findings.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/contract/test_generated_topics_have_a_producer.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/contract/test_lyrical_runtime_compat.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/contract/test_markdown_links.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/contract/test_ota_source_bundle.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/contract/test_package_metadata.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/contract/test_packaged_resources.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/contract/test_profile_covers_generated_commands.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/contract/test_pytest_policy.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/contract/test_readme_examples.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/contract/test_security_maintenance_config.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/contract/test_session_configuration_doc.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/contract/test_session_template_substitution.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/contract/test_workflow_contracts.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/e2e/conftest.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/e2e/test_anonymize_e2e.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/e2e/test_benchmark_ab.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/e2e/test_benchmark_capacity.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/e2e/test_benchmark_replay.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/e2e/test_parallel_smoke.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/e2e/test_smoke.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/e2e/test_timeline_stepping.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/e2e/test_video_quality_e2e.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/sessions/generate_rmw_matrix.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/sessions/rmw_matrix/1_heartbeat_cyclone-local_zenoh-ros2dds-ota/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/sessions/rmw_matrix/1_heartbeat_cyclone-ota/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/sessions/rmw_matrix/1_heartbeat_cyclone-ota-tuned/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/sessions/rmw_matrix/1_heartbeat_fastdds/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/sessions/rmw_matrix/1_heartbeat_fastdds-default/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/sessions/rmw_matrix/1_heartbeat_zen-endpoints/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_anonymize.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_bag_ground_truth.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_benched_set.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_benchmark.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_benchmark_delta.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_bundle_check.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_catmux_pane_logging.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_cli.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_cli_benchmark.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_concurrency.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_container_shaping.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_deployment.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_ffmpeg_flags.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_ffmpeg_packet.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_field_profiles.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_forensics.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_geomap.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_image_cache.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_link_bytes.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_link_trace.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_netem_dist.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_network_preflight.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_network_profiles.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_network_shaper.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_ota_link_configs.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_ota_unwrapper.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_ota_wrapper.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_ota_xml.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_playout_pacer.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_plots.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_pub_sub_pair_types.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_qos_fallback_logging.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_relay_optional_parameters.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_ros_node_entity_ownership.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_session_pipeline.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_stage_latency.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_status_eval.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_status_overview.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_status_overview_observer.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_stream_stats.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_terminology_stage_ownership.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_trace_profiles.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_transit.py +0 -0
- {rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/tests/unit/test_video_quality.py +0 -0
|
@@ -87,6 +87,16 @@ reached the packet.
|
|
|
87
87
|
}
|
|
88
88
|
```
|
|
89
89
|
|
|
90
|
+
`stopped_because` reads `running` until something stops the capture, and that
|
|
91
|
+
is deliberate: **neither file depends on a clean shutdown.** A session usually
|
|
92
|
+
ends by its container being stopped, which does not reach this process as a
|
|
93
|
+
signal it can act on — the first bench run ended exactly that way and left a
|
|
94
|
+
pcap truncated at a buffer boundary and no sidecar at all. The pcap is flushed
|
|
95
|
+
once a second and the sidecar is written at the start and rewritten on the same
|
|
96
|
+
interval, so a killed capture still leaves a readable file and a description of
|
|
97
|
+
it. Verified by `SIGKILL`ing a running capture: `capinfos` reads the pcap and
|
|
98
|
+
the sidecar reports the packets up to the last checkpoint.
|
|
99
|
+
|
|
90
100
|
**`kernel_drops` is a gap in the file, not on the link.** A capture that fell
|
|
91
101
|
behind looks exactly like radio loss to anyone reading the pcap months later,
|
|
92
102
|
so subtract it before reading any loss out of the capture. Zero is the normal
|
|
@@ -79,6 +79,15 @@ A capture that quietly drops packets is worse than none: the analysis would
|
|
|
79
79
|
read the gap as radio loss. So `PACKET_STATISTICS` is read from the kernel and
|
|
80
80
|
the sidecar `.json` reports `kernel_drops` next to `packets`. A non-zero drop
|
|
81
81
|
count means this process fell behind, not that the link did.
|
|
82
|
+
|
|
83
|
+
Neither file depends on a clean shutdown, and that is deliberate. A session
|
|
84
|
+
usually ends by the container being stopped, which does not reach this process
|
|
85
|
+
as a signal it can act on — the first bench run ended exactly that way and left
|
|
86
|
+
a pcap truncated at a buffer boundary and no sidecar at all. So the pcap is
|
|
87
|
+
flushed on an interval and the sidecar is written at the *start* and rewritten
|
|
88
|
+
on the same interval, with `stopped_because: "running"` until something stops
|
|
89
|
+
it. A killed capture therefore still leaves a readable pcap and a sidecar that
|
|
90
|
+
says what it was and how much it had seen, rather than an unexplained file.
|
|
82
91
|
"""
|
|
83
92
|
|
|
84
93
|
from __future__ import annotations
|
|
@@ -135,6 +144,12 @@ DEFAULT_MAX_MB = 2000
|
|
|
135
144
|
#: is where `kernel_drops` comes from on a burst.
|
|
136
145
|
RCVBUF_BYTES = 4 << 20
|
|
137
146
|
|
|
147
|
+
#: How often the pcap is flushed and the sidecar rewritten. A session that ends
|
|
148
|
+
#: by having its container stopped never reaches this process, so what is on
|
|
149
|
+
#: disk at any moment is what the run will be read from. One second costs a
|
|
150
|
+
#: ~300-byte write and bounds the loss to the packets of that second.
|
|
151
|
+
CHECKPOINT_S = 1.0
|
|
152
|
+
|
|
138
153
|
|
|
139
154
|
def log(message: str) -> None:
|
|
140
155
|
print(f"[ota_pcap] {message}", flush=True)
|
|
@@ -326,7 +341,7 @@ class Capture:
|
|
|
326
341
|
self.kernel_seen = 0
|
|
327
342
|
self.first_ts: float | None = None
|
|
328
343
|
self.last_ts: float | None = None
|
|
329
|
-
self.stopped_because = "
|
|
344
|
+
self.stopped_because = "running"
|
|
330
345
|
|
|
331
346
|
def sidecar(self) -> dict:
|
|
332
347
|
"""What the file is, and what it is missing. Written next to the pcap."""
|
|
@@ -348,6 +363,14 @@ class Capture:
|
|
|
348
363
|
"stopped_because": self.stopped_because,
|
|
349
364
|
}
|
|
350
365
|
|
|
366
|
+
def write_sidecar(self) -> None:
|
|
367
|
+
"""The sidecar as of now. Cheap enough to call on every checkpoint."""
|
|
368
|
+
try:
|
|
369
|
+
self.out.with_suffix(".json").write_text(
|
|
370
|
+
json.dumps(self.sidecar(), indent=2) + "\n", encoding="utf-8")
|
|
371
|
+
except OSError as error:
|
|
372
|
+
log(f"WARN could not write the sidecar: {error}")
|
|
373
|
+
|
|
351
374
|
def run(self, stop: list) -> None:
|
|
352
375
|
sock = open_socket(self.iface)
|
|
353
376
|
# Root was needed for that one call and for nothing after it.
|
|
@@ -360,8 +383,22 @@ class Capture:
|
|
|
360
383
|
with open(self.out, "wb", buffering=1 << 20) as handle:
|
|
361
384
|
handle.write(pcap_header(self.snaplen))
|
|
362
385
|
self.bytes_written = 24
|
|
386
|
+
handle.flush()
|
|
387
|
+
# Written before a single packet arrives, so a capture that is
|
|
388
|
+
# killed with its container still explains itself.
|
|
389
|
+
self.write_sidecar()
|
|
390
|
+
next_checkpoint = time.monotonic() + CHECKPOINT_S
|
|
363
391
|
sock.settimeout(0.5)
|
|
364
392
|
while not stop:
|
|
393
|
+
# `tick`, not `now`: the timestamp fallback below rebinds `now`
|
|
394
|
+
# to wall-clock time, and comparing that against a monotonic
|
|
395
|
+
# deadline would checkpoint on every single packet.
|
|
396
|
+
tick = time.monotonic()
|
|
397
|
+
if tick >= next_checkpoint:
|
|
398
|
+
next_checkpoint = tick + CHECKPOINT_S
|
|
399
|
+
self._collect(sock)
|
|
400
|
+
handle.flush()
|
|
401
|
+
self.write_sidecar()
|
|
365
402
|
try:
|
|
366
403
|
packet, ancdata, _flags, address = sock.recvmsg(65535, ancillary)
|
|
367
404
|
except socket.timeout:
|
|
@@ -395,8 +432,9 @@ class Capture:
|
|
|
395
432
|
f"after {self.packets} packets — the recording is untouched")
|
|
396
433
|
self.stopped_because = "size ceiling"
|
|
397
434
|
break
|
|
398
|
-
|
|
399
|
-
|
|
435
|
+
handle.flush()
|
|
436
|
+
if self.stopped_because == "running":
|
|
437
|
+
self.stopped_because = "signal"
|
|
400
438
|
self._collect(sock)
|
|
401
439
|
sock.close()
|
|
402
440
|
|
|
@@ -445,9 +483,8 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
445
483
|
log(f"FAIL {error}")
|
|
446
484
|
return 3
|
|
447
485
|
|
|
486
|
+
capture.write_sidecar()
|
|
448
487
|
sidecar = capture.sidecar()
|
|
449
|
-
args.out.with_suffix(".json").write_text(
|
|
450
|
-
json.dumps(sidecar, indent=2) + "\n", encoding="utf-8")
|
|
451
488
|
log(f"{sidecar['packets']} packets, {sidecar['bytes'] / 1e6:.1f} MB, "
|
|
452
489
|
f"{sidecar['kernel_drops']} dropped by the kernel")
|
|
453
490
|
if sidecar["kernel_drops"]:
|
|
@@ -11,6 +11,7 @@ Three layers, like the status overview it is started beside:
|
|
|
11
11
|
from __future__ import annotations
|
|
12
12
|
|
|
13
13
|
import importlib.util
|
|
14
|
+
import json
|
|
14
15
|
import socket
|
|
15
16
|
import struct
|
|
16
17
|
import sys
|
|
@@ -359,3 +360,44 @@ def test_the_capture_is_a_process_not_a_thread_in_the_status_node() -> None:
|
|
|
359
360
|
"""A capture that misbehaves must not reach the snapshot an operator watches."""
|
|
360
361
|
source = (WS_PY / "com_py" / "status_overview.py").read_text(encoding="utf-8")
|
|
361
362
|
assert "subprocess.Popen(argv, start_new_session=True)" in source
|
|
363
|
+
|
|
364
|
+
|
|
365
|
+
# ---------------------------------------------------------------------------
|
|
366
|
+
# neither file depends on a clean shutdown
|
|
367
|
+
# ---------------------------------------------------------------------------
|
|
368
|
+
|
|
369
|
+
|
|
370
|
+
def test_the_sidecar_says_running_until_something_stops_the_capture() -> None:
|
|
371
|
+
"""A session usually ends by its container being stopped, which never
|
|
372
|
+
reaches this process. So the sidecar exists from the first moment and says
|
|
373
|
+
what it is, rather than appearing only if the capture is asked nicely."""
|
|
374
|
+
capture = ota_pcap.Capture("tun0", Path("/tmp/x.pcap"))
|
|
375
|
+
assert capture.sidecar()["stopped_because"] == "running"
|
|
376
|
+
|
|
377
|
+
|
|
378
|
+
def test_the_sidecar_is_written_before_a_single_packet_arrives(tmp_path: Path) -> None:
|
|
379
|
+
capture = ota_pcap.Capture("tun0", tmp_path / "ota.pcap")
|
|
380
|
+
capture.write_sidecar()
|
|
381
|
+
written = json.loads((tmp_path / "ota.json").read_text(encoding="utf-8"))
|
|
382
|
+
assert written["interface"] == "tun0"
|
|
383
|
+
assert written["packets"] == 0
|
|
384
|
+
assert written["stopped_because"] == "running"
|
|
385
|
+
|
|
386
|
+
|
|
387
|
+
def test_a_sidecar_that_cannot_be_written_is_a_warning_not_a_crash(tmp_path: Path, capsys) -> None:
|
|
388
|
+
"""The capture is the artifact; its description is not worth losing it for."""
|
|
389
|
+
capture = ota_pcap.Capture("tun0", tmp_path / "no" / "such" / "dir" / "ota.pcap")
|
|
390
|
+
capture.write_sidecar()
|
|
391
|
+
assert "WARN" in capsys.readouterr().out
|
|
392
|
+
|
|
393
|
+
|
|
394
|
+
def test_the_capture_checkpoints_rather_than_trusting_the_shutdown() -> None:
|
|
395
|
+
source = (WS_PY / "com_py" / "ota_pcap.py").read_text(encoding="utf-8")
|
|
396
|
+
assert "CHECKPOINT_S" in source
|
|
397
|
+
body = source[source.index("def run(self, stop") : source.index("def _collect")]
|
|
398
|
+
assert "handle.flush()" in body
|
|
399
|
+
assert "self.write_sidecar()" in body
|
|
400
|
+
# And the deadline is monotonic, compared against a name the timestamp
|
|
401
|
+
# fallback cannot rebind — that collision would checkpoint every packet.
|
|
402
|
+
assert "tick = time.monotonic()" in body
|
|
403
|
+
assert "if tick >= next_checkpoint:" in body
|
{rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/.devcontainer/devcontainer.json.template
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/.devcontainer/re_generate_devcontainer_json.py
RENAMED
|
File without changes
|
|
File without changes
|
{rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/.github/ISSUE_TEMPLATE/documentation-audit.md
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/.github/ISSUE_TEMPLATE/implementation-cleanup.md
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/.github/ISSUE_TEMPLATE/quality-workflow.md
RENAMED
|
File without changes
|
|
File without changes
|
{rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/.github/ISSUE_TEMPLATE/release-process.md
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/.github/ISSUE_TEMPLATE/repository-diagnosis.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/.github/workflows/benchmark-calibrate.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/calibration/capacity-size-tight-cyclone.json
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/calibration/probe-loss-gop-tight-cyclone.json
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/calibration/probe-loss-nominal-cyclone.json
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/calibration/probe-loss-tight-cyclone.json
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/calibration/probe-loss-tight-fastdds.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/findings/cyclone-spdp-discovery-bursts.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/findings/head-of-line-irregularity.md
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/findings/jitter-loss-bandwidth-latency.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/findings/reorder-becomes-reader-loss.md
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/findings/repro/decode_chain_repro.py
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/findings/repro/reorder_drop_repro.py
RENAMED
|
File without changes
|
|
File without changes
|
{rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/findings/zero-loss-boundaries-18kb-20hz.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/rfcs/0001-expectation-driven-test-suite.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/docs/rfcs/0005-benchmark-genres-and-ci.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/benched-set.yaml
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/.gitignore
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/README.md
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/profiles.yaml
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/ros2docker.json
RENAMED
|
File without changes
|
|
File without changes
|
{rosotacom_dev-2.5.dev70 → rosotacom_dev-2.5.dev71}/src/rosotacom/resources/examples/rosotacom.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|