ddapm-test-agent 1.36.0__tar.gz → 1.38.0__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.
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/.github/workflows/main.yml +7 -1
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/PKG-INFO +15 -5
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/README.md +11 -2
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/ddapm_test_agent/agent.py +98 -13
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/ddapm_test_agent/remoteconfig.py +2 -2
- ddapm_test_agent-1.38.0/ddapm_test_agent/static/style.css +1679 -0
- ddapm_test_agent-1.38.0/ddapm_test_agent/templates/base.html +31 -0
- ddapm_test_agent-1.38.0/ddapm_test_agent/templates/config.html +440 -0
- ddapm_test_agent-1.38.0/ddapm_test_agent/templates/dashboard.html +90 -0
- ddapm_test_agent-1.38.0/ddapm_test_agent/templates/macros.html +40 -0
- ddapm_test_agent-1.38.0/ddapm_test_agent/templates/requests.html +1925 -0
- ddapm_test_agent-1.38.0/ddapm_test_agent/templates/session_detail.html +37 -0
- ddapm_test_agent-1.38.0/ddapm_test_agent/templates/sessions.html +23 -0
- ddapm_test_agent-1.38.0/ddapm_test_agent/templates/snapshot_detail.html +410 -0
- ddapm_test_agent-1.38.0/ddapm_test_agent/templates/snapshots.html +86 -0
- ddapm_test_agent-1.38.0/ddapm_test_agent/templates/trace_detail.html +37 -0
- ddapm_test_agent-1.38.0/ddapm_test_agent/templates/tracer_flares.html +640 -0
- ddapm_test_agent-1.38.0/ddapm_test_agent/templates/traces.html +24 -0
- ddapm_test_agent-1.38.0/ddapm_test_agent/vcr_proxy.py +494 -0
- ddapm_test_agent-1.38.0/ddapm_test_agent/web.py +1523 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/ddapm_test_agent.egg-info/PKG-INFO +15 -5
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/ddapm_test_agent.egg-info/SOURCES.txt +19 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/ddapm_test_agent.egg-info/requires.txt +3 -2
- ddapm_test_agent-1.38.0/releasenotes/notes/add-feature-flags-evp-endpoint-da7786735ac02f50.yaml +4 -0
- ddapm_test_agent-1.38.0/releasenotes/notes/add-web-ui-304c84316f2b4818.yaml +6 -0
- ddapm_test_agent-1.38.0/releasenotes/notes/fix-otlp-endpoint-response-type-18822a3ac85e1cb7.yaml +4 -0
- ddapm_test_agent-1.38.0/releasenotes/notes/remove-vcr-dependancy-ea09889df42b3975.yaml +4 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/setup.py +3 -2
- ddapm_test_agent-1.38.0/test_deps.txt +4 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/tests/conftest.py +4 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/tests/integration_snapshots/test_multi_trace.json +14 -14
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/tests/integration_snapshots/test_single_trace.json +5 -5
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/tests/integration_snapshots/test_trace_distributed_propagated.json +7 -7
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/tests/integration_snapshots/test_trace_distributed_same_payload.json +14 -14
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/tests/integration_snapshots/test_trace_missing_received.json +7 -7
- ddapm_test_agent-1.38.0/tests/integration_snapshots/test_trace_stats.json +135 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/tests/test_agent.py +10 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/tests/test_checks.py +2 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/tests/test_logs.py +4 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/tests/test_metrics.py +4 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/tests/test_snapshot_integration.py +2 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/tests/test_vcr_proxy.py +88 -7
- ddapm_test_agent-1.36.0/ddapm_test_agent/vcr_proxy.py +0 -246
- ddapm_test_agent-1.36.0/test_deps.txt +0 -4
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/.dockerignore +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/.github/workflows/docker.yml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/.github/workflows/publish_pypi.yml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/.github/workflows/releasenote.yml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/.gitignore +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/Dockerfile +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/Dockerfile.windows +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/LICENSE.BSD3 +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/LICENSE.apache2 +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/ddapm_test_agent/__init__.py +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/ddapm_test_agent/apmtelemetry.py +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/ddapm_test_agent/checks.py +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/ddapm_test_agent/client.py +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/ddapm_test_agent/cmd.py +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/ddapm_test_agent/context.py +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/ddapm_test_agent/fmt.py +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/ddapm_test_agent/integration.py +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/ddapm_test_agent/logs.py +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/ddapm_test_agent/metrics.py +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/ddapm_test_agent/trace.py +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/ddapm_test_agent/trace_checks.py +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/ddapm_test_agent/trace_snapshot.py +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/ddapm_test_agent/tracerflare.py +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/ddapm_test_agent/tracestats.py +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/ddapm_test_agent/tracestats_snapshot.py +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/ddapm_test_agent.egg-info/dependency_links.txt +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/ddapm_test_agent.egg-info/entry_points.txt +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/ddapm_test_agent.egg-info/not-zip-safe +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/ddapm_test_agent.egg-info/top_level.txt +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/pyproject.toml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/check-releasenotes +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/config.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/1.0-e192f5064e917083.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/Add-metrics.process_id-to-ignored-attributes-62b264f0ea591326.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/Add-values-handling-to-span_event-array_value-to-mirror-agent-ee7483c90c263ff4.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/Checks-changed-to-opt-in-8716cac4ecdbb1c2.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/SNAPSHOT_REGEX_PLACEHOLDERS-1d2c5e2711d1953b.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/SNAPSHOT_REGEX_PLACEHOLDERS-compare-c829e7a4df4fa1f4.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/Settings-endpoint-928ae5b6e8ddc625.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/Telemetry-requests-delay-2586180b286ce393.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/Use-default-value-for-null-fields-in-tracestats-55d465f489efb2ba.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/acceptV1TracePayloads-5435cff37cfb6a85.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/add-datadog-proxy-7e2e608c101a564b.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/add-distributed-trace-c35a314698a3b966.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/add-errors-intake-proxy-endpoint-7e0f31d72a130f1a.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/add-fmt-command-cc31769942a5fec3.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/add-nix-build-support-29dc8a347e3bd7c1.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/add-optional-json-parser-10aac54bd1cbe322.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/add-otel-metrics-support-a2ebeb28cae2f0ba.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/add-python-3.13-support-ae7b96f4a10f20f4.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/add-rcm-endpoints-7e1f949e83e21039.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/add-request-forwarding-middleware-d3f325166b0f8e9e.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/add-service-naming-checks-2b68ff51d1b5496d.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/add-session-to-rcm-endpoints-d97e925a04a99a65.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/add-span-events-306e697168373899.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/add-support-for-plain-text-responses-00d20bf7b335e75b.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/add-support-telemetry-requests-10737cd3da802ca6.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/add-tracer_flare-endpoint-b2c81510920974d7.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/addAgentStateToInfo-f9a179ce88f2ab9e.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/addPeerTagsToInfo-4ccc2539d22c2993.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/allow-attribute-removal-snapshots-314b744b043b97c5.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/args-88f664c83a96075d.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/change-trace-proxy-headers-f9fcbb4efc4fcb95.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/check-http-header-sensitivity-daaa9d9595ae86d6.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/clearing-sessions-now-only-removes-6b0311673d8b37aa.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/client-173dbc6655e42337.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/content_length-e1bab75580aa1dcb.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/disable-error-responses-and-collect-trace-failures-in-memory-4a199bc7be416709.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/docker-arm64-images-a4b6b2cc527327d6.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/evp-proxy-on-info-d65cd077575306ca.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/exception-messages-21ee64461020edd1.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/fix-docker-image-tags-785d40f5bfdb8003.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/fix-fmt-logging-6a323fd8d5d4eb28.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/fix-getting-tested-integrations-multiple-session-tokens-4ee41d545754f87f.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/fix-matching-319744b82d2514c1.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/fix-missing-slim-deps-fa3b0fc0292a09b3.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/fix-partial-chunks-0db14ce3017e6173.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/fix-racecondition-9bd0ef15b7da60fa.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/fix-tracerflare-request-parsing-fae18ff9997c216d.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/genai-vcr-support-b499ec54df84eaa3.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/ignore-dsm-pathway-hash-during-trace-snapshots-f0b99ea267fbad48.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/image-optimization-d614eccb59441217.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/improve-test-agent-debugging-5759413f1fc5f7fa.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/improve-test-agent-proxying-a207f0fc81b3ab2d.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/improve-trace-check-results-endpoints-6ab4132628520793.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/info-34dcd9cbcc382487.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/info-drop-p0s-c207889f590340fb.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/llmobs-eval-metric-endpoint-8b5222491969ab4f.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/llmobs-evp-proxy-1383f4b4962ac7c9.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/meta-struct-2cce08475cb05470.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/more-oai-cass-908eb5ea46bd2985.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/named-pipe-ded0ebbbeee2e7fa.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/new-process-id-tag-f0ab0daf652e05cc.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/oai-incomplete-cass-795ad19b6a226c1f.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/otlp-logs-grpc-45365879c22969aa.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/otlp-logs-support-d5a150d9f5304d7c.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/pipeline_stats_endpoint-e8ad6da735dc2647.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/profiling-endpoint-0cd209e4e5b6cfc0.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/provider-snapshot-server-f6a307acbf11d214.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/proxy-37c94e2fb428c6fc.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/python-3.12-952e06c6158af67d.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/python-support-1c447acc4607abc7.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/python310-025fbc190363de98.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/python310-docker-image-d4e329cfecf6510e.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/rc-encoding-length-fix-cc011edea7f8f5b2.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/rc-get-endpoint-e502f55b7df544e2.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/remoteconfig-requests-1af7abb99c61c069.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/remove-agent-state-header-from-info-87f920bf4ce5785c.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/remove-nix-ec1c4aca7dc002c4.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/remove-old-pythons-4667b182aacf0ce6.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/reuse-session-1670aa569907cf68.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/sample-rate-1e06ae4cdc933b14.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/session-requests-b8057811f976220e.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/session-tracerflares-400ce9b3d3838b40.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/snapshot-cmds-de4a561911afee11.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/snapshot-empty-maps-2cbe8cea3e7112fa.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/snapshot-error-messages-de41d9e3207fa30a.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/snapshot-filename-c068de1bc3e50c04.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/snapshot-order-type-2d6424e380b2c88f.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/snapshot-parent-id-7abb860008702e70.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/span-links-1ec76bd2b47a3880.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/span-ordering-1a7b383aa015bddc.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/span-parent-id-a4d7d63fa623361c.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/support-ant-vcr-1eff9a40caa0aba0.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/support-tracking-of-tested-integrations-ac19ccd1f8333c00.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/throttling-590bf58ecb3cc4a5.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/trace-stats-97da3a478dabfa99.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/trace-stats-snapshot-718ca37385c93e1e.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/traces-endpoint-f4f9c1d94d6ceda2.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/tracestats-fixes-07152c708e73ef96.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/tracestats-post-65ce788f81862532.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/tracestats-service-2a0a178cbd21b07d.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/uds-64b11960931d8b77.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/uds-c99ea5d099e67156.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/uds-container-8138f8b1438b1a0a.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/uds-permissions-903266ac6445b873.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/v0.5-traces-cf469b0b71398d97.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/v0.7-traces-7ea3ebbed7502d01.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/vcr-aws-bedrock-proxy-3bf018b1712d5105.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/vcr-cassette-name-middleware-fix-9e47c395892a9fe7.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/vcr-cassettes-for-openai-v5-6e9d78091de1f0c2.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/vcr-cassettes-for-vercel-ai-7a8275f9c2b48bc7.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/vcr-ci-mode-99dbd2940fff8d7a.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/vcr-custom-providers-map-a43b7e2d62d02015.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/vcr-prefix-instead-of-suffix-4c56dcb5038d222e.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/vcr-proxy-aws-recalculation-fix-2184c10270a7bca5.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/vcr-proxy-use-test-name-bugfix-be758294ba30ac78.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/vcr-proxy-use-test-name-e47891994c961c52.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/vcr-support-querystring-b06555fb9a7c90ae.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/version-0c32d2752f154eb9.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/wheels-68a7dc2f4b00e0c4.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/releasenotes/notes/windows-docker-image-1f5d5e894558bb4b.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/riotfile.py +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/setup.cfg +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/tests/__init__.py +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/tests/integration_snapshots/test_trace_stats_tracestats.json +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/tests/test_apmtelemetry.py +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/tests/test_client.py +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/tests/test_container.py +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/tests/test_remoteconfig.py +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/tests/test_session.py +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/tests/test_snapshot.py +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/tests/test_trace.py +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/tests/test_tracerflare.py +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/tests/test_tracestats.py +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/tests/trace_utils.py +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/anthropic/anthropic_v1_messages_post_26d618ee.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/anthropic/anthropic_v1_messages_post_595f439c.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/anthropic/anthropic_v1_messages_post_717ba0b4.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/anthropic/anthropic_v1_messages_post_a1af2c12.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/deepseek/deepseek_chat_completions_post_afb6ccab.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_audio_transcriptions_post_173af3e5.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_audio_transcriptions_post_71305a25.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_audio_translations_post_d5b5b8d6.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_audio_translations_post_dd92a18a.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_chat_completions_post_0f1514e1.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_chat_completions_post_172294b4.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_chat_completions_post_193ae44a.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_chat_completions_post_23558eed.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_chat_completions_post_2edb59ae.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_chat_completions_post_3517e44e.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_chat_completions_post_36bdc0cb.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_chat_completions_post_3c045664.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_chat_completions_post_432a8e46.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_chat_completions_post_4749eff9.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_chat_completions_post_4dce8db6.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_chat_completions_post_57612363.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_chat_completions_post_649d8162.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_chat_completions_post_655a8ef2.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_chat_completions_post_66dfc80e.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_chat_completions_post_67e8e833.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_chat_completions_post_6df851cc.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_chat_completions_post_7c2d1ac5.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_chat_completions_post_82a4bb3c.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_chat_completions_post_9122b1ae.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_chat_completions_post_917478d0.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_chat_completions_post_a73ecd7a.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_chat_completions_post_a925b737.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_chat_completions_post_ae4728c2.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_chat_completions_post_b29f1a87.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_chat_completions_post_ce69ed91.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_chat_completions_post_d8fb132a.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_chat_completions_post_d94d5844.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_chat_completions_post_d98ce00d.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_chat_completions_post_ebff79da.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_completions_post_33681ea4.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_completions_post_5d2418d4.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_completions_post_619dee1c.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_completions_post_6224acff.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_completions_post_87f617af.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_completions_post_98c30019.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_completions_post_9bb49464.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_completions_post_b24dbf7d.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_embeddings_post_0381abe4.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_embeddings_post_48694087.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_embeddings_post_541bd4d0.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_files_file-RpTpuvRVtnKpdKZb7DDGto_content_get_60bd10ef.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_files_file-RpTpuvRVtnKpdKZb7DDGto_delete_3ee48409.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_files_file-RpTpuvRVtnKpdKZb7DDGto_get_1afefb93.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_files_get_68efa25d.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_files_post_2fcf9545.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_files_post_957d63ba.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_fine_tuning_jobs_ftjob-q9CUUUsHJemGUVQ1Ecc01zcf_cancel_post_d7c16b38.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_fine_tuning_jobs_ftjob-q9CUUUsHJemGUVQ1Ecc01zcf_events_get_557d820e.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_fine_tuning_jobs_ftjob-q9CUUUsHJemGUVQ1Ecc01zcf_get_265489e7.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_fine_tuning_jobs_get_ebc57c6f.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_fine_tuning_jobs_post_c3b6e4a9.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_images_edits_post_075386c4.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_images_edits_post_57b4f4da.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_images_edits_post_660e9dd7.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_images_edits_post_993e0192.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_images_edits_post_a2f1eb43.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_images_edits_post_ae72c45f.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_images_edits_post_cf5af376.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_images_edits_post_dbefb624.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_images_generations_post_48272841.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_images_generations_post_736070ea.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_images_variations_post_5971e285.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_images_variations_post_f2f62f6c.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_models_ft_gpt-4.1-mini-2025-04-14_datadog-staging__BkaILRSh_delete_c70f2992.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_models_get_e04cf04b.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_models_gpt-4_get_b13c5b23.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_moderations_post_532b3315.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_responses_post_33fb1f66.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_responses_post_5ca556ec.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_responses_post_c05c936e.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_responses_post_c61e3067.yaml +0 -0
- {ddapm_test_agent-1.36.0 → ddapm_test_agent-1.38.0}/vcr-cassettes/openai/openai_responses_post_ee2423e6.yaml +0 -0
|
@@ -15,8 +15,8 @@ jobs:
|
|
|
15
15
|
- uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
|
|
16
16
|
with:
|
|
17
17
|
fetch-depth: 0
|
|
18
|
+
- run: pip install --upgrade 'pip<24.1'
|
|
18
19
|
- run: pip install .[testing]
|
|
19
|
-
- run: riot -v run -s check_fmt
|
|
20
20
|
- run: riot -v run -s flake8
|
|
21
21
|
- run: riot -v run mypy
|
|
22
22
|
test:
|
|
@@ -30,8 +30,14 @@ jobs:
|
|
|
30
30
|
- uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
|
|
31
31
|
with:
|
|
32
32
|
python-version: ${{ matrix.python-version }}
|
|
33
|
+
- name: Downgrade pip for riot compatibility
|
|
34
|
+
if: runner.os != 'Windows'
|
|
35
|
+
run: pip install --upgrade 'pip<24.1'
|
|
33
36
|
- name: install deps
|
|
34
37
|
run: pip install .[testing]
|
|
38
|
+
- name: install pip-tools
|
|
39
|
+
if: runner.os != 'Windows'
|
|
40
|
+
run: pip install 'pip-tools>=7.4.0'
|
|
35
41
|
# Windows: Use vanilla pytest (riot doesn't support Windows - see https://github.com/DataDog/riot/issues/74)
|
|
36
42
|
- name: Run tests (Windows - direct pytest)
|
|
37
43
|
if: runner.os == 'Windows'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ddapm-test-agent
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.38.0
|
|
4
4
|
Summary: Test agent for Datadog APM client libraries
|
|
5
5
|
Home-page: https://github.com/Datadog/dd-apm-test-agent
|
|
6
6
|
Author: Kyle Verhoog
|
|
@@ -20,14 +20,15 @@ Requires-Dist: msgpack
|
|
|
20
20
|
Requires-Dist: requests
|
|
21
21
|
Requires-Dist: typing_extensions
|
|
22
22
|
Requires-Dist: yarl
|
|
23
|
-
Requires-Dist: vcrpy
|
|
24
23
|
Requires-Dist: requests-aws4auth
|
|
24
|
+
Requires-Dist: jinja2>=3.0.0
|
|
25
|
+
Requires-Dist: pyyaml
|
|
25
26
|
Requires-Dist: opentelemetry-proto<1.37.0,>1.33.0
|
|
26
27
|
Requires-Dist: protobuf>=3.19.0
|
|
27
28
|
Requires-Dist: grpcio<2.0,>=1.66.2
|
|
28
29
|
Requires-Dist: pywin32; sys_platform == "win32"
|
|
29
30
|
Provides-Extra: testing
|
|
30
|
-
Requires-Dist: ddtrace==3.
|
|
31
|
+
Requires-Dist: ddtrace==3.15.0; extra == "testing"
|
|
31
32
|
Requires-Dist: pytest; extra == "testing"
|
|
32
33
|
Requires-Dist: riot==0.20.1; extra == "testing"
|
|
33
34
|
Requires-Dist: PyYAML==6.0.3; extra == "testing"
|
|
@@ -67,8 +68,8 @@ The test agent can be installed from PyPI:
|
|
|
67
68
|
|
|
68
69
|
pip install ddapm-test-agent
|
|
69
70
|
|
|
70
|
-
# HTTP on port 8126, OTLP HTTP on port 4318, OTLP GRPC on port 4317
|
|
71
|
-
ddapm-test-agent --port=8126 --otlp-http-port=4318 --otlp-grpc-port=4317
|
|
71
|
+
# HTTP on port 8126, OTLP HTTP on port 4318, OTLP GRPC on port 4317, with the web-ui enabled
|
|
72
|
+
ddapm-test-agent --port=8126 --otlp-http-port=4318 --otlp-grpc-port=4317 --web-ui-port=8080
|
|
72
73
|
|
|
73
74
|
or from Docker:
|
|
74
75
|
|
|
@@ -171,6 +172,15 @@ The traces are normalized and output in JSON to a file. The following transforma
|
|
|
171
172
|
- The span meta and metrics maps if empty are excluded.
|
|
172
173
|
|
|
173
174
|
|
|
175
|
+
#### Web UI
|
|
176
|
+
|
|
177
|
+
The test agent includes an optional and **experimental** Web UI that provides a dashboard for inspecting agent configuration, viewing received requests, exploring traces and snapshots, and managing tracer-flare and remote configuration.
|
|
178
|
+
|
|
179
|
+
The UI can be enabled with the `--web-ui-port PORT` command-line argument or by setting the `WEB_UI_PORT` environment variable.
|
|
180
|
+
Once enabled, the Web UI can be accessed at `http://localhost:PORT` (default port is `8080`).
|
|
181
|
+
|
|
182
|
+
There is also a maximum number of requests to store in memory to display in the UI, which can be configured with the `--max-requests` command-line argument or by setting the `MAX_REQUESTS` environment variable (default is `200` requests).
|
|
183
|
+
|
|
174
184
|
### Recording 3rd party API requests
|
|
175
185
|
|
|
176
186
|
The test agent can be configured to proxy requests to select provider API endpoints, capturing real requests to
|
|
@@ -21,8 +21,8 @@ The test agent can be installed from PyPI:
|
|
|
21
21
|
|
|
22
22
|
pip install ddapm-test-agent
|
|
23
23
|
|
|
24
|
-
# HTTP on port 8126, OTLP HTTP on port 4318, OTLP GRPC on port 4317
|
|
25
|
-
ddapm-test-agent --port=8126 --otlp-http-port=4318 --otlp-grpc-port=4317
|
|
24
|
+
# HTTP on port 8126, OTLP HTTP on port 4318, OTLP GRPC on port 4317, with the web-ui enabled
|
|
25
|
+
ddapm-test-agent --port=8126 --otlp-http-port=4318 --otlp-grpc-port=4317 --web-ui-port=8080
|
|
26
26
|
|
|
27
27
|
or from Docker:
|
|
28
28
|
|
|
@@ -125,6 +125,15 @@ The traces are normalized and output in JSON to a file. The following transforma
|
|
|
125
125
|
- The span meta and metrics maps if empty are excluded.
|
|
126
126
|
|
|
127
127
|
|
|
128
|
+
#### Web UI
|
|
129
|
+
|
|
130
|
+
The test agent includes an optional and **experimental** Web UI that provides a dashboard for inspecting agent configuration, viewing received requests, exploring traces and snapshots, and managing tracer-flare and remote configuration.
|
|
131
|
+
|
|
132
|
+
The UI can be enabled with the `--web-ui-port PORT` command-line argument or by setting the `WEB_UI_PORT` environment variable.
|
|
133
|
+
Once enabled, the Web UI can be accessed at `http://localhost:PORT` (default port is `8080`).
|
|
134
|
+
|
|
135
|
+
There is also a maximum number of requests to store in memory to display in the UI, which can be configured with the `--max-requests` command-line argument or by setting the `MAX_REQUESTS` environment variable (default is `200` requests).
|
|
136
|
+
|
|
128
137
|
### Recording 3rd party API requests
|
|
129
138
|
|
|
130
139
|
The test agent can be configured to proxy requests to select provider API endpoints, capturing real requests to
|
|
@@ -39,7 +39,9 @@ from aiohttp.web import middleware
|
|
|
39
39
|
from grpc import aio as grpc_aio
|
|
40
40
|
from msgpack.exceptions import ExtraData as MsgPackExtraDataException
|
|
41
41
|
from multidict import CIMultiDict
|
|
42
|
+
from opentelemetry.proto.collector.logs.v1.logs_service_pb2 import ExportLogsServiceResponse
|
|
42
43
|
from opentelemetry.proto.collector.logs.v1.logs_service_pb2_grpc import add_LogsServiceServicer_to_server
|
|
44
|
+
from opentelemetry.proto.collector.metrics.v1.metrics_service_pb2 import ExportMetricsServiceResponse
|
|
43
45
|
from opentelemetry.proto.collector.metrics.v1.metrics_service_pb2_grpc import add_MetricsServiceServicer_to_server
|
|
44
46
|
|
|
45
47
|
from . import _get_version
|
|
@@ -323,12 +325,14 @@ class Agent:
|
|
|
323
325
|
"/v1.0/traces",
|
|
324
326
|
"/v0.6/stats",
|
|
325
327
|
"/v0.7/config",
|
|
328
|
+
"/info",
|
|
326
329
|
"/telemetry/proxy/api/v2/apmtelemetry",
|
|
327
330
|
"/v0.1/pipeline_stats",
|
|
328
331
|
"/tracer_flare/v1",
|
|
329
332
|
"/evp_proxy/v2/api/v2/llmobs",
|
|
330
333
|
"/evp_proxy/v2/api/intake/llm-obs/v1/eval-metric",
|
|
331
334
|
"/evp_proxy/v2/api/intake/llm-obs/v2/eval-metric",
|
|
335
|
+
"/evp_proxy/v2/api/v2/exposures",
|
|
332
336
|
"/evp_proxy/v4/api/v2/errorsintake",
|
|
333
337
|
]
|
|
334
338
|
|
|
@@ -722,7 +726,9 @@ class Agent:
|
|
|
722
726
|
num_resource_logs,
|
|
723
727
|
total_log_records,
|
|
724
728
|
)
|
|
725
|
-
return web.
|
|
729
|
+
return web.Response(
|
|
730
|
+
body=ExportLogsServiceResponse().SerializeToString(), status=200, content_type="application/x-protobuf"
|
|
731
|
+
)
|
|
726
732
|
|
|
727
733
|
async def handle_v1_metrics(self, request: Request) -> web.Response:
|
|
728
734
|
metrics_data = self._decode_v1_metrics(request)
|
|
@@ -737,7 +743,9 @@ class Agent:
|
|
|
737
743
|
num_resource_metrics,
|
|
738
744
|
total_metrics,
|
|
739
745
|
)
|
|
740
|
-
return web.
|
|
746
|
+
return web.Response(
|
|
747
|
+
body=ExportMetricsServiceResponse().SerializeToString(), status=200, content_type="application/x-protobuf"
|
|
748
|
+
)
|
|
741
749
|
|
|
742
750
|
async def handle_v07_remoteconfig(self, request: Request) -> web.Response:
|
|
743
751
|
"""Emulates Remote Config endpoint: /v0.7/config"""
|
|
@@ -802,6 +810,9 @@ class Agent:
|
|
|
802
810
|
async def handle_evp_proxy_v2_llmobs_eval_metric(self, request: Request) -> web.Response:
|
|
803
811
|
return web.HTTPOk()
|
|
804
812
|
|
|
813
|
+
async def handle_evp_proxy_v2_api_v2_exposures(self, request: Request) -> web.Response:
|
|
814
|
+
return web.HTTPOk()
|
|
815
|
+
|
|
805
816
|
async def handle_evp_proxy_v4_api_v2_errorsintake(self, request: Request) -> web.Response:
|
|
806
817
|
return web.HTTPOk()
|
|
807
818
|
|
|
@@ -1129,6 +1140,7 @@ class Agent:
|
|
|
1129
1140
|
self.handle_v1_tracer_flare,
|
|
1130
1141
|
self.handle_evp_proxy_v2_api_v2_llmobs,
|
|
1131
1142
|
self.handle_evp_proxy_v2_llmobs_eval_metric,
|
|
1143
|
+
self.handle_evp_proxy_v2_api_v2_exposures,
|
|
1132
1144
|
self.handle_evp_proxy_v4_api_v2_errorsintake,
|
|
1133
1145
|
self.handle_v1_logs,
|
|
1134
1146
|
self.handle_v1_metrics,
|
|
@@ -1423,6 +1435,7 @@ class Agent:
|
|
|
1423
1435
|
"/evp_proxy/v2/api/v2/llmobs": self.handle_evp_proxy_v2_api_v2_llmobs,
|
|
1424
1436
|
"/evp_proxy/v2/api/intake/llm-obs/v1/eval-metric": self.handle_evp_proxy_v2_llmobs_eval_metric,
|
|
1425
1437
|
"/evp_proxy/v2/api/intake/llm-obs/v2/eval-metric": self.handle_evp_proxy_v2_llmobs_eval_metric,
|
|
1438
|
+
"/evp_proxy/v2/api/v2/exposures": self.handle_evp_proxy_v2_api_v2_exposures,
|
|
1426
1439
|
"/evp_proxy/v4/api/v2/errorsintake": self.handle_evp_proxy_v4_api_v2_errorsintake,
|
|
1427
1440
|
"/info": self.handle_info,
|
|
1428
1441
|
# Test endpoints
|
|
@@ -1588,18 +1601,30 @@ def make_app(
|
|
|
1588
1601
|
vcr_ci_mode: bool,
|
|
1589
1602
|
vcr_provider_map: str,
|
|
1590
1603
|
vcr_ignore_headers: str,
|
|
1604
|
+
enable_web_ui: bool = False,
|
|
1591
1605
|
) -> web.Application:
|
|
1592
1606
|
agent = Agent()
|
|
1607
|
+
|
|
1608
|
+
# Build middleware list conditionally
|
|
1609
|
+
middlewares = []
|
|
1610
|
+
if enable_web_ui:
|
|
1611
|
+
from .web import request_response_capture_middleware
|
|
1612
|
+
|
|
1613
|
+
middlewares.append(request_response_capture_middleware)
|
|
1614
|
+
middlewares.extend(
|
|
1615
|
+
[
|
|
1616
|
+
handle_exception_middleware,
|
|
1617
|
+
agent.check_failure_middleware,
|
|
1618
|
+
agent.store_request_middleware,
|
|
1619
|
+
agent.request_forwarder_middleware,
|
|
1620
|
+
session_token_middleware,
|
|
1621
|
+
agent.vcr_proxy_suffix_middleware,
|
|
1622
|
+
]
|
|
1623
|
+
)
|
|
1624
|
+
|
|
1593
1625
|
app = web.Application(
|
|
1594
1626
|
client_max_size=int(100e6), # 100MB - arbitrary
|
|
1595
|
-
middlewares=
|
|
1596
|
-
handle_exception_middleware, # type: ignore
|
|
1597
|
-
agent.check_failure_middleware, # type: ignore
|
|
1598
|
-
agent.store_request_middleware, # type: ignore
|
|
1599
|
-
agent.request_forwarder_middleware, # type: ignore
|
|
1600
|
-
session_token_middleware, # type: ignore
|
|
1601
|
-
agent.vcr_proxy_suffix_middleware, # type: ignore
|
|
1602
|
-
],
|
|
1627
|
+
middlewares=middlewares,
|
|
1603
1628
|
)
|
|
1604
1629
|
app.add_routes(
|
|
1605
1630
|
[
|
|
@@ -1622,6 +1647,7 @@ def make_app(
|
|
|
1622
1647
|
web.post("/evp_proxy/v2/api/v2/llmobs", agent.handle_evp_proxy_v2_api_v2_llmobs),
|
|
1623
1648
|
web.post("/evp_proxy/v2/api/intake/llm-obs/v1/eval-metric", agent.handle_evp_proxy_v2_llmobs_eval_metric),
|
|
1624
1649
|
web.post("/evp_proxy/v2/api/intake/llm-obs/v2/eval-metric", agent.handle_evp_proxy_v2_llmobs_eval_metric),
|
|
1650
|
+
web.post("/evp_proxy/v2/api/v2/exposures", agent.handle_evp_proxy_v2_api_v2_exposures),
|
|
1625
1651
|
web.post("/evp_proxy/v4/api/v2/errorsintake", agent.handle_evp_proxy_v4_api_v2_errorsintake),
|
|
1626
1652
|
web.get("/info", agent.handle_info),
|
|
1627
1653
|
web.get("/test/session/start", agent.handle_session_start),
|
|
@@ -1972,6 +1998,18 @@ def main(args: Optional[List[str]] = None) -> None:
|
|
|
1972
1998
|
default=os.environ.get("VCR_IGNORE_HEADERS", ""),
|
|
1973
1999
|
help="Comma-separated list of headers to ignore when recording VCR cassettes.",
|
|
1974
2000
|
)
|
|
2001
|
+
parser.add_argument(
|
|
2002
|
+
"--web-ui-port",
|
|
2003
|
+
type=int,
|
|
2004
|
+
default=int(os.environ.get("WEB_UI_PORT", 0)),
|
|
2005
|
+
help="Port to serve the optional web UI (default: disabled). Example: --web-ui-port=8080",
|
|
2006
|
+
)
|
|
2007
|
+
parser.add_argument(
|
|
2008
|
+
"--max-requests",
|
|
2009
|
+
type=int,
|
|
2010
|
+
default=int(os.environ.get("MAX_REQUESTS", 200)),
|
|
2011
|
+
help="Maximum number of requests to keep in memory for the UI (default: 200). Older requests are discarded when limit is reached.",
|
|
2012
|
+
)
|
|
1975
2013
|
parsed_args = parser.parse_args(args=args)
|
|
1976
2014
|
logging.basicConfig(level=parsed_args.log_level)
|
|
1977
2015
|
|
|
@@ -2018,6 +2056,7 @@ def main(args: Optional[List[str]] = None) -> None:
|
|
|
2018
2056
|
vcr_ci_mode=parsed_args.vcr_ci_mode,
|
|
2019
2057
|
vcr_provider_map=parsed_args.vcr_provider_map,
|
|
2020
2058
|
vcr_ignore_headers=parsed_args.vcr_ignore_headers,
|
|
2059
|
+
enable_web_ui=parsed_args.web_ui_port > 0,
|
|
2021
2060
|
)
|
|
2022
2061
|
|
|
2023
2062
|
# Validate port configuration
|
|
@@ -2027,6 +2066,13 @@ def main(args: Optional[List[str]] = None) -> None:
|
|
|
2027
2066
|
raise ValueError("APM and OTLP GRPC ports cannot be the same")
|
|
2028
2067
|
if parsed_args.otlp_http_port == parsed_args.otlp_grpc_port:
|
|
2029
2068
|
raise ValueError("OTLP HTTP and GRPC ports cannot be the same")
|
|
2069
|
+
if parsed_args.web_ui_port > 0:
|
|
2070
|
+
if parsed_args.web_ui_port == parsed_args.port:
|
|
2071
|
+
raise ValueError("Web UI and APM ports cannot be the same")
|
|
2072
|
+
if parsed_args.web_ui_port == parsed_args.otlp_http_port:
|
|
2073
|
+
raise ValueError("Web UI and OTLP HTTP ports cannot be the same")
|
|
2074
|
+
if parsed_args.web_ui_port == parsed_args.otlp_grpc_port:
|
|
2075
|
+
raise ValueError("Web UI and OTLP GRPC ports cannot be the same")
|
|
2030
2076
|
|
|
2031
2077
|
# Get the shared agent instance from the main app
|
|
2032
2078
|
agent = app["agent"]
|
|
@@ -2044,15 +2090,41 @@ def main(args: Optional[List[str]] = None) -> None:
|
|
|
2044
2090
|
|
|
2045
2091
|
otlp_http_app = make_otlp_http_app(agent)
|
|
2046
2092
|
|
|
2093
|
+
# Create Web UI app if enabled
|
|
2094
|
+
web_ui_app = None
|
|
2095
|
+
if parsed_args.web_ui_port > 0:
|
|
2096
|
+
from .web import WebUI
|
|
2097
|
+
|
|
2098
|
+
# Pass configuration directly to WebUI
|
|
2099
|
+
web_ui_config = {
|
|
2100
|
+
"snapshot_dir": parsed_args.snapshot_dir,
|
|
2101
|
+
"vcr_cassettes_directory": parsed_args.vcr_cassettes_directory,
|
|
2102
|
+
"disable_error_responses": parsed_args.disable_error_responses,
|
|
2103
|
+
"web_ui_port": parsed_args.web_ui_port,
|
|
2104
|
+
"max_requests": parsed_args.max_requests,
|
|
2105
|
+
}
|
|
2106
|
+
web_ui = WebUI(agent, config=web_ui_config)
|
|
2107
|
+
web_ui_app = web_ui.make_app()
|
|
2108
|
+
# Store WebUI instance reference for middleware access
|
|
2109
|
+
web_ui_app._webui_instance = web_ui
|
|
2110
|
+
# Also store on main app for middleware access
|
|
2111
|
+
app._webui_instance = web_ui
|
|
2112
|
+
|
|
2047
2113
|
async def run_servers():
|
|
2048
2114
|
"""Run APM and OTLP HTTP servers concurrently."""
|
|
2049
|
-
# Create runners for
|
|
2115
|
+
# Create runners for apps
|
|
2050
2116
|
apm_runner = web.AppRunner(app)
|
|
2051
2117
|
await apm_runner.setup()
|
|
2052
2118
|
|
|
2053
2119
|
otlp_http_runner = web.AppRunner(otlp_http_app)
|
|
2054
2120
|
await otlp_http_runner.setup()
|
|
2055
2121
|
|
|
2122
|
+
# Create Web UI runner if enabled
|
|
2123
|
+
web_ui_runner = None
|
|
2124
|
+
if web_ui_app is not None:
|
|
2125
|
+
web_ui_runner = web.AppRunner(web_ui_app)
|
|
2126
|
+
await web_ui_runner.setup()
|
|
2127
|
+
|
|
2056
2128
|
# Start GRPC server if available (async creation)
|
|
2057
2129
|
otlp_grpc_server = await make_otlp_grpc_server_async(
|
|
2058
2130
|
agent, parsed_args.otlp_http_port, parsed_args.otlp_grpc_port
|
|
@@ -2066,12 +2138,23 @@ def main(args: Optional[List[str]] = None) -> None:
|
|
|
2066
2138
|
|
|
2067
2139
|
otlp_http_site = web.TCPSite(otlp_http_runner, port=parsed_args.otlp_http_port)
|
|
2068
2140
|
|
|
2069
|
-
#
|
|
2070
|
-
|
|
2141
|
+
# Create Web UI site if enabled
|
|
2142
|
+
web_ui_site = None
|
|
2143
|
+
if web_ui_runner is not None:
|
|
2144
|
+
web_ui_site = web.TCPSite(web_ui_runner, port=parsed_args.web_ui_port)
|
|
2145
|
+
|
|
2146
|
+
# Start servers concurrently
|
|
2147
|
+
sites_to_start = [apm_site.start(), otlp_http_site.start()]
|
|
2148
|
+
if web_ui_site is not None:
|
|
2149
|
+
sites_to_start.append(web_ui_site.start())
|
|
2150
|
+
|
|
2151
|
+
await asyncio.gather(*sites_to_start)
|
|
2071
2152
|
|
|
2072
2153
|
print(f"======== Running APM server on port {parsed_args.port} ========")
|
|
2073
2154
|
print(f"======== Running OTLP HTTP server on port {parsed_args.otlp_http_port} ========")
|
|
2074
2155
|
print(f"======== Running OTLP GRPC server on port {parsed_args.otlp_grpc_port} ========")
|
|
2156
|
+
if web_ui_site is not None:
|
|
2157
|
+
print(f"======== Running Web UI on port {parsed_args.web_ui_port} ========")
|
|
2075
2158
|
print("(Press CTRL+C to quit)")
|
|
2076
2159
|
|
|
2077
2160
|
try:
|
|
@@ -2082,6 +2165,8 @@ def main(args: Optional[List[str]] = None) -> None:
|
|
|
2082
2165
|
finally:
|
|
2083
2166
|
await apm_runner.cleanup()
|
|
2084
2167
|
await otlp_http_runner.cleanup()
|
|
2168
|
+
if web_ui_runner is not None:
|
|
2169
|
+
await web_ui_runner.cleanup()
|
|
2085
2170
|
await otlp_grpc_server.stop(grace=5.0)
|
|
2086
2171
|
|
|
2087
2172
|
# Run the servers
|
|
@@ -26,7 +26,7 @@ class RemoteConfigServer:
|
|
|
26
26
|
self._update_response(token, data)
|
|
27
27
|
|
|
28
28
|
@staticmethod
|
|
29
|
-
def _build_config_path_response(path: str, msg:
|
|
29
|
+
def _build_config_path_response(path: str, msg: Any) -> Dict[str, Any]:
|
|
30
30
|
expires_date = datetime.datetime.strftime(
|
|
31
31
|
datetime.datetime.now() + datetime.timedelta(days=1), "%Y-%m-%dT%H:%M:%SZ"
|
|
32
32
|
)
|
|
@@ -84,7 +84,7 @@ class RemoteConfigServer:
|
|
|
84
84
|
}
|
|
85
85
|
return remote_config_payload
|
|
86
86
|
|
|
87
|
-
def create_config_path_response(self, token: Optional[str], path: str, msg:
|
|
87
|
+
def create_config_path_response(self, token: Optional[str], path: str, msg: Any) -> None:
|
|
88
88
|
remote_config_payload = self._build_config_path_response(path, msg)
|
|
89
89
|
self.create_config_response(token, remote_config_payload)
|
|
90
90
|
|