.dockerignore
.gitignore
CLAUDE.md
Dockerfile.ci
Dockerfile.test
LICENSE
MODULE.bazel
README.md
WORKSPACE.bazel
daq_data_client_demo.ipynb
docker-bake.hcl
pyproject.toml
uv.lock
.github/workflows/ci.yml
deploy/Dockerfile.daqnode
deploy/Makefile
deploy/databuf.h
deploy/docker-compose.daqnode.yml
deploy/alloy/config.alloy
deploy/alloy/docker-compose.alloy.yml
docs/CHANGELOG.md
docs/DaqData_StreamImages_hp-io.png
docs/DaqData_StreamImages_overview.png
docs/DaqData_architecture.png
docs/daq_control_service.md
docs/daq_data_service.md
docs/demo_figure.png
docs/ml_inference_service.md
docs/quickstart.md
docs/server.md
docs/telemetry_service.md
docs/viz_api_code_demo.png
docs/plans/daq-data-quality-improvement.md
docs/plans/test-hardening-uds-migration-py314.md
docs/plans/unified-qa-infrastructure.md
protos/BUILD
protos/README.md
protos/daq_control.proto
protos/daq_data.proto
protos/ml_inference.proto
protos/telemetry.proto
protos/ublox_control.proto
scripts/compile_protos.py
scripts/daq_data
scripts/panoseti_util
scripts/setup_panoseti_grpc.sh
scripts/start_grpc.sh
scripts/run-ci-tests/run-all-parallel.sh
scripts/run-ci-tests/run-daq-control-test.sh
scripts/run-ci-tests/run-daq-data-ci-test.sh
scripts/run-ci-tests/run-hashpipe-daq-data-ci.sh
scripts/run-ci-tests/run-telemetry-ci-test.sh
scripts/run-ci-tests/run-ublox-ci-test.sh
scripts/run-ci-tests/run-unified-server-ci-test.sh
src/panoseti_grpc/__init__.py
src/panoseti_grpc/__main__.py
src/panoseti_grpc/cli.py
src/panoseti_grpc/py.typed
src/panoseti_grpc/server.py
src/panoseti_grpc/server.py_snippet
src/panoseti_grpc/unified_main.py
src/panoseti_grpc.egg-info/PKG-INFO
src/panoseti_grpc.egg-info/SOURCES.txt
src/panoseti_grpc.egg-info/dependency_links.txt
src/panoseti_grpc.egg-info/entry_points.txt
src/panoseti_grpc.egg-info/requires.txt
src/panoseti_grpc.egg-info/scm_file_list.json
src/panoseti_grpc.egg-info/scm_version.json
src/panoseti_grpc.egg-info/top_level.txt
src/panoseti_grpc/_cli/__init__.py
src/panoseti_grpc/_cli/daq_control.py
src/panoseti_grpc/_cli/daq_data.py
src/panoseti_grpc/_cli/daqnode.py
src/panoseti_grpc/_cli/root.py
src/panoseti_grpc/_cli/server.py
src/panoseti_grpc/_cli/state.py
src/panoseti_grpc/_cli/telemetry.py
src/panoseti_grpc/config/__init__.py
src/panoseti_grpc/config/server.toml
src/panoseti_grpc/config/server_daq_node.toml
src/panoseti_grpc/config/server_gateway.toml
src/panoseti_grpc/config/server_headnode.toml
src/panoseti_grpc/daq_control/README.md
src/panoseti_grpc/daq_control/__init__.py
src/panoseti_grpc/daq_control/cli.py
src/panoseti_grpc/daq_control/client.py
src/panoseti_grpc/daq_control/client_models.py
src/panoseti_grpc/daq_control/config.py
src/panoseti_grpc/daq_control/manifest.py
src/panoseti_grpc/daq_control/resources.py
src/panoseti_grpc/daq_control/server.py
src/panoseti_grpc/daq_control/util.py
src/panoseti_grpc/daq_control/configs/test.json
src/panoseti_grpc/daq_data/README.md
src/panoseti_grpc/daq_data/__init__.py
src/panoseti_grpc/daq_data/aggregator.py
src/panoseti_grpc/daq_data/cli.py
src/panoseti_grpc/daq_data/client.py
src/panoseti_grpc/daq_data/client_models.py
src/panoseti_grpc/daq_data/config.py
src/panoseti_grpc/daq_data/data_sources.py
src/panoseti_grpc/daq_data/hp_io_manager.py
src/panoseti_grpc/daq_data/managers.py
src/panoseti_grpc/daq_data/plot.py
src/panoseti_grpc/daq_data/resources.py
src/panoseti_grpc/daq_data/server.py
src/panoseti_grpc/daq_data/simulate.py
src/panoseti_grpc/daq_data/state.py
src/panoseti_grpc/daq_data/testing.py
src/panoseti_grpc/daq_data/config/daq_config_grpc_simulate.json
src/panoseti_grpc/daq_data/config/daq_data_server_config.json
src/panoseti_grpc/daq_data/config/hp_io_config_default.json
src/panoseti_grpc/daq_data/config/hp_io_config_lick.json
src/panoseti_grpc/daq_data/config/hp_io_config_palomar.json
src/panoseti_grpc/daq_data/config/hp_io_config_simulate.json
src/panoseti_grpc/daq_data/config/network_config_grpc_simulate.json
src/panoseti_grpc/daq_data/simulated_data_dir/obs_Lick.start_2024-07-25T04:34:06Z.runtype_sci-data.pffd/daq_config.json
src/panoseti_grpc/daq_data/simulated_data_dir/obs_Lick.start_2024-07-25T04:34:06Z.runtype_sci-data.pffd/data_config.json
src/panoseti_grpc/daq_data/simulated_data_dir/obs_Lick.start_2024-07-25T04:34:06Z.runtype_sci-data.pffd/obs_config.json
src/panoseti_grpc/daq_data/simulated_data_dir/obs_Lick.start_2024-07-25T04:34:06Z.runtype_sci-data.pffd/quabo_ph_baseline.json
src/panoseti_grpc/daq_data/simulated_data_dir/obs_Lick.start_2024-07-25T04:34:06Z.runtype_sci-data.pffd/quabo_uids.json
src/panoseti_grpc/daq_data/simulated_data_dir/obs_Lick.start_2024-07-25T04:34:06Z.runtype_sci-data.pffd/recording_ended
src/panoseti_grpc/daq_data/simulated_data_dir/obs_Lick.start_2024-07-25T04:34:06Z.runtype_sci-data.pffd/start_2024-07-25T04_34_46Z.dp_img16.bpp_2.module_1.seqno_0.debug_TRUNCATED.pff
src/panoseti_grpc/daq_data/simulated_data_dir/obs_Lick.start_2024-07-25T04:34:06Z.runtype_sci-data.pffd/start_2024-07-25T04_34_46Z.dp_ph256.bpp_2.module_1.seqno_0.debug_TRUNCATED.pff
src/panoseti_grpc/daq_data/simulated_data_dir/obs_Lick.start_2024-07-25T04:34:06Z.runtype_sci-data.pffd/start_2024-07-25T04_34_46Z.dp_ph256.bpp_2.module_3.seqno_0.debug_TRUNCATED.pff
src/panoseti_grpc/generated/__init__.py
src/panoseti_grpc/generated/daq_control_pb2.py
src/panoseti_grpc/generated/daq_control_pb2.pyi
src/panoseti_grpc/generated/daq_control_pb2_grpc.py
src/panoseti_grpc/generated/daq_control_pb2_grpc.pyi
src/panoseti_grpc/generated/daq_data_pb2.py
src/panoseti_grpc/generated/daq_data_pb2.pyi
src/panoseti_grpc/generated/daq_data_pb2_grpc.py
src/panoseti_grpc/generated/daq_data_pb2_grpc.pyi
src/panoseti_grpc/generated/ml_inference_pb2.py
src/panoseti_grpc/generated/ml_inference_pb2.pyi
src/panoseti_grpc/generated/ml_inference_pb2_grpc.py
src/panoseti_grpc/generated/ml_inference_pb2_grpc.pyi
src/panoseti_grpc/generated/telemetry_pb2.py
src/panoseti_grpc/generated/telemetry_pb2.pyi
src/panoseti_grpc/generated/telemetry_pb2_grpc.py
src/panoseti_grpc/generated/telemetry_pb2_grpc.pyi
src/panoseti_grpc/generated/ublox_control_pb2.py
src/panoseti_grpc/generated/ublox_control_pb2.pyi
src/panoseti_grpc/generated/ublox_control_pb2_grpc.py
src/panoseti_grpc/generated/ublox_control_pb2_grpc.pyi
src/panoseti_grpc/grpc_utils/README.md
src/panoseti_grpc/grpc_utils/__init__.py
src/panoseti_grpc/grpc_utils/channel.py
src/panoseti_grpc/grpc_utils/decorators.py
src/panoseti_grpc/grpc_utils/exceptions.py
src/panoseti_grpc/grpc_utils/health.py
src/panoseti_grpc/grpc_utils/interceptors.py
src/panoseti_grpc/grpc_utils/retries.py
src/panoseti_grpc/ml_inference/__init__.py
src/panoseti_grpc/ml_inference/client.py
src/panoseti_grpc/ml_inference/config.py
src/panoseti_grpc/ml_inference/server.py
src/panoseti_grpc/panoseti_util/__init__.py
src/panoseti_grpc/panoseti_util/config_file.py
src/panoseti_grpc/panoseti_util/control_utils.py
src/panoseti_grpc/panoseti_util/pff.py
src/panoseti_grpc/panoseti_util/stop_daq.py
src/panoseti_grpc/telemetry/README.md
src/panoseti_grpc/telemetry/__init__.py
src/panoseti_grpc/telemetry/cli.py
src/panoseti_grpc/telemetry/client.py
src/panoseti_grpc/telemetry/config.py
src/panoseti_grpc/telemetry/docker-compose.loki.yml
src/panoseti_grpc/telemetry/logger.py
src/panoseti_grpc/telemetry/resources.py
src/panoseti_grpc/telemetry/server.py
src/panoseti_grpc/telemetry/telemetry_config.toml
src/panoseti_grpc/ublox_control/Gattini_F9P_Calibration_8-23-24.txt
src/panoseti_grpc/ublox_control/README.md
src/panoseti_grpc/ublox_control/__init__.py
src/panoseti_grpc/ublox_control/cli.py
src/panoseti_grpc/ublox_control/client.py
src/panoseti_grpc/ublox_control/client_redis.ipynb
src/panoseti_grpc/ublox_control/init_f9t_tests.py
src/panoseti_grpc/ublox_control/resources.py
src/panoseti_grpc/ublox_control/save_raw_ubx.py
src/panoseti_grpc/ublox_control/server.py
src/panoseti_grpc/ublox_control/simple_client.py
src/panoseti_grpc/ublox_control/ubxpoller.py
src/panoseti_grpc/ublox_control/config/f9p_config.json5
src/panoseti_grpc/ublox_control/config/f9p_config_example.json5
src/panoseti_grpc/ublox_control/config/f9t_config.json5
src/panoseti_grpc/ublox_control/config/f9t_config_base.json5
src/panoseti_grpc/ublox_control/config/f9t_config_receiver.json5
src/panoseti_grpc/ublox_control/config/ublox_control_server_config.json
src/panoseti_grpc/ublox_control/initialize/__init__.py
src/panoseti_grpc/ublox_control/initialize/conf_gnss.py
src/panoseti_grpc/ublox_control/initialize/f9t_config.json5
src/panoseti_grpc/ublox_control/initialize/requirements.txt
src/panoseti_grpc/ublox_control/initialize/debugging/PMOB_Info_9-25.png
src/panoseti_grpc/ublox_control/initialize/debugging/PMOB_Status_9-25.png
src/panoseti_grpc/ublox_control/initialize/debugging/README.md
src/panoseti_grpc/ublox_control/initialize/debugging/Sparkfun_Reset_Instructions.png
src/panoseti_grpc/ublox_control/initialize/debugging/ZED-F9T_Registers.csv
src/panoseti_grpc/ublox_control/initialize/debugging/check_f9p_status.py
src/panoseti_grpc/ublox_control/initialize/debugging/conf_gnss_nogrpc.py
src/panoseti_grpc/ublox_control/initialize/debugging/get_RTCM_data.py
src/panoseti_grpc/ublox_control/initialize/debugging/requirements.txt
src/panoseti_grpc/util/__init__.py
src/panoseti_grpc/util/cli.py
src/panoseti_grpc/util/error_handling.py
src/panoseti_grpc/util/resources.py
tests/__init__.py
tests/grpc_qa_utils.py
tests/qa.py
tests/qa.toml
tests/sw_info.json
tests/daq_control/Makefile
tests/daq_control/__init__.py
tests/daq_control/conftest.py
tests/daq_control/databuf.h
tests/daq_control/docker-compose.test.yml
tests/daq_control/integration/__init__.py
tests/daq_control/integration/test_cleanup_selective.py
tests/daq_control/integration/test_concurrent_requests.py
tests/daq_control/integration/test_daq_control.py
tests/daq_control/integration/test_generate_manifest_resilience.py
tests/daq_control/integration/test_manifest_roundtrip.py
tests/daq_control/integration/test_process_edge_cases.py
tests/daq_control/unit/__init__.py
tests/daq_control/unit/test_cleanup_model.py
tests/daq_control/unit/test_client.py
tests/daq_control/unit/test_config.py
tests/daq_control/unit/test_grpc_call_error_mapping.py
tests/daq_control/unit/test_manifest_model.py
tests/daq_control/unit/test_proto_schema.py
tests/daq_control/unit/test_server_helpers.py
tests/daq_control/unit/test_util.py
tests/daq_data/.dockerignore
tests/daq_data/__init__.py
tests/daq_data/conftest.py
tests/daq_data/config/daq_config_grpc_simulate.json
tests/daq_data/config/daq_data_server_config.json
tests/daq_data/config/hp_io_config_simulate.json
tests/daq_data/config/network_config_grpc_simulate.json
tests/daq_data/integration/__init__.py
tests/daq_data/integration/test_advanced_api.py
tests/daq_data/integration/test_async_api.py
tests/daq_data/integration/test_edge_cases.py
tests/daq_data/integration/test_multi_server_multi_client.py
tests/daq_data/integration/test_server_logic.py
tests/daq_data/integration/test_simulation.py
tests/daq_data/integration/test_suite_extended.py
tests/daq_data/integration/test_sync_api.py
tests/daq_data/integration/test_uds_data_validation.py
tests/daq_data/integration/test_uds_error_recovery.py
tests/daq_data/integration/test_uds_socket_lifecycle.py
tests/daq_data/unit/__init__.py
tests/daq_data/unit/test_config.py
tests/daq_data/unit/test_daq_config_validator.py
tests/daq_data/unit/test_resources.py
tests/daq_data_hashpipe/.dockerignore
tests/daq_data_hashpipe/Makefile
tests/daq_data_hashpipe/PH_onsky_NGC7331_1pixTrig_Anytrig1.5pe__20250801_102213_965_filtered2.pcapng
tests/daq_data_hashpipe/__init__.py
tests/daq_data_hashpipe/conftest.py
tests/daq_data_hashpipe/databuf.h
tests/daq_data_hashpipe/integration/__init__.py
tests/daq_data_hashpipe/integration/test_real_daq_robustness.py
tests/daq_data_hashpipe/integration/test_real_data_flow.py
tests/daq_data_hashpipe/integration/test_real_data_validation.py
tests/daq_data_hashpipe/integration/test_snapshot_grpc_robustness.py
tests/data/TEST_10k-pkts_MM+PH_flasher_20260321.pcapng
tests/telemetry/__init__.py
tests/telemetry/conftest.py
tests/telemetry/debug_loki.py
tests/telemetry/docker-compose.test.yml
tests/telemetry/dummy_worker.py
tests/telemetry/integration/__init__.py
tests/telemetry/integration/test_advanced_features.py
tests/telemetry/integration/test_alloy_loki_integration.py
tests/telemetry/integration/test_batch_flusher.py
tests/telemetry/integration/test_concurrent_field_merging.py
tests/telemetry/integration/test_filesystem_robustness.py
tests/telemetry/integration/test_git_integration.py
tests/telemetry/integration/test_logger.py
tests/telemetry/integration/test_logging_integration.py
tests/telemetry/integration/test_logging_scenarios.py
tests/telemetry/integration/test_pipeline.py
tests/telemetry/integration/test_race_conditions.py
tests/telemetry/integration/test_remote_distributed.py
tests/telemetry/integration/test_telemetry_edge_cases.py
tests/telemetry/integration/test_ttl_enforcement.py
tests/telemetry/unit/__init__.py
tests/telemetry/unit/test_config.py
tests/telemetry/unit/test_formatters.py
tests/telemetry/unit/test_logging_unit.py
tests/telemetry/unit/test_reliability.py
tests/telemetry/unit/test_schema_validation.py
tests/telemetry/unit/test_structured_logging.py
tests/ublox_control/.dockerignore
tests/ublox_control/__init__.py
tests/ublox_control/conftest.py
tests/ublox_control/integration/test_error.py
tests/ublox_control/integration/test_simulation.py
tests/ublox_control/test_data/ubx_packets.jsonl
tests/ublox_control/unit/test_unit.py
tests/unified_server/__init__.py
tests/unified_server/conftest.py
tests/unified_server/docker-compose.test.yml
tests/unified_server/integration/__init__.py
tests/unified_server/integration/test_concurrent_rpcs.py
tests/unified_server/integration/test_cross_service_logging.py
tests/unified_server/integration/test_reflection.py
tests/unified_server/integration/test_server_lifecycle.py
tests/unified_server/integration/test_service_toggles.py
tests/unified_server/unit/__init__.py
tests/unified_server/unit/test_cli.py
tests/unified_server/unit/test_cli_server_stop.py
tests/unified_server/unit/test_cli_version.py
tests/unified_server/unit/test_config.py
tests/unified_server/unit/test_health_and_deprecated.py
tests/unified_server/unit/test_service_registry.py