From a43971a10668305085d4c0000b0138a3e478a1f0 Mon Sep 17 00:00:00 2001 From: Thibaud Cheruy Date: Thu, 26 Dec 2024 16:40:38 +0100 Subject: [PATCH 1/8] update tests (#19311) --- snmp/tests/test_e2e_core_metadata.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/snmp/tests/test_e2e_core_metadata.py b/snmp/tests/test_e2e_core_metadata.py index b79c75c4dd938..ab3edc0127344 100644 --- a/snmp/tests/test_e2e_core_metadata.py +++ b/snmp/tests/test_e2e_core_metadata.py @@ -1102,6 +1102,7 @@ def test_e2e_core_metadata_aos_lldp(dd_agent_check): # CHANGE topology_link1 = { 'id': device_id + ':1.216', + 'integration': 'snmp', 'source_type': 'lldp', "local": { "device": {'dd_id': device_id}, @@ -1114,6 +1115,7 @@ def test_e2e_core_metadata_aos_lldp(dd_agent_check): } topology_link2 = { 'id': device_id + ':11.217', + 'integration': 'snmp', 'source_type': 'lldp', "local": { "device": {'dd_id': device_id}, @@ -1286,6 +1288,7 @@ def test_e2e_core_metadata_cisco_cdp(dd_agent_check): topology_link1 = { 'id': device_id + ':1.5', + 'integration': 'snmp', 'source_type': 'cdp', "local": { "device": {'dd_id': device_id}, @@ -1303,6 +1306,7 @@ def test_e2e_core_metadata_cisco_cdp(dd_agent_check): } topology_link2 = { 'id': device_id + ':2.3', + 'integration': 'snmp', 'source_type': 'cdp', "local": { "device": {'dd_id': device_id}, @@ -1346,6 +1350,7 @@ def test_e2e_core_metadata_cisco_cdp_lldp(dd_agent_check): topology_link = { 'id': device_id + ':7.1', + 'integration': 'snmp', 'source_type': 'lldp', "local": { "device": {'dd_id': device_id}, From a85eecf1ee1e195da8f14bdfe3c2bd41a762a515 Mon Sep 17 00:00:00 2001 From: Kyle Neale Date: Thu, 26 Dec 2024 12:20:31 -0500 Subject: [PATCH 2/8] Supabase integration (#19307) * Supabase integration * Add initial release changelog * ddev validate ci --sync * add metric check * sync metadata * validate labeler * Overwrite default process start time metric * Added missed metrics * Override another default go metric --- .codecov.yml | 9 + .github/workflows/config/labeler.yml | 2 + .github/workflows/test-all.yml | 20 + supabase/CHANGELOG.md | 4 + supabase/README.md | 60 ++ supabase/assets/configuration/spec.yaml | 28 + .../assets/dashboards/supabase_overview.json | 77 ++ supabase/assets/service_checks.json | 32 + supabase/changelog.d/19307.added | 1 + supabase/datadog_checks/__init__.py | 4 + supabase/datadog_checks/supabase/__about__.py | 4 + supabase/datadog_checks/supabase/__init__.py | 7 + supabase/datadog_checks/supabase/check.py | 57 ++ .../supabase/config_models/__init__.py | 24 + .../supabase/config_models/defaults.py | 124 +++ .../supabase/config_models/instance.py | 173 ++++ .../supabase/config_models/shared.py | 45 + .../supabase/config_models/validators.py | 13 + .../supabase/data/conf.yaml.example | 600 ++++++++++++ supabase/datadog_checks/supabase/metrics.py | 286 ++++++ supabase/hatch.toml | 4 + supabase/manifest.json | 55 ++ supabase/metadata.csv | 266 +++++ supabase/pyproject.toml | 60 ++ supabase/tests/__init__.py | 3 + supabase/tests/common.py | 313 ++++++ supabase/tests/conftest.py | 30 + supabase/tests/docker/Caddyfile | 15 + supabase/tests/docker/docker-compose.yaml | 12 + .../tests/fixtures/privileged_metrics.txt | 924 ++++++++++++++++++ .../tests/fixtures/storage_api_metrics.txt | 274 ++++++ supabase/tests/test_e2e.py | 13 + supabase/tests/test_unit.py | 50 + 33 files changed, 3589 insertions(+) create mode 100644 supabase/CHANGELOG.md create mode 100644 supabase/README.md create mode 100644 supabase/assets/configuration/spec.yaml create mode 100644 supabase/assets/dashboards/supabase_overview.json create mode 100644 supabase/assets/service_checks.json create mode 100644 supabase/changelog.d/19307.added create mode 100644 supabase/datadog_checks/__init__.py create mode 100644 supabase/datadog_checks/supabase/__about__.py create mode 100644 supabase/datadog_checks/supabase/__init__.py create mode 100644 supabase/datadog_checks/supabase/check.py create mode 100644 supabase/datadog_checks/supabase/config_models/__init__.py create mode 100644 supabase/datadog_checks/supabase/config_models/defaults.py create mode 100644 supabase/datadog_checks/supabase/config_models/instance.py create mode 100644 supabase/datadog_checks/supabase/config_models/shared.py create mode 100644 supabase/datadog_checks/supabase/config_models/validators.py create mode 100644 supabase/datadog_checks/supabase/data/conf.yaml.example create mode 100644 supabase/datadog_checks/supabase/metrics.py create mode 100644 supabase/hatch.toml create mode 100644 supabase/manifest.json create mode 100644 supabase/metadata.csv create mode 100644 supabase/pyproject.toml create mode 100644 supabase/tests/__init__.py create mode 100644 supabase/tests/common.py create mode 100644 supabase/tests/conftest.py create mode 100644 supabase/tests/docker/Caddyfile create mode 100644 supabase/tests/docker/docker-compose.yaml create mode 100644 supabase/tests/fixtures/privileged_metrics.txt create mode 100644 supabase/tests/fixtures/storage_api_metrics.txt create mode 100644 supabase/tests/test_e2e.py create mode 100644 supabase/tests/test_unit.py diff --git a/.codecov.yml b/.codecov.yml index 631efd9665f12..b3da4ec81667d 100644 --- a/.codecov.yml +++ b/.codecov.yml @@ -590,6 +590,10 @@ coverage: target: 75 flags: - strimzi + Supabase: + target: 75 + flags: + - supabase Supervisord: target: 75 flags: @@ -1500,6 +1504,11 @@ flags: paths: - strimzi/datadog_checks/strimzi - strimzi/tests + supabase: + carryforward: true + paths: + - supabase/datadog_checks/supabase + - supabase/tests supervisord: carryforward: true paths: diff --git a/.github/workflows/config/labeler.yml b/.github/workflows/config/labeler.yml index c552e82a1258a..b548315a04731 100644 --- a/.github/workflows/config/labeler.yml +++ b/.github/workflows/config/labeler.yml @@ -525,6 +525,8 @@ integration/streamnative: - streamnative/**/* integration/strimzi: - strimzi/**/* +integration/supabase: +- supabase/**/* integration/supervisord: - supervisord/**/* integration/suricata: diff --git a/.github/workflows/test-all.yml b/.github/workflows/test-all.yml index ce300bf301eb0..bf58388e435be 100644 --- a/.github/workflows/test-all.yml +++ b/.github/workflows/test-all.yml @@ -3494,6 +3494,26 @@ jobs: minimum-base-package: ${{ inputs.minimum-base-package }} pytest-args: ${{ inputs.pytest-args }} secrets: inherit + jfe7ceb7: + uses: ./.github/workflows/test-target.yml + with: + job-name: Supabase + target: supabase + platform: linux + runner: '["ubuntu-22.04"]' + repo: "${{ inputs.repo }}" + python-version: "${{ inputs.python-version }}" + standard: ${{ inputs.standard }} + latest: ${{ inputs.latest }} + agent-image: "${{ inputs.agent-image }}" + agent-image-py2: "${{ inputs.agent-image-py2 }}" + agent-image-windows: "${{ inputs.agent-image-windows }}" + agent-image-windows-py2: "${{ inputs.agent-image-windows-py2 }}" + test-py2: ${{ inputs.test-py2 }} + test-py3: ${{ inputs.test-py3 }} + minimum-base-package: ${{ inputs.minimum-base-package }} + pytest-args: ${{ inputs.pytest-args }} + secrets: inherit jf04a052: uses: ./.github/workflows/test-target.yml with: diff --git a/supabase/CHANGELOG.md b/supabase/CHANGELOG.md new file mode 100644 index 0000000000000..59c3ebcf6b575 --- /dev/null +++ b/supabase/CHANGELOG.md @@ -0,0 +1,4 @@ +# CHANGELOG - supabase + + + diff --git a/supabase/README.md b/supabase/README.md new file mode 100644 index 0000000000000..e7bb5b92dcea0 --- /dev/null +++ b/supabase/README.md @@ -0,0 +1,60 @@ +# Agent Check: supabase + +## Overview + +This check monitors [supabase][1] through the Datadog Agent. + +Include a high level overview of what this integration does: +- What does your product do (in 1-2 sentences)? +- What value will customers get from this integration, and why is it valuable to them? +- What specific data will your integration monitor, and what's the value of that data? + +## Setup + +Follow the instructions below to install and configure this check for an Agent running on a host. For containerized environments, see the [Autodiscovery Integration Templates][3] for guidance on applying these instructions. + +### Installation + +The supabase check is included in the [Datadog Agent][2] package. +No additional installation is needed on your server. + +### Configuration + +1. Edit the `supabase.d/conf.yaml` file, in the `conf.d/` folder at the root of your Agent's configuration directory to start collecting your supabase performance data. See the [sample supabase.d/conf.yaml][4] for all available configuration options. + +2. [Restart the Agent][5]. + +### Validation + +[Run the Agent's status subcommand][6] and look for `supabase` under the Checks section. + +## Data Collected + +### Metrics + +See [metadata.csv][7] for a list of metrics provided by this integration. + +### Events + +The supabase integration does not include any events. + +### Service Checks + +The supabase integration does not include any service checks. + +See [service_checks.json][8] for a list of service checks provided by this integration. + +## Troubleshooting + +Need help? Contact [Datadog support][9]. + + +[1]: **LINK_TO_INTEGRATION_SITE** +[2]: https://app.datadoghq.com/account/settings/agent/latest +[3]: https://docs.datadoghq.com/agent/kubernetes/integrations/ +[4]: https://github.com/DataDog/integrations-core/blob/master/supabase/datadog_checks/supabase/data/conf.yaml.example +[5]: https://docs.datadoghq.com/agent/guide/agent-commands/#start-stop-and-restart-the-agent +[6]: https://docs.datadoghq.com/agent/guide/agent-commands/#agent-status-and-information +[7]: https://github.com/DataDog/integrations-core/blob/master/supabase/metadata.csv +[8]: https://github.com/DataDog/integrations-core/blob/master/supabase/assets/service_checks.json +[9]: https://docs.datadoghq.com/help/ diff --git a/supabase/assets/configuration/spec.yaml b/supabase/assets/configuration/spec.yaml new file mode 100644 index 0000000000000..14ceebef476cc --- /dev/null +++ b/supabase/assets/configuration/spec.yaml @@ -0,0 +1,28 @@ +name: Supabase +files: +- name: supabase.yaml + options: + - template: init_config + options: + - template: init_config/default + - template: instances + options: + - name: priviledged_metrics_endpoint + description: | + Endpoint exposing Supabase customer metrics + https://supabase.com/docs/guides/monitoring-troubleshooting/metrics#accessing-the-metrics-endpoint + value: + display_default: null + example: https://.supabase.co/customer/v1/privileged/metrics + type: string + - name: storage_api_endpoint + description: | + Endpoint exposing the S3 Storage API Prometheus metrics. + value: + display_default: null + example: http://%%host%%:5000/metrics + type: string + - template: instances/openmetrics + overrides: + openmetrics_endpoint.required: false + openmetrics_endpoint.hidden: true \ No newline at end of file diff --git a/supabase/assets/dashboards/supabase_overview.json b/supabase/assets/dashboards/supabase_overview.json new file mode 100644 index 0000000000000..eac5ccdf59ebc --- /dev/null +++ b/supabase/assets/dashboards/supabase_overview.json @@ -0,0 +1,77 @@ +{ + "title": "Supabase Overview", + "description": "## Supabase\n", + "widgets": [ + { + "id": 4717263751542750, + "definition": { + "title": "", + "banner_img": "/static/images/logos/supabase_large.svg", + "show_title": true, + "type": "group", + "layout_type": "ordered", + "widgets": [ + { + "id": 5685022835071772, + "definition": { + "type": "note", + "content": "## Supabase\n", + "background_color": "white", + "font_size": "14", + "text_align": "left", + "vertical_align": "center", + "show_tick": false, + "tick_pos": "50%", + "tick_edge": "left", + "has_padding": true + }, + "layout": { + "x": 0, + "y": 0, + "width": 3, + "height": 3 + } + }, + { + "id": 8921963557059570, + "definition": { + "type": "note", + "content": "", + "background_color": "white", + "font_size": "14", + "text_align": "center", + "vertical_align": "center", + "show_tick": false, + "tick_pos": "50%", + "tick_edge": "left", + "has_padding": true + }, + "layout": { + "x": 3, + "y": 0, + "width": 3, + "height": 3 + } + } + ] + }, + "layout": { + "x": 0, + "y": 0, + "width": 6, + "height": 6 + } + } + ], + "template_variables": [ + { + "name": "host", + "prefix": "host", + "available_values": [], + "default": "*" + } + ], + "layout_type": "ordered", + "notify_list": [], + "reflow_type": "fixed" +} \ No newline at end of file diff --git a/supabase/assets/service_checks.json b/supabase/assets/service_checks.json new file mode 100644 index 0000000000000..f1b12843fedde --- /dev/null +++ b/supabase/assets/service_checks.json @@ -0,0 +1,32 @@ +[ + { + "agent_version": "7.62.0", + "integration": "Supabase", + "check": "supabase.openmetrics.health", + "statuses": [ + "ok", + "critical" + ], + "groups": [ + "host", + "endpoint" + ], + "name": "Supabase OpenMetrics endpoint health", + "description": "Returns `CRITICAL` if the Agent is unable to connect to the Supabase OpenMetrics endpoint, otherwise returns `OK`." + }, + { + "agent_version": "7.62.0", + "integration": "Supabase", + "check": "supabase.storage_api.openmetrics.health", + "statuses": [ + "ok", + "critical" + ], + "groups": [ + "host", + "endpoint" + ], + "name": "Supabase Storage API OpenMetrics endpoint health", + "description": "Returns `CRITICAL` if the Agent is unable to connect to the Supabase Storage API OpenMetrics endpoint, otherwise returns `OK`." + } +] \ No newline at end of file diff --git a/supabase/changelog.d/19307.added b/supabase/changelog.d/19307.added new file mode 100644 index 0000000000000..aa949b47b7b41 --- /dev/null +++ b/supabase/changelog.d/19307.added @@ -0,0 +1 @@ +Initial Release \ No newline at end of file diff --git a/supabase/datadog_checks/__init__.py b/supabase/datadog_checks/__init__.py new file mode 100644 index 0000000000000..1517d901c0aae --- /dev/null +++ b/supabase/datadog_checks/__init__.py @@ -0,0 +1,4 @@ +# (C) Datadog, Inc. 2024-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) +__path__ = __import__('pkgutil').extend_path(__path__, __name__) # type: ignore diff --git a/supabase/datadog_checks/supabase/__about__.py b/supabase/datadog_checks/supabase/__about__.py new file mode 100644 index 0000000000000..e9541ce83e9e5 --- /dev/null +++ b/supabase/datadog_checks/supabase/__about__.py @@ -0,0 +1,4 @@ +# (C) Datadog, Inc. 2024-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) +__version__ = '0.0.1' diff --git a/supabase/datadog_checks/supabase/__init__.py b/supabase/datadog_checks/supabase/__init__.py new file mode 100644 index 0000000000000..e3ec3035e8ec2 --- /dev/null +++ b/supabase/datadog_checks/supabase/__init__.py @@ -0,0 +1,7 @@ +# (C) Datadog, Inc. 2024-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) +from .__about__ import __version__ +from .check import SupabaseCheck + +__all__ = ['__version__', 'SupabaseCheck'] diff --git a/supabase/datadog_checks/supabase/check.py b/supabase/datadog_checks/supabase/check.py new file mode 100644 index 0000000000000..5e1cd85b581eb --- /dev/null +++ b/supabase/datadog_checks/supabase/check.py @@ -0,0 +1,57 @@ +# (C) Datadog, Inc. 2024-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) +from typing import Any # noqa: F401 + +from datadog_checks.base import ConfigurationError, OpenMetricsBaseCheckV2 # noqa: F401 + +from .config_models import ConfigMixin +from .metrics import RENAME_LABELS_MAP, STORAGE_API_METRICS, SUPABASE_METRICS + +( + PRIVILEGED_METRICS_NAMESPACE, + STORAGE_API_METRICS_NAMESPACE, +) = [ + 'supabase', + 'supabase.storage_api', +] + + +class SupabaseCheck(OpenMetricsBaseCheckV2, ConfigMixin): + + DEFAULT_METRIC_LIMIT = 0 + + def __init__(self, name, init_config, instances=None): + super(SupabaseCheck, self).__init__(name, init_config, instances) + self.check_initializations.appendleft(self.parse_config) + # Use self.instance to read the check configuration + # self.url = self.instance.get("url") + + def parse_config(self): + self.scraper_configs = [] + privileged_metrics_endpoint = self.instance.get("privileged_metrics_endpoint") + storage_api_endpoint = self.instance.get("storage_api_endpoint") + + if not privileged_metrics_endpoint and not storage_api_endpoint: + raise ConfigurationError( + "Must specify at least one of the following:" "`privileged_metrics_endpoint` or `storage_api_endpoint`." + ) + + if privileged_metrics_endpoint: + self.scraper_configs.append( + self.generate_config(privileged_metrics_endpoint, PRIVILEGED_METRICS_NAMESPACE, SUPABASE_METRICS) + ) + if storage_api_endpoint: + self.scraper_configs.append( + self.generate_config(storage_api_endpoint, STORAGE_API_METRICS_NAMESPACE, STORAGE_API_METRICS) + ) + + def generate_config(self, endpoint, namespace, metrics): + config = { + 'openmetrics_endpoint': endpoint, + 'metrics': metrics, + 'namespace': namespace, + 'rename_labels': RENAME_LABELS_MAP, + } + config.update(self.instance) + return config diff --git a/supabase/datadog_checks/supabase/config_models/__init__.py b/supabase/datadog_checks/supabase/config_models/__init__.py new file mode 100644 index 0000000000000..106fff2032f68 --- /dev/null +++ b/supabase/datadog_checks/supabase/config_models/__init__.py @@ -0,0 +1,24 @@ +# (C) Datadog, Inc. 2024-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) + +# This file is autogenerated. +# To change this file you should edit assets/configuration/spec.yaml and then run the following commands: +# ddev -x validate config -s +# ddev -x validate models -s + +from .instance import InstanceConfig +from .shared import SharedConfig + + +class ConfigMixin: + _config_model_instance: InstanceConfig + _config_model_shared: SharedConfig + + @property + def config(self) -> InstanceConfig: + return self._config_model_instance + + @property + def shared_config(self) -> SharedConfig: + return self._config_model_shared diff --git a/supabase/datadog_checks/supabase/config_models/defaults.py b/supabase/datadog_checks/supabase/config_models/defaults.py new file mode 100644 index 0000000000000..0138cd77a5ea8 --- /dev/null +++ b/supabase/datadog_checks/supabase/config_models/defaults.py @@ -0,0 +1,124 @@ +# (C) Datadog, Inc. 2024-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) + +# This file is autogenerated. +# To change this file you should edit assets/configuration/spec.yaml and then run the following commands: +# ddev -x validate config -s +# ddev -x validate models -s + + +def instance_allow_redirects(): + return True + + +def instance_auth_type(): + return 'basic' + + +def instance_cache_metric_wildcards(): + return True + + +def instance_cache_shared_labels(): + return True + + +def instance_collect_counters_with_distributions(): + return False + + +def instance_collect_histogram_buckets(): + return True + + +def instance_disable_generic_tags(): + return False + + +def instance_empty_default_hostname(): + return False + + +def instance_enable_health_service_check(): + return True + + +def instance_histogram_buckets_as_distributions(): + return False + + +def instance_ignore_connection_errors(): + return False + + +def instance_kerberos_auth(): + return 'disabled' + + +def instance_kerberos_delegate(): + return False + + +def instance_kerberos_force_initiate(): + return False + + +def instance_log_requests(): + return False + + +def instance_min_collection_interval(): + return 15 + + +def instance_non_cumulative_histogram_buckets(): + return False + + +def instance_persist_connections(): + return False + + +def instance_request_size(): + return 16 + + +def instance_skip_proxy(): + return False + + +def instance_tag_by_endpoint(): + return True + + +def instance_telemetry(): + return False + + +def instance_timeout(): + return 10 + + +def instance_tls_ignore_warning(): + return False + + +def instance_tls_use_host_header(): + return False + + +def instance_tls_verify(): + return True + + +def instance_use_latest_spec(): + return False + + +def instance_use_legacy_auth_encoding(): + return True + + +def instance_use_process_start_time(): + return False diff --git a/supabase/datadog_checks/supabase/config_models/instance.py b/supabase/datadog_checks/supabase/config_models/instance.py new file mode 100644 index 0000000000000..517705d04bb9f --- /dev/null +++ b/supabase/datadog_checks/supabase/config_models/instance.py @@ -0,0 +1,173 @@ +# (C) Datadog, Inc. 2024-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) + +# This file is autogenerated. +# To change this file you should edit assets/configuration/spec.yaml and then run the following commands: +# ddev -x validate config -s +# ddev -x validate models -s + +from __future__ import annotations + +from types import MappingProxyType +from typing import Any, Optional, Union + +from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator + +from datadog_checks.base.utils.functions import identity +from datadog_checks.base.utils.models import validation + +from . import defaults, validators + + +class AuthToken(BaseModel): + model_config = ConfigDict( + arbitrary_types_allowed=True, + frozen=True, + ) + reader: Optional[MappingProxyType[str, Any]] = None + writer: Optional[MappingProxyType[str, Any]] = None + + +class ExtraMetrics(BaseModel): + model_config = ConfigDict( + arbitrary_types_allowed=True, + extra='allow', + frozen=True, + ) + name: Optional[str] = None + type: Optional[str] = None + + +class MetricPatterns(BaseModel): + model_config = ConfigDict( + arbitrary_types_allowed=True, + frozen=True, + ) + exclude: Optional[tuple[str, ...]] = None + include: Optional[tuple[str, ...]] = None + + +class Metrics(BaseModel): + model_config = ConfigDict( + arbitrary_types_allowed=True, + extra='allow', + frozen=True, + ) + name: Optional[str] = None + type: Optional[str] = None + + +class Proxy(BaseModel): + model_config = ConfigDict( + arbitrary_types_allowed=True, + frozen=True, + ) + http: Optional[str] = None + https: Optional[str] = None + no_proxy: Optional[tuple[str, ...]] = None + + +class ShareLabels(BaseModel): + model_config = ConfigDict( + arbitrary_types_allowed=True, + frozen=True, + ) + labels: Optional[tuple[str, ...]] = None + match: Optional[tuple[str, ...]] = None + + +class InstanceConfig(BaseModel): + model_config = ConfigDict( + validate_default=True, + arbitrary_types_allowed=True, + frozen=True, + ) + allow_redirects: Optional[bool] = None + auth_token: Optional[AuthToken] = None + auth_type: Optional[str] = None + aws_host: Optional[str] = None + aws_region: Optional[str] = None + aws_service: Optional[str] = None + cache_metric_wildcards: Optional[bool] = None + cache_shared_labels: Optional[bool] = None + collect_counters_with_distributions: Optional[bool] = None + collect_histogram_buckets: Optional[bool] = None + connect_timeout: Optional[float] = None + disable_generic_tags: Optional[bool] = None + empty_default_hostname: Optional[bool] = None + enable_health_service_check: Optional[bool] = None + exclude_labels: Optional[tuple[str, ...]] = None + exclude_metrics: Optional[tuple[str, ...]] = None + exclude_metrics_by_labels: Optional[MappingProxyType[str, Union[bool, tuple[str, ...]]]] = None + extra_headers: Optional[MappingProxyType[str, Any]] = None + extra_metrics: Optional[tuple[Union[str, MappingProxyType[str, Union[str, ExtraMetrics]]], ...]] = None + headers: Optional[MappingProxyType[str, Any]] = None + histogram_buckets_as_distributions: Optional[bool] = None + hostname_format: Optional[str] = None + hostname_label: Optional[str] = None + ignore_connection_errors: Optional[bool] = None + ignore_tags: Optional[tuple[str, ...]] = None + include_labels: Optional[tuple[str, ...]] = None + kerberos_auth: Optional[str] = None + kerberos_cache: Optional[str] = None + kerberos_delegate: Optional[bool] = None + kerberos_force_initiate: Optional[bool] = None + kerberos_hostname: Optional[str] = None + kerberos_keytab: Optional[str] = None + kerberos_principal: Optional[str] = None + log_requests: Optional[bool] = None + metric_patterns: Optional[MetricPatterns] = None + metrics: Optional[tuple[Union[str, MappingProxyType[str, Union[str, Metrics]]], ...]] = None + min_collection_interval: Optional[float] = None + namespace: Optional[str] = Field(None, pattern='\\w*') + non_cumulative_histogram_buckets: Optional[bool] = None + ntlm_domain: Optional[str] = None + openmetrics_endpoint: Optional[str] = None + password: Optional[str] = None + persist_connections: Optional[bool] = None + priviledged_metrics_endpoint: Optional[str] = None + proxy: Optional[Proxy] = None + raw_line_filters: Optional[tuple[str, ...]] = None + raw_metric_prefix: Optional[str] = None + read_timeout: Optional[float] = None + rename_labels: Optional[MappingProxyType[str, Any]] = None + request_size: Optional[float] = None + service: Optional[str] = None + share_labels: Optional[MappingProxyType[str, Union[bool, ShareLabels]]] = None + skip_proxy: Optional[bool] = None + storage_api_endpoint: Optional[str] = None + tag_by_endpoint: Optional[bool] = None + tags: Optional[tuple[str, ...]] = None + telemetry: Optional[bool] = None + timeout: Optional[float] = None + tls_ca_cert: Optional[str] = None + tls_cert: Optional[str] = None + tls_ignore_warning: Optional[bool] = None + tls_private_key: Optional[str] = None + tls_protocols_allowed: Optional[tuple[str, ...]] = None + tls_use_host_header: Optional[bool] = None + tls_verify: Optional[bool] = None + use_latest_spec: Optional[bool] = None + use_legacy_auth_encoding: Optional[bool] = None + use_process_start_time: Optional[bool] = None + username: Optional[str] = None + + @model_validator(mode='before') + def _initial_validation(cls, values): + return validation.core.initialize_config(getattr(validators, 'initialize_instance', identity)(values)) + + @field_validator('*', mode='before') + def _validate(cls, value, info): + field = cls.model_fields[info.field_name] + field_name = field.alias or info.field_name + if field_name in info.context['configured_fields']: + value = getattr(validators, f'instance_{info.field_name}', identity)(value, field=field) + else: + value = getattr(defaults, f'instance_{info.field_name}', lambda: value)() + + return validation.utils.make_immutable(value) + + @model_validator(mode='after') + def _final_validation(cls, model): + return validation.core.check_model(getattr(validators, 'check_instance', identity)(model)) diff --git a/supabase/datadog_checks/supabase/config_models/shared.py b/supabase/datadog_checks/supabase/config_models/shared.py new file mode 100644 index 0000000000000..e39d447dfc4b9 --- /dev/null +++ b/supabase/datadog_checks/supabase/config_models/shared.py @@ -0,0 +1,45 @@ +# (C) Datadog, Inc. 2024-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) + +# This file is autogenerated. +# To change this file you should edit assets/configuration/spec.yaml and then run the following commands: +# ddev -x validate config -s +# ddev -x validate models -s + +from __future__ import annotations + +from typing import Optional + +from pydantic import BaseModel, ConfigDict, field_validator, model_validator + +from datadog_checks.base.utils.functions import identity +from datadog_checks.base.utils.models import validation + +from . import validators + + +class SharedConfig(BaseModel): + model_config = ConfigDict( + validate_default=True, + arbitrary_types_allowed=True, + frozen=True, + ) + service: Optional[str] = None + + @model_validator(mode='before') + def _initial_validation(cls, values): + return validation.core.initialize_config(getattr(validators, 'initialize_shared', identity)(values)) + + @field_validator('*', mode='before') + def _validate(cls, value, info): + field = cls.model_fields[info.field_name] + field_name = field.alias or info.field_name + if field_name in info.context['configured_fields']: + value = getattr(validators, f'shared_{info.field_name}', identity)(value, field=field) + + return validation.utils.make_immutable(value) + + @model_validator(mode='after') + def _final_validation(cls, model): + return validation.core.check_model(getattr(validators, 'check_shared', identity)(model)) diff --git a/supabase/datadog_checks/supabase/config_models/validators.py b/supabase/datadog_checks/supabase/config_models/validators.py new file mode 100644 index 0000000000000..70150e85e6124 --- /dev/null +++ b/supabase/datadog_checks/supabase/config_models/validators.py @@ -0,0 +1,13 @@ +# (C) Datadog, Inc. 2024-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) + +# Here you can include additional config validators or transformers +# +# def initialize_instance(values, **kwargs): +# if 'my_option' not in values and 'my_legacy_option' in values: +# values['my_option'] = values['my_legacy_option'] +# if values.get('my_number') > 10: +# raise ValueError('my_number max value is 10, got %s' % str(values.get('my_number'))) +# +# return values diff --git a/supabase/datadog_checks/supabase/data/conf.yaml.example b/supabase/datadog_checks/supabase/data/conf.yaml.example new file mode 100644 index 0000000000000..113f1e13c4d5c --- /dev/null +++ b/supabase/datadog_checks/supabase/data/conf.yaml.example @@ -0,0 +1,600 @@ +## All options defined here are available to all instances. +# +init_config: + + ## @param service - string - optional + ## Attach the tag `service:` to every metric, event, and service check emitted by this integration. + ## + ## Additionally, this sets the default `service` for every log source. + # + # service: + +## Every instance is scheduled independently of the others. +# +instances: + + - + ## @param priviledged_metrics_endpoint - string - optional + ## Endpoint exposing Supabase customer metrics + ## https://supabase.com/docs/guides/monitoring-troubleshooting/metrics#accessing-the-metrics-endpoint + # + # priviledged_metrics_endpoint: https://.supabase.co/customer/v1/privileged/metrics + + ## @param storage_api_endpoint - string - optional + ## Endpoint exposing the S3 Storage API Prometheus metrics. + # + # storage_api_endpoint: http://%%host%%:5000/metrics + + ## @param raw_metric_prefix - string - optional + ## A prefix that is removed from all exposed metric names, if present. + ## All configuration options will use the prefix-less name. + # + # raw_metric_prefix: _ + + ## @param extra_metrics - (list of string or mapping) - optional + ## This list defines metrics to collect from the `openmetrics_endpoint`, in addition to + ## what the check collects by default. If the check already collects a metric, then + ## metric definitions here take precedence. Metrics may be defined in 3 ways: + ## + ## 1. If the item is a string, then it represents the exposed metric name, and + ## the sent metric name will be identical. For example: + ## + ## extra_metrics: + ## - + ## - + ## 2. If the item is a mapping, then the keys represent the exposed metric names. + ## + ## a. If a value is a string, then it represents the sent metric name. For example: + ## + ## extra_metrics: + ## - : + ## - : + ## b. If a value is a mapping, then it must have a `name` and/or `type` key. + ## The `name` represents the sent metric name, and the `type` represents how + ## the metric should be handled, overriding any type information the endpoint + ## may provide. For example: + ## + ## extra_metrics: + ## - : + ## name: + ## type: + ## - : + ## name: + ## type: + ## + ## The supported native types are `gauge`, `counter`, `histogram`, and `summary`. + ## + ## Note: To collect counter metrics with names ending in `_total`, specify the metric name without the `_total` + ## suffix. For example, to collect the counter metric `promhttp_metric_handler_requests_total`, specify + ## `promhttp_metric_handler_requests`. This submits to Datadog the metric name appended with `.count`. + ## For more information, see: + ## https://github.com/OpenObservability/OpenMetrics/blob/main/specification/OpenMetrics.md#suffixes + ## + ## Regular expressions may be used to match the exposed metric names, for example: + ## + ## extra_metrics: + ## - ^network_(ingress|egress)_.+ + ## - .+: + ## type: gauge + # + # extra_metrics: [] + + ## @param exclude_metrics - list of strings - optional + ## A list of metrics to exclude, with each entry being either + ## the exact metric name or a regular expression. + ## In order to exclude all metrics but the ones matching a specific filter, + ## you can use a negative lookahead regex like: + ## - ^(?!foo).*$ + # + # exclude_metrics: [] + + ## @param exclude_metrics_by_labels - mapping - optional + ## A mapping of labels to exclude metrics with matching label name and their corresponding metric values. To match + ## all values of a label, set it to `true`. + ## + ## Note: Label filtering happens before `rename_labels`. + ## + ## For example, the following configuration instructs the check to exclude all metrics with + ## a label `worker` or a label `pid` with the value of either `23` or `42`. + ## + ## exclude_metrics_by_labels: + ## worker: true + ## pid: + ## - '23' + ## - '42' + # + # exclude_metrics_by_labels: {} + + ## @param exclude_labels - list of strings - optional + ## A list of labels to exclude, useful for high cardinality values like timestamps or UUIDs. + ## May be used in conjunction with `include_labels`. + ## Labels defined in `exclude_labels` will take precedence in case of overlap. + ## + ## Note: Label filtering happens before `rename_labels`. + # + # exclude_labels: [] + + ## @param include_labels - list of strings - optional + ## A list of labels to include. May be used in conjunction with `exclude_labels`. + ## Labels defined in `exclude_labels` will take precedence in case of overlap. + ## + ## Note: Label filtering happens before `rename_labels`. + # + # include_labels: [] + + ## @param rename_labels - mapping - optional + ## A mapping of label names to their new names. + # + # rename_labels: + # : + # : + + ## @param enable_health_service_check - boolean - optional - default: true + ## Whether or not to send a service check named `.openmetrics.health` which reports + ## the health of the `openmetrics_endpoint`. + # + # enable_health_service_check: true + + ## @param ignore_connection_errors - boolean - optional - default: false + ## Whether or not to ignore connection errors when scraping `openmetrics_endpoint`. + # + # ignore_connection_errors: false + + ## @param hostname_label - string - optional + ## Override the hostname for every metric submission with the value of one of its labels. + # + # hostname_label: + + ## @param hostname_format - string - optional + ## When `hostname_label` is set, this instructs the check how to format the values. The string + ## `` is replaced by the value of the label defined by `hostname_label`. + # + # hostname_format: + + ## @param collect_histogram_buckets - boolean - optional - default: true + ## Whether or not to send histogram buckets. + # + # collect_histogram_buckets: true + + ## @param non_cumulative_histogram_buckets - boolean - optional - default: false + ## Whether or not histogram buckets are non-cumulative and to come with a `lower_bound` tag. + # + # non_cumulative_histogram_buckets: false + + ## @param histogram_buckets_as_distributions - boolean - optional - default: false + ## Whether or not to send histogram buckets as Datadog distribution metrics. This implicitly + ## enables the `collect_histogram_buckets` and `non_cumulative_histogram_buckets` options. + ## + ## Learn more about distribution metrics: + ## https://docs.datadoghq.com/developers/metrics/types/?tab=distribution#metric-types + # + # histogram_buckets_as_distributions: false + + ## @param collect_counters_with_distributions - boolean - optional - default: false + ## Whether or not to also collect the observation counter metrics ending in `.sum` and `.count` + ## when sending histogram buckets as Datadog distribution metrics. This implicitly enables the + ## `histogram_buckets_as_distributions` option. + # + # collect_counters_with_distributions: false + + ## @param use_process_start_time - boolean - optional - default: false + ## Whether to enable a heuristic for reporting counter values on the first scrape. When true, + ## the first time an endpoint is scraped, check `process_start_time_seconds` to decide whether zero + ## initial value can be assumed for counters. This requires keeping metrics in memory until the entire + ## response is received. + # + # use_process_start_time: false + + ## @param share_labels - mapping - optional + ## This mapping allows for the sharing of labels across multiple metrics. The keys represent the + ## exposed metrics from which to share labels, and the values are mappings that configure the + ## sharing behavior. Each mapping must have at least one of the following keys: + ## + ## labels - This is a list of labels to share. All labels are shared if this is not set. + ## match - This is a list of labels to match on other metrics as a condition for sharing. + ## values - This is a list of allowed values as a condition for sharing. + ## + ## To unconditionally share all labels of a metric, set it to `true`. + ## + ## For example, the following configuration instructs the check to apply all labels from `metric_a` + ## to all other metrics, the `node` label from `metric_b` to only those metrics that have a `pod` + ## label value that matches the `pod` label value of `metric_b`, and all labels from `metric_c` + ## to all other metrics if their value is equal to `23` or `42`. + ## + ## share_labels: + ## metric_a: true + ## metric_b: + ## labels: + ## - node + ## match: + ## - pod + ## metric_c: + ## values: + ## - 23 + ## - 42 + # + # share_labels: {} + + ## @param cache_shared_labels - boolean - optional - default: true + ## When `share_labels` is set, it instructs the check to cache labels collected from the first payload + ## for improved performance. + ## + ## Set this to `false` to compute label sharing for every payload at the risk of potentially increased memory usage. + # + # cache_shared_labels: true + + ## @param raw_line_filters - list of strings - optional + ## A list of regular expressions used to exclude lines read from the `openmetrics_endpoint` + ## from being parsed. + # + # raw_line_filters: [] + + ## @param cache_metric_wildcards - boolean - optional - default: true + ## Whether or not to cache data from metrics that are defined by regular expressions rather + ## than the full metric name. + # + # cache_metric_wildcards: true + + ## @param telemetry - boolean - optional - default: false + ## Whether or not to submit metrics prefixed by `.telemetry.` for debugging purposes. + # + # telemetry: false + + ## @param ignore_tags - list of strings - optional + ## A list of regular expressions used to ignore tags added by Autodiscovery and entries in the `tags` option. + # + # ignore_tags: + # - + # - + # - + + ## @param proxy - mapping - optional + ## This overrides the `proxy` setting in `init_config`. + ## + ## Set HTTP or HTTPS proxies for this instance. Use the `no_proxy` list + ## to specify hosts that must bypass proxies. + ## + ## The SOCKS protocol is also supported, for example: + ## + ## socks5://user:pass@host:port + ## + ## Using the scheme `socks5` causes the DNS resolution to happen on the + ## client, rather than on the proxy server. This is in line with `curl`, + ## which uses the scheme to decide whether to do the DNS resolution on + ## the client or proxy. If you want to resolve the domains on the proxy + ## server, use `socks5h` as the scheme. + # + # proxy: + # http: http://: + # https: https://: + # no_proxy: + # - + # - + + ## @param skip_proxy - boolean - optional - default: false + ## This overrides the `skip_proxy` setting in `init_config`. + ## + ## If set to `true`, this makes the check bypass any proxy + ## settings enabled and attempt to reach services directly. + # + # skip_proxy: false + + ## @param auth_type - string - optional - default: basic + ## The type of authentication to use. The available types (and related options) are: + ## + ## - basic + ## |__ username + ## |__ password + ## |__ use_legacy_auth_encoding + ## - digest + ## |__ username + ## |__ password + ## - ntlm + ## |__ ntlm_domain + ## |__ password + ## - kerberos + ## |__ kerberos_auth + ## |__ kerberos_cache + ## |__ kerberos_delegate + ## |__ kerberos_force_initiate + ## |__ kerberos_hostname + ## |__ kerberos_keytab + ## |__ kerberos_principal + ## - aws + ## |__ aws_region + ## |__ aws_host + ## |__ aws_service + ## + ## The `aws` auth type relies on boto3 to automatically gather AWS credentials, for example: from `.aws/credentials`. + ## Details: https://boto3.amazonaws.com/v1/documentation/api/latest/guide/configuration.html#configuring-credentials + # + # auth_type: basic + + ## @param use_legacy_auth_encoding - boolean - optional - default: true + ## When `auth_type` is set to `basic`, this determines whether to encode as `latin1` rather than `utf-8`. + # + # use_legacy_auth_encoding: true + + ## @param username - string - optional + ## The username to use if services are behind basic or digest auth. + # + # username: + + ## @param password - string - optional + ## The password to use if services are behind basic or NTLM auth. + # + # password: + + ## @param ntlm_domain - string - optional + ## If your services use NTLM authentication, specify + ## the domain used in the check. For NTLM Auth, append + ## the username to domain, not as the `username` parameter. + # + # ntlm_domain: \ + + ## @param kerberos_auth - string - optional - default: disabled + ## If your services use Kerberos authentication, you can specify the Kerberos + ## strategy to use between: + ## + ## - required + ## - optional + ## - disabled + ## + ## See https://github.com/requests/requests-kerberos#mutual-authentication + # + # kerberos_auth: disabled + + ## @param kerberos_cache - string - optional + ## Sets the KRB5CCNAME environment variable. + ## It should point to a credential cache with a valid TGT. + # + # kerberos_cache: + + ## @param kerberos_delegate - boolean - optional - default: false + ## Set to `true` to enable Kerberos delegation of credentials to a server that requests delegation. + ## + ## See https://github.com/requests/requests-kerberos#delegation + # + # kerberos_delegate: false + + ## @param kerberos_force_initiate - boolean - optional - default: false + ## Set to `true` to preemptively initiate the Kerberos GSS exchange and + ## present a Kerberos ticket on the initial request (and all subsequent). + ## + ## See https://github.com/requests/requests-kerberos#preemptive-authentication + # + # kerberos_force_initiate: false + + ## @param kerberos_hostname - string - optional + ## Override the hostname used for the Kerberos GSS exchange if its DNS name doesn't + ## match its Kerberos hostname, for example: behind a content switch or load balancer. + ## + ## See https://github.com/requests/requests-kerberos#hostname-override + # + # kerberos_hostname: + + ## @param kerberos_principal - string - optional + ## Set an explicit principal, to force Kerberos to look for a + ## matching credential cache for the named user. + ## + ## See https://github.com/requests/requests-kerberos#explicit-principal + # + # kerberos_principal: + + ## @param kerberos_keytab - string - optional + ## Set the path to your Kerberos key tab file. + # + # kerberos_keytab: + + ## @param auth_token - mapping - optional + ## This allows for the use of authentication information from dynamic sources. + ## Both a reader and writer must be configured. + ## + ## The available readers are: + ## + ## - type: file + ## path (required): The absolute path for the file to read from. + ## pattern: A regular expression pattern with a single capture group used to find the + ## token rather than using the entire file, for example: Your secret is (.+) + ## - type: oauth + ## url (required): The token endpoint. + ## client_id (required): The client identifier. + ## client_secret (required): The client secret. + ## basic_auth: Whether the provider expects credentials to be transmitted in + ## an HTTP Basic Auth header. The default is: false + ## options: Mapping of additional options to pass to the provider, such as the audience + ## or the scope. For example: + ## options: + ## audience: https://example.com + ## scope: read:example + ## + ## The available writers are: + ## + ## - type: header + ## name (required): The name of the field, for example: Authorization + ## value: The template value, for example `Bearer `. The default is: + ## placeholder: The substring in `value` to replace with the token, defaults to: + # + # auth_token: + # reader: + # type: + # : + # : + # writer: + # type: + # : + # : + + ## @param aws_region - string - optional + ## If your services require AWS Signature Version 4 signing, set the region. + ## + ## See https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html + # + # aws_region: + + ## @param aws_host - string - optional + ## If your services require AWS Signature Version 4 signing, set the host. + ## This only needs the hostname and does not require the protocol (HTTP, HTTPS, and more). + ## For example, if connecting to https://us-east-1.amazonaws.com/, set `aws_host` to `us-east-1.amazonaws.com`. + ## + ## Note: This setting is not necessary for official integrations. + ## + ## See https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html + # + # aws_host: + + ## @param aws_service - string - optional + ## If your services require AWS Signature Version 4 signing, set the service code. For a list + ## of available service codes, see https://docs.aws.amazon.com/general/latest/gr/rande.html + ## + ## Note: This setting is not necessary for official integrations. + ## + ## See https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html + # + # aws_service: + + ## @param tls_verify - boolean - optional - default: true + ## Instructs the check to validate the TLS certificate of services. + # + # tls_verify: true + + ## @param tls_use_host_header - boolean - optional - default: false + ## If a `Host` header is set, this enables its use for SNI (matching against the TLS certificate CN or SAN). + # + # tls_use_host_header: false + + ## @param tls_ignore_warning - boolean - optional - default: false + ## If `tls_verify` is disabled, security warnings are logged by the check. + ## Disable those by setting `tls_ignore_warning` to true. + # + # tls_ignore_warning: false + + ## @param tls_cert - string - optional + ## The path to a single file in PEM format containing a certificate as well as any + ## number of CA certificates needed to establish the certificate's authenticity for + ## use when connecting to services. It may also contain an unencrypted private key to use. + # + # tls_cert: + + ## @param tls_private_key - string - optional + ## The unencrypted private key to use for `tls_cert` when connecting to services. This is + ## required if `tls_cert` is set and it does not already contain a private key. + # + # tls_private_key: + + ## @param tls_ca_cert - string - optional + ## The path to a file of concatenated CA certificates in PEM format or a directory + ## containing several CA certificates in PEM format. If a directory, the directory + ## must have been processed using the `openssl rehash` command. See: + ## https://www.openssl.org/docs/man3.2/man1/c_rehash.html + # + # tls_ca_cert: + + ## @param tls_protocols_allowed - list of strings - optional + ## The expected versions of TLS/SSL when fetching intermediate certificates. + ## Only `SSLv3`, `TLSv1.2`, `TLSv1.3` are allowed by default. The possible values are: + ## SSLv3 + ## TLSv1 + ## TLSv1.1 + ## TLSv1.2 + ## TLSv1.3 + # + # tls_protocols_allowed: + # - SSLv3 + # - TLSv1.2 + # - TLSv1.3 + + ## @param headers - mapping - optional + ## The headers parameter allows you to send specific headers with every request. + ## You can use it for explicitly specifying the host header or adding headers for + ## authorization purposes. + ## + ## This overrides any default headers. + # + # headers: + # Host: + # X-Auth-Token: + + ## @param extra_headers - mapping - optional + ## Additional headers to send with every request. + # + # extra_headers: + # Host: + # X-Auth-Token: + + ## @param timeout - number - optional - default: 10 + ## The timeout for accessing services. + ## + ## This overrides the `timeout` setting in `init_config`. + # + # timeout: 10 + + ## @param connect_timeout - number - optional + ## The connect timeout for accessing services. Defaults to `timeout`. + # + # connect_timeout: + + ## @param read_timeout - number - optional + ## The read timeout for accessing services. Defaults to `timeout`. + # + # read_timeout: + + ## @param request_size - number - optional - default: 16 + ## The number of kibibytes (KiB) to read from streaming HTTP responses at a time. + # + # request_size: 16 + + ## @param log_requests - boolean - optional - default: false + ## Whether or not to debug log the HTTP(S) requests made, including the method and URL. + # + # log_requests: false + + ## @param persist_connections - boolean - optional - default: false + ## Whether or not to persist cookies and use connection pooling for improved performance. + # + # persist_connections: false + + ## @param allow_redirects - boolean - optional - default: true + ## Whether or not to allow URL redirection. + # + # allow_redirects: true + + ## @param tags - list of strings - optional + ## A list of tags to attach to every metric and service check emitted by this instance. + ## + ## Learn more about tagging at https://docs.datadoghq.com/tagging + # + # tags: + # - : + # - : + + ## @param service - string - optional + ## Attach the tag `service:` to every metric, event, and service check emitted by this integration. + ## + ## Overrides any `service` defined in the `init_config` section. + # + # service: + + ## @param min_collection_interval - number - optional - default: 15 + ## This changes the collection interval of the check. For more information, see: + ## https://docs.datadoghq.com/developers/write_agent_check/#collection-interval + # + # min_collection_interval: 15 + + ## @param empty_default_hostname - boolean - optional - default: false + ## This forces the check to send metrics with no hostname. + ## + ## This is useful for cluster-level checks. + # + # empty_default_hostname: false + + ## @param metric_patterns - mapping - optional + ## A mapping of metrics to include or exclude, with each entry being a regular expression. + ## + ## Metrics defined in `exclude` will take precedence in case of overlap. + # + # metric_patterns: + # include: + # - + # exclude: + # - diff --git a/supabase/datadog_checks/supabase/metrics.py b/supabase/datadog_checks/supabase/metrics.py new file mode 100644 index 0000000000000..3b772fc0f7ee3 --- /dev/null +++ b/supabase/datadog_checks/supabase/metrics.py @@ -0,0 +1,286 @@ +# (C) Datadog, Inc. 2024-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) +from datadog_checks.base.checks.openmetrics.v2.metrics import DEFAULT_GO_METRICS + +# https://argo-cd.readthedocs.io/en/stable/operator-manual/metrics/ +PRIVELEGED_METRICS = { + 'auth_users_user_count': 'auth_users.user_count', + 'db_sql_connection_closed_max_idle_time': 'db.sql.connection_closed_max_idle_time', + 'db_sql_connection_closed_max_idle': 'db.sql.connection_closed_max_idle', + 'db_sql_connection_closed_max_lifetime': 'db.sql.connection_closed_max_lifetime', + 'db_sql_connection_max_open': 'db.sql.connection_max_open', + 'db_sql_connection_open': 'db.sql.connection_open', + 'db_sql_connection_wait_duration_milliseconds': 'db.sql.connection_wait_duration', + 'db_sql_connection_wait': 'db.sql.connection_wait', + 'db_transmit_bytes': 'db.transmit_bytes', + 'go_memstats_last_gc_time_seconds': { + 'name': 'go.memstats.last_gc_time.seconds', + 'type': 'time_elapsed', + }, + 'http_server_duration_milliseconds': 'http.server.duration', + 'http_server_request_size_bytes': 'http.server.request.size_bytes', + 'http_server_response_size_bytes': 'http.server.response.size_bytes', + 'http_status_codes': 'http.status_codes', + 'node_cpu_guest_seconds': 'node.cpu.guest_seconds', + 'node_cpu_seconds': 'node.cpu.seconds', + 'node_disk_discard_time_seconds': 'node.disk.discard_time_seconds', + 'node_disk_discarded_sectors': 'node.disk.discarded_sectors', + 'node_disk_discards_completed': 'node.disk.discards_completed', + 'node_disk_discards_merged': 'node.disk.discards_merged', + 'node_disk_flush_requests_time_seconds': 'node.disk.flush_requests_time_seconds', + 'node_disk_flush_requests': 'node.disk.flush_requests', + 'node_disk_io_now': 'node.disk.io_now', + 'node_disk_io_time_seconds': 'node.disk.io_time_seconds', + 'node_disk_io_time_weighted_seconds': 'node.disk.io_time_weighted_seconds', + 'node_disk_read_bytes': 'node.disk.read_bytes', + 'node_disk_read_time_seconds': 'node.disk.read_time_seconds', + 'node_disk_reads_completed': 'node.disk.reads_completed', + 'node_disk_reads_merged': 'node.disk.reads_merged', + 'node_disk_write_time_seconds': 'node.disk.write_time_seconds', + 'node_disk_writes_completed': 'node.disk.writes_completed', + 'node_disk_writes_merged': 'node.disk.writes_merged', + 'node_disk_written_bytes': 'node.disk.written_bytes', + 'node_filesystem_avail_bytes': 'node.filesystem.available_bytes', + 'node_filesystem_device_error': 'node.filesystem.device_error', + 'node_filesystem_files': 'node.filesystem.files', + 'node_filesystem_files_free': 'node.filesystem.files_free', + 'node_filesystem_free_bytes': 'node.filesystem.free_bytes', + 'node_filesystem_readonly': 'node.filesystem.readonly', + 'node_filesystem_size_bytes': 'node.filesystem.size_bytes', + 'node_load1': 'node.load1', + 'node_load15': 'node.load15', + 'node_load5': 'node.load5', + 'node_memory_Active_anon_bytes': 'node.memory.active_anon_bytes', + 'node_memory_Active_bytes': 'node.memory.active_bytes', + 'node_memory_Active_file_bytes': 'node.memory.active_file_bytes', + 'node_memory_AnonHugePages_bytes': 'node.memory.anon_huge_pages_bytes', + 'node_memory_AnonPages_bytes': 'node.memory.anon_pages_bytes', + 'node_memory_Bounce_bytes': 'node.memory.bounce_bytes', + 'node_memory_Buffers_bytes': 'node.memory.buffers_bytes', + 'node_memory_Cached_bytes': 'node.memory.cached_bytes', + 'node_memory_CommitLimit_bytes': 'node.memory.commit_limit_bytes', + 'node_memory_Committed_AS_bytes': 'node.memory.committed_as_bytes', + 'node_memory_Dirty_bytes': 'node.memory.dirty_bytes', + 'node_memory_FileHugePages_bytes': 'node.memory.file_huge_pages_bytes', + 'node_memory_FilePmdMapped_bytes': 'node.memory.file_pmd_mapped_bytes', + 'node_memory_HardwareCorrupted_bytes': 'node.memory.hardware_corrupted_bytes', + 'node_memory_HugePages_Free': 'node.memory.huge_pages_free', + 'node_memory_HugePages_Rsvd': 'node.memory.huge_pages_reserved', + 'node_memory_HugePages_Surp': 'node.memory.huge_pages_surp', + 'node_memory_HugePages_Total': 'node.memory.huge_pages_total', + 'node_memory_Hugepagesize_bytes': 'node.memory.huge_page_size_bytes', + 'node_memory_Hugetlb_bytes': 'node.memory.hugetlb_bytes', + 'node_memory_Inactive_anon_bytes': 'node.memory.inactive_anon_bytes', + 'node_memory_Inactive_bytes': 'node.memory.inactive_bytes', + 'node_memory_Inactive_file_bytes': 'node.memory.inactive_file_bytes', + 'node_memory_KReclaimable_bytes': 'node.memory.kreclaimable_bytes', + 'node_memory_KernelStack_bytes': 'node.memory.kernel_stack_bytes', + 'node_memory_Mapped_bytes': 'node.memory.mapped_bytes', + 'node_memory_MemAvailable_bytes': 'node.memory.mem_available_bytes', + 'node_memory_MemFree_bytes': 'node.memory.mem_free_bytes', + 'node_memory_MemTotal_bytes': 'node.memory.mem_total_bytes', + 'node_memory_Mlocked_bytes': 'node.memory.mlocked_bytes', + 'node_memory_NFS_Unstable_bytes': 'node.memory.nfs_unstable_bytes', + 'node_memory_PageTables_bytes': 'node.memory.page_tables_bytes', + 'node_memory_Percpu_bytes': 'node.memory.percpu_bytes', + 'node_memory_SReclaimable_bytes': 'node.memory.sreclaimable_bytes', + 'node_memory_SUnreclaim_bytes': 'node.memory.sunreclaim_bytes', + 'node_memory_ShmemHugePages_bytes': 'node.memory.shmem_huge_pages_bytes', + 'node_memory_ShmemPmdMapped_bytes': 'node.memory.shmem_pmd_mapped_bytes', + 'node_memory_Shmem_bytes': 'node.memory.shmem_bytes', + 'node_memory_Slab_bytes': 'node.memory.slab_bytes', + 'node_memory_SwapCached_bytes': 'node.memory.swap_cached_bytes', + 'node_memory_SwapFree_bytes': 'node.memory.swap_free_bytes', + 'node_memory_SwapTotal_bytes': 'node.memory.swap_total_bytes', + 'node_memory_Unevictable_bytes': 'node.memory.unevictable_bytes', + 'node_memory_VmallocChunk_bytes': 'node.memory.vm_alloc_chunk_bytes', + 'node_memory_VmallocTotal_bytes': 'node.memory.vm_alloc_total_bytes', + 'node_memory_VmallocUsed_bytes': 'node.memory.vm_alloc_used_bytes', + 'node_memory_WritebackTmp_bytes': 'node.memory.writeback_tmp_bytes', + 'node_memory_Writeback_bytes': 'node.memory.writeback_bytes', + 'node_network_receive_bytes': 'node.network.receive_bytes', + 'node_network_receive_compressed': 'node.network.receive_compressed', + 'node_network_receive_drop': 'node.network.receive_drop', + 'node_network_receive_errs': 'node.network.receive_errors', + 'node_network_receive_fifo': 'node.network.receive_fifo', + 'node_network_receive_frame': 'node.network.receive_frame', + 'node_network_receive_multicast': 'node.network.receive_multicast', + 'node_network_receive_packets': 'node.network.receive_packets', + 'node_network_transmit_bytes': 'node.network.transmit_bytes', + 'node_network_transmit_carrier': 'node.network.transmit_carrier', + 'node_network_transmit_colls': 'node.network.transmit_colls', + 'node_network_transmit_compressed': 'node.network.transmit_compressed', + 'node_network_transmit_drop': 'node.network.transmit_drop', + 'node_network_transmit_errs': 'node.network.transmit_errors', + 'node_network_transmit_fifo': 'node.network.transmit_fifo', + 'node_network_transmit_packets': 'node.network.transmit_packets', + 'node_scrape_collector_duration_seconds': 'node.scrape.collector_duration_seconds', + 'node_scrape_collector_success': 'node.scrape.collector_success', + # We force type since node.vmstat.* metrics are untyped + 'node_vmstat_oom_kill': { + 'name': 'node.vmstat.oom_kill', + 'type': 'counter', + }, + 'node_vmstat_pgfault': { + 'name': 'node.vmstat.pgfault', + 'type': 'counter', + }, + 'node_vmstat_pgmajfault': { + 'name': 'node.vmstat.pgmajfault', + 'type': 'counter', + }, + 'node_vmstat_pgpgin': { + 'name': 'node.vmstat.pgpgin', + 'type': 'counter', + }, + 'node_vmstat_pgpgout': { + 'name': 'node.vmstat.pgpgout', + 'type': 'counter', + }, + 'node_vmstat_pswpin': { + 'name': 'node.vmstat.pswpin', + 'type': 'counter', + }, + 'node_vmstat_pswpout': { + 'name': 'node.vmstat.pswpout', + 'type': 'counter', + }, + 'pg_database_size_bytes': 'pg_database_size.bytes', + 'pg_database_size_mb': 'pg_database_size.mb', + 'pg_exporter_last_scrape_duration_seconds': 'pg_exporter.last_scrape_duration_seconds', + 'pg_exporter_last_scrape_error': 'pg_exporter.last_scrape_error', + 'pg_exporter_scrapes': 'pg_exporter.scrapes', + 'pg_exporter_user_queries_load_error': 'pg_exporter.user_queries_load_error', + 'pg_ls_archive_statusdir_wal_pending_count': 'pg_ls.archive_statusdir_wal_pending_count', + 'pg_scrape_collector_duration_seconds': 'pg_scrape_collector.duration_seconds', + 'pg_scrape_collector_success': 'pg_scrape_collector.success', + 'pg_settings_default_transaction_read_only': 'pg_settings.default_transaction_read_only', + 'pg_stat_activity_xact_runtime': 'pg_stat_activity.xact_runtime', + 'pg_stat_bgwriter_buffers_alloc': 'pg_stat_bgwriter.buffers_alloc', + 'pg_stat_bgwriter_buffers_backend_fsync': 'pg_stat_bgwriter.buffers_backend_fsync', + 'pg_stat_bgwriter_buffers_backend': 'pg_stat_bgwriter.buffers_backend', + 'pg_stat_bgwriter_buffers_checkpoint': 'pg_stat_bgwriter.buffers_checkpoint', + 'pg_stat_bgwriter_buffers_clean': 'pg_stat_bgwriter.buffers_clean', + 'pg_stat_bgwriter_checkpoint_sync_time': 'pg_stat_bgwriter.checkpoint_sync_time', + 'pg_stat_bgwriter_checkpoint_write_time': 'pg_stat_bgwriter.checkpoint_write_time', + 'pg_stat_bgwriter_checkpoints_req': 'pg_stat_bgwriter.checkpoints_req', + 'pg_stat_bgwriter_checkpoints_timed': 'pg_stat_bgwriter.checkpoints_timed', + 'pg_stat_bgwriter_maxwritten_clean': 'pg_stat_bgwriter.maxwritten_clean', + 'pg_stat_bgwriter_stats_reset': 'pg_stat_bgwriter.stats_reset', + 'pg_stat_database_blks_hit': 'pg_stat_database.blks_hit', + 'pg_stat_database_blks_read': 'pg_stat_database.blks_read', + 'pg_stat_database_conflicts_confl_bufferpin': 'pg_stat_database_conflicts.confl_bufferpin', + 'pg_stat_database_conflicts_confl_deadlock': 'pg_stat_database_conflicts.confl_deadlock', + 'pg_stat_database_conflicts_confl_lock': 'pg_stat_database_conflicts.confl_lock', + 'pg_stat_database_conflicts_confl_snapshot': 'pg_stat_database_conflicts.confl_snapshot', + 'pg_stat_database_conflicts_confl_tablespace': 'pg_stat_database_conflicts.confl_tablespace', + 'pg_stat_database_conflicts': 'pg_stat_database.conflicts', + 'pg_stat_database_deadlocks': 'pg_stat_database.deadlocks', + 'pg_stat_database_most_recent_reset': 'pg_stat_database.most_recent_reset', + 'pg_stat_database_num_backends': 'pg_stat_database.num_backends', + 'pg_stat_database_temp_bytes': 'pg_stat_database.temp_bytes', + 'pg_stat_database_temp_files': 'pg_stat_database.temp_files', + 'pg_stat_database_tup_deleted': 'pg_stat_database.tup_deleted', + 'pg_stat_database_tup_fetched': 'pg_stat_database.tup_fetched', + 'pg_stat_database_tup_inserted': 'pg_stat_database.tup_inserted', + 'pg_stat_database_tup_returned': 'pg_stat_database.tup_returned', + 'pg_stat_database_tup_updated': 'pg_stat_database.tup_updated', + 'pg_stat_database_xact_commit': 'pg_stat_database.xact_commit', + 'pg_stat_database_xact_rollback': 'pg_stat_database.xact_rollback', + 'pg_stat_replication_replay_lag': 'pg_stat_replication.replay_lag', + 'pg_stat_replication_send_lag': 'pg_stat_replication.send_lag', + 'pg_stat_statements_total_queries': 'pg_stat_statements.total_queries', + 'pg_stat_statements_total_time_seconds': 'pg_stat_statements.total_time_seconds', + 'pg_status_in_recovery': 'pg_status.in_recovery', + 'pg_up': 'pg.up', + 'pg_wal_size_mb': 'pg_wal.size', + 'pgrst_db_pool_available': 'pgrst.db_pool.available_connections', + 'pgrst_db_pool_max': 'pgrst.db_pool.max_connections', + 'pgrst_db_pool_timeouts': 'pgrst.db_pool.connection_timeouts', + 'pgrst_db_pool_waiting': 'pgrst.db_pool.requests_waiting', + 'pgrst_schema_cache_loads': 'pgrst.schema_cache.loads', + 'pgrst_schema_cache_query_time_seconds': 'pgrst.schema_cache.query_time_seconds', + 'physical_replication_lag_is_connected_to_primary': 'physical_replication_lag.is_connected_to_primary', + 'physical_replication_lag_is_wal_replay_paused': 'physical_replication_lag.is_wal_replay_paused', + 'physical_replication_lag_physical_replication_lag_seconds': 'physical_replication_lag.seconds', + 'postgres_exporter_build_info': 'postgres_exporter.build_info', + 'postgres_exporter_config_last_reload_success_timestamp_seconds': 'postgres_exporter.config_last_reload_success_timestamp_seconds', # noqa: E501 + 'postgres_exporter_config_last_reload_successful': 'postgres_exporter.config_last_reload_successful', + 'postgresql_restarts': 'postgresql.restarts', + 'process_start_time_seconds': { + 'name': 'process.start_time.seconds', + 'type': 'time_elapsed', + }, + 'process_runtime_go_mem_live_objects': 'process.runtime.go_mem_live_objects', + 'promhttp_metric_handler_requests_in_flight': 'promhttp_metric_handler.requests_in_flight', + 'promhttp_metric_handler_requests': 'promhttp_metric_handler.requests', + 'realtime_postgres_changes_client_subscriptions': 'realtime_postgres_changes.client_subscriptions', + 'realtime_postgres_changes_total_subscriptions': 'realtime_postgres_changes.total_subscriptions', + 'replication_slots_max_lag_bytes': 'pg_replication_slots.max_lag_bytes', + 'runtime_uptime_milliseconds': {'name': 'runtime.uptime_milliseconds', 'type': 'time_elapsed'}, + 'storage_storage_size_mb': 'storage.storage_size', + 'supabase_usage_metrics_user_queries': 'usage_metrics.user_queries', +} + +STORAGE_API_METRICS = [ + { + 'storage_api_upload_started': 'upload_started', + 'storage_api_upload_success': 'upload_success', + 'storage_api_database_query_performance': 'database_query_performance', + 'storage_api_queue_job_scheduled': 'queue.job_scheduled', + 'storage_api_queue_job_scheduled_time': 'queue.job_scheduled_time', + 'storage_api_queue_job_completed': 'queue.job_completed', + 'storage_api_queue_job_retry_failed': 'queue.job_retry_failed', + 'storage_api_queue_job_error': 'queue.job_error', + 'storage_api_s3_upload_part': 's3_upload_part', + 'storage_api_db_pool': 'db_pool', + 'storage_api_db_connections': 'db_connections', + 'storage_api_http_pool_busy_sockets': 'http_pool.busy_sockets', + 'storage_api_http_pool_free_sockets': 'http_pool.free_sockets', + 'storage_api_http_pool_requests': 'http_pool.requests', + 'storage_api_http_pool_errors': 'http_pool.errors', + 'storage_api_http_request_summary_seconds': 'http_request.summary_seconds', + 'storage_api_http_request_duration_seconds': 'http_request.duration_seconds', + 'storage_api_process_cpu_seconds': 'process_cpu.seconds', + 'storage_api_process_cpu_system_seconds': 'process_cpu.system.seconds', + 'storage_api_process_cpu_user_seconds': 'process_cpu.user.seconds', + 'storage_api_process_start_time_seconds': { + 'name': 'process.uptime.seconds', + 'type': 'time_elapsed', + }, + 'storage_api_process_resident_memory_bytes': 'process.resident_memory.bytes', + 'storage_api_process_virtual_memory_bytes': 'process.virtual_memory.bytes', + 'storage_api_process_heap_bytes': 'process.heap_bytes', + 'storage_api_process_open_fds': 'process.open_fds', + 'storage_api_process_max_fds': 'process.max_fds', + 'storage_api_nodejs_eventloop_lag_seconds': 'nodejs.eventloop_lag.seconds', + 'storage_api_nodejs_eventloop_lag_min_seconds': 'nodejs_eventloop_lag.min_seconds', + 'storage_api_nodejs_eventloop_lag_max_seconds': 'nodejs.eventloop_lag.max_seconds', + 'storage_api_nodejs_eventloop_lag_mean_seconds': 'nodejs.eventloop_lag.mean_seconds', + 'storage_api_nodejs_eventloop_lag_stddev_seconds': 'nodejs.eventloop_lag.stddev_seconds', + 'storage_api_nodejs_eventloop_lag_p50_seconds': 'nodejs.eventloop_lag.p50_seconds', + 'storage_api_nodejs_eventloop_lag_p90_seconds': 'nodejs.eventloop_lag.p90_seconds', + 'storage_api_nodejs_eventloop_lag_p99_seconds': 'nodejs.eventloop_lag.p99_seconds', + 'storage_api_nodejs_active_resources': 'nodejs.active_resources', + 'storage_api_nodejs_active_resources_total': 'nodejs.active_resources.total', + 'storage_api_nodejs_active_handles': 'nodejs.active_handles', + 'storage_api_nodejs_active_handles_total': 'nodejs.active_handles.total', + 'storage_api_nodejs_active_requests': 'nodejs.active_requests', + 'storage_api_nodejs_active_requests_total': 'nodejs.active_requests.total', + 'storage_api_nodejs_gc_duration_seconds': 'nodejs.gc_duration.seconds', + 'storage_api_nodejs_heap_size_total_bytes': 'nodejs.heap_size.total_bytes', + 'storage_api_nodejs_heap_size_used_bytes': 'nodejs.heap_size.used_bytes', + 'storage_api_nodejs_external_memory_bytes': 'nodejs.external_memory.bytes', + 'storage_api_nodejs_heap_space_size_total_bytes': 'nodejs.heap_space_size.total_bytes', + 'storage_api_nodejs_heap_space_size_used_bytes': 'nodejs.heap_space_size.used_bytes', + 'storage_api_nodejs_heap_space_size_available_bytes': 'nodejs.heap_space_size.available_bytes', + 'storage_api_nodejs_version_info': 'nodejs.version_info', + } +] + +RENAME_LABELS_MAP = { + 'version': 'component_version', +} + +SUPABASE_METRICS = [{**DEFAULT_GO_METRICS, **PRIVELEGED_METRICS}] diff --git a/supabase/hatch.toml b/supabase/hatch.toml new file mode 100644 index 0000000000000..c85c5f07a7df2 --- /dev/null +++ b/supabase/hatch.toml @@ -0,0 +1,4 @@ +[env.collectors.datadog-checks] + +[[envs.default.matrix]] +python = ["3.12"] diff --git a/supabase/manifest.json b/supabase/manifest.json new file mode 100644 index 0000000000000..8f0168564f6d4 --- /dev/null +++ b/supabase/manifest.json @@ -0,0 +1,55 @@ +{ + "manifest_version": "2.0.0", + "app_uuid": "f22fec2a-ff0a-4380-8ddf-3348f1e7ff15", + "app_id": "supabase", + "display_on_public_website": false, + "tile": { + "overview": "README.md#Overview", + "configuration": "README.md#Setup", + "support": "README.md#Support", + "changelog": "CHANGELOG.md", + "description": "", + "title": "Supabase", + "media": [], + "classifier_tags": [ + "Supported OS::Linux", + "Supported OS::Windows", + "Supported OS::macOS", + "Category::Metrics", + "Category::Kubernetes", + "Category::Security", + "Submitted Data Type::Metrics", + "Offering::Integration" + ] + }, + "assets": { + "integration": { + "auto_install": true, + "source_type_id": 34976974, + "source_type_name": "Supabase", + "configuration": { + "spec": "assets/configuration/spec.yaml" + }, + "events": { + "creates_events": false + }, + "metrics": { + "prefix": "supabase.", + "check": "supabase.pg.up", + "metadata_path": "metadata.csv" + }, + "service_checks": { + "metadata_path": "assets/service_checks.json" + } + }, + "dashboards": { + "Supabase Overview": "assets/dashboards/supabase_overview.json" + } + }, + "author": { + "support_email": "help@datadoghq.com", + "name": "Datadog", + "homepage": "https://www.datadoghq.com", + "sales_email": "info@datadoghq.com" + } +} diff --git a/supabase/metadata.csv b/supabase/metadata.csv new file mode 100644 index 0000000000000..a89e4368777d1 --- /dev/null +++ b/supabase/metadata.csv @@ -0,0 +1,266 @@ +metric_name,metric_type,interval,unit_name,per_unit_name,description,orientation,integration,short_name,curated_metric,sample_tags +supabase.auth_users.user_count,gauge,,,,,0,supabase,,, +supabase.db.sql.connection_closed_max_idle.count,count,,,,,0,supabase,,, +supabase.db.sql.connection_closed_max_idle_time.count,count,,,,,0,supabase,,, +supabase.db.sql.connection_closed_max_lifetime.count,count,,,,,0,supabase,,, +supabase.db.sql.connection_max_open,gauge,,,,,0,supabase,,, +supabase.db.sql.connection_open,gauge,,,,,0,supabase,,, +supabase.db.sql.connection_wait.count,count,,,,,0,supabase,,, +supabase.db.sql.connection_wait_duration.count,count,,,,,0,supabase,,, +supabase.db.transmit_bytes.count,count,,,,,0,supabase,,, +supabase.go.gc.duration.seconds.count,count,,,,,0,supabase,,, +supabase.go.gc.duration.seconds.quantile,gauge,,,,,0,supabase,,, +supabase.go.gc.duration.seconds.sum,count,,,,,0,supabase,,, +supabase.go.goroutines,gauge,,,,,0,supabase,,, +supabase.go.memstats.buck_hash.sys_bytes,gauge,,,,,0,supabase,,, +supabase.go.memstats.frees.count,count,,,,,0,supabase,,, +supabase.go.memstats.gc.sys_bytes,gauge,,,,,0,supabase,,, +supabase.go.memstats.heap.alloc_bytes,gauge,,,,,0,supabase,,, +supabase.go.memstats.heap.idle_bytes,gauge,,,,,0,supabase,,, +supabase.go.memstats.heap.inuse_bytes,gauge,,,,,0,supabase,,, +supabase.go.memstats.heap.objects,gauge,,,,,0,supabase,,, +supabase.go.memstats.heap.released_bytes,gauge,,,,,0,supabase,,, +supabase.go.memstats.heap.sys_bytes,gauge,,,,,0,supabase,,, +supabase.go.memstats.last_gc_time.seconds,gauge,,,,,0,supabase,,, +supabase.go.memstats.lookups.count,count,,,,,0,supabase,,, +supabase.go.memstats.mallocs.count,count,,,,,0,supabase,,, +supabase.go.memstats.mcache.inuse_bytes,gauge,,,,,0,supabase,,, +supabase.go.memstats.mcache.sys_bytes,gauge,,,,,0,supabase,,, +supabase.go.memstats.mspan.inuse_bytes,gauge,,,,,0,supabase,,, +supabase.go.memstats.mspan.sys_bytes,gauge,,,,,0,supabase,,, +supabase.go.memstats.next.gc_bytes,gauge,,,,,0,supabase,,, +supabase.go.memstats.other.sys_bytes,gauge,,,,,0,supabase,,, +supabase.go.memstats.stack.inuse_bytes,gauge,,,,,0,supabase,,, +supabase.go.memstats.stack.sys_bytes,gauge,,,,,0,supabase,,, +supabase.go.memstats.sys_bytes,gauge,,,,,0,supabase,,, +supabase.go.threads,gauge,,,,,0,supabase,,, +supabase.http.server.duration.bucket,count,,,,,0,supabase,,, +supabase.http.server.duration.count,count,,,,,0,supabase,,, +supabase.http.server.duration.sum,count,,,,,0,supabase,,, +supabase.http.server.request.size_bytes.count,count,,,,,0,supabase,,, +supabase.http.server.response.size_bytes.count,count,,,,,0,supabase,,, +supabase.http.status_codes.count,count,,,,,0,supabase,,, +supabase.node.cpu.guest_seconds.count,count,,,,,0,supabase,,, +supabase.node.cpu.seconds.count,count,,,,,0,supabase,,, +supabase.node.disk.discard_time_seconds.count,count,,,,,0,supabase,,, +supabase.node.disk.discarded_sectors.count,count,,,,,0,supabase,,, +supabase.node.disk.discards_completed.count,count,,,,,0,supabase,,, +supabase.node.disk.discards_merged.count,count,,,,,0,supabase,,, +supabase.node.disk.flush_requests.count,count,,,,,0,supabase,,, +supabase.node.disk.flush_requests_time_seconds.count,count,,,,,0,supabase,,, +supabase.node.disk.io_now,gauge,,,,,0,supabase,,, +supabase.node.disk.io_time_seconds.count,count,,,,,0,supabase,,, +supabase.node.disk.io_time_weighted_seconds.count,count,,,,,0,supabase,,, +supabase.node.disk.read_bytes.count,count,,,,,0,supabase,,, +supabase.node.disk.read_time_seconds.count,count,,,,,0,supabase,,, +supabase.node.disk.reads_completed.count,count,,,,,0,supabase,,, +supabase.node.disk.reads_merged.count,count,,,,,0,supabase,,, +supabase.node.disk.write_time_seconds.count,count,,,,,0,supabase,,, +supabase.node.disk.writes_completed.count,count,,,,,0,supabase,,, +supabase.node.disk.writes_merged.count,count,,,,,0,supabase,,, +supabase.node.disk.written_bytes.count,count,,,,,0,supabase,,, +supabase.node.filesystem.available_bytes,gauge,,,,,0,supabase,,, +supabase.node.filesystem.device_error,gauge,,,,,0,supabase,,, +supabase.node.filesystem.files,gauge,,,,,0,supabase,,, +supabase.node.filesystem.files_free,gauge,,,,,0,supabase,,, +supabase.node.filesystem.free_bytes,gauge,,,,,0,supabase,,, +supabase.node.filesystem.readonly,gauge,,,,,0,supabase,,, +supabase.node.filesystem.size_bytes,gauge,,,,,0,supabase,,, +supabase.node.load1,gauge,,,,,0,supabase,,, +supabase.node.load15,gauge,,,,,0,supabase,,, +supabase.node.load5,gauge,,,,,0,supabase,,, +supabase.node.memory.active_anon_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.active_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.active_file_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.anon_huge_pages_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.anon_pages_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.bounce_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.buffers_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.cached_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.commit_limit_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.committed_as_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.dirty_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.file_huge_pages_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.file_pmd_mapped_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.hardware_corrupted_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.huge_page_size_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.huge_pages_free,gauge,,,,,0,supabase,,, +supabase.node.memory.huge_pages_reserved,gauge,,,,,0,supabase,,, +supabase.node.memory.huge_pages_surp,gauge,,,,,0,supabase,,, +supabase.node.memory.huge_pages_total,gauge,,,,,0,supabase,,, +supabase.node.memory.hugetlb_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.inactive_anon_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.inactive_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.inactive_file_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.kernel_stack_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.kreclaimable_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.mapped_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.mem_available_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.mem_free_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.mem_total_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.mlocked_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.nfs_unstable_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.page_tables_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.percpu_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.shmem_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.shmem_huge_pages_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.shmem_pmd_mapped_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.slab_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.sreclaimable_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.sunreclaim_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.swap_cached_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.swap_free_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.swap_total_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.unevictable_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.vm_alloc_chunk_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.vm_alloc_total_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.vm_alloc_used_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.writeback_bytes,gauge,,,,,0,supabase,,, +supabase.node.memory.writeback_tmp_bytes,gauge,,,,,0,supabase,,, +supabase.node.network.receive_bytes.count,count,,,,,0,supabase,,, +supabase.node.network.receive_compressed.count,count,,,,,0,supabase,,, +supabase.node.network.receive_drop.count,count,,,,,0,supabase,,, +supabase.node.network.receive_errors.count,count,,,,,0,supabase,,, +supabase.node.network.receive_fifo.count,count,,,,,0,supabase,,, +supabase.node.network.receive_frame.count,count,,,,,0,supabase,,, +supabase.node.network.receive_multicast.count,count,,,,,0,supabase,,, +supabase.node.network.receive_packets.count,count,,,,,0,supabase,,, +supabase.node.network.transmit_bytes.count,count,,,,,0,supabase,,, +supabase.node.network.transmit_carrier.count,count,,,,,0,supabase,,, +supabase.node.network.transmit_colls.count,count,,,,,0,supabase,,, +supabase.node.network.transmit_compressed.count,count,,,,,0,supabase,,, +supabase.node.network.transmit_drop.count,count,,,,,0,supabase,,, +supabase.node.network.transmit_errors.count,count,,,,,0,supabase,,, +supabase.node.network.transmit_fifo.count,count,,,,,0,supabase,,, +supabase.node.network.transmit_packets.count,count,,,,,0,supabase,,, +supabase.node.scrape.collector_duration_seconds,gauge,,,,,0,supabase,,, +supabase.node.scrape.collector_success,gauge,,,,,0,supabase,,, +supabase.node.vmstat.oom_kill.count,count,,,,,0,supabase,,, +supabase.node.vmstat.pgfault.count,count,,,,,0,supabase,,, +supabase.node.vmstat.pgmajfault.count,count,,,,,0,supabase,,, +supabase.node.vmstat.pgpgin.count,count,,,,,0,supabase,,, +supabase.node.vmstat.pgpgout.count,count,,,,,0,supabase,,, +supabase.node.vmstat.pswpin.count,count,,,,,0,supabase,,, +supabase.node.vmstat.pswpout.count,count,,,,,0,supabase,,, +supabase.pg.up,gauge,,,,,0,supabase,,, +supabase.pg_database_size.bytes,gauge,,,,,0,supabase,,, +supabase.pg_database_size.mb,gauge,,,,,0,supabase,,, +supabase.pg_exporter.last_scrape_duration_seconds,gauge,,,,,0,supabase,,, +supabase.pg_exporter.last_scrape_error,gauge,,,,,0,supabase,,, +supabase.pg_exporter.scrapes.count,count,,,,,0,supabase,,, +supabase.pg_exporter.user_queries_load_error,gauge,,,,,0,supabase,,, +supabase.pg_ls.archive_statusdir_wal_pending_count.count,count,,,,,0,supabase,,, +supabase.pg_replication_slots.max_lag_bytes,gauge,,,,,0,supabase,,, +supabase.pg_scrape_collector.duration_seconds,gauge,,,,,0,supabase,,, +supabase.pg_scrape_collector.success,gauge,,,,,0,supabase,,, +supabase.pg_settings.default_transaction_read_only,gauge,,,,,0,supabase,,, +supabase.pg_stat_activity.xact_runtime,gauge,,,,,0,supabase,,, +supabase.pg_stat_bgwriter.buffers_alloc.count,count,,,,,0,supabase,,, +supabase.pg_stat_bgwriter.buffers_backend.count,count,,,,,0,supabase,,, +supabase.pg_stat_bgwriter.buffers_backend_fsync.count,count,,,,,0,supabase,,, +supabase.pg_stat_bgwriter.buffers_checkpoint.count,count,,,,,0,supabase,,, +supabase.pg_stat_bgwriter.buffers_clean.count,count,,,,,0,supabase,,, +supabase.pg_stat_bgwriter.checkpoint_sync_time.count,count,,,,,0,supabase,,, +supabase.pg_stat_bgwriter.checkpoint_write_time.count,count,,,,,0,supabase,,, +supabase.pg_stat_bgwriter.checkpoints_req.count,count,,,,,0,supabase,,, +supabase.pg_stat_bgwriter.checkpoints_timed.count,count,,,,,0,supabase,,, +supabase.pg_stat_bgwriter.maxwritten_clean.count,count,,,,,0,supabase,,, +supabase.pg_stat_bgwriter.stats_reset.count,count,,,,,0,supabase,,, +supabase.pg_stat_database.blks_hit.count,count,,,,,0,supabase,,, +supabase.pg_stat_database.blks_read.count,count,,,,,0,supabase,,, +supabase.pg_stat_database.conflicts.count,count,,,,,0,supabase,,, +supabase.pg_stat_database.deadlocks.count,count,,,,,0,supabase,,, +supabase.pg_stat_database.num_backends,gauge,,,,,0,supabase,,, +supabase.pg_stat_database.temp_bytes.count,count,,,,,0,supabase,,, +supabase.pg_stat_database.temp_files.count,count,,,,,0,supabase,,, +supabase.pg_stat_database.tup_deleted.count,count,,,,,0,supabase,,, +supabase.pg_stat_database.tup_fetched.count,count,,,,,0,supabase,,, +supabase.pg_stat_database.tup_inserted.count,count,,,,,0,supabase,,, +supabase.pg_stat_database.tup_returned.count,count,,,,,0,supabase,,, +supabase.pg_stat_database.tup_updated.count,count,,,,,0,supabase,,, +supabase.pg_stat_database.xact_commit.count,count,,,,,0,supabase,,, +supabase.pg_stat_database.xact_rollback.count,count,,,,,0,supabase,,, +supabase.pg_stat_database_conflicts.confl_bufferpin.count,count,,,,,0,supabase,,, +supabase.pg_stat_database_conflicts.confl_deadlock.count,count,,,,,0,supabase,,, +supabase.pg_stat_database_conflicts.confl_lock.count,count,,,,,0,supabase,,, +supabase.pg_stat_database_conflicts.confl_snapshot.count,count,,,,,0,supabase,,, +supabase.pg_stat_database_conflicts.confl_tablespace.count,count,,,,,0,supabase,,, +supabase.pg_stat_statements.total_queries.count,count,,,,,0,supabase,,, +supabase.pg_stat_statements.total_time_seconds.count,count,,,,,0,supabase,,, +supabase.pg_status.in_recovery,gauge,,,,,0,supabase,,, +supabase.pg_wal.size,gauge,,,,,0,supabase,,, +supabase.pgrst.db_pool.available_connections,gauge,,,,,0,supabase,,, +supabase.pgrst.db_pool.connection_timeouts.count,count,,,,,0,supabase,,, +supabase.pgrst.db_pool.max_connections,gauge,,,,,0,supabase,,, +supabase.pgrst.db_pool.requests_waiting,gauge,,,,,0,supabase,,, +supabase.pgrst.schema_cache.loads.count,count,,,,,0,supabase,,, +supabase.pgrst.schema_cache.query_time_seconds,gauge,,,,,0,supabase,,, +supabase.physical_replication_lag.is_connected_to_primary,gauge,,,,,0,supabase,,, +supabase.physical_replication_lag.is_wal_replay_paused,gauge,,,,,0,supabase,,, +supabase.physical_replication_lag.seconds,gauge,,,,,0,supabase,,, +supabase.postgres_exporter.build_info,gauge,,,,,0,supabase,,, +supabase.postgres_exporter.config_last_reload_success_timestamp_seconds,gauge,,,,,0,supabase,,, +supabase.postgres_exporter.config_last_reload_successful,gauge,,,,,0,supabase,,, +supabase.postgresql.restarts.count,count,,,,,0,supabase,,, +supabase.process.cpu.seconds.count,count,,,,,0,supabase,,, +supabase.process.max_fds,gauge,,,,,0,supabase,,, +supabase.process.open_fds,gauge,,,,,0,supabase,,, +supabase.process.resident_memory.bytes,gauge,,,,,0,supabase,,, +supabase.process.runtime.go_mem_live_objects,gauge,,,,,0,supabase,,, +supabase.process.start_time.seconds,gauge,,,,,0,supabase,,, +supabase.process.virtual_memory.bytes,gauge,,,,,0,supabase,,, +supabase.process.virtual_memory.max_bytes,gauge,,,,,0,supabase,,, +supabase.promhttp_metric_handler.requests.count,count,,,,,0,supabase,,, +supabase.promhttp_metric_handler.requests_in_flight,gauge,,,,,0,supabase,,, +supabase.realtime_postgres_changes.client_subscriptions,gauge,,,,,0,supabase,,, +supabase.realtime_postgres_changes.total_subscriptions,gauge,,,,,0,supabase,,, +supabase.runtime.uptime_milliseconds,gauge,,,,,0,supabase,,, +supabase.storage.storage_size,gauge,,,,,0,supabase,,, +supabase.storage_api.database_query_performance.bucket,count,,,,,0,supabase,,, +supabase.storage_api.database_query_performance.count,count,,,,,0,supabase,,, +supabase.storage_api.database_query_performance.sum,count,,,,,0,supabase,,, +supabase.storage_api.db_connections,gauge,,,,,0,supabase,,, +supabase.storage_api.db_pool,gauge,,,,,0,supabase,,, +supabase.storage_api.http_pool.busy_sockets,gauge,,,,,0,supabase,,, +supabase.storage_api.http_pool.errors,gauge,,,,,0,supabase,,, +supabase.storage_api.http_pool.free_sockets,gauge,,,,,0,supabase,,, +supabase.storage_api.http_pool.requests,gauge,,,,,0,supabase,,, +supabase.storage_api.http_request.duration_seconds.bucket,count,,,,,0,supabase,,, +supabase.storage_api.http_request.duration_seconds.count,count,,,,,0,supabase,,, +supabase.storage_api.http_request.duration_seconds.sum,count,,,,,0,supabase,,, +supabase.storage_api.http_request.summary_seconds.count,count,,,,,0,supabase,,, +supabase.storage_api.http_request.summary_seconds.quantile,gauge,,,,,0,supabase,,, +supabase.storage_api.http_request.summary_seconds.sum,count,,,,,0,supabase,,, +supabase.storage_api.nodejs.active_handles,gauge,,,,,0,supabase,,, +supabase.storage_api.nodejs.active_handles.total,gauge,,,,,0,supabase,,, +supabase.storage_api.nodejs.active_requests.total,gauge,,,,,0,supabase,,, +supabase.storage_api.nodejs.active_resources,gauge,,,,,0,supabase,,, +supabase.storage_api.nodejs.active_resources.total,gauge,,,,,0,supabase,,, +supabase.storage_api.nodejs.eventloop_lag.max_seconds,gauge,,,,,0,supabase,,, +supabase.storage_api.nodejs.eventloop_lag.mean_seconds,gauge,,,,,0,supabase,,, +supabase.storage_api.nodejs.eventloop_lag.p50_seconds,gauge,,,,,0,supabase,,, +supabase.storage_api.nodejs.eventloop_lag.p90_seconds,gauge,,,,,0,supabase,,, +supabase.storage_api.nodejs.eventloop_lag.p99_seconds,gauge,,,,,0,supabase,,, +supabase.storage_api.nodejs.eventloop_lag.seconds,gauge,,,,,0,supabase,,, +supabase.storage_api.nodejs.eventloop_lag.stddev_seconds,gauge,,,,,0,supabase,,, +supabase.storage_api.nodejs.external_memory.bytes,gauge,,,,,0,supabase,,, +supabase.storage_api.nodejs.gc_duration.seconds.bucket,count,,,,,0,supabase,,, +supabase.storage_api.nodejs.gc_duration.seconds.count,count,,,,,0,supabase,,, +supabase.storage_api.nodejs.gc_duration.seconds.sum,count,,,,,0,supabase,,, +supabase.storage_api.nodejs.heap_size.total_bytes,gauge,,,,,0,supabase,,, +supabase.storage_api.nodejs.heap_size.used_bytes,gauge,,,,,0,supabase,,, +supabase.storage_api.nodejs.heap_space_size.available_bytes,gauge,,,,,0,supabase,,, +supabase.storage_api.nodejs.heap_space_size.total_bytes,gauge,,,,,0,supabase,,, +supabase.storage_api.nodejs.heap_space_size.used_bytes,gauge,,,,,0,supabase,,, +supabase.storage_api.nodejs.version_info,gauge,,,,,0,supabase,,, +supabase.storage_api.nodejs_eventloop_lag.min_seconds,gauge,,,,,0,supabase,,, +supabase.storage_api.process.heap_bytes,gauge,,,,,0,supabase,,, +supabase.storage_api.process.max_fds,gauge,,,,,0,supabase,,, +supabase.storage_api.process.open_fds,gauge,,,,,0,supabase,,, +supabase.storage_api.process.resident_memory.bytes,gauge,,,,,0,supabase,,, +supabase.storage_api.process.uptime.seconds,gauge,,,,,0,supabase,,, +supabase.storage_api.process.virtual_memory.bytes,gauge,,,,,0,supabase,,, +supabase.storage_api.process_cpu.seconds.count,count,,,,,0,supabase,,, +supabase.storage_api.process_cpu.system.seconds.count,count,,,,,0,supabase,,, +supabase.storage_api.process_cpu.user.seconds.count,count,,,,,0,supabase,,, +supabase.usage_metrics.user_queries.count,count,,,,,0,supabase,,, diff --git a/supabase/pyproject.toml b/supabase/pyproject.toml new file mode 100644 index 0000000000000..de884876b82f1 --- /dev/null +++ b/supabase/pyproject.toml @@ -0,0 +1,60 @@ +[build-system] +requires = [ + "hatchling>=0.13.0", +] +build-backend = "hatchling.build" + +[project] +name = "datadog-supabase" +description = "The supabase check" +readme = "README.md" +license = "BSD-3-Clause" +requires-python = ">=3.12" +keywords = [ + "datadog", + "datadog agent", + "datadog check", + "supabase", +] +authors = [ + { name = "Datadog", email = "packages@datadoghq.com" }, +] +classifiers = [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Intended Audience :: System Administrators", + "License :: OSI Approved :: BSD License", + "Private :: Do Not Upload", + "Programming Language :: Python :: 3.12", + "Topic :: System :: Monitoring", +] +dependencies = [ + "datadog-checks-base>=37.0.0", +] +dynamic = [ + "version", +] + +[project.optional-dependencies] +deps = [] + +[project.urls] +Source = "https://github.com/DataDog/integrations-core" + +[tool.hatch.version] +path = "datadog_checks/supabase/__about__.py" + +[tool.hatch.build.targets.sdist] +include = [ + "/datadog_checks", + "/tests", + "/manifest.json", +] + +[tool.hatch.build.targets.wheel] +include = [ + "/datadog_checks/supabase", +] +dev-mode-dirs = [ + ".", +] diff --git a/supabase/tests/__init__.py b/supabase/tests/__init__.py new file mode 100644 index 0000000000000..9103122bf028d --- /dev/null +++ b/supabase/tests/__init__.py @@ -0,0 +1,3 @@ +# (C) Datadog, Inc. 2024-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) diff --git a/supabase/tests/common.py b/supabase/tests/common.py new file mode 100644 index 0000000000000..e08dddcd90a6d --- /dev/null +++ b/supabase/tests/common.py @@ -0,0 +1,313 @@ +# (C) Datadog, Inc. 2024-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) +import os + +from datadog_checks.dev import get_docker_hostname, get_here + +HERE = get_here() +HOST = get_docker_hostname() +PRIVELEGED_METRICS_PORT = 8000 +STORAGE_API_PORT = 9000 + + +def get_fixture_path(filename): + return os.path.join(HERE, 'fixtures', filename) + + +MOCKED_INSTANCE = { + "privileged_metrics_endpoint": f"http://{HOST}:{PRIVELEGED_METRICS_PORT}/metrics", + "storage_api_endpoint": f"http://{HOST}:{STORAGE_API_PORT}/metrics", + "tags": ['test:test'], +} + +COMPOSE_FILE = os.path.join(HERE, 'docker', 'docker-compose.yaml') + +PRIVILEGED_METRICS_INSTANCE = { + "privileged_metrics_endpoint": f"http://{HOST}:{PRIVELEGED_METRICS_PORT}/metrics", + "tags": ['test:test'], +} + +STORAGE_API_INSTANCE = { + "storage_api_endpoint": f"http://{HOST}:{STORAGE_API_PORT}/metrics", + "tags": ['test:test'], +} + +COMPOSE_FILE = os.path.join(HERE, 'docker', 'docker-compose.yaml') + +( + PRIVILEGED_METRICS_NAMESPACE, + STORAGE_API_METRICS_NAMESPACE, +) = [ + 'supabase', + 'supabase.storage_api', +] + +PRIVILEGED_METRICS = [ + 'supabase.auth_users.user_count', + 'supabase.db.sql.connection_closed_max_idle.count', + 'supabase.db.sql.connection_closed_max_idle_time.count', + 'supabase.db.sql.connection_closed_max_lifetime.count', + 'supabase.db.sql.connection_max_open', + 'supabase.db.sql.connection_open', + 'supabase.db.sql.connection_wait.count', + 'supabase.db.sql.connection_wait_duration.count', + 'supabase.db.transmit_bytes.count', + 'supabase.go.gc.duration.seconds.count', + 'supabase.go.gc.duration.seconds.quantile', + 'supabase.go.gc.duration.seconds.sum', + 'supabase.go.goroutines', + 'supabase.go.memstats.buck_hash.sys_bytes', + 'supabase.go.memstats.frees.count', + 'supabase.go.memstats.gc.sys_bytes', + 'supabase.go.memstats.heap.alloc_bytes', + 'supabase.go.memstats.heap.idle_bytes', + 'supabase.go.memstats.heap.inuse_bytes', + 'supabase.go.memstats.heap.objects', + 'supabase.go.memstats.heap.released_bytes', + 'supabase.go.memstats.heap.sys_bytes', + 'supabase.go.memstats.last_gc_time.seconds', + 'supabase.go.memstats.lookups.count', + 'supabase.go.memstats.mallocs.count', + 'supabase.go.memstats.mcache.inuse_bytes', + 'supabase.go.memstats.mcache.sys_bytes', + 'supabase.go.memstats.mspan.inuse_bytes', + 'supabase.go.memstats.mspan.sys_bytes', + 'supabase.go.memstats.next.gc_bytes', + 'supabase.go.memstats.other.sys_bytes', + 'supabase.go.memstats.stack.inuse_bytes', + 'supabase.go.memstats.stack.sys_bytes', + 'supabase.go.memstats.sys_bytes', + 'supabase.go.threads', + 'supabase.http.server.duration.bucket', + 'supabase.http.server.duration.count', + 'supabase.http.server.duration.sum', + 'supabase.http.server.request.size_bytes.count', + 'supabase.http.server.response.size_bytes.count', + 'supabase.http.status_codes.count', + 'supabase.node.cpu.guest_seconds.count', + 'supabase.node.cpu.seconds.count', + 'supabase.node.disk.discard_time_seconds.count', + 'supabase.node.disk.discarded_sectors.count', + 'supabase.node.disk.discards_completed.count', + 'supabase.node.disk.discards_merged.count', + 'supabase.node.disk.flush_requests.count', + 'supabase.node.disk.flush_requests_time_seconds.count', + 'supabase.node.disk.io_now', + 'supabase.node.disk.io_time_seconds.count', + 'supabase.node.disk.io_time_weighted_seconds.count', + 'supabase.node.disk.read_bytes.count', + 'supabase.node.disk.read_time_seconds.count', + 'supabase.node.disk.reads_completed.count', + 'supabase.node.disk.reads_merged.count', + 'supabase.node.disk.write_time_seconds.count', + 'supabase.node.disk.writes_completed.count', + 'supabase.node.disk.writes_merged.count', + 'supabase.node.disk.written_bytes.count', + 'supabase.node.filesystem.available_bytes', + 'supabase.node.filesystem.device_error', + 'supabase.node.filesystem.files', + 'supabase.node.filesystem.files_free', + 'supabase.node.filesystem.free_bytes', + 'supabase.node.filesystem.readonly', + 'supabase.node.filesystem.size_bytes', + 'supabase.node.load1', + 'supabase.node.load15', + 'supabase.node.load5', + 'supabase.node.memory.active_anon_bytes', + 'supabase.node.memory.active_bytes', + 'supabase.node.memory.active_file_bytes', + 'supabase.node.memory.anon_huge_pages_bytes', + 'supabase.node.memory.anon_pages_bytes', + 'supabase.node.memory.bounce_bytes', + 'supabase.node.memory.buffers_bytes', + 'supabase.node.memory.cached_bytes', + 'supabase.node.memory.commit_limit_bytes', + 'supabase.node.memory.committed_as_bytes', + 'supabase.node.memory.dirty_bytes', + 'supabase.node.memory.file_huge_pages_bytes', + 'supabase.node.memory.file_pmd_mapped_bytes', + 'supabase.node.memory.hardware_corrupted_bytes', + 'supabase.node.memory.huge_page_size_bytes', + 'supabase.node.memory.huge_pages_free', + 'supabase.node.memory.huge_pages_reserved', + 'supabase.node.memory.huge_pages_surp', + 'supabase.node.memory.huge_pages_total', + 'supabase.node.memory.hugetlb_bytes', + 'supabase.node.memory.inactive_anon_bytes', + 'supabase.node.memory.inactive_bytes', + 'supabase.node.memory.inactive_file_bytes', + 'supabase.node.memory.kernel_stack_bytes', + 'supabase.node.memory.kreclaimable_bytes', + 'supabase.node.memory.mapped_bytes', + 'supabase.node.memory.mem_available_bytes', + 'supabase.node.memory.mem_free_bytes', + 'supabase.node.memory.mem_total_bytes', + 'supabase.node.memory.mlocked_bytes', + 'supabase.node.memory.nfs_unstable_bytes', + 'supabase.node.memory.page_tables_bytes', + 'supabase.node.memory.percpu_bytes', + 'supabase.node.memory.shmem_bytes', + 'supabase.node.memory.shmem_huge_pages_bytes', + 'supabase.node.memory.shmem_pmd_mapped_bytes', + 'supabase.node.memory.slab_bytes', + 'supabase.node.memory.sreclaimable_bytes', + 'supabase.node.memory.sunreclaim_bytes', + 'supabase.node.memory.swap_cached_bytes', + 'supabase.node.memory.swap_free_bytes', + 'supabase.node.memory.swap_total_bytes', + 'supabase.node.memory.unevictable_bytes', + 'supabase.node.memory.vm_alloc_chunk_bytes', + 'supabase.node.memory.vm_alloc_total_bytes', + 'supabase.node.memory.vm_alloc_used_bytes', + 'supabase.node.memory.writeback_bytes', + 'supabase.node.memory.writeback_tmp_bytes', + 'supabase.node.network.receive_bytes.count', + 'supabase.node.network.receive_compressed.count', + 'supabase.node.network.receive_drop.count', + 'supabase.node.network.receive_errors.count', + 'supabase.node.network.receive_fifo.count', + 'supabase.node.network.receive_frame.count', + 'supabase.node.network.receive_multicast.count', + 'supabase.node.network.receive_packets.count', + 'supabase.node.network.transmit_bytes.count', + 'supabase.node.network.transmit_carrier.count', + 'supabase.node.network.transmit_colls.count', + 'supabase.node.network.transmit_compressed.count', + 'supabase.node.network.transmit_drop.count', + 'supabase.node.network.transmit_errors.count', + 'supabase.node.network.transmit_fifo.count', + 'supabase.node.network.transmit_packets.count', + 'supabase.node.scrape.collector_duration_seconds', + 'supabase.node.scrape.collector_success', + 'supabase.node.vmstat.oom_kill.count', + 'supabase.node.vmstat.pgfault.count', + 'supabase.node.vmstat.pgmajfault.count', + 'supabase.node.vmstat.pgpgin.count', + 'supabase.node.vmstat.pgpgout.count', + 'supabase.node.vmstat.pswpin.count', + 'supabase.node.vmstat.pswpout.count', + 'supabase.pg.up', + 'supabase.pg_database_size.bytes', + 'supabase.pg_database_size.mb', + 'supabase.pg_exporter.last_scrape_duration_seconds', + 'supabase.pg_exporter.last_scrape_error', + 'supabase.pg_exporter.scrapes.count', + 'supabase.pg_exporter.user_queries_load_error', + 'supabase.pg_ls.archive_statusdir_wal_pending_count.count', + 'supabase.pg_replication_slots.max_lag_bytes', + 'supabase.pg_scrape_collector.duration_seconds', + 'supabase.pg_scrape_collector.success', + 'supabase.pg_settings.default_transaction_read_only', + 'supabase.pg_stat_activity.xact_runtime', + 'supabase.pg_stat_bgwriter.buffers_alloc.count', + 'supabase.pg_stat_bgwriter.buffers_backend.count', + 'supabase.pg_stat_bgwriter.buffers_backend_fsync.count', + 'supabase.pg_stat_bgwriter.buffers_checkpoint.count', + 'supabase.pg_stat_bgwriter.buffers_clean.count', + 'supabase.pg_stat_bgwriter.checkpoint_sync_time.count', + 'supabase.pg_stat_bgwriter.checkpoint_write_time.count', + 'supabase.pg_stat_bgwriter.checkpoints_req.count', + 'supabase.pg_stat_bgwriter.checkpoints_timed.count', + 'supabase.pg_stat_bgwriter.maxwritten_clean.count', + 'supabase.pg_stat_bgwriter.stats_reset.count', + 'supabase.pg_stat_database.blks_hit.count', + 'supabase.pg_stat_database.blks_read.count', + 'supabase.pg_stat_database.conflicts.count', + 'supabase.pg_stat_database.deadlocks.count', + 'supabase.pg_stat_database.num_backends', + 'supabase.pg_stat_database.temp_bytes.count', + 'supabase.pg_stat_database.temp_files.count', + 'supabase.pg_stat_database.tup_deleted.count', + 'supabase.pg_stat_database.tup_fetched.count', + 'supabase.pg_stat_database.tup_inserted.count', + 'supabase.pg_stat_database.tup_returned.count', + 'supabase.pg_stat_database.tup_updated.count', + 'supabase.pg_stat_database.xact_commit.count', + 'supabase.pg_stat_database.xact_rollback.count', + 'supabase.pg_stat_database_conflicts.confl_bufferpin.count', + 'supabase.pg_stat_database_conflicts.confl_deadlock.count', + 'supabase.pg_stat_database_conflicts.confl_lock.count', + 'supabase.pg_stat_database_conflicts.confl_snapshot.count', + 'supabase.pg_stat_database_conflicts.confl_tablespace.count', + 'supabase.pg_stat_statements.total_queries.count', + 'supabase.pg_stat_statements.total_time_seconds.count', + 'supabase.pg_status.in_recovery', + 'supabase.pg_wal.size', + 'supabase.pgrst.db_pool.available_connections', + 'supabase.pgrst.db_pool.connection_timeouts.count', + 'supabase.pgrst.db_pool.max_connections', + 'supabase.pgrst.db_pool.requests_waiting', + 'supabase.pgrst.schema_cache.loads.count', + 'supabase.pgrst.schema_cache.query_time_seconds', + 'supabase.physical_replication_lag.is_connected_to_primary', + 'supabase.physical_replication_lag.is_wal_replay_paused', + 'supabase.physical_replication_lag.seconds', + 'supabase.postgres_exporter.build_info', + 'supabase.postgres_exporter.config_last_reload_success_timestamp_seconds', + 'supabase.postgres_exporter.config_last_reload_successful', + 'supabase.postgresql.restarts.count', + 'supabase.process.cpu.seconds.count', + 'supabase.process.max_fds', + 'supabase.process.open_fds', + 'supabase.process.resident_memory.bytes', + 'supabase.process.runtime.go_mem_live_objects', + 'supabase.process.start_time.seconds', + 'supabase.process.virtual_memory.bytes', + 'supabase.process.virtual_memory.max_bytes', + 'supabase.promhttp_metric_handler.requests.count', + 'supabase.promhttp_metric_handler.requests_in_flight', + 'supabase.realtime_postgres_changes.client_subscriptions', + 'supabase.realtime_postgres_changes.total_subscriptions', + 'supabase.runtime.uptime_milliseconds', + 'supabase.usage_metrics.user_queries.count', +] +STORAGE_API_METRICS = [ + 'supabase.storage_api.database_query_performance.bucket', + 'supabase.storage_api.database_query_performance.count', + 'supabase.storage_api.database_query_performance.sum', + 'supabase.storage_api.db_connections', + 'supabase.storage_api.db_pool', + 'supabase.storage_api.http_pool.busy_sockets', + 'supabase.storage_api.http_pool.errors', + 'supabase.storage_api.http_pool.free_sockets', + 'supabase.storage_api.http_pool.requests', + 'supabase.storage_api.http_request.duration_seconds.bucket', + 'supabase.storage_api.http_request.duration_seconds.count', + 'supabase.storage_api.http_request.duration_seconds.sum', + 'supabase.storage_api.http_request.summary_seconds.count', + 'supabase.storage_api.http_request.summary_seconds.quantile', + 'supabase.storage_api.http_request.summary_seconds.sum', + 'supabase.storage_api.nodejs.active_handles', + 'supabase.storage_api.nodejs.active_handles.total', + 'supabase.storage_api.nodejs.active_requests.total', + 'supabase.storage_api.nodejs.active_resources', + 'supabase.storage_api.nodejs.active_resources.total', + 'supabase.storage_api.nodejs.eventloop_lag.max_seconds', + 'supabase.storage_api.nodejs.eventloop_lag.mean_seconds', + 'supabase.storage_api.nodejs.eventloop_lag.p50_seconds', + 'supabase.storage_api.nodejs.eventloop_lag.p90_seconds', + 'supabase.storage_api.nodejs.eventloop_lag.p99_seconds', + 'supabase.storage_api.nodejs.eventloop_lag.seconds', + 'supabase.storage_api.nodejs.eventloop_lag.stddev_seconds', + 'supabase.storage_api.nodejs.external_memory.bytes', + 'supabase.storage_api.nodejs.gc_duration.seconds.bucket', + 'supabase.storage_api.nodejs.gc_duration.seconds.count', + 'supabase.storage_api.nodejs.gc_duration.seconds.sum', + 'supabase.storage_api.nodejs.heap_size.total_bytes', + 'supabase.storage_api.nodejs.heap_size.used_bytes', + 'supabase.storage_api.nodejs.heap_space_size.available_bytes', + 'supabase.storage_api.nodejs.heap_space_size.total_bytes', + 'supabase.storage_api.nodejs.heap_space_size.used_bytes', + 'supabase.storage_api.nodejs.version_info', + 'supabase.storage_api.nodejs_eventloop_lag.min_seconds', + 'supabase.storage_api.process.heap_bytes', + 'supabase.storage_api.process.max_fds', + 'supabase.storage_api.process.open_fds', + 'supabase.storage_api.process.resident_memory.bytes', + 'supabase.storage_api.process.uptime.seconds', + 'supabase.storage_api.process.virtual_memory.bytes', + 'supabase.storage_api.process_cpu.system.seconds.count', + 'supabase.storage_api.process_cpu.user.seconds.count', + 'supabase.storage_api.process_cpu.seconds.count', +] diff --git a/supabase/tests/conftest.py b/supabase/tests/conftest.py new file mode 100644 index 0000000000000..ccaed8fc65b94 --- /dev/null +++ b/supabase/tests/conftest.py @@ -0,0 +1,30 @@ +# (C) Datadog, Inc. 2024-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) +import copy + +import pytest + +from datadog_checks.dev import docker_run +from datadog_checks.dev.conditions import CheckDockerLogs, CheckEndpoints + +from .common import COMPOSE_FILE, MOCKED_INSTANCE + + +@pytest.fixture(scope='session') +def dd_environment(): + compose_file = COMPOSE_FILE + conditions = [ + CheckDockerLogs(identifier='caddy', patterns=['server running']), + CheckEndpoints(MOCKED_INSTANCE["privileged_metrics_endpoint"]), + CheckEndpoints(MOCKED_INSTANCE["storage_api_endpoint"]), + ] + with docker_run(compose_file, conditions=conditions): + yield { + 'instances': [MOCKED_INSTANCE], + } + + +@pytest.fixture +def instance(): + return copy.deepcopy(MOCKED_INSTANCE) diff --git a/supabase/tests/docker/Caddyfile b/supabase/tests/docker/Caddyfile new file mode 100644 index 0000000000000..bb31bb8c0e71e --- /dev/null +++ b/supabase/tests/docker/Caddyfile @@ -0,0 +1,15 @@ +:8000 { + handle_path /metrics { + root * /usr/share/caddy + rewrite * /privileged_metrics + file_server + } +} + +:9000 { + handle_path /metrics { + root * /usr/share/caddy + rewrite * /storage_api_metrics + file_server + } +} diff --git a/supabase/tests/docker/docker-compose.yaml b/supabase/tests/docker/docker-compose.yaml new file mode 100644 index 0000000000000..8b0b2e5a5cb36 --- /dev/null +++ b/supabase/tests/docker/docker-compose.yaml @@ -0,0 +1,12 @@ +version: "3.9" +services: + caddy: + image: caddy:2 + container_name: caddy + ports: + - "8000:8000" + - "9000:9000" + volumes: + - ./Caddyfile:/etc/caddy/Caddyfile + - ../fixtures/privileged_metrics.txt:/usr/share/caddy/privileged_metrics + - ../fixtures/storage_api_metrics.txt:/usr/share/caddy/storage_api_metrics \ No newline at end of file diff --git a/supabase/tests/fixtures/privileged_metrics.txt b/supabase/tests/fixtures/privileged_metrics.txt new file mode 100644 index 0000000000000..3499a28ff89a1 --- /dev/null +++ b/supabase/tests/fixtures/privileged_metrics.txt @@ -0,0 +1,924 @@ +# HELP node_memory_Inactive_file_bytes Memory information field Inactive_file_bytes. +# TYPE node_memory_Inactive_file_bytes gauge +node_memory_Inactive_file_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 7.9081472e+07 +# HELP node_memory_SwapFree_bytes Memory information field SwapFree_bytes. +# TYPE node_memory_SwapFree_bytes gauge +node_memory_SwapFree_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 9.3165568e+08 +# HELP node_vmstat_oom_kill /proc/vmstat information field oom_kill. +# TYPE node_vmstat_oom_kill untyped +node_vmstat_oom_kill{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 0 +# HELP node_load15 15m load average. +# TYPE node_load15 gauge +node_load15{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 0 +# HELP node_memory_Unevictable_bytes Memory information field Unevictable_bytes. +# TYPE node_memory_Unevictable_bytes gauge +node_memory_Unevictable_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 4096 +# HELP node_network_transmit_carrier_total Network device statistic transmit_carrier. +# TYPE node_network_transmit_carrier_total counter +node_network_transmit_carrier_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="ens5"} 0 +# HELP node_network_transmit_packets_total Network device statistic transmit_packets. +# TYPE node_network_transmit_packets_total counter +node_network_transmit_packets_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="ens5"} 11601 +# HELP node_memory_Dirty_bytes Memory information field Dirty_bytes. +# TYPE node_memory_Dirty_bytes gauge +node_memory_Dirty_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 57344 +# HELP node_memory_SwapTotal_bytes Memory information field SwapTotal_bytes. +# TYPE node_memory_SwapTotal_bytes gauge +node_memory_SwapTotal_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 1.073737728e+09 +# HELP node_memory_AnonPages_bytes Memory information field AnonPages_bytes. +# TYPE node_memory_AnonPages_bytes gauge +node_memory_AnonPages_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 1.29445888e+08 +# HELP node_memory_FileHugePages_bytes Memory information field FileHugePages_bytes. +# TYPE node_memory_FileHugePages_bytes gauge +node_memory_FileHugePages_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 0 +# HELP node_memory_HugePages_Surp Memory information field HugePages_Surp. +# TYPE node_memory_HugePages_Surp gauge +node_memory_HugePages_Surp{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 0 +# HELP node_scrape_collector_success node_exporter: Whether a collector succeeded. +# TYPE node_scrape_collector_success gauge +node_scrape_collector_success{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",collector="cpu"} 1 +node_scrape_collector_success{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",collector="diskstats"} 1 +node_scrape_collector_success{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",collector="filesystem"} 1 +node_scrape_collector_success{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",collector="loadavg"} 1 +node_scrape_collector_success{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",collector="meminfo"} 1 +node_scrape_collector_success{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",collector="netdev"} 1 +node_scrape_collector_success{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",collector="vmstat"} 1 +# HELP node_vmstat_pgpgin /proc/vmstat information field pgpgin. +# TYPE node_vmstat_pgpgin untyped +node_vmstat_pgpgin{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 2.418884e+06 +# HELP node_filesystem_device_error Whether an error occurred while getting statistics for the given device. +# TYPE node_filesystem_device_error gauge +node_filesystem_device_error{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="/dev/nvme0n1p2",fstype="ext4",mountpoint="/"} 0 +node_filesystem_device_error{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="/dev/nvme1n1",fstype="ext4",mountpoint="/data"} 0 +# HELP node_memory_Cached_bytes Memory information field Cached_bytes. +# TYPE node_memory_Cached_bytes gauge +node_memory_Cached_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 1.67378944e+08 +# HELP node_memory_Percpu_bytes Memory information field Percpu_bytes. +# TYPE node_memory_Percpu_bytes gauge +node_memory_Percpu_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 1.138688e+06 +# HELP node_memory_SwapCached_bytes Memory information field SwapCached_bytes. +# TYPE node_memory_SwapCached_bytes gauge +node_memory_SwapCached_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 1.5106048e+07 +# HELP node_network_receive_frame_total Network device statistic receive_frame. +# TYPE node_network_receive_frame_total counter +node_network_receive_frame_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="ens5"} 0 +# HELP node_scrape_collector_duration_seconds node_exporter: Duration of a collector scrape. +# TYPE node_scrape_collector_duration_seconds gauge +node_scrape_collector_duration_seconds{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",collector="cpu"} 0.00023986 +node_scrape_collector_duration_seconds{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",collector="diskstats"} 0.000140044 +node_scrape_collector_duration_seconds{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",collector="filesystem"} 0.000852738 +node_scrape_collector_duration_seconds{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",collector="loadavg"} 3.9507e-05 +node_scrape_collector_duration_seconds{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",collector="meminfo"} 0.00016187 +node_scrape_collector_duration_seconds{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",collector="netdev"} 9.5664e-05 +node_scrape_collector_duration_seconds{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",collector="vmstat"} 0.000140988 +# HELP node_memory_ShmemHugePages_bytes Memory information field ShmemHugePages_bytes. +# TYPE node_memory_ShmemHugePages_bytes gauge +node_memory_ShmemHugePages_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 0 +# HELP node_network_transmit_fifo_total Network device statistic transmit_fifo. +# TYPE node_network_transmit_fifo_total counter +node_network_transmit_fifo_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="ens5"} 0 +# HELP node_vmstat_pgpgout /proc/vmstat information field pgpgout. +# TYPE node_vmstat_pgpgout untyped +node_vmstat_pgpgout{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 1.055552e+06 +# HELP node_memory_NFS_Unstable_bytes Memory information field NFS_Unstable_bytes. +# TYPE node_memory_NFS_Unstable_bytes gauge +node_memory_NFS_Unstable_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 0 +# HELP node_memory_MemFree_bytes Memory information field MemFree_bytes. +# TYPE node_memory_MemFree_bytes gauge +node_memory_MemFree_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 2.2237184e+07 +# HELP node_network_transmit_colls_total Network device statistic transmit_colls. +# TYPE node_network_transmit_colls_total counter +node_network_transmit_colls_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="ens5"} 0 +# HELP node_vmstat_pswpout /proc/vmstat information field pswpout. +# TYPE node_vmstat_pswpout untyped +node_vmstat_pswpout{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 88387 +# HELP node_disk_flush_requests_time_seconds_total This is the total number of seconds spent by all flush requests. +# TYPE node_disk_flush_requests_time_seconds_total counter +node_disk_flush_requests_time_seconds_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="nvme0n1"} 0 +node_disk_flush_requests_time_seconds_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="nvme1n1"} 0 +# HELP node_disk_written_bytes_total The total number of bytes written successfully. +# TYPE node_disk_written_bytes_total counter +node_disk_written_bytes_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="nvme0n1"} 1.005322752e+09 +node_disk_written_bytes_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="nvme1n1"} 7.5563008e+07 +# HELP node_network_receive_errs_total Network device statistic receive_errs. +# TYPE node_network_receive_errs_total counter +node_network_receive_errs_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="ens5"} 0 +# HELP node_disk_io_time_weighted_seconds_total The weighted # of seconds spent doing I/Os. +# TYPE node_disk_io_time_weighted_seconds_total counter +node_disk_io_time_weighted_seconds_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="nvme0n1"} 172.749 +node_disk_io_time_weighted_seconds_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="nvme1n1"} 7.019 +# HELP node_filesystem_avail_bytes Filesystem space available to non-root users in bytes. +# TYPE node_filesystem_avail_bytes gauge +node_filesystem_avail_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="/dev/nvme0n1p2",fstype="ext4",mountpoint="/"} 5.318856704e+09 +node_filesystem_avail_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="/dev/nvme1n1",fstype="ext4",mountpoint="/data"} 8.064999424e+09 +# HELP node_memory_Mapped_bytes Memory information field Mapped_bytes. +# TYPE node_memory_Mapped_bytes gauge +node_memory_Mapped_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 1.0776576e+08 +# HELP postgresql_restarts_total Number of times postgresql has been restarted +# TYPE postgresql_restarts_total counter +postgresql_restarts_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 0 +# HELP node_disk_io_now The number of I/Os currently in progress. +# TYPE node_disk_io_now gauge +node_disk_io_now{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="nvme0n1"} 0 +node_disk_io_now{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="nvme1n1"} 0 +# HELP node_memory_SReclaimable_bytes Memory information field SReclaimable_bytes. +# TYPE node_memory_SReclaimable_bytes gauge +node_memory_SReclaimable_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 3.7298176e+07 +# HELP node_memory_KernelStack_bytes Memory information field KernelStack_bytes. +# TYPE node_memory_KernelStack_bytes gauge +node_memory_KernelStack_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 3.670016e+06 +# HELP node_memory_FilePmdMapped_bytes Memory information field FilePmdMapped_bytes. +# TYPE node_memory_FilePmdMapped_bytes gauge +node_memory_FilePmdMapped_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 0 +# HELP node_network_receive_drop_total Network device statistic receive_drop. +# TYPE node_network_receive_drop_total counter +node_network_receive_drop_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="ens5"} 0 +# HELP node_memory_HugePages_Total Memory information field HugePages_Total. +# TYPE node_memory_HugePages_Total gauge +node_memory_HugePages_Total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 0 +# HELP node_filesystem_size_bytes Filesystem size in bytes. +# TYPE node_filesystem_size_bytes gauge +node_filesystem_size_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="/dev/nvme0n1p2",fstype="ext4",mountpoint="/"} 1.0359754752e+10 +node_filesystem_size_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="/dev/nvme1n1",fstype="ext4",mountpoint="/data"} 8.350298112e+09 +# HELP node_load5 5m load average. +# TYPE node_load5 gauge +node_load5{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 0 +# HELP node_memory_Inactive_bytes Memory information field Inactive_bytes. +# TYPE node_memory_Inactive_bytes gauge +node_memory_Inactive_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 1.72179456e+08 +# HELP node_memory_PageTables_bytes Memory information field PageTables_bytes. +# TYPE node_memory_PageTables_bytes gauge +node_memory_PageTables_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 6.483968e+06 +# HELP node_network_receive_compressed_total Network device statistic receive_compressed. +# TYPE node_network_receive_compressed_total counter +node_network_receive_compressed_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="ens5"} 0 +# HELP node_disk_flush_requests_total The total number of flush requests completed successfully +# TYPE node_disk_flush_requests_total counter +node_disk_flush_requests_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="nvme0n1"} 0 +node_disk_flush_requests_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="nvme1n1"} 0 +# HELP node_disk_discarded_sectors_total The total number of sectors discarded successfully. +# TYPE node_disk_discarded_sectors_total counter +node_disk_discarded_sectors_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="nvme0n1"} 0 +node_disk_discarded_sectors_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="nvme1n1"} 0 +# HELP node_memory_AnonHugePages_bytes Memory information field AnonHugePages_bytes. +# TYPE node_memory_AnonHugePages_bytes gauge +node_memory_AnonHugePages_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 0 +# HELP node_memory_Bounce_bytes Memory information field Bounce_bytes. +# TYPE node_memory_Bounce_bytes gauge +node_memory_Bounce_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 0 +# HELP node_memory_MemTotal_bytes Memory information field MemTotal_bytes. +# TYPE node_memory_MemTotal_bytes gauge +node_memory_MemTotal_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 4.43674624e+08 +# HELP node_network_receive_fifo_total Network device statistic receive_fifo. +# TYPE node_network_receive_fifo_total counter +node_network_receive_fifo_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="ens5"} 0 +# HELP node_cpu_seconds_total Seconds the CPUs spent in each mode. +# TYPE node_cpu_seconds_total counter +node_cpu_seconds_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",cpu="0",mode="idle"} 2263.65 +node_cpu_seconds_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",cpu="0",mode="iowait"} 33.6 +node_cpu_seconds_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",cpu="0",mode="irq"} 0 +node_cpu_seconds_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",cpu="0",mode="nice"} 0.04 +node_cpu_seconds_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",cpu="0",mode="softirq"} 0.37 +node_cpu_seconds_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",cpu="0",mode="steal"} 1.45 +node_cpu_seconds_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",cpu="0",mode="system"} 13.61 +node_cpu_seconds_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",cpu="0",mode="user"} 27.02 +node_cpu_seconds_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",cpu="1",mode="idle"} 2265.34 +node_cpu_seconds_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",cpu="1",mode="iowait"} 32.49 +node_cpu_seconds_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",cpu="1",mode="irq"} 0 +node_cpu_seconds_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",cpu="1",mode="nice"} 0.06 +node_cpu_seconds_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",cpu="1",mode="softirq"} 0.3 +node_cpu_seconds_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",cpu="1",mode="steal"} 1.61 +node_cpu_seconds_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",cpu="1",mode="system"} 12.2 +node_cpu_seconds_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",cpu="1",mode="user"} 27.08 +# HELP node_memory_VmallocUsed_bytes Memory information field VmallocUsed_bytes. +# TYPE node_memory_VmallocUsed_bytes gauge +node_memory_VmallocUsed_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 1.0760192e+07 +# HELP node_memory_Writeback_bytes Memory information field Writeback_bytes. +# TYPE node_memory_Writeback_bytes gauge +node_memory_Writeback_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 0 +# HELP node_memory_Inactive_anon_bytes Memory information field Inactive_anon_bytes. +# TYPE node_memory_Inactive_anon_bytes gauge +node_memory_Inactive_anon_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 9.3097984e+07 +# HELP node_memory_Active_bytes Memory information field Active_bytes. +# TYPE node_memory_Active_bytes gauge +node_memory_Active_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 1.42127104e+08 +# HELP node_memory_CommitLimit_bytes Memory information field CommitLimit_bytes. +# TYPE node_memory_CommitLimit_bytes gauge +node_memory_CommitLimit_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 1.295572992e+09 +# HELP node_network_receive_packets_total Network device statistic receive_packets. +# TYPE node_network_receive_packets_total counter +node_network_receive_packets_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="ens5"} 33418 +# HELP node_network_transmit_compressed_total Network device statistic transmit_compressed. +# TYPE node_network_transmit_compressed_total counter +node_network_transmit_compressed_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="ens5"} 0 +# HELP node_disk_writes_merged_total The number of writes merged. +# TYPE node_disk_writes_merged_total counter +node_disk_writes_merged_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="nvme0n1"} 88093 +node_disk_writes_merged_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="nvme1n1"} 3408 +# HELP node_memory_Active_anon_bytes Memory information field Active_anon_bytes. +# TYPE node_memory_Active_anon_bytes gauge +node_memory_Active_anon_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 5.8032128e+07 +# HELP node_disk_reads_completed_total The total number of reads completed successfully. +# TYPE node_disk_reads_completed_total counter +node_disk_reads_completed_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="nvme0n1"} 88478 +node_disk_reads_completed_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="nvme1n1"} 2670 +# HELP node_disk_discard_time_seconds_total This is the total number of seconds spent by all discards. +# TYPE node_disk_discard_time_seconds_total counter +node_disk_discard_time_seconds_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="nvme0n1"} 0 +node_disk_discard_time_seconds_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="nvme1n1"} 0 +# HELP node_disk_reads_merged_total The total number of reads merged. +# TYPE node_disk_reads_merged_total counter +node_disk_reads_merged_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="nvme0n1"} 30022 +node_disk_reads_merged_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="nvme1n1"} 342 +# HELP node_filesystem_files_free Filesystem total free file nodes. +# TYPE node_filesystem_files_free gauge +node_filesystem_files_free{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="/dev/nvme0n1p2",fstype="ext4",mountpoint="/"} 466013 +node_filesystem_files_free{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="/dev/nvme1n1",fstype="ext4",mountpoint="/data"} 523105 +# HELP node_memory_HugePages_Free Memory information field HugePages_Free. +# TYPE node_memory_HugePages_Free gauge +node_memory_HugePages_Free{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 0 +# HELP db_transmit_bytes postgres and pgbouncer network transmit bytes +# TYPE db_transmit_bytes counter +db_transmit_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 89799 +# HELP node_memory_VmallocTotal_bytes Memory information field VmallocTotal_bytes. +# TYPE node_memory_VmallocTotal_bytes gauge +node_memory_VmallocTotal_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 1.3633903919104e+14 +# HELP node_network_transmit_bytes_total Network device statistic transmit_bytes. +# TYPE node_network_transmit_bytes_total counter +node_network_transmit_bytes_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="ens5"} 2.726347e+06 +# HELP node_load1 1m load average. +# TYPE node_load1 gauge +node_load1{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 0 +# HELP node_network_receive_multicast_total Network device statistic receive_multicast. +# TYPE node_network_receive_multicast_total counter +node_network_receive_multicast_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="ens5"} 0 +# HELP node_disk_discards_merged_total The total number of discards merged. +# TYPE node_disk_discards_merged_total counter +node_disk_discards_merged_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="nvme0n1"} 0 +node_disk_discards_merged_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="nvme1n1"} 0 +# HELP node_memory_Committed_AS_bytes Memory information field Committed_AS_bytes. +# TYPE node_memory_Committed_AS_bytes gauge +node_memory_Committed_AS_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 1.148878848e+09 +# HELP node_memory_VmallocChunk_bytes Memory information field VmallocChunk_bytes. +# TYPE node_memory_VmallocChunk_bytes gauge +node_memory_VmallocChunk_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 0 +# HELP node_filesystem_free_bytes Filesystem free space in bytes. +# TYPE node_filesystem_free_bytes gauge +node_filesystem_free_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="/dev/nvme0n1p2",fstype="ext4",mountpoint="/"} 5.34626304e+09 +node_filesystem_free_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="/dev/nvme1n1",fstype="ext4",mountpoint="/data"} 8.18663424e+09 +# HELP node_disk_writes_completed_total The total number of writes completed successfully. +# TYPE node_disk_writes_completed_total counter +node_disk_writes_completed_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="nvme0n1"} 23492 +node_disk_writes_completed_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="nvme1n1"} 3503 +# HELP node_memory_ShmemPmdMapped_bytes Memory information field ShmemPmdMapped_bytes. +# TYPE node_memory_ShmemPmdMapped_bytes gauge +node_memory_ShmemPmdMapped_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 0 +# HELP node_network_transmit_drop_total Network device statistic transmit_drop. +# TYPE node_network_transmit_drop_total counter +node_network_transmit_drop_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="ens5"} 0 +# HELP node_network_transmit_errs_total Network device statistic transmit_errs. +# TYPE node_network_transmit_errs_total counter +node_network_transmit_errs_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="ens5"} 0 +# HELP node_disk_io_time_seconds_total Total seconds spent doing I/Os. +# TYPE node_disk_io_time_seconds_total counter +node_disk_io_time_seconds_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="nvme0n1"} 81.48 +node_disk_io_time_seconds_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="nvme1n1"} 6.908 +# HELP node_memory_SUnreclaim_bytes Memory information field SUnreclaim_bytes. +# TYPE node_memory_SUnreclaim_bytes gauge +node_memory_SUnreclaim_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 3.5139584e+07 +# HELP node_vmstat_pswpin /proc/vmstat information field pswpin. +# TYPE node_vmstat_pswpin untyped +node_vmstat_pswpin{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 43053 +# HELP node_disk_read_time_seconds_total The total number of seconds spent by all reads. +# TYPE node_disk_read_time_seconds_total counter +node_disk_read_time_seconds_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="nvme0n1"} 120.031 +node_disk_read_time_seconds_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="nvme1n1"} 3.342 +# HELP node_vmstat_pgmajfault /proc/vmstat information field pgmajfault. +# TYPE node_vmstat_pgmajfault untyped +node_vmstat_pgmajfault{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 40869 +# HELP node_disk_write_time_seconds_total This is the total number of seconds spent by all writes. +# TYPE node_disk_write_time_seconds_total counter +node_disk_write_time_seconds_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="nvme0n1"} 52.717 +node_disk_write_time_seconds_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="nvme1n1"} 3.676 +# HELP node_memory_Hugetlb_bytes Memory information field Hugetlb_bytes. +# TYPE node_memory_Hugetlb_bytes gauge +node_memory_Hugetlb_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 0 +# HELP node_memory_MemAvailable_bytes Memory information field MemAvailable_bytes. +# TYPE node_memory_MemAvailable_bytes gauge +node_memory_MemAvailable_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 2.1239808e+08 +# HELP node_memory_WritebackTmp_bytes Memory information field WritebackTmp_bytes. +# TYPE node_memory_WritebackTmp_bytes gauge +node_memory_WritebackTmp_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 0 +# HELP node_memory_Buffers_bytes Memory information field Buffers_bytes. +# TYPE node_memory_Buffers_bytes gauge +node_memory_Buffers_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 8.97024e+06 +# HELP node_disk_read_bytes_total The total number of bytes read successfully. +# TYPE node_disk_read_bytes_total counter +node_disk_read_bytes_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="nvme0n1"} 2.429791232e+09 +node_disk_read_bytes_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="nvme1n1"} 4.7137792e+07 +# HELP node_memory_HardwareCorrupted_bytes Memory information field HardwareCorrupted_bytes. +# TYPE node_memory_HardwareCorrupted_bytes gauge +node_memory_HardwareCorrupted_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 0 +# HELP node_memory_Hugepagesize_bytes Memory information field Hugepagesize_bytes. +# TYPE node_memory_Hugepagesize_bytes gauge +node_memory_Hugepagesize_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 2.097152e+06 +# HELP node_memory_KReclaimable_bytes Memory information field KReclaimable_bytes. +# TYPE node_memory_KReclaimable_bytes gauge +node_memory_KReclaimable_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 3.7298176e+07 +# HELP node_memory_Shmem_bytes Memory information field Shmem_bytes. +# TYPE node_memory_Shmem_bytes gauge +node_memory_Shmem_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 1.3119488e+07 +# HELP node_network_receive_bytes_total Network device statistic receive_bytes. +# TYPE node_network_receive_bytes_total counter +node_network_receive_bytes_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="ens5"} 4.0247816e+07 +# HELP node_disk_discards_completed_total The total number of discards completed successfully. +# TYPE node_disk_discards_completed_total counter +node_disk_discards_completed_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="nvme0n1"} 0 +node_disk_discards_completed_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="nvme1n1"} 0 +# HELP node_memory_HugePages_Rsvd Memory information field HugePages_Rsvd. +# TYPE node_memory_HugePages_Rsvd gauge +node_memory_HugePages_Rsvd{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 0 +# HELP node_memory_Mlocked_bytes Memory information field Mlocked_bytes. +# TYPE node_memory_Mlocked_bytes gauge +node_memory_Mlocked_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 4096 +# HELP node_filesystem_files Filesystem total file nodes. +# TYPE node_filesystem_files gauge +node_filesystem_files{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="/dev/nvme0n1p2",fstype="ext4",mountpoint="/"} 648960 +node_filesystem_files{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="/dev/nvme1n1",fstype="ext4",mountpoint="/data"} 524288 +# HELP node_filesystem_readonly Filesystem read-only status. +# TYPE node_filesystem_readonly gauge +node_filesystem_readonly{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="/dev/nvme0n1p2",fstype="ext4",mountpoint="/"} 0 +node_filesystem_readonly{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",device="/dev/nvme1n1",fstype="ext4",mountpoint="/data"} 0 +# HELP node_memory_Active_file_bytes Memory information field Active_file_bytes. +# TYPE node_memory_Active_file_bytes gauge +node_memory_Active_file_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 8.4094976e+07 +# HELP node_memory_Slab_bytes Memory information field Slab_bytes. +# TYPE node_memory_Slab_bytes gauge +node_memory_Slab_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 7.243776e+07 +# HELP node_vmstat_pgfault /proc/vmstat information field pgfault. +# TYPE node_vmstat_pgfault untyped +node_vmstat_pgfault{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db"} 2.18115e+06 +# HELP node_cpu_guest_seconds_total Seconds the CPUs spent in guests (VMs) for each mode. +# TYPE node_cpu_guest_seconds_total counter +node_cpu_guest_seconds_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",cpu="0",mode="nice"} 0 +node_cpu_guest_seconds_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",cpu="0",mode="user"} 0 +node_cpu_guest_seconds_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",cpu="1",mode="nice"} 0 +node_cpu_guest_seconds_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="db",cpu="1",mode="user"} 0 +# HELP pg_stat_database_xact_commit_total Transactions committed +# TYPE pg_stat_database_xact_commit_total counter +pg_stat_database_xact_commit_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 2472 +# HELP physical_replication_lag_is_wal_replay_paused Check if WAL replay has been paused +# TYPE physical_replication_lag_is_wal_replay_paused gauge +physical_replication_lag_is_wal_replay_paused{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 0 +# HELP postgres_exporter_config_last_reload_success_timestamp_seconds Timestamp of the last successful configuration reload. +# TYPE postgres_exporter_config_last_reload_success_timestamp_seconds gauge +postgres_exporter_config_last_reload_success_timestamp_seconds{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql"} 0 +# HELP process_virtual_memory_bytes Virtual memory size in bytes. +# TYPE process_virtual_memory_bytes gauge +process_virtual_memory_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql"} 1.266716672e+09 +# HELP realtime_postgres_changes_total_subscriptions Total subscription records listening for Postgres changes +# TYPE realtime_postgres_changes_total_subscriptions gauge +realtime_postgres_changes_total_subscriptions{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 0 +# HELP pg_stat_bgwriter_checkpoint_sync_time_total Time spent synchronizing checkpoint files to disk +# TYPE pg_stat_bgwriter_checkpoint_sync_time_total counter +pg_stat_bgwriter_checkpoint_sync_time_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 67 +# HELP go_memstats_mcache_inuse_bytes Number of bytes in use by mcache structures. +# TYPE go_memstats_mcache_inuse_bytes gauge +go_memstats_mcache_inuse_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql"} 2400 +# HELP go_memstats_mcache_sys_bytes Number of bytes used for mcache structures obtained from system. +# TYPE go_memstats_mcache_sys_bytes gauge +go_memstats_mcache_sys_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql"} 15600 +# HELP process_start_time_seconds Start time of the process since unix epoch in seconds. +# TYPE process_start_time_seconds gauge +process_start_time_seconds{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql"} 1.73323902162e+09 +# HELP go_memstats_last_gc_time_seconds Number of seconds since 1970 of last garbage collection. +# TYPE go_memstats_last_gc_time_seconds gauge +go_memstats_last_gc_time_seconds{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql"} 1.7332411937058074e+09 +# HELP pg_stat_bgwriter_buffers_alloc_total Buffers allocated +# TYPE pg_stat_bgwriter_buffers_alloc_total counter +pg_stat_bgwriter_buffers_alloc_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 12444 +# HELP pg_stat_bgwriter_buffers_backend_fsync_total fsync calls executed by a backend directly +# TYPE pg_stat_bgwriter_buffers_backend_fsync_total counter +pg_stat_bgwriter_buffers_backend_fsync_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 0 +# HELP pg_stat_statements_total_time_seconds Total time spent, in seconds +# TYPE pg_stat_statements_total_time_seconds counter +pg_stat_statements_total_time_seconds{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 3.2134043250000004 +# HELP process_cpu_seconds_total Total user and system CPU time spent in seconds. +# TYPE process_cpu_seconds_total counter +process_cpu_seconds_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql"} 0.27 +# HELP auth_users_user_count Number of users in the project db +# TYPE auth_users_user_count gauge +auth_users_user_count{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 0 +# HELP pg_stat_database_xact_rollback_total Transactions rolled back +# TYPE pg_stat_database_xact_rollback_total counter +pg_stat_database_xact_rollback_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 5 +# HELP go_info Information about the Go environment. +# TYPE go_info gauge +go_info{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",version="go1.21.3"} 1 +# HELP pg_exporter_user_queries_load_error Whether the user queries file was loaded and parsed successfully (1 for error, 0 for success). +# TYPE pg_exporter_user_queries_load_error gauge +pg_exporter_user_queries_load_error{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",filename="/opt/postgres_exporter/queries.yml",hashsum="0af5dd9317f7a5209580dc72ebbb795a1468c3e4cf68eabd2e423388bcf2546f"} 0 +# HELP pg_stat_bgwriter_checkpoints_timed_total Scheduled checkpoints performed +# TYPE pg_stat_bgwriter_checkpoints_timed_total counter +pg_stat_bgwriter_checkpoints_timed_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 7 +# HELP postgres_exporter_build_info A metric with a constant '1' value labeled by version, revision, branch, goversion from which postgres_exporter was built, and the goos and goarch for the build. +# TYPE postgres_exporter_build_info gauge +postgres_exporter_build_info{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",branch="HEAD",goarch="arm64",goos="linux",goversion="go1.21.3",revision="68c176b8833b7580bf847cecf60f8e0ad5923f9a",tags="unknown",version="0.15.0"} 1 +# HELP go_memstats_frees_total Total number of frees. +# TYPE go_memstats_frees_total counter +go_memstats_frees_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql"} 86197 +# HELP pg_exporter_last_scrape_error Whether the last scrape of metrics from PostgreSQL resulted in an error (1 for error, 0 for success). +# TYPE pg_exporter_last_scrape_error gauge +pg_exporter_last_scrape_error{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql"} 0 +# HELP pg_exporter_scrapes_total Total number of times PostgreSQL was scraped for metrics. +# TYPE pg_exporter_scrapes_total counter +pg_exporter_scrapes_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql"} 38 +# HELP pg_stat_bgwriter_stats_reset Most recent stat reset time +# TYPE pg_stat_bgwriter_stats_reset counter +pg_stat_bgwriter_stats_reset{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 1.732551629e+09 +# HELP pg_status_in_recovery Database in recovery +# TYPE pg_status_in_recovery gauge +pg_status_in_recovery{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 0 +# HELP postgres_exporter_config_last_reload_successful Postgres exporter config loaded successfully. +# TYPE postgres_exporter_config_last_reload_successful gauge +postgres_exporter_config_last_reload_successful{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql"} 0 +# HELP go_memstats_mallocs_total Total number of mallocs. +# TYPE go_memstats_mallocs_total counter +go_memstats_mallocs_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql"} 91002 +# HELP go_memstats_other_sys_bytes Number of bytes used for other system allocations. +# TYPE go_memstats_other_sys_bytes gauge +go_memstats_other_sys_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql"} 527816 +# HELP go_threads Number of OS threads created. +# TYPE go_threads gauge +go_threads{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql"} 5 +# HELP promhttp_metric_handler_requests_total Total number of scrapes by HTTP status code. +# TYPE promhttp_metric_handler_requests_total counter +promhttp_metric_handler_requests_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",code="200"} 37 +promhttp_metric_handler_requests_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",code="500"} 0 +promhttp_metric_handler_requests_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",code="503"} 0 +# HELP go_memstats_mspan_inuse_bytes Number of bytes in use by mspan structures. +# TYPE go_memstats_mspan_inuse_bytes gauge +go_memstats_mspan_inuse_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql"} 65184 +# HELP go_memstats_sys_bytes Number of bytes obtained from system. +# TYPE go_memstats_sys_bytes gauge +go_memstats_sys_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql"} 1.2819472e+07 +# HELP pg_stat_database_blks_read_total Number of disk blocks read +# TYPE pg_stat_database_blks_read_total counter +pg_stat_database_blks_read_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 2465 +# HELP pg_stat_database_conflicts_confl_lock_total Queries cancelled due to lock timeouts +# TYPE pg_stat_database_conflicts_confl_lock_total counter +pg_stat_database_conflicts_confl_lock_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 0 +# HELP go_memstats_buck_hash_sys_bytes Number of bytes used by the profiling bucket hash table. +# TYPE go_memstats_buck_hash_sys_bytes gauge +go_memstats_buck_hash_sys_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql"} 5048 +# HELP pg_scrape_collector_duration_seconds postgres_exporter: Duration of a collector scrape. +# TYPE pg_scrape_collector_duration_seconds gauge +pg_scrape_collector_duration_seconds{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",collector="database"} 0.003614192 +# HELP pg_stat_bgwriter_checkpoints_req_total Requested checkpoints performed +# TYPE pg_stat_bgwriter_checkpoints_req_total counter +pg_stat_bgwriter_checkpoints_req_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 6 +# HELP pg_stat_database_most_recent_reset The most recent time one of the databases had its statistics reset +# TYPE pg_stat_database_most_recent_reset counter +pg_stat_database_most_recent_reset{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} NaN +# HELP go_memstats_mspan_sys_bytes Number of bytes used for mspan structures obtained from system. +# TYPE go_memstats_mspan_sys_bytes gauge +go_memstats_mspan_sys_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql"} 81480 +# HELP storage_storage_size_mb The total size used for all storage buckets, in mb +# TYPE storage_storage_size_mb gauge +storage_storage_size_mb{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} NaN +# HELP process_open_fds Number of open file descriptors. +# TYPE process_open_fds gauge +process_open_fds{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql"} 12 +# HELP physical_replication_lag_is_connected_to_primary Monitor connection to the primary database +# TYPE physical_replication_lag_is_connected_to_primary gauge +physical_replication_lag_is_connected_to_primary{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 0 +# HELP go_memstats_alloc_bytes Number of bytes allocated and still in use. +# TYPE go_memstats_alloc_bytes gauge +go_memstats_alloc_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql"} 2.412352e+06 +# HELP go_memstats_gc_sys_bytes Number of bytes used for garbage collection system metadata. +# TYPE go_memstats_gc_sys_bytes gauge +go_memstats_gc_sys_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql"} 3.80092e+06 +# HELP go_memstats_heap_objects Number of allocated objects. +# TYPE go_memstats_heap_objects gauge +go_memstats_heap_objects{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql"} 4805 +# HELP pg_ls_archive_statusdir_wal_pending_count Number of not yet archived WAL files +# TYPE pg_ls_archive_statusdir_wal_pending_count counter +pg_ls_archive_statusdir_wal_pending_count{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 0 +# HELP pg_stat_database_temp_files_total Temp files created by queries +# TYPE pg_stat_database_temp_files_total counter +pg_stat_database_temp_files_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 0 +# HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles. +# TYPE go_gc_duration_seconds summary +go_gc_duration_seconds{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",quantile="0"} 1.9857e-05 +go_gc_duration_seconds{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",quantile="0.25"} 5.2274e-05 +go_gc_duration_seconds{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",quantile="0.5"} 9.5878e-05 +go_gc_duration_seconds{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",quantile="0.75"} 0.000117195 +go_gc_duration_seconds{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",quantile="1"} 0.041046092 +go_gc_duration_seconds_sum{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql"} 0.055028914 +go_gc_duration_seconds_count{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql"} 16 +# HELP pg_stat_database_conflicts_confl_tablespace_total Queries cancelled due to dropped tablespaces +# TYPE pg_stat_database_conflicts_confl_tablespace_total counter +pg_stat_database_conflicts_confl_tablespace_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 0 +# HELP pg_stat_bgwriter_maxwritten_clean_total Number of times bg writer stopped a cleaning scan because it had written too many buffers +# TYPE pg_stat_bgwriter_maxwritten_clean_total counter +pg_stat_bgwriter_maxwritten_clean_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 0 +# HELP pg_stat_bgwriter_checkpoint_write_time_total Time spent writing checkpoint files to disk +# TYPE pg_stat_bgwriter_checkpoint_write_time_total counter +pg_stat_bgwriter_checkpoint_write_time_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 17715 +# HELP pg_stat_database_tup_deleted_total Rows deleted +# TYPE pg_stat_database_tup_deleted_total counter +pg_stat_database_tup_deleted_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 1436 +# HELP physical_replication_lag_physical_replication_lag_seconds Physical replication lag in seconds +# TYPE physical_replication_lag_physical_replication_lag_seconds gauge +physical_replication_lag_physical_replication_lag_seconds{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 0 +# HELP pg_stat_bgwriter_buffers_clean_total Buffers written by bg writter +# TYPE pg_stat_bgwriter_buffers_clean_total counter +pg_stat_bgwriter_buffers_clean_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 0 +# HELP pg_database_size_bytes Disk space used by the database +# TYPE pg_database_size_bytes gauge +pg_database_size_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",datname="postgres"} 1.0212143e+07 +pg_database_size_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",datname="template0"} 7.631663e+06 +pg_database_size_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",datname="template1"} 7.631663e+06 +# HELP pg_stat_database_conflicts_confl_deadlock_total Queries cancelled due to deadlocks +# TYPE pg_stat_database_conflicts_confl_deadlock_total counter +pg_stat_database_conflicts_confl_deadlock_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 0 +# HELP go_goroutines Number of goroutines that currently exist. +# TYPE go_goroutines gauge +go_goroutines{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql"} 10 +# HELP go_memstats_heap_inuse_bytes Number of heap bytes that are in use. +# TYPE go_memstats_heap_inuse_bytes gauge +go_memstats_heap_inuse_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql"} 3.710976e+06 +# HELP pg_scrape_collector_success postgres_exporter: Whether a collector succeeded. +# TYPE pg_scrape_collector_success gauge +pg_scrape_collector_success{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",collector="database"} 1 +# HELP pg_stat_database_conflicts_confl_bufferpin_total Queries cancelled due to pinned buffers +# TYPE pg_stat_database_conflicts_confl_bufferpin_total counter +pg_stat_database_conflicts_confl_bufferpin_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 0 +# HELP pg_stat_database_tup_fetched_total Rows fetched by queries +# TYPE pg_stat_database_tup_fetched_total counter +pg_stat_database_tup_fetched_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 253932 +# HELP process_virtual_memory_max_bytes Maximum amount of virtual memory available in bytes. +# TYPE process_virtual_memory_max_bytes gauge +process_virtual_memory_max_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql"} 1.8446744073709552e+19 +# HELP pg_stat_database_temp_bytes_total Temp data written by queries +# TYPE pg_stat_database_temp_bytes_total counter +pg_stat_database_temp_bytes_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 0 +# HELP pg_stat_bgwriter_buffers_checkpoint_total Buffers written during checkpoints +# TYPE pg_stat_bgwriter_buffers_checkpoint_total counter +pg_stat_bgwriter_buffers_checkpoint_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 4888 +# HELP process_max_fds Maximum number of open file descriptors. +# TYPE process_max_fds gauge +process_max_fds{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql"} 524288 +# HELP go_memstats_heap_idle_bytes Number of heap bytes waiting to be used. +# TYPE go_memstats_heap_idle_bytes gauge +go_memstats_heap_idle_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql"} 4.21888e+06 +# HELP pg_stat_database_deadlocks_total Deadlocks detected +# TYPE pg_stat_database_deadlocks_total counter +pg_stat_database_deadlocks_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 0 +# HELP pg_stat_replication_replay_lag Max replay lag +# TYPE pg_stat_replication_replay_lag gauge +pg_stat_replication_replay_lag{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} NaN +# HELP pg_stat_statements_total_queries Number of times executed +# TYPE pg_stat_statements_total_queries counter +pg_stat_statements_total_queries{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 482 +# HELP realtime_postgres_changes_client_subscriptions Client subscriptions listening for Postgres changes +# TYPE realtime_postgres_changes_client_subscriptions gauge +realtime_postgres_changes_client_subscriptions{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 0 +# HELP supabase_usage_metrics_user_queries_total The total number of user queries executed +# TYPE supabase_usage_metrics_user_queries_total counter +supabase_usage_metrics_user_queries_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 358 +# HELP pg_stat_database_tup_returned_total Rows returned by queries +# TYPE pg_stat_database_tup_returned_total counter +pg_stat_database_tup_returned_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 715303 +# HELP go_memstats_next_gc_bytes Number of heap bytes when next garbage collection will take place. +# TYPE go_memstats_next_gc_bytes gauge +go_memstats_next_gc_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql"} 4.194304e+06 +# HELP go_memstats_stack_inuse_bytes Number of bytes in use by the stack allocator. +# TYPE go_memstats_stack_inuse_bytes gauge +go_memstats_stack_inuse_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql"} 458752 +# HELP pg_database_size_mb Disk space used by the database +# TYPE pg_database_size_mb gauge +pg_database_size_mb{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 24.295300483703613 +# HELP pg_stat_database_num_backends The number of active backends +# TYPE pg_stat_database_num_backends gauge +pg_stat_database_num_backends{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 6 +# HELP process_resident_memory_bytes Resident memory size in bytes. +# TYPE process_resident_memory_bytes gauge +process_resident_memory_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql"} 9.146368e+06 +# HELP pg_stat_replication_send_lag Max send lag +# TYPE pg_stat_replication_send_lag gauge +pg_stat_replication_send_lag{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} NaN +# HELP go_memstats_stack_sys_bytes Number of bytes obtained from system for stack allocator. +# TYPE go_memstats_stack_sys_bytes gauge +go_memstats_stack_sys_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql"} 458752 +# HELP pg_exporter_last_scrape_duration_seconds Duration of the last scrape of metrics from PostgreSQL. +# TYPE pg_exporter_last_scrape_duration_seconds gauge +pg_exporter_last_scrape_duration_seconds{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql"} 0.004154578 +# HELP go_memstats_heap_sys_bytes Number of heap bytes obtained from system. +# TYPE go_memstats_heap_sys_bytes gauge +go_memstats_heap_sys_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql"} 7.929856e+06 +# HELP pg_stat_database_conflicts_confl_snapshot_total Queries cancelled due to old snapshots +# TYPE pg_stat_database_conflicts_confl_snapshot_total counter +pg_stat_database_conflicts_confl_snapshot_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 0 +# HELP pg_stat_database_tup_inserted_total Rows inserted +# TYPE pg_stat_database_tup_inserted_total counter +pg_stat_database_tup_inserted_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 22231 +# HELP pg_stat_database_tup_updated_total Rows updated +# TYPE pg_stat_database_tup_updated_total counter +pg_stat_database_tup_updated_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 1959 +# HELP pg_up Whether the last scrape of metrics from PostgreSQL was able to connect to the server (1 for yes, 0 for no). +# TYPE pg_up gauge +pg_up{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql"} 1 +# HELP pg_wal_size_mb Disk space used by WAL files +# TYPE pg_wal_size_mb gauge +pg_wal_size_mb{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 80 +# HELP go_memstats_heap_alloc_bytes Number of heap bytes allocated and still in use. +# TYPE go_memstats_heap_alloc_bytes gauge +go_memstats_heap_alloc_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql"} 2.412352e+06 +# HELP go_memstats_heap_released_bytes Number of heap bytes released to OS. +# TYPE go_memstats_heap_released_bytes gauge +go_memstats_heap_released_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql"} 3.940352e+06 +# HELP pg_settings_default_transaction_read_only Default transaction mode set to read only +# TYPE pg_settings_default_transaction_read_only gauge +pg_settings_default_transaction_read_only{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 0 +# HELP pg_stat_database_conflicts_total Queries canceled due to conflicts with recovery +# TYPE pg_stat_database_conflicts_total counter +pg_stat_database_conflicts_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 0 +# HELP promhttp_metric_handler_requests_in_flight Current number of scrapes being served. +# TYPE promhttp_metric_handler_requests_in_flight gauge +promhttp_metric_handler_requests_in_flight{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql"} 1 +# HELP go_memstats_alloc_bytes_total Total number of bytes allocated, even if freed. +# TYPE go_memstats_alloc_bytes_total counter +go_memstats_alloc_bytes_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql"} 1.6002264e+07 +# HELP pg_stat_bgwriter_buffers_backend_total Buffers written directly by a backend +# TYPE pg_stat_bgwriter_buffers_backend_total counter +pg_stat_bgwriter_buffers_backend_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 9360 +# HELP replication_slots_max_lag_bytes Max Replication Lag +# TYPE replication_slots_max_lag_bytes gauge +replication_slots_max_lag_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 1000 +# HELP pg_stat_activity_xact_runtime Transaction Runtime +# TYPE pg_stat_activity_xact_runtime gauge +pg_stat_activity_xact_runtime{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 0 +# HELP pg_stat_database_blks_hit_total Disk blocks found in buffer cache +# TYPE pg_stat_database_blks_hit_total counter +pg_stat_database_blks_hit_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql",server="localhost:5432"} 490933 +# HELP go_memstats_lookups_total Total number of pointer lookups. +# TYPE go_memstats_lookups_total counter +go_memstats_lookups_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgresql"} 0 +# HELP pgrst_schema_cache_query_time_seconds The query time in seconds of the last schema cache load +# TYPE pgrst_schema_cache_query_time_seconds gauge +pgrst_schema_cache_query_time_seconds{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgrest"} 0.000981169 +# HELP pgrst_schema_cache_loads_total The total number of times the schema cache was loaded +# TYPE pgrst_schema_cache_loads_total counter +pgrst_schema_cache_loads_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgrest",status="FAIL"} 1 +pgrst_schema_cache_loads_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgrest",status="SUCCESS"} 6 +# HELP pgrst_db_pool_max Max pool connections +# TYPE pgrst_db_pool_max gauge +pgrst_db_pool_max{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgrest"} 10 +# HELP pgrst_db_pool_waiting Requests waiting to acquire a pool connection +# TYPE pgrst_db_pool_waiting gauge +pgrst_db_pool_waiting{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgrest"} 0 +# HELP pgrst_db_pool_available Available connections in the pool +# TYPE pgrst_db_pool_available gauge +pgrst_db_pool_available{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgrest"} -3 +# HELP pgrst_db_pool_timeouts_total The total number of pool connection timeouts +# TYPE pgrst_db_pool_timeouts_total counter +pgrst_db_pool_timeouts_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="postgrest"} 0 +# HELP go_memstats_lookups_total Total number of pointer lookups. +# TYPE go_memstats_lookups_total counter +go_memstats_lookups_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue"} 0 +# HELP go_memstats_mspan_sys_bytes Number of bytes used for mspan structures obtained from system. +# TYPE go_memstats_mspan_sys_bytes gauge +go_memstats_mspan_sys_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue"} 81600 +# HELP go_memstats_stack_inuse_bytes Number of bytes in use by the stack allocator. +# TYPE go_memstats_stack_inuse_bytes gauge +go_memstats_stack_inuse_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue"} 622592 +# HELP process_open_fds Number of open file descriptors. +# TYPE process_open_fds gauge +process_open_fds{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue"} 10 +# HELP promhttp_metric_handler_requests_in_flight Current number of scrapes being served. +# TYPE promhttp_metric_handler_requests_in_flight gauge +promhttp_metric_handler_requests_in_flight{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue"} 1 +# HELP db_sql_connection_max_open Maximum number of open connections to the database +# TYPE db_sql_connection_max_open gauge +db_sql_connection_max_open{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="github.com/XSAM/otelsql",otel_scope_version="0.26.0"} 10 +# HELP go_goroutines Number of goroutines that currently exist. +# TYPE go_goroutines gauge +go_goroutines{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue"} 41 +# HELP process_runtime_go_mem_live_objects Number of live objects is the number of cumulative Mallocs - Frees +# TYPE process_runtime_go_mem_live_objects gauge +process_runtime_go_mem_live_objects{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/runtime",otel_scope_version="0.45.0"} 10167 +# HELP db_sql_connection_closed_max_lifetime_total The total number of connections closed due to SetConnMaxLifetime +# TYPE db_sql_connection_closed_max_lifetime_total counter +db_sql_connection_closed_max_lifetime_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="github.com/XSAM/otelsql",otel_scope_version="0.26.0"} 0 +# HELP process_runtime_go_mem_heap_sys_bytes Bytes of heap memory obtained from the OS +# TYPE process_runtime_go_mem_heap_sys_bytes gauge +process_runtime_go_mem_heap_sys_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/runtime",otel_scope_version="0.45.0"} 7.798784e+06 +# HELP process_virtual_memory_max_bytes Maximum amount of virtual memory available in bytes. +# TYPE process_virtual_memory_max_bytes gauge +process_virtual_memory_max_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue"} 1.8446744073709552e+19 +# HELP process_cpu_seconds_total Total user and system CPU time spent in seconds. +# TYPE process_cpu_seconds_total counter +process_cpu_seconds_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue"} 0.13 +# HELP process_runtime_go_goroutines Number of goroutines that currently exist +# TYPE process_runtime_go_goroutines gauge +process_runtime_go_goroutines{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/runtime",otel_scope_version="0.45.0"} 40 +# HELP promhttp_metric_handler_requests_total Total number of scrapes by HTTP status code. +# TYPE promhttp_metric_handler_requests_total counter +promhttp_metric_handler_requests_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",code="200"} 0 +promhttp_metric_handler_requests_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",code="500"} 0 +promhttp_metric_handler_requests_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",code="503"} 0 +# HELP http_status_codes_total Number of returned HTTP status codes +# TYPE http_status_codes_total counter +http_status_codes_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",code="200",http_route="/health",otel_scope_name="gotrue",otel_scope_version=""} 1 +# HELP process_runtime_go_mem_heap_inuse_bytes Bytes in in-use spans +# TYPE process_runtime_go_mem_heap_inuse_bytes gauge +process_runtime_go_mem_heap_inuse_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/runtime",otel_scope_version="0.45.0"} 3.4816e+06 +# HELP go_memstats_heap_objects Number of allocated objects. +# TYPE go_memstats_heap_objects gauge +go_memstats_heap_objects{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue"} 9763 +# HELP go_memstats_mspan_inuse_bytes Number of bytes in use by mspan structures. +# TYPE go_memstats_mspan_inuse_bytes gauge +go_memstats_mspan_inuse_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue"} 70880 +# HELP http_server_response_size_bytes_total Measures the size of HTTP response messages. +# TYPE http_server_response_size_bytes_total counter +http_server_response_size_bytes_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",http_method="GET",http_scheme="http",http_status_code="200",net_host_name="xdgggqomhgiilfjtepts.supabase.co",net_protocol_name="http",net_protocol_version="1.1",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp",otel_scope_version="0.51.0"} 107 +# HELP process_runtime_go_mem_lookups_total Number of pointer lookups performed by the runtime +# TYPE process_runtime_go_mem_lookups_total counter +process_runtime_go_mem_lookups_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/runtime",otel_scope_version="0.45.0"} 0 +# HELP db_sql_connection_closed_max_idle_time_total The total number of connections closed due to SetConnMaxIdleTime +# TYPE db_sql_connection_closed_max_idle_time_total counter +db_sql_connection_closed_max_idle_time_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="github.com/XSAM/otelsql",otel_scope_version="0.26.0"} 0 +# HELP db_sql_connection_open The number of established connections both in use and idle +# TYPE db_sql_connection_open gauge +db_sql_connection_open{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="github.com/XSAM/otelsql",otel_scope_version="0.26.0",status="idle"} 0 +db_sql_connection_open{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="github.com/XSAM/otelsql",otel_scope_version="0.26.0",status="inuse"} 0 +# HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles. +# TYPE go_gc_duration_seconds summary +go_gc_duration_seconds{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",quantile="0"} 4.5579e-05 +go_gc_duration_seconds{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",quantile="0.25"} 5.4385e-05 +go_gc_duration_seconds{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",quantile="0.5"} 0.000106201 +go_gc_duration_seconds{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",quantile="0.75"} 0.001139404 +go_gc_duration_seconds{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",quantile="1"} 0.008502312 +go_gc_duration_seconds_sum{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue"} 0.019999787 +go_gc_duration_seconds_count{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue"} 20 +# HELP target_info Target metadata +# TYPE target_info gauge +target_info{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",service_name="unknown_service:auth",telemetry_sdk_language="go",telemetry_sdk_name="opentelemetry",telemetry_sdk_version="1.26.0"} 1 +# HELP http_server_request_size_bytes_total Measures the size of HTTP request messages. +# TYPE http_server_request_size_bytes_total counter +http_server_request_size_bytes_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",http_method="GET",http_scheme="http",http_status_code="200",net_host_name="xdgggqomhgiilfjtepts.supabase.co",net_protocol_name="http",net_protocol_version="1.1",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp",otel_scope_version="0.51.0"} 0 +# HELP process_runtime_go_gc_pause_total_ns_total Cumulative nanoseconds in GC stop-the-world pauses since the program started +# TYPE process_runtime_go_gc_pause_total_ns_total counter +process_runtime_go_gc_pause_total_ns_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/runtime",otel_scope_version="0.45.0"} 1.9999787e+07 +# HELP go_info Information about the Go environment. +# TYPE go_info gauge +go_info{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",version="go1.23.3"} 1 +# HELP go_memstats_last_gc_time_seconds Number of seconds since 1970 of last garbage collection. +# TYPE go_memstats_last_gc_time_seconds gauge +go_memstats_last_gc_time_seconds{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue"} 1.7332412644466076e+09 +# HELP go_memstats_heap_sys_bytes Number of heap bytes obtained from system. +# TYPE go_memstats_heap_sys_bytes gauge +go_memstats_heap_sys_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue"} 7.766016e+06 +# HELP go_memstats_stack_sys_bytes Number of bytes obtained from system for stack allocator. +# TYPE go_memstats_stack_sys_bytes gauge +go_memstats_stack_sys_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue"} 622592 +# HELP process_runtime_go_mem_heap_released_bytes Bytes of idle spans whose physical memory has been returned to the OS +# TYPE process_runtime_go_mem_heap_released_bytes gauge +process_runtime_go_mem_heap_released_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/runtime",otel_scope_version="0.45.0"} 4.13696e+06 +# HELP go_memstats_alloc_bytes Number of bytes allocated and still in use. +# TYPE go_memstats_alloc_bytes gauge +go_memstats_alloc_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue"} 1.839616e+06 +# HELP go_memstats_heap_released_bytes Number of heap bytes released to OS. +# TYPE go_memstats_heap_released_bytes gauge +go_memstats_heap_released_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue"} 4.13696e+06 +# HELP process_virtual_memory_bytes Virtual memory size in bytes. +# TYPE process_virtual_memory_bytes gauge +process_virtual_memory_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue"} 1.28167936e+09 +# HELP go_memstats_next_gc_bytes Number of heap bytes when next garbage collection will take place. +# TYPE go_memstats_next_gc_bytes gauge +go_memstats_next_gc_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue"} 4.194304e+06 +# HELP process_runtime_go_cgo_calls Number of cgo calls made by the current process +# TYPE process_runtime_go_cgo_calls gauge +process_runtime_go_cgo_calls{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/runtime",otel_scope_version="0.45.0"} 0 +# HELP process_start_time_seconds Start time of the process since unix epoch in seconds. +# TYPE process_start_time_seconds gauge +process_start_time_seconds{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue"} 1.73323901352e+09 +# HELP runtime_uptime_milliseconds_total Milliseconds since application was initialized +# TYPE runtime_uptime_milliseconds_total counter +runtime_uptime_milliseconds_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/runtime",otel_scope_version="0.45.0"} 2.250715e+06 +# HELP go_threads Number of OS threads created. +# TYPE go_threads gauge +go_threads{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue"} 8 +# HELP http_server_duration_milliseconds Measures the duration of inbound HTTP requests. +# TYPE http_server_duration_milliseconds histogram +http_server_duration_milliseconds_bucket{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",http_method="GET",http_scheme="http",http_status_code="200",net_host_name="xdgggqomhgiilfjtepts.supabase.co",net_protocol_name="http",net_protocol_version="1.1",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp",otel_scope_version="0.51.0",le="0"} 0 +http_server_duration_milliseconds_bucket{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",http_method="GET",http_scheme="http",http_status_code="200",net_host_name="xdgggqomhgiilfjtepts.supabase.co",net_protocol_name="http",net_protocol_version="1.1",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp",otel_scope_version="0.51.0",le="5"} 0 +http_server_duration_milliseconds_bucket{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",http_method="GET",http_scheme="http",http_status_code="200",net_host_name="xdgggqomhgiilfjtepts.supabase.co",net_protocol_name="http",net_protocol_version="1.1",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp",otel_scope_version="0.51.0",le="10"} 0 +http_server_duration_milliseconds_bucket{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",http_method="GET",http_scheme="http",http_status_code="200",net_host_name="xdgggqomhgiilfjtepts.supabase.co",net_protocol_name="http",net_protocol_version="1.1",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp",otel_scope_version="0.51.0",le="25"} 1 +http_server_duration_milliseconds_bucket{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",http_method="GET",http_scheme="http",http_status_code="200",net_host_name="xdgggqomhgiilfjtepts.supabase.co",net_protocol_name="http",net_protocol_version="1.1",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp",otel_scope_version="0.51.0",le="50"} 1 +http_server_duration_milliseconds_bucket{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",http_method="GET",http_scheme="http",http_status_code="200",net_host_name="xdgggqomhgiilfjtepts.supabase.co",net_protocol_name="http",net_protocol_version="1.1",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp",otel_scope_version="0.51.0",le="75"} 1 +http_server_duration_milliseconds_bucket{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",http_method="GET",http_scheme="http",http_status_code="200",net_host_name="xdgggqomhgiilfjtepts.supabase.co",net_protocol_name="http",net_protocol_version="1.1",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp",otel_scope_version="0.51.0",le="100"} 1 +http_server_duration_milliseconds_bucket{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",http_method="GET",http_scheme="http",http_status_code="200",net_host_name="xdgggqomhgiilfjtepts.supabase.co",net_protocol_name="http",net_protocol_version="1.1",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp",otel_scope_version="0.51.0",le="250"} 1 +http_server_duration_milliseconds_bucket{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",http_method="GET",http_scheme="http",http_status_code="200",net_host_name="xdgggqomhgiilfjtepts.supabase.co",net_protocol_name="http",net_protocol_version="1.1",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp",otel_scope_version="0.51.0",le="500"} 1 +http_server_duration_milliseconds_bucket{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",http_method="GET",http_scheme="http",http_status_code="200",net_host_name="xdgggqomhgiilfjtepts.supabase.co",net_protocol_name="http",net_protocol_version="1.1",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp",otel_scope_version="0.51.0",le="750"} 1 +http_server_duration_milliseconds_bucket{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",http_method="GET",http_scheme="http",http_status_code="200",net_host_name="xdgggqomhgiilfjtepts.supabase.co",net_protocol_name="http",net_protocol_version="1.1",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp",otel_scope_version="0.51.0",le="1000"} 1 +http_server_duration_milliseconds_bucket{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",http_method="GET",http_scheme="http",http_status_code="200",net_host_name="xdgggqomhgiilfjtepts.supabase.co",net_protocol_name="http",net_protocol_version="1.1",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp",otel_scope_version="0.51.0",le="2500"} 1 +http_server_duration_milliseconds_bucket{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",http_method="GET",http_scheme="http",http_status_code="200",net_host_name="xdgggqomhgiilfjtepts.supabase.co",net_protocol_name="http",net_protocol_version="1.1",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp",otel_scope_version="0.51.0",le="5000"} 1 +http_server_duration_milliseconds_bucket{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",http_method="GET",http_scheme="http",http_status_code="200",net_host_name="xdgggqomhgiilfjtepts.supabase.co",net_protocol_name="http",net_protocol_version="1.1",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp",otel_scope_version="0.51.0",le="7500"} 1 +http_server_duration_milliseconds_bucket{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",http_method="GET",http_scheme="http",http_status_code="200",net_host_name="xdgggqomhgiilfjtepts.supabase.co",net_protocol_name="http",net_protocol_version="1.1",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp",otel_scope_version="0.51.0",le="10000"} 1 +http_server_duration_milliseconds_bucket{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",http_method="GET",http_scheme="http",http_status_code="200",net_host_name="xdgggqomhgiilfjtepts.supabase.co",net_protocol_name="http",net_protocol_version="1.1",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp",otel_scope_version="0.51.0",le="+Inf"} 1 +http_server_duration_milliseconds_sum{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",http_method="GET",http_scheme="http",http_status_code="200",net_host_name="xdgggqomhgiilfjtepts.supabase.co",net_protocol_name="http",net_protocol_version="1.1",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp",otel_scope_version="0.51.0"} 18.807627 +http_server_duration_milliseconds_count{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",http_method="GET",http_scheme="http",http_status_code="200",net_host_name="xdgggqomhgiilfjtepts.supabase.co",net_protocol_name="http",net_protocol_version="1.1",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp",otel_scope_version="0.51.0"} 1 +# HELP process_resident_memory_bytes Resident memory size in bytes. +# TYPE process_resident_memory_bytes gauge +process_resident_memory_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue"} 1.0022912e+07 +# HELP db_sql_connection_wait_duration_milliseconds_total The total time blocked waiting for a new connection +# TYPE db_sql_connection_wait_duration_milliseconds_total counter +db_sql_connection_wait_duration_milliseconds_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="github.com/XSAM/otelsql",otel_scope_version="0.26.0"} 0 +# HELP db_sql_connection_wait_total The total number of connections waited for +# TYPE db_sql_connection_wait_total counter +db_sql_connection_wait_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="github.com/XSAM/otelsql",otel_scope_version="0.26.0"} 0 +# HELP gotrue_running Whether GoTrue is running (always 1) +# TYPE gotrue_running gauge +gotrue_running{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="gotrue",otel_scope_version=""} 1 +# HELP process_max_fds Maximum number of open file descriptors. +# TYPE process_max_fds gauge +process_max_fds{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue"} 524288 +# HELP process_runtime_go_mem_heap_alloc_bytes Bytes of allocated heap objects +# TYPE process_runtime_go_mem_heap_alloc_bytes gauge +process_runtime_go_mem_heap_alloc_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/runtime",otel_scope_version="0.45.0"} 1.919776e+06 +# HELP go_memstats_alloc_bytes_total Total number of bytes allocated, even if freed. +# TYPE go_memstats_alloc_bytes_total counter +go_memstats_alloc_bytes_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue"} 9.748968e+06 +# HELP go_memstats_heap_inuse_bytes Number of heap bytes that are in use. +# TYPE go_memstats_heap_inuse_bytes gauge +go_memstats_heap_inuse_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue"} 3.4816e+06 +# HELP go_memstats_heap_idle_bytes Number of heap bytes waiting to be used. +# TYPE go_memstats_heap_idle_bytes gauge +go_memstats_heap_idle_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue"} 4.284416e+06 +# HELP go_memstats_mcache_inuse_bytes Number of bytes in use by mcache structures. +# TYPE go_memstats_mcache_inuse_bytes gauge +go_memstats_mcache_inuse_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue"} 2400 +# HELP process_runtime_go_gc_pause_ns Amount of nanoseconds in GC stop-the-world pauses +# TYPE process_runtime_go_gc_pause_ns histogram +process_runtime_go_gc_pause_ns_bucket{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/runtime",otel_scope_version="0.45.0",le="0"} 0 +process_runtime_go_gc_pause_ns_bucket{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/runtime",otel_scope_version="0.45.0",le="5"} 0 +process_runtime_go_gc_pause_ns_bucket{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/runtime",otel_scope_version="0.45.0",le="10"} 0 +process_runtime_go_gc_pause_ns_bucket{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/runtime",otel_scope_version="0.45.0",le="25"} 0 +process_runtime_go_gc_pause_ns_bucket{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/runtime",otel_scope_version="0.45.0",le="50"} 0 +process_runtime_go_gc_pause_ns_bucket{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/runtime",otel_scope_version="0.45.0",le="75"} 0 +process_runtime_go_gc_pause_ns_bucket{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/runtime",otel_scope_version="0.45.0",le="100"} 0 +process_runtime_go_gc_pause_ns_bucket{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/runtime",otel_scope_version="0.45.0",le="250"} 0 +process_runtime_go_gc_pause_ns_bucket{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/runtime",otel_scope_version="0.45.0",le="500"} 0 +process_runtime_go_gc_pause_ns_bucket{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/runtime",otel_scope_version="0.45.0",le="750"} 0 +process_runtime_go_gc_pause_ns_bucket{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/runtime",otel_scope_version="0.45.0",le="1000"} 0 +process_runtime_go_gc_pause_ns_bucket{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/runtime",otel_scope_version="0.45.0",le="2500"} 0 +process_runtime_go_gc_pause_ns_bucket{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/runtime",otel_scope_version="0.45.0",le="5000"} 0 +process_runtime_go_gc_pause_ns_bucket{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/runtime",otel_scope_version="0.45.0",le="7500"} 0 +process_runtime_go_gc_pause_ns_bucket{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/runtime",otel_scope_version="0.45.0",le="10000"} 0 +process_runtime_go_gc_pause_ns_bucket{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/runtime",otel_scope_version="0.45.0",le="+Inf"} 20 +process_runtime_go_gc_pause_ns_sum{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/runtime",otel_scope_version="0.45.0"} 1.9999787e+07 +process_runtime_go_gc_pause_ns_count{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/runtime",otel_scope_version="0.45.0"} 20 +# HELP process_runtime_go_mem_heap_idle_bytes Bytes in idle (unused) spans +# TYPE process_runtime_go_mem_heap_idle_bytes gauge +process_runtime_go_mem_heap_idle_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/runtime",otel_scope_version="0.45.0"} 4.317184e+06 +# HELP go_memstats_buck_hash_sys_bytes Number of bytes used by the profiling bucket hash table. +# TYPE go_memstats_buck_hash_sys_bytes gauge +go_memstats_buck_hash_sys_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue"} 1.452855e+06 +# HELP go_memstats_frees_total Total number of frees. +# TYPE go_memstats_frees_total counter +go_memstats_frees_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue"} 34970 +# HELP process_runtime_go_mem_heap_objects Number of allocated heap objects +# TYPE process_runtime_go_mem_heap_objects gauge +process_runtime_go_mem_heap_objects{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/runtime",otel_scope_version="0.45.0"} 10167 +# HELP otel_scope_info Instrumentation Scope metadata +# TYPE otel_scope_info gauge +otel_scope_info{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="github.com/XSAM/otelsql",otel_scope_version="0.26.0"} 1 +otel_scope_info{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp",otel_scope_version="0.51.0"} 1 +otel_scope_info{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/runtime",otel_scope_version="0.45.0"} 1 +otel_scope_info{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="gotrue",otel_scope_version=""} 1 +# HELP process_runtime_go_gc_count_total Number of completed garbage collection cycles +# TYPE process_runtime_go_gc_count_total counter +process_runtime_go_gc_count_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/runtime",otel_scope_version="0.45.0"} 20 +# HELP go_memstats_other_sys_bytes Number of bytes used for other system allocations. +# TYPE go_memstats_other_sys_bytes gauge +go_memstats_other_sys_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue"} 670129 +# HELP go_memstats_sys_bytes Number of bytes obtained from system. +# TYPE go_memstats_sys_bytes gauge +go_memstats_sys_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue"} 1.3718792e+07 +# HELP db_sql_connection_closed_max_idle_total The total number of connections closed due to SetMaxIdleConns +# TYPE db_sql_connection_closed_max_idle_total counter +db_sql_connection_closed_max_idle_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue",otel_scope_name="github.com/XSAM/otelsql",otel_scope_version="0.26.0"} 0 +# HELP go_memstats_heap_alloc_bytes Number of heap bytes allocated and still in use. +# TYPE go_memstats_heap_alloc_bytes gauge +go_memstats_heap_alloc_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue"} 1.839616e+06 +# HELP go_memstats_mcache_sys_bytes Number of bytes used for mcache structures obtained from system. +# TYPE go_memstats_mcache_sys_bytes gauge +go_memstats_mcache_sys_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue"} 15600 +# HELP go_memstats_gc_sys_bytes Number of bytes used for garbage collection system metadata. +# TYPE go_memstats_gc_sys_bytes gauge +go_memstats_gc_sys_bytes{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue"} 3.11e+06 +# HELP go_memstats_mallocs_total Total number of mallocs. +# TYPE go_memstats_mallocs_total counter +go_memstats_mallocs_total{supabase_project_ref="xdgggqomhgiilfjtepts",service_type="gotrue"} 44733 \ No newline at end of file diff --git a/supabase/tests/fixtures/storage_api_metrics.txt b/supabase/tests/fixtures/storage_api_metrics.txt new file mode 100644 index 0000000000000..171cba34e6309 --- /dev/null +++ b/supabase/tests/fixtures/storage_api_metrics.txt @@ -0,0 +1,274 @@ + +# HELP storage_api_upload_started Upload started +# TYPE storage_api_upload_started gauge + +# HELP storage_api_upload_success Successful uploads +# TYPE storage_api_upload_success gauge + +# HELP storage_api_database_query_performance Database query performance +# TYPE storage_api_database_query_performance histogram +storage_api_database_query_performance_bucket{le="0.005",name="ListBuckets"} 0 +storage_api_database_query_performance_bucket{le="0.01",name="ListBuckets"} 0 +storage_api_database_query_performance_bucket{le="0.025",name="ListBuckets"} 0 +storage_api_database_query_performance_bucket{le="0.05",name="ListBuckets"} 1 +storage_api_database_query_performance_bucket{le="0.1",name="ListBuckets"} 1 +storage_api_database_query_performance_bucket{le="0.25",name="ListBuckets"} 1 +storage_api_database_query_performance_bucket{le="0.5",name="ListBuckets"} 1 +storage_api_database_query_performance_bucket{le="1",name="ListBuckets"} 1 +storage_api_database_query_performance_bucket{le="2.5",name="ListBuckets"} 1 +storage_api_database_query_performance_bucket{le="5",name="ListBuckets"} 1 +storage_api_database_query_performance_bucket{le="10",name="ListBuckets"} 1 +storage_api_database_query_performance_bucket{le="+Inf",name="ListBuckets"} 1 +storage_api_database_query_performance_sum{name="ListBuckets"} 0.031662833 +storage_api_database_query_performance_count{name="ListBuckets"} 1 + +# HELP storage_api_queue_job_scheduled_time Time taken to schedule a job in the queue +# TYPE storage_api_queue_job_scheduled_time histogram + +# HELP storage_api_queue_job_scheduled Current number of pending messages in the queue +# TYPE storage_api_queue_job_scheduled gauge + +# HELP storage_api_queue_job_completed Current number of processed messages in the queue +# TYPE storage_api_queue_job_completed gauge + +# HELP storage_api_queue_job_retry_failed Current number of failed attempts messages in the queue +# TYPE storage_api_queue_job_retry_failed gauge + +# HELP storage_api_queue_job_error Current number of errored messages in the queue +# TYPE storage_api_queue_job_error gauge + +# HELP storage_api_s3_upload_part S3 upload part performance +# TYPE storage_api_s3_upload_part histogram + +# HELP storage_api_db_pool Number of database pools created +# TYPE storage_api_db_pool gauge +storage_api_db_pool{is_external="false"} 1 + +# HELP storage_api_db_connections Number of database connections +# TYPE storage_api_db_connections gauge +storage_api_db_connections{is_external="false"} 0 + +# HELP storage_api_http_pool_busy_sockets Number of busy sockets currently in use +# TYPE storage_api_http_pool_busy_sockets gauge +storage_api_http_pool_busy_sockets{name="s3_tus",region="stub",protocol="https"} 0 + +# HELP storage_api_http_pool_free_sockets Number of free sockets available for reuse +# TYPE storage_api_http_pool_free_sockets gauge +storage_api_http_pool_free_sockets{name="s3_tus",region="stub",protocol="https"} 0 + +# HELP storage_api_http_pool_requests Number of pending requests waiting for a socket +# TYPE storage_api_http_pool_requests gauge +storage_api_http_pool_requests{name="s3_tus",region="stub"} 0 + +# HELP storage_api_http_pool_errors Number of pending requests waiting for a socket +# TYPE storage_api_http_pool_errors gauge +storage_api_http_pool_errors{name="s3_tus",region="stub",type="socket_error",protocol="https"} 0 +storage_api_http_pool_errors{name="s3_tus",region="stub",type="timeout_socket_error",protocol="https"} 0 +storage_api_http_pool_errors{name="s3_tus",region="stub",type="create_socket_error",protocol="https"} 0 + +# HELP storage_api_http_request_duration_seconds request duration in seconds +# TYPE storage_api_http_request_duration_seconds histogram +storage_api_http_request_duration_seconds_bucket{le="0.005",method="GET",route="/bucket",status_code="2xx"} 0 +storage_api_http_request_duration_seconds_bucket{le="0.01",method="GET",route="/bucket",status_code="2xx"} 0 +storage_api_http_request_duration_seconds_bucket{le="0.025",method="GET",route="/bucket",status_code="2xx"} 0 +storage_api_http_request_duration_seconds_bucket{le="0.05",method="GET",route="/bucket",status_code="2xx"} 1 +storage_api_http_request_duration_seconds_bucket{le="0.1",method="GET",route="/bucket",status_code="2xx"} 1 +storage_api_http_request_duration_seconds_bucket{le="0.25",method="GET",route="/bucket",status_code="2xx"} 1 +storage_api_http_request_duration_seconds_bucket{le="0.5",method="GET",route="/bucket",status_code="2xx"} 1 +storage_api_http_request_duration_seconds_bucket{le="1",method="GET",route="/bucket",status_code="2xx"} 1 +storage_api_http_request_duration_seconds_bucket{le="2.5",method="GET",route="/bucket",status_code="2xx"} 1 +storage_api_http_request_duration_seconds_bucket{le="5",method="GET",route="/bucket",status_code="2xx"} 1 +storage_api_http_request_duration_seconds_bucket{le="10",method="GET",route="/bucket",status_code="2xx"} 1 +storage_api_http_request_duration_seconds_bucket{le="+Inf",method="GET",route="/bucket",status_code="2xx"} 1 +storage_api_http_request_duration_seconds_sum{method="GET",route="/bucket",status_code="2xx"} 0.043428125 +storage_api_http_request_duration_seconds_count{method="GET",route="/bucket",status_code="2xx"} 1 + +# HELP storage_api_http_request_summary_seconds request duration in seconds summary +# TYPE storage_api_http_request_summary_seconds summary +storage_api_http_request_summary_seconds{quantile="0.01",method="GET",route="/bucket",status_code="2xx"} 0.042737459 +storage_api_http_request_summary_seconds{quantile="0.05",method="GET",route="/bucket",status_code="2xx"} 0.042737459 +storage_api_http_request_summary_seconds{quantile="0.5",method="GET",route="/bucket",status_code="2xx"} 0.042737459 +storage_api_http_request_summary_seconds{quantile="0.9",method="GET",route="/bucket",status_code="2xx"} 0.042737459 +storage_api_http_request_summary_seconds{quantile="0.95",method="GET",route="/bucket",status_code="2xx"} 0.042737459 +storage_api_http_request_summary_seconds{quantile="0.99",method="GET",route="/bucket",status_code="2xx"} 0.042737459 +storage_api_http_request_summary_seconds{quantile="0.999",method="GET",route="/bucket",status_code="2xx"} 0.042737459 +storage_api_http_request_summary_seconds_sum{method="GET",route="/bucket",status_code="2xx"} 0.042737459 +storage_api_http_request_summary_seconds_count{method="GET",route="/bucket",status_code="2xx"} 1 + +# HELP storage_api_process_cpu_user_seconds_total Total user CPU time spent in seconds. +# TYPE storage_api_process_cpu_user_seconds_total counter +storage_api_process_cpu_user_seconds_total{region="stub"} 361.14234300000004 + +# HELP storage_api_process_cpu_system_seconds_total Total system CPU time spent in seconds. +# TYPE storage_api_process_cpu_system_seconds_total counter +storage_api_process_cpu_system_seconds_total{region="stub"} 143.664084 + +# HELP storage_api_process_cpu_seconds_total Total user and system CPU time spent in seconds. +# TYPE storage_api_process_cpu_seconds_total counter +storage_api_process_cpu_seconds_total{region="stub"} 504.80642700000004 + +# HELP storage_api_process_start_time_seconds Start time of the process since unix epoch in seconds. +# TYPE storage_api_process_start_time_seconds gauge +storage_api_process_start_time_seconds{region="stub"} 1733450910 + +# HELP storage_api_process_resident_memory_bytes Resident memory size in bytes. +# TYPE storage_api_process_resident_memory_bytes gauge +storage_api_process_resident_memory_bytes{region="stub"} 103641088 + +# HELP storage_api_process_virtual_memory_bytes Virtual memory size in bytes. +# TYPE storage_api_process_virtual_memory_bytes gauge +storage_api_process_virtual_memory_bytes{region="stub"} 4783030272 + +# HELP storage_api_process_heap_bytes Process heap size in bytes. +# TYPE storage_api_process_heap_bytes gauge +storage_api_process_heap_bytes{region="stub"} 132231168 + +# HELP storage_api_process_open_fds Number of open file descriptors. +# TYPE storage_api_process_open_fds gauge +storage_api_process_open_fds{region="stub"} 21 + +# HELP storage_api_process_max_fds Maximum number of open file descriptors. +# TYPE storage_api_process_max_fds gauge +storage_api_process_max_fds{region="stub"} 1048576 + +# HELP storage_api_nodejs_eventloop_lag_seconds Lag of event loop in seconds. +# TYPE storage_api_nodejs_eventloop_lag_seconds gauge +storage_api_nodejs_eventloop_lag_seconds{region="stub"} 0.0089925 + +# HELP storage_api_nodejs_eventloop_lag_min_seconds The minimum recorded event loop delay. +# TYPE storage_api_nodejs_eventloop_lag_min_seconds gauge +storage_api_nodejs_eventloop_lag_min_seconds{region="stub"} 0.000014848 + +# HELP storage_api_nodejs_eventloop_lag_max_seconds The maximum recorded event loop delay. +# TYPE storage_api_nodejs_eventloop_lag_max_seconds gauge +storage_api_nodejs_eventloop_lag_max_seconds{region="stub"} 1.198522367 + +# HELP storage_api_nodejs_eventloop_lag_mean_seconds The mean of the recorded event loop delays. +# TYPE storage_api_nodejs_eventloop_lag_mean_seconds gauge +storage_api_nodejs_eventloop_lag_mean_seconds{region="stub"} 0.011911191714967564 + +# HELP storage_api_nodejs_eventloop_lag_stddev_seconds The standard deviation of the recorded event loop delays. +# TYPE storage_api_nodejs_eventloop_lag_stddev_seconds gauge +storage_api_nodejs_eventloop_lag_stddev_seconds{region="stub"} 0.0035951748338251626 + +# HELP storage_api_nodejs_eventloop_lag_p50_seconds The 50th percentile of the recorded event loop delays. +# TYPE storage_api_nodejs_eventloop_lag_p50_seconds gauge +storage_api_nodejs_eventloop_lag_p50_seconds{region="stub"} 0.011395071 + +# HELP storage_api_nodejs_eventloop_lag_p90_seconds The 90th percentile of the recorded event loop delays. +# TYPE storage_api_nodejs_eventloop_lag_p90_seconds gauge +storage_api_nodejs_eventloop_lag_p90_seconds{region="stub"} 0.014335999 + +# HELP storage_api_nodejs_eventloop_lag_p99_seconds The 99th percentile of the recorded event loop delays. +# TYPE storage_api_nodejs_eventloop_lag_p99_seconds gauge +storage_api_nodejs_eventloop_lag_p99_seconds{region="stub"} 0.017448959 + +# HELP storage_api_nodejs_active_resources Number of active resources that are currently keeping the event loop alive, grouped by async resource type. +# TYPE storage_api_nodejs_active_resources gauge +storage_api_nodejs_active_resources{type="PipeWrap",region="stub"} 2 +storage_api_nodejs_active_resources{type="TCPSocketWrap",region="stub"} 2 +storage_api_nodejs_active_resources{type="TCPServerWrap",region="stub"} 1 +storage_api_nodejs_active_resources{type="Timeout",region="stub"} 2 +storage_api_nodejs_active_resources{type="Immediate",region="stub"} 1 + +# HELP storage_api_nodejs_active_resources_total Total number of active resources. +# TYPE storage_api_nodejs_active_resources_total gauge +storage_api_nodejs_active_resources_total{region="stub"} 8 + +# HELP storage_api_nodejs_active_handles Number of active libuv handles grouped by handle type. Every handle type is C++ class name. +# TYPE storage_api_nodejs_active_handles gauge +storage_api_nodejs_active_handles{type="Socket",region="stub"} 4 +storage_api_nodejs_active_handles{type="Server",region="stub"} 1 + +# HELP storage_api_nodejs_active_handles_total Total number of active handles. +# TYPE storage_api_nodejs_active_handles_total gauge +storage_api_nodejs_active_handles_total{region="stub"} 5 + +# HELP storage_api_nodejs_active_requests Number of active libuv requests grouped by request type. Every request type is C++ class name. +# TYPE storage_api_nodejs_active_requests gauge + +# HELP storage_api_nodejs_active_requests_total Total number of active requests. +# TYPE storage_api_nodejs_active_requests_total gauge +storage_api_nodejs_active_requests_total{region="stub"} 0 + +# HELP storage_api_nodejs_heap_size_total_bytes Process heap size from Node.js in bytes. +# TYPE storage_api_nodejs_heap_size_total_bytes gauge +storage_api_nodejs_heap_size_total_bytes{region="stub"} 51707904 + +# HELP storage_api_nodejs_heap_size_used_bytes Process heap size used from Node.js in bytes. +# TYPE storage_api_nodejs_heap_size_used_bytes gauge +storage_api_nodejs_heap_size_used_bytes{region="stub"} 43002696 + +# HELP storage_api_nodejs_external_memory_bytes Node.js external memory size in bytes. +# TYPE storage_api_nodejs_external_memory_bytes gauge +storage_api_nodejs_external_memory_bytes{region="stub"} 3568105 + +# HELP storage_api_nodejs_heap_space_size_total_bytes Process heap space size total from Node.js in bytes. +# TYPE storage_api_nodejs_heap_space_size_total_bytes gauge +storage_api_nodejs_heap_space_size_total_bytes{space="read_only",region="stub"} 0 +storage_api_nodejs_heap_space_size_total_bytes{space="new",region="stub"} 1048576 +storage_api_nodejs_heap_space_size_total_bytes{space="old",region="stub"} 44597248 +storage_api_nodejs_heap_space_size_total_bytes{space="code",region="stub"} 3670016 +storage_api_nodejs_heap_space_size_total_bytes{space="shared",region="stub"} 0 +storage_api_nodejs_heap_space_size_total_bytes{space="new_large_object",region="stub"} 0 +storage_api_nodejs_heap_space_size_total_bytes{space="large_object",region="stub"} 2220032 +storage_api_nodejs_heap_space_size_total_bytes{space="code_large_object",region="stub"} 172032 +storage_api_nodejs_heap_space_size_total_bytes{space="shared_large_object",region="stub"} 0 + +# HELP storage_api_nodejs_heap_space_size_used_bytes Process heap space size used from Node.js in bytes. +# TYPE storage_api_nodejs_heap_space_size_used_bytes gauge +storage_api_nodejs_heap_space_size_used_bytes{space="read_only",region="stub"} 0 +storage_api_nodejs_heap_space_size_used_bytes{space="new",region="stub"} 310136 +storage_api_nodejs_heap_space_size_used_bytes{space="old",region="stub"} 37172576 +storage_api_nodejs_heap_space_size_used_bytes{space="code",region="stub"} 3194320 +storage_api_nodejs_heap_space_size_used_bytes{space="shared",region="stub"} 0 +storage_api_nodejs_heap_space_size_used_bytes{space="new_large_object",region="stub"} 0 +storage_api_nodejs_heap_space_size_used_bytes{space="large_object",region="stub"} 2186264 +storage_api_nodejs_heap_space_size_used_bytes{space="code_large_object",region="stub"} 155296 +storage_api_nodejs_heap_space_size_used_bytes{space="shared_large_object",region="stub"} 0 + +# HELP storage_api_nodejs_heap_space_size_available_bytes Process heap space size available from Node.js in bytes. +# TYPE storage_api_nodejs_heap_space_size_available_bytes gauge +storage_api_nodejs_heap_space_size_available_bytes{space="read_only",region="stub"} 0 +storage_api_nodejs_heap_space_size_available_bytes{space="new",region="stub"} 720744 +storage_api_nodejs_heap_space_size_available_bytes{space="old",region="stub"} 6558624 +storage_api_nodejs_heap_space_size_available_bytes{space="code",region="stub"} 246096 +storage_api_nodejs_heap_space_size_available_bytes{space="shared",region="stub"} 0 +storage_api_nodejs_heap_space_size_available_bytes{space="new_large_object",region="stub"} 1048576 +storage_api_nodejs_heap_space_size_available_bytes{space="large_object",region="stub"} 0 +storage_api_nodejs_heap_space_size_available_bytes{space="code_large_object",region="stub"} 0 +storage_api_nodejs_heap_space_size_available_bytes{space="shared_large_object",region="stub"} 0 + +# HELP storage_api_nodejs_version_info Node.js version info. +# TYPE storage_api_nodejs_version_info gauge +storage_api_nodejs_version_info{version="v20.18.0",major="20",minor="18",patch="0",region="stub"} 1 + +# HELP storage_api_nodejs_gc_duration_seconds Garbage collection duration by kind, one of major, minor, incremental or weakcb. +# TYPE storage_api_nodejs_gc_duration_seconds histogram +storage_api_nodejs_gc_duration_seconds_bucket{le="0.001",kind="minor",region="stub"} 544 +storage_api_nodejs_gc_duration_seconds_bucket{le="0.01",kind="minor",region="stub"} 1002 +storage_api_nodejs_gc_duration_seconds_bucket{le="0.1",kind="minor",region="stub"} 1006 +storage_api_nodejs_gc_duration_seconds_bucket{le="1",kind="minor",region="stub"} 1006 +storage_api_nodejs_gc_duration_seconds_bucket{le="2",kind="minor",region="stub"} 1006 +storage_api_nodejs_gc_duration_seconds_bucket{le="5",kind="minor",region="stub"} 1006 +storage_api_nodejs_gc_duration_seconds_bucket{le="+Inf",kind="minor",region="stub"} 1006 +storage_api_nodejs_gc_duration_seconds_sum{kind="minor",region="stub"} 1.4403644915223157 +storage_api_nodejs_gc_duration_seconds_count{kind="minor",region="stub"} 1006 +storage_api_nodejs_gc_duration_seconds_bucket{le="0.001",kind="incremental",region="stub"} 4 +storage_api_nodejs_gc_duration_seconds_bucket{le="0.01",kind="incremental",region="stub"} 8 +storage_api_nodejs_gc_duration_seconds_bucket{le="0.1",kind="incremental",region="stub"} 12 +storage_api_nodejs_gc_duration_seconds_bucket{le="1",kind="incremental",region="stub"} 12 +storage_api_nodejs_gc_duration_seconds_bucket{le="2",kind="incremental",region="stub"} 12 +storage_api_nodejs_gc_duration_seconds_bucket{le="5",kind="incremental",region="stub"} 12 +storage_api_nodejs_gc_duration_seconds_bucket{le="+Inf",kind="incremental",region="stub"} 12 +storage_api_nodejs_gc_duration_seconds_sum{kind="incremental",region="stub"} 0.07946879202127458 +storage_api_nodejs_gc_duration_seconds_count{kind="incremental",region="stub"} 12 +storage_api_nodejs_gc_duration_seconds_bucket{le="0.001",kind="major",region="stub"} 0 +storage_api_nodejs_gc_duration_seconds_bucket{le="0.01",kind="major",region="stub"} 10 +storage_api_nodejs_gc_duration_seconds_bucket{le="0.1",kind="major",region="stub"} 11 +storage_api_nodejs_gc_duration_seconds_bucket{le="1",kind="major",region="stub"} 11 +storage_api_nodejs_gc_duration_seconds_bucket{le="2",kind="major",region="stub"} 11 +storage_api_nodejs_gc_duration_seconds_bucket{le="5",kind="major",region="stub"} 11 +storage_api_nodejs_gc_duration_seconds_bucket{le="+Inf",kind="major",region="stub"} 11 +storage_api_nodejs_gc_duration_seconds_sum{kind="major",region="stub"} 0.04609945893287658 +storage_api_nodejs_gc_duration_seconds_count{kind="major",region="stub"} 11 \ No newline at end of file diff --git a/supabase/tests/test_e2e.py b/supabase/tests/test_e2e.py new file mode 100644 index 0000000000000..3357d5a6d148f --- /dev/null +++ b/supabase/tests/test_e2e.py @@ -0,0 +1,13 @@ +# (C) Datadog, Inc. 2024-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) +from datadog_checks.base.constants import ServiceCheck +from datadog_checks.dev.utils import assert_service_checks + + +def test_e2e_openmetrics_v2(dd_agent_check): + aggregator = dd_agent_check() + + aggregator.assert_service_check('supabase.openmetrics.health', ServiceCheck.OK, count=1) + aggregator.assert_service_check('supabase.storage_api.openmetrics.health', ServiceCheck.OK, count=1) + assert_service_checks(aggregator) diff --git a/supabase/tests/test_unit.py b/supabase/tests/test_unit.py new file mode 100644 index 0000000000000..774eec9646831 --- /dev/null +++ b/supabase/tests/test_unit.py @@ -0,0 +1,50 @@ +# (C) Datadog, Inc. 2024-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) +import pytest + +from datadog_checks.base.constants import ServiceCheck +from datadog_checks.dev.utils import get_metadata_metrics +from datadog_checks.supabase import SupabaseCheck + +from .common import ( + PRIVILEGED_METRICS, + PRIVILEGED_METRICS_INSTANCE, + PRIVILEGED_METRICS_NAMESPACE, + STORAGE_API_INSTANCE, + STORAGE_API_METRICS, + STORAGE_API_METRICS_NAMESPACE, + get_fixture_path, +) + + +@pytest.mark.parametrize( + 'namespace, instance, metrics, fixture_name,', + [ + (PRIVILEGED_METRICS_NAMESPACE, PRIVILEGED_METRICS_INSTANCE, PRIVILEGED_METRICS, 'privileged_metrics.txt'), + (STORAGE_API_METRICS_NAMESPACE, STORAGE_API_INSTANCE, STORAGE_API_METRICS, 'storage_api_metrics.txt'), + ], +) +def test_check_mock_supabase_openmetrics( + dd_run_check, instance, aggregator, fixture_name, metrics, mock_http_response, namespace +): + mock_http_response(file_path=get_fixture_path(fixture_name)) + check = SupabaseCheck('supabase', {}, [instance]) + dd_run_check(check) + + for metric in metrics: + aggregator.assert_metric(metric) + aggregator.assert_metric_has_tag(metric, 'test:test') + + aggregator.assert_all_metrics_covered() + aggregator.assert_metrics_using_metadata(get_metadata_metrics()) + aggregator.assert_service_check(f'{namespace}.openmetrics.health', ServiceCheck.OK) + + +def test_empty_instance(dd_run_check): + with pytest.raises( + Exception, + match='Must specify at least one of the following:`privileged_metrics_endpoint` or `storage_api_endpoint`.', + ): + check = SupabaseCheck('supabase', {}, [{}]) + dd_run_check(check) From 80f22d1ec8781245614be84d280001c3525eeb0c Mon Sep 17 00:00:00 2001 From: Kyle Neale Date: Thu, 26 Dec 2024 15:41:19 -0500 Subject: [PATCH 3/8] Use `time_elapsed` metric type for process start time and last GC time metrics (#19309) * Use time elapsed type for process start time metric * Add changelog * Fix another default go metric --- datadog_checks_base/changelog.d/19309.added | 1 + .../base/checks/openmetrics/v2/metrics.py | 11 +++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 datadog_checks_base/changelog.d/19309.added diff --git a/datadog_checks_base/changelog.d/19309.added b/datadog_checks_base/changelog.d/19309.added new file mode 100644 index 0000000000000..af08c0065b73d --- /dev/null +++ b/datadog_checks_base/changelog.d/19309.added @@ -0,0 +1 @@ +Use `time_elapsed` metric type for process start time and last GC time metrics \ No newline at end of file diff --git a/datadog_checks_base/datadog_checks/base/checks/openmetrics/v2/metrics.py b/datadog_checks_base/datadog_checks/base/checks/openmetrics/v2/metrics.py index 45dfe4d07361c..c26d0322297a7 100644 --- a/datadog_checks_base/datadog_checks/base/checks/openmetrics/v2/metrics.py +++ b/datadog_checks_base/datadog_checks/base/checks/openmetrics/v2/metrics.py @@ -1,6 +1,7 @@ DEFAULT_GO_METRICS = { 'go_gc_duration_seconds': 'go.gc.duration.seconds', 'go_goroutines': 'go.goroutines', + 'go_memstats_alloc_bytes': 'go.memstats.alloc_bytes', 'go_memstats_buck_hash_sys_bytes': 'go.memstats.buck_hash.sys_bytes', 'go_memstats_frees': 'go.memstats.frees', 'go_memstats_gc_cpu_fraction': 'go.memstats.gc.cpu_fraction', @@ -11,7 +12,10 @@ 'go_memstats_heap_objects': 'go.memstats.heap.objects', 'go_memstats_heap_released_bytes': 'go.memstats.heap.released_bytes', 'go_memstats_heap_sys_bytes': 'go.memstats.heap.sys_bytes', - 'go_memstats_last_gc_time_seconds': 'go.memstats.last_gc_time.seconds', + 'go_memstats_last_gc_time_seconds': { + 'name': 'go.memstats.last_gc_time_seconds', + 'type': 'time_elapsed', + }, 'go_memstats_lookups': 'go.memstats.lookups', 'go_memstats_mallocs': 'go.memstats.mallocs', 'go_memstats_mcache_inuse_bytes': 'go.memstats.mcache.inuse_bytes', @@ -28,7 +32,10 @@ 'process_max_fds': 'process.max_fds', 'process_open_fds': 'process.open_fds', 'process_resident_memory_bytes': 'process.resident_memory.bytes', - 'process_start_time_seconds': 'process.start_time.seconds', + 'process_start_time_seconds': { + 'name': 'process.start_time.seconds', + 'type': 'time_elapsed', + }, 'process_virtual_memory_bytes': 'process.virtual_memory.bytes', 'process_virtual_memory_max_bytes': 'process.virtual_memory.max_bytes', } From eadaa1c2a67c3fbdcc31d1960e66cf67fcae1c74 Mon Sep 17 00:00:00 2001 From: Kyle Neale Date: Thu, 26 Dec 2024 23:06:30 -0500 Subject: [PATCH 4/8] Make `go_memstats_alloc_bytes` type `native_dynamic` (#19315) * Make `go_memstats_alloc_bytes` type `native_dynamic` * Lint --- .../datadog_checks/base/checks/openmetrics/v2/metrics.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/datadog_checks_base/datadog_checks/base/checks/openmetrics/v2/metrics.py b/datadog_checks_base/datadog_checks/base/checks/openmetrics/v2/metrics.py index c26d0322297a7..71ece5169e100 100644 --- a/datadog_checks_base/datadog_checks/base/checks/openmetrics/v2/metrics.py +++ b/datadog_checks_base/datadog_checks/base/checks/openmetrics/v2/metrics.py @@ -1,7 +1,7 @@ DEFAULT_GO_METRICS = { 'go_gc_duration_seconds': 'go.gc.duration.seconds', 'go_goroutines': 'go.goroutines', - 'go_memstats_alloc_bytes': 'go.memstats.alloc_bytes', + 'go_memstats_alloc_bytes': {'name': 'go.memstats.alloc_bytes', 'type': 'native_dynamic'}, 'go_memstats_buck_hash_sys_bytes': 'go.memstats.buck_hash.sys_bytes', 'go_memstats_frees': 'go.memstats.frees', 'go_memstats_gc_cpu_fraction': 'go.memstats.gc.cpu_fraction', From 7a9e7251f834c22b1769a970d70a564d4fc184fc Mon Sep 17 00:00:00 2001 From: Kyle Neale Date: Thu, 26 Dec 2024 23:15:52 -0500 Subject: [PATCH 5/8] Add missing Go metric to metadata.csv (#19314) * Add missing Go metric to metadata.csv * Fixes --- supabase/metadata.csv | 2 ++ supabase/tests/common.py | 2 ++ 2 files changed, 4 insertions(+) diff --git a/supabase/metadata.csv b/supabase/metadata.csv index a89e4368777d1..3743e4ad09e3f 100644 --- a/supabase/metadata.csv +++ b/supabase/metadata.csv @@ -12,6 +12,8 @@ supabase.go.gc.duration.seconds.count,count,,,,,0,supabase,,, supabase.go.gc.duration.seconds.quantile,gauge,,,,,0,supabase,,, supabase.go.gc.duration.seconds.sum,count,,,,,0,supabase,,, supabase.go.goroutines,gauge,,,,,0,supabase,,, +supabase.go.memstats.alloc_bytes,gauge,,,,,0,supabase,,, +supabase.go.memstats.alloc_bytes.count,count,,,,,0,supabase,,, supabase.go.memstats.buck_hash.sys_bytes,gauge,,,,,0,supabase,,, supabase.go.memstats.frees.count,count,,,,,0,supabase,,, supabase.go.memstats.gc.sys_bytes,gauge,,,,,0,supabase,,, diff --git a/supabase/tests/common.py b/supabase/tests/common.py index e08dddcd90a6d..502578ef204bb 100644 --- a/supabase/tests/common.py +++ b/supabase/tests/common.py @@ -57,6 +57,8 @@ def get_fixture_path(filename): 'supabase.go.gc.duration.seconds.quantile', 'supabase.go.gc.duration.seconds.sum', 'supabase.go.goroutines', + 'supabase.go.memstats.alloc_bytes', + 'supabase.go.memstats.alloc_bytes.count', 'supabase.go.memstats.buck_hash.sys_bytes', 'supabase.go.memstats.frees.count', 'supabase.go.memstats.gc.sys_bytes', From a9a4ddbcfccab6ba3298d0f076f4c08820476f7c Mon Sep 17 00:00:00 2001 From: Steven Yuen Date: Fri, 27 Dec 2024 10:18:51 -0500 Subject: [PATCH 6/8] Sy/release all (#19317) * Sy/release new (#19316) * [Release] Bumped keda version to 1.0.0 * [Release] Bumped milvus version to 1.0.0 * [Release] Bumped quarkus version to 1.0.0 * [Release] Bumped supabase version to 1.0.0 * [Release] Update metadata --------- Co-authored-by: Kyle Neale * [Release] Bumped aerospike version to 4.0.1 * [Release] Bumped airflow version to 6.2.0 * [Release] Bumped cisco_aci version to 4.2.0 * [Release] Bumped datadog_checks_base version to 37.3.0 * [Release] Bumped datadog_cluster_agent version to 5.2.0 * [Release] Bumped dns_check version to 5.0.1 * [Release] Bumped mongo version to 8.3.1 * [Release] Bumped mysql version to 14.4.0 * [Release] Bumped postgres version to 22.4.0 * [Release] Bumped sqlserver version to 21.0.0 * [Release] Update metadata --------- Co-authored-by: Kyle Neale --- .in-toto/tag.ec45eb9d.link | 2 +- aerospike/CHANGELOG.md | 6 +++++ aerospike/changelog.d/18996.fixed | 1 - .../datadog_checks/aerospike/__about__.py | 2 +- airflow/CHANGELOG.md | 6 +++++ airflow/changelog.d/19278.added | 1 - airflow/datadog_checks/airflow/__about__.py | 2 +- cisco_aci/CHANGELOG.md | 10 ++++++++ cisco_aci/changelog.d/18675.added | 1 - cisco_aci/changelog.d/19204.fixed | 1 - .../datadog_checks/cisco_aci/__about__.py | 2 +- datadog_checks_base/CHANGELOG.md | 15 ++++++++++++ datadog_checks_base/changelog.d/18975.added | 1 - .../changelog.d/19179.security | 1 - datadog_checks_base/changelog.d/19197.fixed | 1 - datadog_checks_base/changelog.d/19309.added | 1 - .../datadog_checks/base/__about__.py | 2 +- datadog_cluster_agent/CHANGELOG.md | 6 +++++ datadog_cluster_agent/changelog.d/19229.added | 1 - .../datadog_cluster_agent/__about__.py | 2 +- dns_check/CHANGELOG.md | 6 +++++ dns_check/changelog.d/19276.fixed | 1 - .../datadog_checks/dns_check/__about__.py | 2 +- keda/CHANGELOG.md | 5 ++++ keda/changelog.d/19303.added | 1 - keda/datadog_checks/keda/__about__.py | 2 +- milvus/CHANGELOG.md | 5 ++++ milvus/changelog.d/19055.added | 1 - milvus/datadog_checks/milvus/__about__.py | 2 +- mongo/CHANGELOG.md | 6 +++++ mongo/changelog.d/19244.fixed | 1 - mongo/datadog_checks/mongo/__about__.py | 2 +- mysql/CHANGELOG.md | 6 +++++ mysql/changelog.d/19121.added | 1 - mysql/datadog_checks/mysql/__about__.py | 2 +- postgres/CHANGELOG.md | 10 ++++++++ postgres/changelog.d/19218.added | 1 - postgres/changelog.d/19271.fixed | 1 - postgres/datadog_checks/postgres/__about__.py | 2 +- quarkus/CHANGELOG.md | 5 ++++ quarkus/changelog.d/19196.added | 1 - quarkus/datadog_checks/quarkus/__about__.py | 2 +- requirements-agent-release.txt | 24 +++++++++++-------- sqlserver/CHANGELOG.md | 12 ++++++++++ sqlserver/changelog.d/19111.added | 1 - sqlserver/changelog.d/19189.changed | 1 - sqlserver/changelog.d/19266.added | 1 - sqlserver/changelog.d/19277.added | 1 - .../datadog_checks/sqlserver/__about__.py | 2 +- supabase/CHANGELOG.md | 5 ++++ supabase/changelog.d/19307.added | 1 - supabase/datadog_checks/supabase/__about__.py | 2 +- 52 files changed, 132 insertions(+), 47 deletions(-) delete mode 100644 aerospike/changelog.d/18996.fixed delete mode 100644 airflow/changelog.d/19278.added delete mode 100644 cisco_aci/changelog.d/18675.added delete mode 100644 cisco_aci/changelog.d/19204.fixed delete mode 100644 datadog_checks_base/changelog.d/18975.added delete mode 100644 datadog_checks_base/changelog.d/19179.security delete mode 100644 datadog_checks_base/changelog.d/19197.fixed delete mode 100644 datadog_checks_base/changelog.d/19309.added delete mode 100644 datadog_cluster_agent/changelog.d/19229.added delete mode 100644 dns_check/changelog.d/19276.fixed delete mode 100644 keda/changelog.d/19303.added delete mode 100644 milvus/changelog.d/19055.added delete mode 100644 mongo/changelog.d/19244.fixed delete mode 100644 mysql/changelog.d/19121.added delete mode 100644 postgres/changelog.d/19218.added delete mode 100644 postgres/changelog.d/19271.fixed delete mode 100644 quarkus/changelog.d/19196.added delete mode 100644 sqlserver/changelog.d/19111.added delete mode 100644 sqlserver/changelog.d/19189.changed delete mode 100644 sqlserver/changelog.d/19266.added delete mode 100644 sqlserver/changelog.d/19277.added delete mode 100644 supabase/changelog.d/19307.added diff --git a/.in-toto/tag.ec45eb9d.link b/.in-toto/tag.ec45eb9d.link index b5c31c81fd0f9..344bc830f1bd5 100644 --- a/.in-toto/tag.ec45eb9d.link +++ b/.in-toto/tag.ec45eb9d.link @@ -1 +1 @@ -{"signatures":[{"keyid":"ec45eb9dac9d6ba1bcd131314583c67851bebf0d","other_headers":"04000108001d162104ec45eb9dac9d6ba1bcd131314583c67851bebf0d05026734b1a9","signature":"7a83646a1c81788036cc4fa2520792c3c51ea9271e224f7c665954599d4cdae1d6c55d607bfd8e19cb8c82d4cab95bfc9278879de8e3ac1f003a96e61d5a22d3205e387302f39c40277f380cf1121984d324e9ffac2b2bfdee62ecf3b9ddbb75d9ad6be928da8c039af4e71afa8cac2e51e31e3e4c7de0fad940ba871cd4325ce193d610b2c3d40f55bf51415d9f09a5d88f283241ebf287e3bf23bd8b0d3c2e95364b15b373325faa9fd52711e0265df0f1a75d15b1febbe86b34b5cdf78b61979c96c6bb056096dbfe9276dfd40075fbed1a76cfe39ecc9e7206e7bfeb7e245febff612ae1128fa120f073b4331e440e86d49c7d95574ac286411a0955b6b2e67c6f27acc0dd229e4c3b8ad9246f745e291cb6f30686c6dfa6e6c8898a9702cbaf35b73bc561e6eb8a356d9fc198d010efadb3e7625240adee00c9f1eae08ec64d6c19a9c63560c38a29907547c18fc2daa71bf893c4f6cacc808d5158d4df95ce50170d7cdf5b9b879bd06bafd916b1a24a38b7bd9f2d3befd6ac94472f3bd404947a247a063c26857c94408c953812792177646bd16c5da3fd83320fc37929b8acf29eb3c833238d082769bcd722350bbb3f932e58c637996f746d69e7703df1966d113af43085df2421a7eae861d98bdbad2e62dd71fd1a5535cb487cdec24e690f88ff29362d6fceb0c0824e59e520312765ed2f5c6a0f7010356f7e83"}],"signed":{"_type":"link","byproducts":{},"command":[],"environment":{},"materials":{},"name":"tag","products":{"datadog_checks_dev/datadog_checks/__init__.py":{"sha256":"9a3c64b8b00c94da4b4f34618d803d3255808caf21b8afa9195c84b61da66b6a"},"datadog_checks_dev/datadog_checks/dev/__about__.py":{"sha256":"e3b4812d911cac31665dc8233eb63e2f5d85c38d8a7d6bc4179325e3fe060ef8"},"datadog_checks_dev/datadog_checks/dev/__init__.py":{"sha256":"a719d056d27f47df5fcd37b6f4d584d1e6a7cbccef33ae01da2520b19c7dd722"},"datadog_checks_dev/datadog_checks/dev/__main__.py":{"sha256":"0b1c4bcaa055bf74aabb2b821b4b1c26b0833439ab59d91193feb086d1627ac2"},"datadog_checks_dev/datadog_checks/dev/_env.py":{"sha256":"278a8a9d9890480717189a046f00ca9b95bb5972436ebc6ba42150d617463c8d"},"datadog_checks_dev/datadog_checks/dev/ci.py":{"sha256":"4f936a4d0e8ba8fb56731022100507fe6658f2daed5b31a0e9ea0070e84c7668"},"datadog_checks_dev/datadog_checks/dev/conditions.py":{"sha256":"aecd4c17f6dd95a4102d18193912178f7cc6bf71c7b7bbfb58a675403984120d"},"datadog_checks_dev/datadog_checks/dev/docker.py":{"sha256":"0fe8ddb666133783f9b20d2805d3109e7a9c4b64eaaf758ea90c512212695477"},"datadog_checks_dev/datadog_checks/dev/env.py":{"sha256":"8d90808a53ac87a0db9bad4c4babfd003ad116a84af507262f57ccfb7b694053"},"datadog_checks_dev/datadog_checks/dev/errors.py":{"sha256":"b048cb0dab6b7cab91e38ae0de73b8e167a62c03b940a7e679040b5a3eff8605"},"datadog_checks_dev/datadog_checks/dev/fs.py":{"sha256":"7fa0fe8d32e4a55354007212dd57500cc8f6a19aa8129962e846d66ea276975f"},"datadog_checks_dev/datadog_checks/dev/http.py":{"sha256":"7c7191d5d772f02a808f7c873da62d61bd47ca0efe292f9a757061ee6df6945e"},"datadog_checks_dev/datadog_checks/dev/jmx.py":{"sha256":"0c9fe850e36987cfc91711f37e26ca9e094880855293f26c58ae368d375976a4"},"datadog_checks_dev/datadog_checks/dev/kind.py":{"sha256":"91d8c59362af0acbf6f48f7d455e72e1b7257d25a89a5bd4a19e24047712487b"},"datadog_checks_dev/datadog_checks/dev/kube_port_forward.py":{"sha256":"39690a158ba1f82521e54a438a1502090a1a6d74539e21dbbab2bf6c2c02877f"},"datadog_checks_dev/datadog_checks/dev/plugin/__init__.py":{"sha256":"4c2d2aee209b36a7188df5396b304da429e2f0b01060e7d8e8500313749910f0"},"datadog_checks_dev/datadog_checks/dev/plugin/pytest.py":{"sha256":"b2f31f813309a8e04e2415a8577aa1aa5864d740878db22bbf4fd80644355b72"},"datadog_checks_dev/datadog_checks/dev/spec.py":{"sha256":"145c7b93d41da315b567f8dba92c07069ee0ddd67ef508d8b4540ca997bd3911"},"datadog_checks_dev/datadog_checks/dev/ssh_tunnel.py":{"sha256":"131c88d649ac11f70e81be3b047f56e816284bd5a2210ac14fb830db53baaa6c"},"datadog_checks_dev/datadog_checks/dev/structures.py":{"sha256":"0c660cab8cb5528ed495e9c213fca923648e6d22620f21fd94bfd89ce3f31004"},"datadog_checks_dev/datadog_checks/dev/subprocess.py":{"sha256":"3c1bd68f56d571b663ee79a3b6866696c49ebd9aba880202615ef6fd77b2d872"},"datadog_checks_dev/datadog_checks/dev/terraform.py":{"sha256":"49e80a404fb068f3fb9447c93735ed75238b134300136201a298cafd940b6c64"},"datadog_checks_dev/datadog_checks/dev/testing.py":{"sha256":"e9591c42cec41120723945352d5d00e356d068e71fd8e68c224b3cd8adcebd39"},"datadog_checks_dev/datadog_checks/dev/tooling/__init__.py":{"sha256":"4c2d2aee209b36a7188df5396b304da429e2f0b01060e7d8e8500313749910f0"},"datadog_checks_dev/datadog_checks/dev/tooling/__main__.py":{"sha256":"60b67815a138da81e4984c304402f61c4ed7282374e9e8cdfe8fca21200f57af"},"datadog_checks_dev/datadog_checks/dev/tooling/catalog_const.py":{"sha256":"22d1c5932d586df0e894eaf22b496871148cae968086c9239523417000c7e176"},"datadog_checks_dev/datadog_checks/dev/tooling/clean.py":{"sha256":"8411d7605bc7e0bdf56560e7cdf50b21132c1cb3d1d5cf5d4af47b5fb89267d7"},"datadog_checks_dev/datadog_checks/dev/tooling/cli.py":{"sha256":"333506143c67d50e491acdf6b666a768d794900b891b54d01972e1a546beea29"},"datadog_checks_dev/datadog_checks/dev/tooling/codeowners.py":{"sha256":"4395fc4b7cf59c749a85d567e53537c35283b2fb698a432ddfce0396bc3a4b09"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/__init__.py":{"sha256":"cd559ab9d0222c6566cbc40acec1d07e34b32d1e24f9a7a5c3b1315cda0d74d6"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/agent/__init__.py":{"sha256":"21f07a02f2dab8873d774e0c096945a5a871c9a74d898860c984a11528a1f13b"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/agent/requirements.py":{"sha256":"8aa8d2feac7f3ec9ac54d72508c32fb7c52e6d26b2f14173a14da90bb3cfe893"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/ci/__init__.py":{"sha256":"191a8d4d6140548f010dab64e178201c27cdce9ad85a5f76c1a1baba9151130c"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/ci/setup.py":{"sha256":"f645e34d547fe5935e7c0d3c19163fed712dd53e769bee71587c4d969bd2cc32"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/clean.py":{"sha256":"cd7fa0092ba01bc741a64dbb602ad956334b775338cc3f9ce9933dd95eac9ae3"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/config.py":{"sha256":"4633f9e5a47f51725add1440777526561bf165192fd1fd3d14315b78f6bf4f7b"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/console.py":{"sha256":"1366bc7a68a374c96246a2f8dab219ebad95c2b1239a691af721f95ebc737537"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/create.py":{"sha256":"f5e1024ba1840f7b93840dad77ef4d8e009a38d13f37e484b915bb6c5fc6dbca"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/meta/__init__.py":{"sha256":"7f89a95c9b5565479c9ecce8e2bc99edea02448afaaa73b216448025c9459078"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/meta/catalog.py":{"sha256":"77e30473cabd41c81d20d382552f9ae086d5ef07ed01f119f8e48fd257a9cff9"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/meta/changes.py":{"sha256":"e4eb0e99c569356e10c493112f0d4b562a120dbf7f79628f2579ea9359696a26"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/meta/create_commits.py":{"sha256":"f015f1ccddd7e0e86362c8d73dea3f9abd632ce1896dbdd6202b17d9828dde3f"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/meta/dashboard.py":{"sha256":"3998486b9c1d29fa7497347cf00e6892fa80212362fd7970d6e14e96d8a78dc9"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/meta/jmx.py":{"sha256":"689144e492c269efa8d99ec4cd8a8597ef40e58ec512f4900e55c44451dea4a0"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/meta/manifest.py":{"sha256":"81e4925ff5de3519ff16b841f3a946f399d929693ccb4174bf5e77a9385d7eb8"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/meta/prometheus.py":{"sha256":"77da687c3ed4f735c0fb585c404a8512707ae497afbca3a172d3db02cdc1380c"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/meta/scripts/__init__.py":{"sha256":"c28c912cf99522f2fefd97444a9ab5117881e76db6a0d095afafcae0b8c182bc"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/meta/scripts/github_user.py":{"sha256":"35148be0ada9603d66ac6fc333dfe938125f0844e52bd91b6153a42a4d9ecbf0"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/meta/scripts/metrics2md.py":{"sha256":"e1ee509547503f2939e2176df637d42285d94f361e7d45c5b44d6bca925aac91"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/meta/scripts/remove_labels.py":{"sha256":"ed595382817323bc09722c0bf39b5f8a96454ca0f848e35ad110a5b6a9eb92e7"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/meta/snmp/__init__.py":{"sha256":"b05b300236e8c7852bd02fae245ce8c905e4d7bcb2b0d6543366b030f460d97d"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/meta/snmp/constants.py":{"sha256":"91bc112010f6f9fd4e040e89421a2b97fb07060fc402b21bbac3a3d00fce38ae"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/meta/snmp/generate_profile.py":{"sha256":"97babd0c29a68d5a12b8785430ffdd8ffe3783399ebfe9f13f7ea0cbfe33a2b6"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/meta/snmp/generate_traps_db.py":{"sha256":"3608038e42af10351a03a3f2f76084861f7362075b82e945ec75f5b70e5c32e9"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/meta/snmp/translate_profile.py":{"sha256":"0ec4822a35d4f8011ca9c11f06ea04e57f74aa349f9f7788384e14f6ff8eb0df"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/meta/snmp/validate_mib_filenames.py":{"sha256":"235f3d225571a9957493698dae41149eeaeb0714df31fd7707161b1d8da5f503"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/meta/snmp/validate_snmp_profiles.py":{"sha256":"8562cefa771a52f86b4b90458fa0d0019997ccb4a9da85366e4de6201ba0cbbe"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/meta/snmp/validators/__init__.py":{"sha256":"083f2ce9f2d3e8104a83c7c94be9ab6562cb5c9294581b913992d5441e07b82a"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/meta/snmp/validators/profile_schema.json":{"sha256":"2bfde4d49c86e8c1906e2182f3a0be827f4f90b6cf42a156fe30c0c102735ae0"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/meta/snmp/validators/utils.py":{"sha256":"16659cd61d8dfa4fd09179c2bf12ecfa0e01f9d6dfdb58ec6030060655fd8018"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/meta/snmp/validators/validator.py":{"sha256":"f4f888a47370619a57a6eabc15162fc82644736bf8047db21e3a289d13b2cb60"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/meta/windows/__init__.py":{"sha256":"42adde34af2d619ba62aa4a20b345a413f66f6799b9cffa595a1d35ee77f84ec"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/meta/windows/pdh.py":{"sha256":"612b974d4b222f26f4b21665637ef0fefa0855f78bb3ff8ea5f08093249f0f72"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/release/__init__.py":{"sha256":"2f6c05d3a9dfea59350a775201a1f57de5f71c6cc5bcfd412a523481c15f29b9"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/release/build.py":{"sha256":"0e4f2bab40cb30f9c02d755bfa2c6943dce668e9291e9afa59b24cc05be1d235"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/release/changelog.py":{"sha256":"1d10448cbc88e73818e9a4d8691d72bd57e520e61c0786c83203855af3e053a2"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/release/make.py":{"sha256":"86ef70d6de290931a6aba63179bed92354eccd06970ef6708acc76b048160dd9"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/release/show/__init__.py":{"sha256":"76701cad3b42c9ad904ab8f92caeb26818cad3599818e45eb672e6147d6c6a1f"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/release/show/changes.py":{"sha256":"6005e6bb08fc14d0269c643df4d5d394c0425663b566983ba1aba792a121c671"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/release/show/ready.py":{"sha256":"bf6203afe8ad5a62f321d597a4b037bcfd20c56d9c0cc7a8811ee803d492e1f7"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/release/stats/__init__.py":{"sha256":"5b5187c36eb3953d3ef79a67ef28677078139b5f2849496f091176f682578a78"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/release/stats/common.py":{"sha256":"ea365d818ca5d160dff43a18fc5dec1c0ffeb4db8375784357cf56b0d075409e"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/release/stats/stats.py":{"sha256":"78a1ae027e8816a2f152f6054df1c6595524dc34c47274bcdc6b38a88983803f"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/release/tag.py":{"sha256":"fdf6a3498acaee4b9ff4ba5b96cba537064a91c33f8e4890f36ce6968f0bb611"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/release/upload.py":{"sha256":"32ba19a345693a5224f0b47bb428595dc222c6f2e80ee5ce55ca570a716e2717"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/run.py":{"sha256":"4562a57b1fec3719fdcd402b4e6fb60727997b3d65738dd51f8b058a84447f58"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/test.py":{"sha256":"7665c44e173fb39c57f628642a1602b75f6ee4be33ee3b7b6f69fd1b514baaae"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/validate/__init__.py":{"sha256":"5fc69ba42f0b93d144d18b24c4a764a3ffbff6168f04db6dd5b2d4746490b670"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/validate/agent_reqs.py":{"sha256":"326b3b8ff592970607afff39dc789ce5a8e87cce401c93466c8d3d182cd1ab1b"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/validate/agent_signature.py":{"sha256":"776028eca5f17fd76bddcefece677164e80a6f46c065f47adf746b8357577750"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/validate/all_validations.py":{"sha256":"e5bec12b3870c16aaf934c2e5d915e9d00ed6d8bbea70e90d7c0050e8ec36a2a"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/validate/codeowners.py":{"sha256":"b53816da23c5aa75b0847af340653e0ac508293775b3de8622f07af94f431252"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/validate/config.py":{"sha256":"be832f8e8bbf1ec6f416eb87a4dcda79acdfa0a86e6f34a29c00c9428bd2e818"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/validate/dashboards.py":{"sha256":"7dec95d45836e1ade04b4b8861fff9a788c68ddbcaa9731ba88fb419066f9b00"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/validate/dep.py":{"sha256":"5b1cd5770548b9033f0495416302dc1354605599df5b215ce22821f6c1077180"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/validate/eula.py":{"sha256":"be7a782a6ed082cfa3b392749e22c91fe5dc31e47a3df9e3969009d2b2f02a6f"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/validate/imports.py":{"sha256":"4a57ae1e1c2aa89409653524fffb14cf560c5fc007ba7e0adedb1bbe7c9e6182"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/validate/integration_style.py":{"sha256":"3361d7f7cc49c7071b79ea9584ae1328acf8a87e7e88bb2162fe274dc1fabb0a"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/validate/jmx_metrics.py":{"sha256":"191262b6666e4a8e353fa9becbead4c37fe651455be78b16ae18cd2f85478901"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/validate/license_headers.py":{"sha256":"2f106f2f63ec01f8a57324311ca16d06fbf8440fe4ac6ae67b44662da6e162ce"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/validate/licenses.py":{"sha256":"901dd1700a55ee95d714643c7465da18fc52dc740ff07003b483621131496d08"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/validate/models.py":{"sha256":"c1f28db5d42a284b6a308fca583104a7742128d44492216155f5da94e67d167b"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/validate/package.py":{"sha256":"489624b1a7c1c964f69068c0e93e876f96465d5be97fcc6353f16ab86609239f"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/validate/readmes.py":{"sha256":"063c457c317cd79941df231535d63246e9dbfe6f9e910f40e688897359b0928c"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/validate/saved_views.py":{"sha256":"699491a6f758c8bd051063c4c2edd096f5b2eadb7f10824664caffa86b7e284a"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/validate/service_checks.py":{"sha256":"5527f8ab8e94b02c3d87a48e432097f6e3a4ee1e417db244e3d72b8be6db61f0"},"datadog_checks_dev/datadog_checks/dev/tooling/commands/validate/typos.py":{"sha256":"71b1dcce3e92412249556efc50b78c5ae87d9f0b73f1d0f06c9375ac8fe3c8ab"},"datadog_checks_dev/datadog_checks/dev/tooling/config.py":{"sha256":"1522dd49cdd49cd808fe18fc55a94abbf3c57eca5012bae93c0e6cd381dc5d77"},"datadog_checks_dev/datadog_checks/dev/tooling/config_validator/__init__.py":{"sha256":"a37696bf2dcf872903fe1ed84f7b3adbc3b45b66291e2b3436542c495d4f234e"},"datadog_checks_dev/datadog_checks/dev/tooling/config_validator/config_block.py":{"sha256":"4eb448f403bee6396bc17bce6053897ef5a69bdcdff6ccfefeeb9519c5c8a14d"},"datadog_checks_dev/datadog_checks/dev/tooling/config_validator/utils.py":{"sha256":"2e88a21bcf38d3357aa68ab3a3bf688eddc796960be25c3b7952bde36fbb0697"},"datadog_checks_dev/datadog_checks/dev/tooling/config_validator/validator.py":{"sha256":"f2749d57ab97175ecf9626864e3414e361ab2332802d742f60d97c26a9828a7a"},"datadog_checks_dev/datadog_checks/dev/tooling/config_validator/validator_errors.py":{"sha256":"e3920ed0847a7537d45fddb5398e657c1742cee9c27cfaf453add2fc795a63fd"},"datadog_checks_dev/datadog_checks/dev/tooling/configuration/__init__.py":{"sha256":"7f40321b073a61d5d03139ebf0167051f11838ca7b6242332dabcbbb9bbe325e"},"datadog_checks_dev/datadog_checks/dev/tooling/configuration/constants.py":{"sha256":"69dc667a35940e6c488ed9f0197333b6b3e2765bdd1ca5a9bcf23266977a111d"},"datadog_checks_dev/datadog_checks/dev/tooling/configuration/consumers/__init__.py":{"sha256":"3fad58a28211e9fb13fcab3d29843e726d800c1c2202b87295eb423cfd206046"},"datadog_checks_dev/datadog_checks/dev/tooling/configuration/consumers/example.py":{"sha256":"86ff8fe1ecd7d0a8a0fbb3d053175ebadc713636fbbbcc528cfbfd8a8d6f0cd5"},"datadog_checks_dev/datadog_checks/dev/tooling/configuration/consumers/model/__init__.py":{"sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},"datadog_checks_dev/datadog_checks/dev/tooling/configuration/consumers/model/model_consumer.py":{"sha256":"af3adf329489175f6ab6f22710c60b4f2a0dd650250b3653ed032bb63d250696"},"datadog_checks_dev/datadog_checks/dev/tooling/configuration/consumers/model/model_file.py":{"sha256":"6dbb93d2c46ef27829eab53baa6adb87c9ae3a4e2dfe02733c45e2b1c7fbea45"},"datadog_checks_dev/datadog_checks/dev/tooling/configuration/consumers/model/model_info.py":{"sha256":"b90c7f6f112cc8c86813bea24d25fcc37bc11255cfb7695364cb87fecda0334b"},"datadog_checks_dev/datadog_checks/dev/tooling/configuration/consumers/openapi_document.py":{"sha256":"15c28390df75afa8eac070ac96fb73f443a1aedc2828119dd4d05546205906d8"},"datadog_checks_dev/datadog_checks/dev/tooling/configuration/core.py":{"sha256":"2580c9a8d48a6bbf00f2413ad65e689fbdc772f9a94ad1ab33ef7960d08d8da6"},"datadog_checks_dev/datadog_checks/dev/tooling/configuration/spec.py":{"sha256":"d166dd9667efca90028873ec6639732ec13da76829a795a191d922a611534ff7"},"datadog_checks_dev/datadog_checks/dev/tooling/configuration/template.py":{"sha256":"1b47dad5b7f1df41059ec35db383e8a844c295cf46327389fa478433f8b1f624"},"datadog_checks_dev/datadog_checks/dev/tooling/constants.py":{"sha256":"9be45796438d14d98c0c4b95e61616872cf18121f87f5a3c5a14e6073e67a8b8"},"datadog_checks_dev/datadog_checks/dev/tooling/create.py":{"sha256":"55d851ea04f86c8281b4a5e7c94c619c8d57e355542297bc5ce7fac1aa8606e8"},"datadog_checks_dev/datadog_checks/dev/tooling/datastructures.py":{"sha256":"58411715d64348e60f964fb58a55481e58a0859a33a75de5eaa86b64ade0bf58"},"datadog_checks_dev/datadog_checks/dev/tooling/dependencies.py":{"sha256":"5c93c0c716f8d11730ae12b87c8f59b945efbc260c7fadb352d649c5b3ab3f37"},"datadog_checks_dev/datadog_checks/dev/tooling/e2e/__init__.py":{"sha256":"041770d4abd7a492615e0a23c062ffd3748f7f26678f2abc42450caf6ba7cd0a"},"datadog_checks_dev/datadog_checks/dev/tooling/e2e/agent.py":{"sha256":"7039c9dc9f04beb95bde3a244a6747fa5a5ce310495f776def606a021e38b017"},"datadog_checks_dev/datadog_checks/dev/tooling/e2e/config.py":{"sha256":"9e0903ce05e4352477233a49dd40d40ff66801fb1acb1c0fdc32b06509341a15"},"datadog_checks_dev/datadog_checks/dev/tooling/e2e/core.py":{"sha256":"1f810b8a4b0e9f6b6fb7811a2ee575a499cc2cba2563901d80ff2fdb50c47d81"},"datadog_checks_dev/datadog_checks/dev/tooling/e2e/docker.py":{"sha256":"2b0b70865768b3a7f636aa69470c3caac2c23a80c4c9ebf598799a6753eb2173"},"datadog_checks_dev/datadog_checks/dev/tooling/e2e/format.py":{"sha256":"70de3b669c59f3e52961e7251cc110e5e15b88f81a35b95479afa24f512acc18"},"datadog_checks_dev/datadog_checks/dev/tooling/e2e/local.py":{"sha256":"13050ed07abb86cf80db545104a3e23c3bb254b5f8ee6498643f27d74718952a"},"datadog_checks_dev/datadog_checks/dev/tooling/e2e/platform.py":{"sha256":"dfb3a670a0cc6e64c496f7cd6905650347d80b869630ad7aedab0a4dbbfc5f11"},"datadog_checks_dev/datadog_checks/dev/tooling/e2e/run.py":{"sha256":"fb2ce093a1f2e473e000623f4cc2bc51b8dd95f6407c8ecc0bb59c20503e7ea3"},"datadog_checks_dev/datadog_checks/dev/tooling/git.py":{"sha256":"8a430108786d2659caf8e5e22fb3f2f5dc3e41d2ea4461a0dcee79a817cfe93e"},"datadog_checks_dev/datadog_checks/dev/tooling/github.py":{"sha256":"213601f1ca2f8ef9e03ff3d5221de0b610218d65117b6f5cc8661d93b80ca398"},"datadog_checks_dev/datadog_checks/dev/tooling/license_headers.py":{"sha256":"90af3fc8a5118ec0f961ecbd2cb6d250bce0498a07f25d65dcb5803d99e6c5a5"},"datadog_checks_dev/datadog_checks/dev/tooling/manifest_utils.py":{"sha256":"7ad2c25ae433b1ce9286ceaa545fae7a199309f6d71a5b409a0083f349eafafc"},"datadog_checks_dev/datadog_checks/dev/tooling/manifest_validator/__init__.py":{"sha256":"afb09b643841291ec16223b06f073404a4b1ecf9d1432719f319a75153528b53"},"datadog_checks_dev/datadog_checks/dev/tooling/manifest_validator/common/__init__.py":{"sha256":"72811b8621e09b2c2584eef89feee2146cd5cb8e0e775c80c1af031152ebeba4"},"datadog_checks_dev/datadog_checks/dev/tooling/manifest_validator/common/validator.py":{"sha256":"ae4bdd4cbb3fa842dac3bcf95cb4fc05755a3422d36645434c5a5f5724770d17"},"datadog_checks_dev/datadog_checks/dev/tooling/manifest_validator/constants.py":{"sha256":"8ddfd4b9bf11df5930e9a8eb343d48cc8e92be019c2baf613ce4dec3860ad9cf"},"datadog_checks_dev/datadog_checks/dev/tooling/manifest_validator/v2/__init__.py":{"sha256":"72811b8621e09b2c2584eef89feee2146cd5cb8e0e775c80c1af031152ebeba4"},"datadog_checks_dev/datadog_checks/dev/tooling/manifest_validator/v2/migration.py":{"sha256":"83c6442192b8109b46b8fcdd66728a6a3f02ada36441cdbeb6bd6d41eff113b9"},"datadog_checks_dev/datadog_checks/dev/tooling/manifest_validator/v2/validator.py":{"sha256":"c4ec194d39fe469a1663c98e7c75b98b913de36ee426d11c90e7a774ecff92a4"},"datadog_checks_dev/datadog_checks/dev/tooling/release.py":{"sha256":"596c82ede4a4ff577e48b93371c8adf763c0eeff4af81fcd61d3a15676190e53"},"datadog_checks_dev/datadog_checks/dev/tooling/signing.py":{"sha256":"8c70be46d3e4a14191abe91bbcf080cc2066f8117f1c1b78fff5031053b72c85"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/configuration/ad_identifiers.yaml":{"sha256":"debad2c0564fceaa7bc21481ce43ba4d1309a769ac8fb67e65c707a6b9e49f42"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/configuration/common/perf_counters.yaml":{"sha256":"9001b82611b1107c4014161991967e21eb725b251abcb50965c80ca9255b313c"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/configuration/init_config.yaml":{"sha256":"0b03d07105545af963c8e1d332236612961de12ebc473a917dbfc29d8ec3198b"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/configuration/init_config/db.yaml":{"sha256":"341c52cdd3d44c7540107ee791b6cd0be7f225143a57c930cf33ba87b7e24d1f"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/configuration/init_config/default.yaml":{"sha256":"d1d899a235b713e1dc277e4e149f03b9caaf3a657c2900776d02f1a5ca54b5c6"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/configuration/init_config/http.yaml":{"sha256":"b0d3492b6ed3eafa40a5cf23bd9e6a8e4074960e060f7733da4f11b0bc75894f"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/configuration/init_config/jmx.yaml":{"sha256":"56996f66f2ec8ecbaef25cadad04743760f3d36711bdfbff337f61c4c4616e4f"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/configuration/init_config/openmetrics.yaml":{"sha256":"5bd455963b3ba5b4e8b1cd835630d06c91231aaa5c88bbba0870c35917ce6df4"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/configuration/init_config/openmetrics_legacy.yaml":{"sha256":"5bd455963b3ba5b4e8b1cd835630d06c91231aaa5c88bbba0870c35917ce6df4"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/configuration/init_config/openmetrics_legacy_base":{"sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/configuration/init_config/perf_counters.yaml":{"sha256":"b72ab4bf57cda61f33a759905fa6070482e21f174ffd7ca304c2b781d2458ee5"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/configuration/init_config/service.yaml":{"sha256":"9be396dbf8f78327572d7ee1c391f2145cf9140c8241b2788e15278b8208425c"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/configuration/init_config/tags.yaml":{"sha256":"70797d15cfd8c7310cbe428ea21b3717045fc933184431736ab8bcdf4e4773af"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/configuration/instances.yaml":{"sha256":"bab548f2d4f06a84e38c03e5ba71df6b5b4727a9c6fd9b10744d62b1324a3ea9"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/configuration/instances/all_integrations.yaml":{"sha256":"de9afd1055fb7e6402e226f9ab1bf51fb3a78d3deeb7eb2dd6e17af4dc3bc78e"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/configuration/instances/db.yaml":{"sha256":"a3d238a1d2d313ccc94f8ab95d077312103c89e369b0d444bb141ae97815aa66"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/configuration/instances/default.yaml":{"sha256":"ad2523157985ba4af6b02e3b040dac9fc6e1e9279e74d33593a84632296e149a"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/configuration/instances/global.yaml":{"sha256":"f2372b75408c2516c5d2cf805e9d66cbbba83b62774ebf95bc2a4d6459708413"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/configuration/instances/http.yaml":{"sha256":"6ae792c7aa0890ab7dbcd38781808a34871d72b83f3ce9de3d3db831c6dccc8a"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/configuration/instances/jmx.yaml":{"sha256":"6046c9eb0d2e7063ebdbc93012e69ba3c698ad5092b1c1d4b58217bd4539ea45"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/configuration/instances/openmetrics.yaml":{"sha256":"d92ef2fb83ea5073d463a3aa410b8549edb4ddbb2e5ea423c36f2cd4135eaf22"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/configuration/instances/openmetrics_legacy.yaml":{"sha256":"f0cc0ba9b5eac9450b9a3f5c96c480dc096badf94aab0bfbbbede5cf5c6f9229"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/configuration/instances/openmetrics_legacy_base.yaml":{"sha256":"7b67f8b59ca7f85488a838f0beed74831ee30f1847fad86be9e8ffde3bb7136e"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/configuration/instances/pdh_legacy.yaml":{"sha256":"3ea8930990f557d90527ef9a41b7f5c35ad203638cbeb67ef5e2fdc2aee25912"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/configuration/instances/perf_counters.yaml":{"sha256":"20666e2e25b311cc7c6c65355a918ff968c4e791506d74f625ac9fcfb1c0522c"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/configuration/instances/service.yaml":{"sha256":"a2a42e1b8d014caca43db48877828a0f889f2cc16847068862e0f4bd2decb033"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/configuration/instances/tags.yaml":{"sha256":"5ae1915ed8f262a3c0db6f554f9a7f5daf52b5705cb50b3c4c2e319692a4925b"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/configuration/instances/tls.yaml":{"sha256":"98f252624fb180d0087aa60760ef892670ee3fe53066f3ff1e472637bb96c3d4"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/configuration/logs.yaml":{"sha256":"1182fc46b7d01535900e3b7373eb99b5d51d899fc6a5b827ee81db8c8e54bb8d"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check/README.md":{"sha256":"05ae39533fd5b3774d9b63d34d96e5bed68d40a66f3868ee17ccde977916c640"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check/{check_name}/CHANGELOG.md":{"sha256":"cd08a7bcb971c3046e8cf9217f98c19c86e38032c558d8b8ec786c9536f9e9c4"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check/{check_name}/README.md":{"sha256":"981d74dd2b21b95dd207b2caae08d1dcc79d4cd8bfa0438e4c10f0ad17aeda63"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check/{check_name}/assets/configuration/spec.yaml":{"sha256":"2ace40aafc7e0b9f6440d50101b8cecc32ba00d0bc9820e99a2e8632be05170d"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check/{check_name}/assets/dashboards/{check_name}_overview.json":{"sha256":"7d5a3f4ecb4ed7c6d6efd236fb0bd94f31b0772472d9db02d4a063e759138222"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check/{check_name}/assets/service_checks.json":{"sha256":"37517e5f3dc66819f61f5a7bb8ace1921282415f10551d2defa5c3eb0985b570"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check/{check_name}/changelog.d/1.added":{"sha256":"38c1fb60f69cf5b525500782b5ac0eaf0b4b8f0fcf4fa6f8cde96d83c316e07c"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check/{check_name}/datadog_checks/__init__.py":{"sha256":"3a342b814bc9e33b34b99058154d75b092d7240e31df938fb73b90d39be0edf5"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check/{check_name}/datadog_checks/{check_name}/__about__.py":{"sha256":"49c83d52895bf69c2ffbf1a32d3c3491961018693f68413bf494c63bbbd59c17"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check/{check_name}/datadog_checks/{check_name}/__init__.py":{"sha256":"7afb749ce0829e4abed181098d56b8da0a07fbe5444ee8ed7037c04f04feca23"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check/{check_name}/datadog_checks/{check_name}/check.py":{"sha256":"defbe9c17509f34ca10ce5c16f501c17a71208475b2af6d9302f3cbd608bbcb7"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check/{check_name}/datadog_checks/{check_name}/config_models/__init__.py":{"sha256":"a380172194927e06060e6560bde84d4316decc8a7acb39fa4b909cf952e06852"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check/{check_name}/datadog_checks/{check_name}/config_models/defaults.py":{"sha256":"9072c1a8aa9ba1ac06242d21f76f4aac757d746978d1d49a9a440d45eda64103"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check/{check_name}/datadog_checks/{check_name}/config_models/instance.py":{"sha256":"13bd3f64d4e9f48771cc84fd9b9ece5d9f2eff5353b34900587381e81d1ab435"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check/{check_name}/datadog_checks/{check_name}/config_models/shared.py":{"sha256":"5c43d21e0178045706b3de56810b5be58a45ea3b65bedfc3beed3800819bb278"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check/{check_name}/datadog_checks/{check_name}/config_models/validators.py":{"sha256":"ff8691fdd4c4bc21e4feeab75b714040176265ffe25c6e056c521aec5c0299b5"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check/{check_name}/datadog_checks/{check_name}/data/conf.yaml.example":{"sha256":"5e0de7f83fac0dba09f081681c16e127fb4be027f08eac6166a102268d26efad"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check/{check_name}/hatch.toml":{"sha256":"fee3c389ba9967e7788481bfe72ae04b27079e59a9cd49de7b1411bb20b0d3d0"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check/{check_name}/images/.gitkeep":{"sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check/{check_name}/manifest.json":{"sha256":"7ae62710bdefefd6003b24c55620d5c1444f35bd508dbcb06c7a7e2b433a94d8"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check/{check_name}/metadata.csv":{"sha256":"6ee51511155f603e08403c3df5713cf44d2437dbb27ec063dcf7bec61509694b"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check/{check_name}/pyproject.toml":{"sha256":"9c7ba0aeae0110de4c9f13f051d44d2280566484714388bbbca428e7221b5b52"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check/{check_name}/tests/__init__.py":{"sha256":"d8dc47fd44c6ab1577c4fc677c41d029c4c6a9aac573ce844297b3fce71bb091"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check/{check_name}/tests/conftest.py":{"sha256":"288ab38141b5fc11c7cbcce1d5850b5c85a461969a73a181bd9057a1b2919cf4"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check/{check_name}/tests/test_unit.py":{"sha256":"9a3a0016b8305670142ae517f7a376f0181578249a6944925dd54b318e0fe347"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check_only/{check_name}/assets/configuration/spec.yaml":{"sha256":"2ace40aafc7e0b9f6440d50101b8cecc32ba00d0bc9820e99a2e8632be05170d"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check_only/{check_name}/assets/service_checks.json":{"sha256":"37517e5f3dc66819f61f5a7bb8ace1921282415f10551d2defa5c3eb0985b570"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check_only/{check_name}/changelog.d/1.added":{"sha256":"38c1fb60f69cf5b525500782b5ac0eaf0b4b8f0fcf4fa6f8cde96d83c316e07c"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check_only/{check_name}/datadog_checks/__init__.py":{"sha256":"3a342b814bc9e33b34b99058154d75b092d7240e31df938fb73b90d39be0edf5"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check_only/{check_name}/datadog_checks/{check_name}/__about__.py":{"sha256":"49c83d52895bf69c2ffbf1a32d3c3491961018693f68413bf494c63bbbd59c17"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check_only/{check_name}/datadog_checks/{check_name}/__init__.py":{"sha256":"7afb749ce0829e4abed181098d56b8da0a07fbe5444ee8ed7037c04f04feca23"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check_only/{check_name}/datadog_checks/{check_name}/check.py":{"sha256":"defbe9c17509f34ca10ce5c16f501c17a71208475b2af6d9302f3cbd608bbcb7"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check_only/{check_name}/datadog_checks/{check_name}/config_models/__init__.py":{"sha256":"a380172194927e06060e6560bde84d4316decc8a7acb39fa4b909cf952e06852"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check_only/{check_name}/datadog_checks/{check_name}/config_models/defaults.py":{"sha256":"9072c1a8aa9ba1ac06242d21f76f4aac757d746978d1d49a9a440d45eda64103"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check_only/{check_name}/datadog_checks/{check_name}/config_models/instance.py":{"sha256":"13bd3f64d4e9f48771cc84fd9b9ece5d9f2eff5353b34900587381e81d1ab435"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check_only/{check_name}/datadog_checks/{check_name}/config_models/shared.py":{"sha256":"5c43d21e0178045706b3de56810b5be58a45ea3b65bedfc3beed3800819bb278"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check_only/{check_name}/datadog_checks/{check_name}/config_models/validators.py":{"sha256":"ff8691fdd4c4bc21e4feeab75b714040176265ffe25c6e056c521aec5c0299b5"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check_only/{check_name}/datadog_checks/{check_name}/data/conf.yaml.example":{"sha256":"1c57a5f19076030f8fbd6a57bf7b1073f61e70a261614bb8ca984a50c85f0383"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check_only/{check_name}/hatch.toml":{"sha256":"45bcb4cd88549703f8dfedf4779ab85820267ba1eeef064a959ba7de31ce263c"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check_only/{check_name}/pyproject.toml":{"sha256":"37da6c7f7bc5c1bacafac16307a2276875546bd08f812b31ab3e3dd2001ebde0"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check_only/{check_name}/tests/__init__.py":{"sha256":"d8dc47fd44c6ab1577c4fc677c41d029c4c6a9aac573ce844297b3fce71bb091"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check_only/{check_name}/tests/conftest.py":{"sha256":"288ab38141b5fc11c7cbcce1d5850b5c85a461969a73a181bd9057a1b2919cf4"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/check_only/{check_name}/tests/test_unit.py":{"sha256":"9a3a0016b8305670142ae517f7a376f0181578249a6944925dd54b318e0fe347"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/jmx/{check_name}/CHANGELOG.md":{"sha256":"cd08a7bcb971c3046e8cf9217f98c19c86e38032c558d8b8ec786c9536f9e9c4"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/jmx/{check_name}/README.md":{"sha256":"c5ef038605890d7ba9a6448c328506dfc9855a5516459f167614543146ae1f05"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/jmx/{check_name}/assets/configuration/spec.yaml":{"sha256":"a7dd7aaa3a27ef53f689ea9e7bd135c97c7071896897a3fac925aec0866c7121"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/jmx/{check_name}/assets/dashboards/{check_name}_overview.json":{"sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/jmx/{check_name}/assets/service_checks.json":{"sha256":"37517e5f3dc66819f61f5a7bb8ace1921282415f10551d2defa5c3eb0985b570"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/jmx/{check_name}/changelog.d/1.added":{"sha256":"38c1fb60f69cf5b525500782b5ac0eaf0b4b8f0fcf4fa6f8cde96d83c316e07c"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/jmx/{check_name}/datadog_checks/__init__.py":{"sha256":"3a342b814bc9e33b34b99058154d75b092d7240e31df938fb73b90d39be0edf5"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/jmx/{check_name}/datadog_checks/{check_name}/__about__.py":{"sha256":"49c83d52895bf69c2ffbf1a32d3c3491961018693f68413bf494c63bbbd59c17"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/jmx/{check_name}/datadog_checks/{check_name}/__init__.py":{"sha256":"4a4f6dea91ffd477a50b09301f706382044f366efe4b3c41e86b039da7842e0a"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/jmx/{check_name}/datadog_checks/{check_name}/config_models/__init__.py":{"sha256":"c1e9bb781f20c5dfb6bdafdce5f13c46832e31a23f9fb0ccfec4a2ed83b97d04"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/jmx/{check_name}/datadog_checks/{check_name}/config_models/defaults.py":{"sha256":"96d1babba497ad906b332a2eabbe9178f5df0bc8651e63da2ed99000a0b17190"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/jmx/{check_name}/datadog_checks/{check_name}/config_models/instance.py":{"sha256":"279c7fc0f14b15f06a416338fc333f51ded1c10619d62dcda9c54c4747dc2e6a"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/jmx/{check_name}/datadog_checks/{check_name}/config_models/shared.py":{"sha256":"308f28e01943d2c15ddc9b9000695681b4664cc7d504c727b8a19c9d70165ea1"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/jmx/{check_name}/datadog_checks/{check_name}/config_models/validators.py":{"sha256":"d8dc47fd44c6ab1577c4fc677c41d029c4c6a9aac573ce844297b3fce71bb091"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/jmx/{check_name}/datadog_checks/{check_name}/data/conf.yaml.example":{"sha256":"479c850a145914012425917c62e26c75a4f5f95b99ef6ec0671183a9f821dc32"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/jmx/{check_name}/datadog_checks/{check_name}/data/metrics.yaml":{"sha256":"529823f85918da2a317d966266cef9fca8c26ed81134ee1bd5b338f649723e83"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/jmx/{check_name}/hatch.toml":{"sha256":"fee3c389ba9967e7788481bfe72ae04b27079e59a9cd49de7b1411bb20b0d3d0"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/jmx/{check_name}/images/.gitkeep":{"sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/jmx/{check_name}/manifest.json":{"sha256":"7d065580bb6f766a35dcabaa881e0d90e7f50ab6e662355178387082208389df"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/jmx/{check_name}/metadata.csv":{"sha256":"6ee51511155f603e08403c3df5713cf44d2437dbb27ec063dcf7bec61509694b"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/jmx/{check_name}/pyproject.toml":{"sha256":"9c7ba0aeae0110de4c9f13f051d44d2280566484714388bbbca428e7221b5b52"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/jmx/{check_name}/tests/__init__.py":{"sha256":"d8dc47fd44c6ab1577c4fc677c41d029c4c6a9aac573ce844297b3fce71bb091"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/jmx/{check_name}/tests/common.py":{"sha256":"7a9fddcbc85c2d0db1d40e126f4b6b632dab83dfd1e771de303d58b9c7468491"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/jmx/{check_name}/tests/conftest.py":{"sha256":"3d692efee3524ac1de5a7d116877b84f749674b5e95f0a5eff66d56d1687f860"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/jmx/{check_name}/tests/metrics.py":{"sha256":"aa3800824032efd81a9ec139accffbdb326d26389d7b9617251b6738169274fd"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/jmx/{check_name}/tests/test_e2e.py":{"sha256":"d52bb59384d89abfbd670e1c92149acbd1a6c21f9ce2209905c115ae253a7b00"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/logs/README.md":{"sha256":"b6c3d311af66922a1c2313c5f3dbbcdf46fbbe18ec7eacc56f9d13c9528f4d06"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/logs/{check_name}/CHANGELOG.md":{"sha256":"cd08a7bcb971c3046e8cf9217f98c19c86e38032c558d8b8ec786c9536f9e9c4"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/logs/{check_name}/README.md":{"sha256":"c142025004870f1db648289bdab2976b6beb160f47c28d941a603d9fd6b3d1bd"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/logs/{check_name}/assets/configuration/spec.yaml":{"sha256":"e678062aba11f1b6a03e2e56a99277e6112c2e06f3dbce0a097cf5cf6b0abc59"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/logs/{check_name}/assets/dashboards/{check_name}_overview.json":{"sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/logs/{check_name}/assets/service_checks.json":{"sha256":"37517e5f3dc66819f61f5a7bb8ace1921282415f10551d2defa5c3eb0985b570"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/logs/{check_name}/changelog.d/1.added":{"sha256":"38c1fb60f69cf5b525500782b5ac0eaf0b4b8f0fcf4fa6f8cde96d83c316e07c"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/logs/{check_name}/datadog_checks/__init__.py":{"sha256":"3a342b814bc9e33b34b99058154d75b092d7240e31df938fb73b90d39be0edf5"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/logs/{check_name}/datadog_checks/{check_name}/__about__.py":{"sha256":"49c83d52895bf69c2ffbf1a32d3c3491961018693f68413bf494c63bbbd59c17"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/logs/{check_name}/datadog_checks/{check_name}/__init__.py":{"sha256":"4a4f6dea91ffd477a50b09301f706382044f366efe4b3c41e86b039da7842e0a"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/logs/{check_name}/datadog_checks/{check_name}/data/conf.yaml.example":{"sha256":"4b30c4dc85fd460595889ebc1de22469b97b0ec0b43906d0d750e7af3cdd2aa3"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/logs/{check_name}/images/.gitkeep":{"sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/logs/{check_name}/manifest.json":{"sha256":"c35469fdaac57a792fd5a389651fccc437d5567288624d9f20bdd044256dcd13"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/logs/{check_name}/metadata.csv":{"sha256":"6ee51511155f603e08403c3df5713cf44d2437dbb27ec063dcf7bec61509694b"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/logs/{check_name}/pyproject.toml":{"sha256":"68eb27b4fa410355ccd2e5e0ba9fcc1c404481941a5743cc04b9296072e3291e"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/marketplace/IMAGES_README.md":{"sha256":"4eec6290559b12169131832997ddbd496cfe536708fde9b3ccd96879a7f298a1"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/marketplace/README.md":{"sha256":"d1afa7ae5595dd1c1ddf58528318ee82d06cca8a8e8b3c17ca236c2114f28c11"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/metrics_crawler/README.md":{"sha256":"06339a7e7c52457284412c4c280cf48c75f79afa83dbb2bb82756e7ae3561ca9"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/metrics_crawler/{check_name}/CHANGELOG.md":{"sha256":"a94d80ae88154fdce2f874cf02f2f1523ec9765020708c52c21c6182fc132f18"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/metrics_crawler/{check_name}/README.md":{"sha256":"c40ca8b60758af07470b173ec7780a98da754cceebcd650f56bda650e36eedf2"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/metrics_crawler/{check_name}/assets/dashboards/{check_name}_overview.json":{"sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/metrics_crawler/{check_name}/assets/service_checks.json":{"sha256":"37517e5f3dc66819f61f5a7bb8ace1921282415f10551d2defa5c3eb0985b570"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/metrics_crawler/{check_name}/images/.gitkeep":{"sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/metrics_crawler/{check_name}/manifest.json":{"sha256":"0bc9b3a1e3cf2c92f7a3f4478da2a1ab719be26ff48f35c09b3ee27e28aba987"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/metrics_crawler/{check_name}/metadata.csv":{"sha256":"6ee51511155f603e08403c3df5713cf44d2437dbb27ec063dcf7bec61509694b"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/snmp_tile/snmp_{check_name}/CHANGELOG.md":{"sha256":"a94d80ae88154fdce2f874cf02f2f1523ec9765020708c52c21c6182fc132f18"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/snmp_tile/snmp_{check_name}/README.md":{"sha256":"586fc1f0daf83cb1e523a4cfe654f2cb5c1ea1e62a6cbb2217c94528a03d86ba"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/snmp_tile/snmp_{check_name}/assets/service_checks.json":{"sha256":"37517e5f3dc66819f61f5a7bb8ace1921282415f10551d2defa5c3eb0985b570"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/snmp_tile/snmp_{check_name}/manifest.json":{"sha256":"9854a853bc050080597cf21059d8027c84849872d89bad091e7e33f7734ce064"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/tile/README.md":{"sha256":"b87b3a5b2eea807d8d4ea36fc8248b103a88e9e9457b31f23f26c5abe2ffb368"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/tile/{check_name}/CHANGELOG.md":{"sha256":"697b0270a62fc28c87e92cb9b0cda9b4ce448e919b3ea26d12d8331204e05f1b"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/tile/{check_name}/README.md":{"sha256":"f55b1ae108249609e86e6e80ec6292f55e5c6cb471472f189cb6cdbaebb18b63"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/tile/{check_name}/assets/dashboards/{check_name}_overview.json":{"sha256":"9c4f16ce9f369b6da6ce978b08d136e07e35827713259a6dcabea74408844d7d"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/tile/{check_name}/assets/service_checks.json":{"sha256":"37517e5f3dc66819f61f5a7bb8ace1921282415f10551d2defa5c3eb0985b570"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/tile/{check_name}/images/.gitkeep":{"sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/tile/{check_name}/manifest.json":{"sha256":"beb03fd2d4d54dbe04f2d31cfcaa88e3e4c348ccd51534c115212d8b53e1e17c"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/integration/tile/{check_name}/metadata.csv":{"sha256":"6ee51511155f603e08403c3df5713cf44d2437dbb27ec063dcf7bec61509694b"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/terraform/gke_config.tf":{"sha256":"29e482b800d5a8dad7bc0fc3f42212e2467ceecdf8601d6aca3d6ad30b9c541c"},"datadog_checks_dev/datadog_checks/dev/tooling/templates/terraform/providers.tf":{"sha256":"b99c6d5e4e07431b992580cd437044dd3cb3371b33766cd24497a7cbf16f032f"},"datadog_checks_dev/datadog_checks/dev/tooling/testing.py":{"sha256":"54e43171062fafa83d40898e3338ed38310ca05f80389352b0354149edb45ec0"},"datadog_checks_dev/datadog_checks/dev/tooling/trello.py":{"sha256":"c6b90bbcee84b183d0201456d9f5e04edca0b7872b7a01c58b7d14ccb386e203"},"datadog_checks_dev/datadog_checks/dev/tooling/utils.py":{"sha256":"e2f7c9ce071f20d6ab4abf63040fc617efdc42212485d5642be5f27a92534452"},"datadog_checks_dev/datadog_checks/dev/utils.py":{"sha256":"a487bae64c97d4c8dc57a1537a0589bde70aae9811c24ca2ebedfefc8f6aa7c1"},"datadog_checks_dev/datadog_checks/dev/warn.py":{"sha256":"6445be66a38a2fa46d36dd72b42ad40f7f730353815b33e7a48f0566da7c61fd"},"datadog_checks_dev/pyproject.toml":{"sha256":"6bb55524326daa96e1c5eaaff94d53fd076656d8bf9af07da6e8db21eb2d9dd8"}}}} \ No newline at end of file +{"signatures":[{"keyid":"ec45eb9dac9d6ba1bcd131314583c67851bebf0d","other_headers":"04000108001d162104ec45eb9dac9d6ba1bcd131314583c67851bebf0d0502676e2f4f","signature":"27342749ea632a201ebc922642593569f2630efe06400243864c9e72b7cc25d834894c5bc72ec36fa5d5e931fac2503d0267bd7b8817cc94868c5ddece03a90d99d5003aa424a930080cf1a5fb91f040046faec8eb52d0ec170448c02f3dcdc88a6a5e71532bf98dbc42b91a85317ec429d20499eaac51a2dd3cbd2985f58a6456c836465262bdd1e7c79b096fa254f5f1434ade1a59c67f888a6ae9a2fa2c29a4403f3ef0d1b3f19eb5bd3af264cbd88574e17fe9d3f434ad1f00898e9b3af0e2e9dfc2377280cd77d4fc28c9050c5497e6ae32bf0830abaee28d7c7a6cf978e174d0c2fe6138e97d9f058578c1c4a52eeb6f12b3420ae829ed257c066e8bd8fa0dfaf99bdb01e2ead8fadd421e3b0fac9d3bb10c5cee30a9af937d143e211588d467f673f32779f99c150ec77667413c0931bf339f6e21e95b425828f4e0edc05f580c552049a3e98c358649cd4bfa13d5c72016dfbf188fdf036cae1366074bbb3ae67d096cd960b63f50cfef8490d2639229cb0994ad2b3ac226dc1705798c23eb2fd1bf7d9d3431fcae8fd1f6a80d386ddde165f58a119bc64222676405b9fd69d01670449af337b78901976f638fa7c2c762b5a55decfc7047f87238f406b67751033214da6a549359cb9c74028f3087f728f51545ba42065e606dc928212cc65b224a60c794385e67f83dcc6174b5d61aeedb7125ad2bd6be44453467"}],"signed":{"_type":"link","byproducts":{},"command":[],"environment":{},"materials":{},"name":"tag","products":{"aerospike/datadog_checks/__init__.py":{"sha256":"cd19a5ddb9a3b462fb28e9ef2e5afbec744a6a439a252fbda3638f8e1839b61d"},"aerospike/datadog_checks/aerospike/__about__.py":{"sha256":"1ed16b008e3ac4d6225df8ea5e0e983d87f6240ecf8bbb929bc823190f3272a1"},"aerospike/datadog_checks/aerospike/__init__.py":{"sha256":"abc501ff519c0f918c105cbcc5eb130af5146d53d589a3e9ddc0fab4b675742e"},"aerospike/datadog_checks/aerospike/aerospike.py":{"sha256":"2baa1b7046f9ce33c8ce89b4dba385a12c5e207ba1d5015c95588e3e4b32a6ee"},"aerospike/datadog_checks/aerospike/check.py":{"sha256":"4776aedade59b4ee69dad9f68e30a474ecadb939f256f80865c25a4a54657657"},"aerospike/datadog_checks/aerospike/config_models/__init__.py":{"sha256":"c9cf5c66894430e7edbb00d00613b58ccfd38360f2fe490a23c17cf71ed294dc"},"aerospike/datadog_checks/aerospike/config_models/defaults.py":{"sha256":"a12b6ee5bc203a87803e6eca6508a938427c6e309e6f1f1cbb52ba74dd2f3822"},"aerospike/datadog_checks/aerospike/config_models/instance.py":{"sha256":"62ea4f7b512643ad271e895cd0395d1d4aca172d159dd07d810870b03a3fb125"},"aerospike/datadog_checks/aerospike/config_models/shared.py":{"sha256":"69cda184c99bdf48f89ca90f35a436d69ea2a44ad896a742a1d7169381459829"},"aerospike/datadog_checks/aerospike/config_models/validators.py":{"sha256":"ef421486e47d7264a37540eb6f738c4541767e156c48bc509e1e08bf6172b655"},"aerospike/datadog_checks/aerospike/data/conf.yaml.example":{"sha256":"b167d2472a4a8eedabae52cea8711408ea1b4ffeaf148f0223e09e7517eb0512"},"aerospike/datadog_checks/aerospike/metrics.py":{"sha256":"47a533d2cb3dc4a6e6c5d5f74733003e3e10671bf1e1961dbda5344ce892a252"},"aerospike/pyproject.toml":{"sha256":"f3ff9912d4c9573dd46e43542b0244824926b5ab10cc2319ab1f1dc8a5369f64"},"airflow/datadog_checks/__init__.py":{"sha256":"6db7d3f7eb9237e5b092df82dc2f4e1b8ddca27e7c0530bdf2b9f14c9a8e102e"},"airflow/datadog_checks/airflow/__about__.py":{"sha256":"94538ceae050ee5f94de08cea433967a708249bff1fc164178d8ab9af6543b11"},"airflow/datadog_checks/airflow/__init__.py":{"sha256":"d8c6d8337954ebb155f1397dc289143909b1cc7b69a4d09f0279023c37e9a0cd"},"airflow/datadog_checks/airflow/airflow.py":{"sha256":"c3a2a519017c9ab459a54173ae778ea22b8a195751516af6a79457e100c3ea8f"},"airflow/datadog_checks/airflow/config_models/__init__.py":{"sha256":"c9cf5c66894430e7edbb00d00613b58ccfd38360f2fe490a23c17cf71ed294dc"},"airflow/datadog_checks/airflow/config_models/defaults.py":{"sha256":"2f4e08b99751d02c13e4aa2c596c4d476a726d1e856b46e2f75be36c14dee5c1"},"airflow/datadog_checks/airflow/config_models/instance.py":{"sha256":"f8fe24155831548c85bd8374d18e41a3928e8bae0d6830e903200295d17e26b0"},"airflow/datadog_checks/airflow/config_models/shared.py":{"sha256":"6aeb47e93fb5c0a0ff0e0202bb3bb3cf1ae045eadb5749c34337df9abbf78c84"},"airflow/datadog_checks/airflow/config_models/validators.py":{"sha256":"0424fe17778b76e1b589b9564d0d543d1b71dba1edd6e5d71a7c528dddf68e0b"},"airflow/datadog_checks/airflow/data/conf.yaml.example":{"sha256":"2b2e8cb697d2f704e243939117dc11dba5c62763eb692de72564713cb4243fd4"},"airflow/pyproject.toml":{"sha256":"a15728c6bd8377fcce146aed6494879fa88b14c44e35837816eb86696231f813"},"cisco_aci/datadog_checks/__init__.py":{"sha256":"fe73dc8f45d35205d366455edc6e8c3a8b29870d773b6f103d5261e25f757b25"},"cisco_aci/datadog_checks/cisco_aci/__about__.py":{"sha256":"462c80d69cb82edd7a019811dd2aa582f00c1d4e0d83d05e43f11c1e5ba3aebf"},"cisco_aci/datadog_checks/cisco_aci/__init__.py":{"sha256":"b7f298bcabd603a6d18b1547b21717ca39dd286aa97f823a5f08ca0c6eed7b65"},"cisco_aci/datadog_checks/cisco_aci/aci_metrics.py":{"sha256":"5750051d58575470ee62f0f0f6c8664b668daa3ab9fa05a07366407cc08d5438"},"cisco_aci/datadog_checks/cisco_aci/api.py":{"sha256":"2f0cf491d4fb7738e125ce50e9e07fb6eeb1b1d36b27223afd9fe28353489ea9"},"cisco_aci/datadog_checks/cisco_aci/capacity.py":{"sha256":"29f4c792fc16f8fa3e92e709990e795050a6c767b800a84fe49a2c576d877e37"},"cisco_aci/datadog_checks/cisco_aci/cisco.py":{"sha256":"14f4d512fdf0daac340f7e981d99ccc8827bde1440469339088f89a6f7bd5d3c"},"cisco_aci/datadog_checks/cisco_aci/config_models/__init__.py":{"sha256":"c9cf5c66894430e7edbb00d00613b58ccfd38360f2fe490a23c17cf71ed294dc"},"cisco_aci/datadog_checks/cisco_aci/config_models/defaults.py":{"sha256":"91ca9460c5302c365329020d83266171dce9f636d74ee53470f73afd135d2ed4"},"cisco_aci/datadog_checks/cisco_aci/config_models/instance.py":{"sha256":"62b29f4619ad844a5733057afb34456d8cdd0947c51c8dfbe1f991bca06a4789"},"cisco_aci/datadog_checks/cisco_aci/config_models/shared.py":{"sha256":"6aeb47e93fb5c0a0ff0e0202bb3bb3cf1ae045eadb5749c34337df9abbf78c84"},"cisco_aci/datadog_checks/cisco_aci/config_models/validators.py":{"sha256":"0424fe17778b76e1b589b9564d0d543d1b71dba1edd6e5d71a7c528dddf68e0b"},"cisco_aci/datadog_checks/cisco_aci/data/conf.yaml.example":{"sha256":"d46fceda118af84a15f089547541221a52b7c508ddb9fd842500da188b864dd7"},"cisco_aci/datadog_checks/cisco_aci/exceptions.py":{"sha256":"e382eeb9265605558e2f99399647e768bc3fa37d690aeee9b3b32da3d0743237"},"cisco_aci/datadog_checks/cisco_aci/fabric.py":{"sha256":"1f4ca5f756a2f318eef68dabc1f62391958f8323222e0367206da22f94851752"},"cisco_aci/datadog_checks/cisco_aci/helpers.py":{"sha256":"b34774c5af56723015a1fcae43d9146d2593e9f46ae4473a6917b4f2b8b5d436"},"cisco_aci/datadog_checks/cisco_aci/models.py":{"sha256":"b0f365414a4ffdca33dcb36ed09aa589eaa28ab85fda3bc716ffec385bf59df1"},"cisco_aci/datadog_checks/cisco_aci/ndm.py":{"sha256":"ae9bdba9fd8046b2b9651e3968c7b026814ee9c3240926c632ccd8b962188d8d"},"cisco_aci/datadog_checks/cisco_aci/tags.py":{"sha256":"9397a338988ec85746ef7f266e9085e0131316e86bee1ea71beb298a69a873db"},"cisco_aci/datadog_checks/cisco_aci/tenant.py":{"sha256":"0220ef23f0be1d9a8eecae69e420e97aae4a9ff64012f7a647d8643d098a2872"},"cisco_aci/pyproject.toml":{"sha256":"f3020c48c1d1427cdc77dca17d0b8f004027d55f59ffcf79eedb487a489864e6"},"datadog_checks_base/datadog_checks/__init__.py":{"sha256":"9a3c64b8b00c94da4b4f34618d803d3255808caf21b8afa9195c84b61da66b6a"},"datadog_checks_base/datadog_checks/base/__about__.py":{"sha256":"411337fdbc098736fbb892e7d83b9c049f868af8d6ab243555063b4a3f12582f"},"datadog_checks_base/datadog_checks/base/__init__.py":{"sha256":"ad24c3a3afb6a7f457e88eb09ee5eb34c82569ab682d1c99153139c1b1d963cb"},"datadog_checks_base/datadog_checks/base/agent.py":{"sha256":"9d7f71fc16188b344a18d61f5eae73ed2d0567dc5c5ffc1ddadbb1a467b7ffc9"},"datadog_checks_base/datadog_checks/base/checks/__init__.py":{"sha256":"6b45aff8e774058500e39cf7ede54ebee81f95364c8a380648eb89aa7744dc35"},"datadog_checks_base/datadog_checks/base/checks/base.py":{"sha256":"4250c0ed4c676e2376a18e6c299e3385be61d52f6ab9ff41908335a3d01e7645"},"datadog_checks_base/datadog_checks/base/checks/kube_leader/__init__.py":{"sha256":"ac4335c2a324c7c24bbc9a5834730ecba39d3e60b0438e8948e7c4dd00c0a726"},"datadog_checks_base/datadog_checks/base/checks/kube_leader/base_check.py":{"sha256":"d8b21153a6b67096f86f2338437bf54955498d05bc363549affc9428e7e32a35"},"datadog_checks_base/datadog_checks/base/checks/kube_leader/mixins.py":{"sha256":"611acba9c969866f4feca52ad89b05757da1ab60393fdd2211f078da95b61400"},"datadog_checks_base/datadog_checks/base/checks/kube_leader/record.py":{"sha256":"6aa334545b055aeda90343b976cfbabf959038cee58103321b0a26e90eaa09a5"},"datadog_checks_base/datadog_checks/base/checks/kubelet_base/__init__.py":{"sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},"datadog_checks_base/datadog_checks/base/checks/kubelet_base/base.py":{"sha256":"97ec3af5e262a9f1a3dcc0664f01cca4df95241771c4bf53d09fa06b4a8fbc23"},"datadog_checks_base/datadog_checks/base/checks/libs/__init__.py":{"sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},"datadog_checks_base/datadog_checks/base/checks/libs/prometheus.py":{"sha256":"08f897cd26aa17193cd7c36d4c02d1251199ea7a789eeb0a42c7d4bb7212b7dd"},"datadog_checks_base/datadog_checks/base/checks/libs/thread_pool.py":{"sha256":"981219dc63fe452f96075e0fc914bee141179735463179e4bfc93e2c20b8bab7"},"datadog_checks_base/datadog_checks/base/checks/libs/timer.py":{"sha256":"8ac17c602136ed7a5e7a1bb39389782190afc505574dd6cd8a46c1db146780c4"},"datadog_checks_base/datadog_checks/base/checks/libs/vmware/__init__.py":{"sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},"datadog_checks_base/datadog_checks/base/checks/libs/vmware/all_metrics.py":{"sha256":"4f89b8c40a8abc0f57b6abbea2227be3cd8a0a000e34a134b48800fc4a0842c6"},"datadog_checks_base/datadog_checks/base/checks/libs/vmware/basic_metrics.py":{"sha256":"37d804c9398bb121d2f89162729347394ab2b3b627ad1affb8f608eb34ab35bb"},"datadog_checks_base/datadog_checks/base/checks/logs/__init__.py":{"sha256":"ee840b22269e35c03869d3b7223c20ab5c65895ae23153a8d273c0f866d5b99d"},"datadog_checks_base/datadog_checks/base/checks/logs/crawler/__init__.py":{"sha256":"ee840b22269e35c03869d3b7223c20ab5c65895ae23153a8d273c0f866d5b99d"},"datadog_checks_base/datadog_checks/base/checks/logs/crawler/base.py":{"sha256":"90ae36a4dc349b0d0fc1ac102f3c21b1d0100b55688ce5e0149e3844da37ac8c"},"datadog_checks_base/datadog_checks/base/checks/logs/crawler/stream.py":{"sha256":"300a7c23ecc48f972f4e9ee9349345977d800ddcea359c4682425fc9dadf847e"},"datadog_checks_base/datadog_checks/base/checks/network.py":{"sha256":"5228cfd4e5410a908d28ccba6d590d6b31e0cba49d9bca82bc26063da5ae4c3a"},"datadog_checks_base/datadog_checks/base/checks/openmetrics/__init__.py":{"sha256":"3876cda6f0d3eb38d15b8d91cd85991f383e692f2a5d83984292aea2e9942771"},"datadog_checks_base/datadog_checks/base/checks/openmetrics/base_check.py":{"sha256":"6dc2cfa5d441b02dd156e87734d800252fd19b8200f57600c5244520a3931aac"},"datadog_checks_base/datadog_checks/base/checks/openmetrics/mixins.py":{"sha256":"6e4ac4fdc43aa5e5b5e3b040098f86d2d1f276227743a50a44b333979521e427"},"datadog_checks_base/datadog_checks/base/checks/openmetrics/v2/__init__.py":{"sha256":"3fcd4506124b03d306a73e0bee8ffb0bea6f13077803ff235855906758e0d048"},"datadog_checks_base/datadog_checks/base/checks/openmetrics/v2/base.py":{"sha256":"517cad1b4cded34ad7535dd507404cfd92bf63fa82eb07f103e3a27459bf3326"},"datadog_checks_base/datadog_checks/base/checks/openmetrics/v2/first_scrape_handler.py":{"sha256":"227fad65733389e49d2f6397265200162efc29b415c2e26718fd2268b1fdf7be"},"datadog_checks_base/datadog_checks/base/checks/openmetrics/v2/labels.py":{"sha256":"d05d084a1d37c12daf56c8db9ecdc5ad80e7ea0bf18f45effb67e40361e1f43f"},"datadog_checks_base/datadog_checks/base/checks/openmetrics/v2/metrics.py":{"sha256":"b835593871d158c5bc614419058f6308bcde70de43b9e44d8c89b1066d4af369"},"datadog_checks_base/datadog_checks/base/checks/openmetrics/v2/scraper.py":{"sha256":"7783dc24cfdbef09075014396ff219a3f556ff4ee3423fe0c1381f0eb929d410"},"datadog_checks_base/datadog_checks/base/checks/openmetrics/v2/transform.py":{"sha256":"aafed8d72bea5a6fb6ebd98653b3aad22b7cc77564594654da6d9ddeaf95259d"},"datadog_checks_base/datadog_checks/base/checks/openmetrics/v2/transformers/__init__.py":{"sha256":"84f667f162ef41faf32d2689c6d15b61802d2b576df084174942cbefdb2b663b"},"datadog_checks_base/datadog_checks/base/checks/openmetrics/v2/transformers/counter.py":{"sha256":"9a6362e041ad2cd605c566b4c88ff7f0d63d681222e35e0cf6945268635b71a2"},"datadog_checks_base/datadog_checks/base/checks/openmetrics/v2/transformers/counter_gauge.py":{"sha256":"a1bd42bc2747afe56b73905295a4f73972f917633a07b3866a15007a4545dc5c"},"datadog_checks_base/datadog_checks/base/checks/openmetrics/v2/transformers/gauge.py":{"sha256":"ff6a19d789bfe7f6fb94e47eb4cc49461b1e17aafa7fd0ec3bee0b6c023288f1"},"datadog_checks_base/datadog_checks/base/checks/openmetrics/v2/transformers/histogram.py":{"sha256":"872b69c3785029d57037ccb991e5ba58672adebe3efb11272431f1c167fa8e52"},"datadog_checks_base/datadog_checks/base/checks/openmetrics/v2/transformers/metadata.py":{"sha256":"069b093750fd272f78bb12deee4a472f5e042dd961530c939a5e51f3d3003aea"},"datadog_checks_base/datadog_checks/base/checks/openmetrics/v2/transformers/rate.py":{"sha256":"7beb75edc142b002a77d7810add521f79c3496c972de2b80d36322cc63ffa1c3"},"datadog_checks_base/datadog_checks/base/checks/openmetrics/v2/transformers/service_check.py":{"sha256":"19d05af37f1f8b912dbe0d1a08762132968408616c255db5f62b1a59548ada3c"},"datadog_checks_base/datadog_checks/base/checks/openmetrics/v2/transformers/summary.py":{"sha256":"d01d5693b79ae07da77ddb0e5fca10122a2804636aca914372304f2a31d5b52e"},"datadog_checks_base/datadog_checks/base/checks/openmetrics/v2/transformers/temporal_percent.py":{"sha256":"c02a8ea971a8550de5c99066fc04e7830a6f21d81c7ce905ff59461397e88625"},"datadog_checks_base/datadog_checks/base/checks/openmetrics/v2/transformers/time_elapsed.py":{"sha256":"c8fb3bd9478e82bd9e40e7610638c507a7add21327c034beaee516388f160db1"},"datadog_checks_base/datadog_checks/base/checks/openmetrics/v2/utils.py":{"sha256":"b6993786d240cff2b0091a85b360938da8c790b0acff64db19d069e75e2b58e4"},"datadog_checks_base/datadog_checks/base/checks/prometheus/__init__.py":{"sha256":"35c57ac8d1d9555c42ac0ac80ece6d4a459fae72f05398b195374d5c57284a30"},"datadog_checks_base/datadog_checks/base/checks/prometheus/base_check.py":{"sha256":"125025250dbab097776c028c0d7405b36fa92343252cf8b3781e3816e027e924"},"datadog_checks_base/datadog_checks/base/checks/prometheus/mixins.py":{"sha256":"e6f4737a20c8516d7b4ff6fe351fafa33db00cf38f4148bdf60ca4902e9d3157"},"datadog_checks_base/datadog_checks/base/checks/prometheus/prometheus_base.py":{"sha256":"9f35823bf488a24646a04ee8f01269a254cfa160bbfe471625f90b1c05de057e"},"datadog_checks_base/datadog_checks/base/checks/win/__init__.py":{"sha256":"9083ff7fefc6d7404110ec4ee3e1a7cb29730a8d6439ff5deb291388151a7a4a"},"datadog_checks_base/datadog_checks/base/checks/win/winpdh.py":{"sha256":"8a1178041d7fdc4a16bc54c2019e1331048e2da5a5bf59d633c000aa5b6105ae"},"datadog_checks_base/datadog_checks/base/checks/win/winpdh_base.py":{"sha256":"c6156b3c399663ee3d12a0fae723adc75ee118d90817593bf9a004c1b24f9628"},"datadog_checks_base/datadog_checks/base/checks/win/winpdh_stub.py":{"sha256":"3397f2064cc0b842afa19ac6f64b506a9c241ffecaf8a388605e55a52f372cc9"},"datadog_checks_base/datadog_checks/base/checks/win/wmi/__init__.py":{"sha256":"9c3f86014e9390adb4514cc9515eb98f87d81c838fc687b5cfd0e657f6da03f4"},"datadog_checks_base/datadog_checks/base/checks/win/wmi/counter_type.py":{"sha256":"efbef65c6b56c8f2577b0caf698ca8c15983cbd0f1678da48bd583e5769bb951"},"datadog_checks_base/datadog_checks/base/checks/win/wmi/sampler.py":{"sha256":"b11c15b54b9df599a50375cba2a4cb9ab7d3b259ea073f3c4e70223df08ca584"},"datadog_checks_base/datadog_checks/base/checks/win/wmi/types.py":{"sha256":"e04f1ed72a69d8ff9e3b180bb11adfb656aeaaf6a9582b956803e872a0abc158"},"datadog_checks_base/datadog_checks/base/checks/windows/__init__.py":{"sha256":"b2e1a32eb8591a9d541a935aa5c56f20fa7ebbc3de68cf24df3a650198f2712a"},"datadog_checks_base/datadog_checks/base/checks/windows/perf_counters/__init__.py":{"sha256":"c4ced6dabda1b7e2b1fe3d22f03bae7bf94433606ffdbab7be0d04b34009e4a1"},"datadog_checks_base/datadog_checks/base/checks/windows/perf_counters/base.py":{"sha256":"209ca7cc7f6dd944309034f981b91635a6c85ff9d95ccfc92d2844be17e690b5"},"datadog_checks_base/datadog_checks/base/checks/windows/perf_counters/connection.py":{"sha256":"124462f2699e89a71bb2ead225be6f014cc523f94091459c9d20bb4ce42c006e"},"datadog_checks_base/datadog_checks/base/checks/windows/perf_counters/constants.py":{"sha256":"fdaa806dab5cbbd790bfd36a6d509a43d7394be1e4922504455e68a82dc39799"},"datadog_checks_base/datadog_checks/base/checks/windows/perf_counters/counter.py":{"sha256":"8498fbe90224b5934558588a21110d2224c4d0d6334e5bd52dac213c2566f49e"},"datadog_checks_base/datadog_checks/base/checks/windows/perf_counters/transform.py":{"sha256":"6d93f17ed0f0d1dd55157e3dca21486be9da18e62529c320a6fb9e491920133f"},"datadog_checks_base/datadog_checks/base/checks/windows/perf_counters/transformers/__init__.py":{"sha256":"a8b142ebeee6817e16846d57125966018eac45ef4a9870efba31fbc9c2555e92"},"datadog_checks_base/datadog_checks/base/checks/windows/perf_counters/transformers/count.py":{"sha256":"8263467bddb648fe101243270ff9dcf30edba0a616fa65b69f9fbabe975c9a37"},"datadog_checks_base/datadog_checks/base/checks/windows/perf_counters/transformers/gauge.py":{"sha256":"73be1f652e85addc433ba64aa2fa75ee1daf85322691a351d8e2deb35af4d681"},"datadog_checks_base/datadog_checks/base/checks/windows/perf_counters/transformers/monotonic_count.py":{"sha256":"479c167c31bd2e471baab21d49ce9dce3470b40729dabe153ee5456aa3a5ce2d"},"datadog_checks_base/datadog_checks/base/checks/windows/perf_counters/transformers/rate.py":{"sha256":"3e4c739755cf6cfb68fb942b882a23361e5684c4e3c03710c2a63f8b6310052f"},"datadog_checks_base/datadog_checks/base/checks/windows/perf_counters/transformers/service_check.py":{"sha256":"c2f74b0d2b871ca2276f35bcb8cf10f764dc454b90975d70b2fb7475266dac70"},"datadog_checks_base/datadog_checks/base/checks/windows/perf_counters/transformers/temporal_percent.py":{"sha256":"2071f661338679e8b63d53790a1f7df200ea620facd4939bbfd6b44e602f3a75"},"datadog_checks_base/datadog_checks/base/checks/windows/perf_counters/transformers/time_elapsed.py":{"sha256":"85633c087612a859c562b35daf5345638eb89cc01514e88df238658594ce6fbf"},"datadog_checks_base/datadog_checks/base/checks/windows/perf_counters/utils.py":{"sha256":"a2ffb8f0936f650e8a3c4671cfa5f42187009776d50059ccd79faf9467eab18d"},"datadog_checks_base/datadog_checks/base/checks/windows/perf_counters/utils_win32pdh_fix.py":{"sha256":"9d64eb01b07d5400ff0da693ad2055d8a0e606f8a9185988d38fb00df9f151af"},"datadog_checks_base/datadog_checks/base/config.py":{"sha256":"a9c000e17f6c5d065177041ef0382219ddbdf34541a7549003477af79b57fed5"},"datadog_checks_base/datadog_checks/base/constants.py":{"sha256":"711d7db40a95cac3056dd056a88199a0720a9359064f2a91b029fd15f1503a7c"},"datadog_checks_base/datadog_checks/base/ddyaml.py":{"sha256":"65884443d4540373efc97e19ecf2d595154b958eb9f0248472423b9f4bd16498"},"datadog_checks_base/datadog_checks/base/errors.py":{"sha256":"7cf705691df31e94a4328f1ea6f1779517bd2ab1274bc83827475733f9efcecc"},"datadog_checks_base/datadog_checks/base/log.py":{"sha256":"dcfe53abe916664ab1e40b6f421524f3d3b5b3ee589c4e3d2c9f3179e29cbc1f"},"datadog_checks_base/datadog_checks/base/stubs/__init__.py":{"sha256":"c2958047dbfb0624db6e64ceea9569b21a9aff3f8f59a613af7df049364bcf77"},"datadog_checks_base/datadog_checks/base/stubs/_util.py":{"sha256":"6431ad41af05ddc1dff3e42f4951cc0780462370bd5600bbb067061af3b46a92"},"datadog_checks_base/datadog_checks/base/stubs/aggregator.py":{"sha256":"18855f7b42006ef9682a59bcf3a3cb8cbca3572cfd9e439dab9d686692bd9626"},"datadog_checks_base/datadog_checks/base/stubs/common.py":{"sha256":"646cc5d9d5f2d6e545406746fdbbf3fe930c8942da05ca73adafe4f70a3d7f4e"},"datadog_checks_base/datadog_checks/base/stubs/datadog_agent.py":{"sha256":"bb87bc6454ade023bd9b1b99e148a7b5e2093b22ca420cdc1c56b4a53cd16826"},"datadog_checks_base/datadog_checks/base/stubs/log.py":{"sha256":"03e7969f3639813a535b8d59721f96e4255c97395d96684c4d6faf0cd15d4f5a"},"datadog_checks_base/datadog_checks/base/stubs/similar.py":{"sha256":"dc73bd86dc7d2d5ea945a1356462ac3c4c5abd36e33c73cae9930cd813d88f76"},"datadog_checks_base/datadog_checks/base/stubs/tagging.py":{"sha256":"cf12dd3c2e04a87c46892fc71216da3ac2ffb399d922137c043931d810133aab"},"datadog_checks_base/datadog_checks/base/types.py":{"sha256":"6a76a3652d16d13b31507250c3e24738fd8d49eb82f418ac5d2cbd9804ad9714"},"datadog_checks_base/datadog_checks/base/utils/__init__.py":{"sha256":"4c2d2aee209b36a7188df5396b304da429e2f0b01060e7d8e8500313749910f0"},"datadog_checks_base/datadog_checks/base/utils/agent/__init__.py":{"sha256":"a37696bf2dcf872903fe1ed84f7b3adbc3b45b66291e2b3436542c495d4f234e"},"datadog_checks_base/datadog_checks/base/utils/agent/common.py":{"sha256":"d5746c3c959da666f100a2815471813d49b858776f8aad28bee820b69c7b2d6a"},"datadog_checks_base/datadog_checks/base/utils/agent/debug.py":{"sha256":"cde05b34bb7763f5b1a5ff4e74092595d2f2d6098bd14e9b30398e1d20c63373"},"datadog_checks_base/datadog_checks/base/utils/agent/memory.py":{"sha256":"986d743c51608d608b7ad17a8a10b8eb7550cf55774b849332cfc5f1b00392f6"},"datadog_checks_base/datadog_checks/base/utils/agent/packages.py":{"sha256":"ab88bbece8f9d0a38db114f121b3aa7babf43239debbe4069dd236cfc742d8f9"},"datadog_checks_base/datadog_checks/base/utils/agent/utils.py":{"sha256":"155fe8eab71c53907432b5f299afb8c80aa62a08649734de39fd6785872663ba"},"datadog_checks_base/datadog_checks/base/utils/aws.py":{"sha256":"c3114b5a5545b6fe7f11445db17cc384e45c4e93348c1940a2470c88f575c43f"},"datadog_checks_base/datadog_checks/base/utils/common.py":{"sha256":"3ad98a77914a8e5c09c116e113868898e0563ceccd3d5a9f5d79875e4e0c308c"},"datadog_checks_base/datadog_checks/base/utils/concurrency/__init__.py":{"sha256":"391b2c1396d766e62e6b95022deb067cfbdcad029c0031da0ec5eb5327c0445d"},"datadog_checks_base/datadog_checks/base/utils/concurrency/limiter.py":{"sha256":"8acd99a541237ec2389c11ad5c6d83d1982fd060f7f3f8b98c940291dccf5bf6"},"datadog_checks_base/datadog_checks/base/utils/constants.py":{"sha256":"4304decb8096074340c66dab703fb03d84641328257a4408ac0cc531a6c46b7f"},"datadog_checks_base/datadog_checks/base/utils/containers.py":{"sha256":"2c1a94cc4447c71e537607165504ead40d5668608c8735d3f64e069f47d7dc9f"},"datadog_checks_base/datadog_checks/base/utils/date.py":{"sha256":"2499aa3fce0281570527472f02632ef04b4ceaff7ab48112b9c40d9bd78a7847"},"datadog_checks_base/datadog_checks/base/utils/db/__init__.py":{"sha256":"f964bc85274b6a1cf6a9b115c13d38d419f422ef40f4e96ec3a0b8ff36f17e36"},"datadog_checks_base/datadog_checks/base/utils/db/core.py":{"sha256":"b151dd639674771e9433a21667007bd07c62583213344dba4637dfc0b2acf490"},"datadog_checks_base/datadog_checks/base/utils/db/query.py":{"sha256":"4e3c95363c63348076d5b7087ede9ffb96f76a58033ed76db477004b605d52e7"},"datadog_checks_base/datadog_checks/base/utils/db/sql.py":{"sha256":"a0f94966a841cf408601aecc10d3dba4e83e39fb878feddbffeaefec981a344b"},"datadog_checks_base/datadog_checks/base/utils/db/sql_commenter.py":{"sha256":"aff79f2ba4c6450c4cffe423fa774425d102938ec9e270858e4572c6ed579af5"},"datadog_checks_base/datadog_checks/base/utils/db/statement_metrics.py":{"sha256":"4b49073e816a099b514d9a1323a3e2f99ba5e88b9ef18de3d7f92c347fb3128f"},"datadog_checks_base/datadog_checks/base/utils/db/timed_cache.py":{"sha256":"6bd2ace4a294bc4c41e863804d74d208b6a656d2c3f75f439fa1e9c1e18ab45c"},"datadog_checks_base/datadog_checks/base/utils/db/transform.py":{"sha256":"90d762059568666d6835135621ab6b01f80e4636e444a86cd40816fda4028f72"},"datadog_checks_base/datadog_checks/base/utils/db/types.py":{"sha256":"38b5f63aae7c2503c5043e28a94a422e400fee8bd118dfe2d6f164d44d0df0b8"},"datadog_checks_base/datadog_checks/base/utils/db/utils.py":{"sha256":"f792e6b58eeb65cacf70d3dabaef3b44335392d8dbec6135926ee73af9913fd5"},"datadog_checks_base/datadog_checks/base/utils/diagnose.py":{"sha256":"78b31ed2d212a64cd2df2c5547cdc81f1a2b4097c74ff5e2e82ab8cf344dc552"},"datadog_checks_base/datadog_checks/base/utils/discovery/__init__.py":{"sha256":"7c896046fefe58933a21fa392211462b829c0caac24865ff7eb5e0899f73e8c9"},"datadog_checks_base/datadog_checks/base/utils/discovery/cache.py":{"sha256":"7fd2f703b619a59fa6a59a452308ec6b969bf5c64c1a4a9d7ad76bf44a5a95b2"},"datadog_checks_base/datadog_checks/base/utils/discovery/discovery.py":{"sha256":"9bcc3d55162eefc79dd202af56ee1c84dad1752302aae24edd85359b378e734d"},"datadog_checks_base/datadog_checks/base/utils/discovery/filter.py":{"sha256":"459f13ddb2cfe2e84af0a5f01aa76860c254f4edc402f3924e119ae702d0311f"},"datadog_checks_base/datadog_checks/base/utils/fips.py":{"sha256":"1bdd91368664acca236932a2d4389c71bbdf3053b769d92d0d980a8e9c64913c"},"datadog_checks_base/datadog_checks/base/utils/functions.py":{"sha256":"8869726f147a68f3c494dc4d6f610b3b36e4df6f23f4e541031ade749c5d091c"},"datadog_checks_base/datadog_checks/base/utils/headers.py":{"sha256":"d1249d0bbd63c1a07ad413837eeb1a84256bd5ce7a1af4fd8b0b7b72275c1cfd"},"datadog_checks_base/datadog_checks/base/utils/http.py":{"sha256":"31698f56c090124974d97d09e2022d7b50028c1dcb78addcc192f680f0e1217f"},"datadog_checks_base/datadog_checks/base/utils/limiter.py":{"sha256":"6114eb3c25f54b912d1cb55c3fff8611fcd1a2db3f2d3732d5ffee1d956cf748"},"datadog_checks_base/datadog_checks/base/utils/metadata/__init__.py":{"sha256":"6d36a6f7a190f43be4ea287c70aabc5b16b69640e48feed3b89de85875d432cb"},"datadog_checks_base/datadog_checks/base/utils/metadata/constants.py":{"sha256":"5c77cfc2f40c6f2344d8562607fed7c968862343761b17415dbb572f87839e27"},"datadog_checks_base/datadog_checks/base/utils/metadata/core.py":{"sha256":"3ac91ad1a6d9d0279dacc04672e6ae25aaab4937ccf636903415dc7460ad19e2"},"datadog_checks_base/datadog_checks/base/utils/metadata/utils.py":{"sha256":"d3756946a79fa280add151008bd06fa25643de6dfeba14f6af642e276c5ce03e"},"datadog_checks_base/datadog_checks/base/utils/metadata/version.py":{"sha256":"7257bc2c7c2a72ee364ea14a24625d16d1c098e7a2b423a2ce34cd43606cc534"},"datadog_checks_base/datadog_checks/base/utils/models/__init__.py":{"sha256":"b2e1a32eb8591a9d541a935aa5c56f20fa7ebbc3de68cf24df3a650198f2712a"},"datadog_checks_base/datadog_checks/base/utils/models/types.py":{"sha256":"c9b504a7dcffac396bdbea089158c4581fa6440bd4c28103a4051c6504c4208c"},"datadog_checks_base/datadog_checks/base/utils/models/validation/__init__.py":{"sha256":"699557dfc5b5a642c793b9281e02b9267d8f3824f940a28f1b35bfc3d2e082da"},"datadog_checks_base/datadog_checks/base/utils/models/validation/core.py":{"sha256":"dab25d1f87af4729ec0530dc0b04ed788c0c09906f9e674113a736f2c8c3e5a0"},"datadog_checks_base/datadog_checks/base/utils/models/validation/utils.py":{"sha256":"748ad183c8795ee93e403b08c89285f68b6a45fc34aeeebd1f67c548dcc8b0e8"},"datadog_checks_base/datadog_checks/base/utils/network.py":{"sha256":"617a3d25081652d167e1d15e7d665aa76d0e32649178b48f3a3833a1d25b75dc"},"datadog_checks_base/datadog_checks/base/utils/platform.py":{"sha256":"c16f1fe972a8e091f1beed6c3740e92c39988d2fdc0aef06a0abdf4e3223e323"},"datadog_checks_base/datadog_checks/base/utils/prometheus/__init__.py":{"sha256":"f794783ecff74f6713b846470f28eaaa841ed20c0d1681bcd18186135e2c150f"},"datadog_checks_base/datadog_checks/base/utils/prometheus/functions.py":{"sha256":"c674f283d8937acffcde65a57351acf05150d6349163e94b3e8e530801626f2b"},"datadog_checks_base/datadog_checks/base/utils/prometheus/metrics_pb2.py":{"sha256":"d98a7a599cb428afbf3c1f1ada8368b12e9cfa598002788d398b897ab00c4de7"},"datadog_checks_base/datadog_checks/base/utils/replay/__init__.py":{"sha256":"391b2c1396d766e62e6b95022deb067cfbdcad029c0031da0ec5eb5327c0445d"},"datadog_checks_base/datadog_checks/base/utils/replay/constants.py":{"sha256":"7b10c6b0380b23bbb5196bde7a55dd8335894e3c47a18266413ee8ef0d4509e3"},"datadog_checks_base/datadog_checks/base/utils/replay/execute.py":{"sha256":"9046d9b996440a3087c9447969ec52ce4382e7c74e5d0c95fdded3d8a2c4324a"},"datadog_checks_base/datadog_checks/base/utils/replay/redirect.py":{"sha256":"f21e13c07ed95637a211ddaacb1f4a68752755137bfcd1a6535745890c252697"},"datadog_checks_base/datadog_checks/base/utils/secrets.py":{"sha256":"4e3e4c04ea321975c3581dc7afeed4283cb9195d4d6499053d8e13e2ff4f1c78"},"datadog_checks_base/datadog_checks/base/utils/serialization.py":{"sha256":"0eafc28756b17e888cf64b65f6e5a02a6c242aef85a65575a3b8a79388ca596c"},"datadog_checks_base/datadog_checks/base/utils/subprocess_output.py":{"sha256":"da651d3d3a097dbcdc816ff5ec2c8bf87997e125b5c31b3fab64313189721120"},"datadog_checks_base/datadog_checks/base/utils/tagging.py":{"sha256":"004504188c498cdbe8388110405922b7c653d8ec91c62ca6d45cc21227080acb"},"datadog_checks_base/datadog_checks/base/utils/tailfile.py":{"sha256":"c7fa4ce6982655a5b87890704ba19764a3aa89fa66a9faf01ce537816b6162d3"},"datadog_checks_base/datadog_checks/base/utils/time.py":{"sha256":"70dcbb0adb09cd250c8bb27edd645e65552f37260e1a427022da89318d35aaa0"},"datadog_checks_base/datadog_checks/base/utils/timeout.py":{"sha256":"78e059a1f14dfa13aee7125e30e17769cfe87dccbd118ebe92f981bcfe101058"},"datadog_checks_base/datadog_checks/base/utils/tls.py":{"sha256":"314a196c064a0cc4de5512b44839986088a0c828ce2538b560506813ace9b3c3"},"datadog_checks_base/datadog_checks/base/utils/tracing.py":{"sha256":"34fb7987e4174ff5cbf03d8584d94d6c13be2e7c2baffb1d4b80c5a4a455f485"},"datadog_checks_base/datadog_checks/base/utils/tracking.py":{"sha256":"158228baabb7281f89b31831335897e48a6ffdc5a1b3ccd03933784b15ce909e"},"datadog_checks_base/datadog_checks/checks/__init__.py":{"sha256":"76381faa72acfce6863031501a53b955d2d047150023e5f828424b2e53e95483"},"datadog_checks_base/datadog_checks/checks/base.py":{"sha256":"df061b86e80d0375a5aedffe104a4198949297c9472ae52dad13fe9d5d8a05f4"},"datadog_checks_base/datadog_checks/checks/libs/__init__.py":{"sha256":"2300c3103843a8f3d4d63e0fcaf78691dbb508cbfd91b7de2bdd0802f981c777"},"datadog_checks_base/datadog_checks/checks/libs/thread_pool.py":{"sha256":"747147080f5d03c2742e233e4bd635d4c58abff8cf5c803fe5881f776c1603b4"},"datadog_checks_base/datadog_checks/checks/libs/timer.py":{"sha256":"a35b1970916e9035ae71d185b6506bbd2b798e26ef1b7b91fc3b30788b19dd49"},"datadog_checks_base/datadog_checks/checks/libs/vmware/__init__.py":{"sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},"datadog_checks_base/datadog_checks/checks/libs/vmware/all_metrics.py":{"sha256":"849ca20bfd3b86aa8c8eeb88732b4026fd8a0e74a0a96ab6cbe269270b71a8c3"},"datadog_checks_base/datadog_checks/checks/libs/vmware/basic_metrics.py":{"sha256":"683af414d39b8d77d66fd97146999de4bd7a7be9ab934ed9224867a0b74c099f"},"datadog_checks_base/datadog_checks/checks/libs/wmi/__init__.py":{"sha256":"2300c3103843a8f3d4d63e0fcaf78691dbb508cbfd91b7de2bdd0802f981c777"},"datadog_checks_base/datadog_checks/checks/libs/wmi/sampler.py":{"sha256":"55310a8bffb4b55af9552268e627c83c284db55c99c47f754fa05e5bb33ccd3b"},"datadog_checks_base/datadog_checks/checks/network.py":{"sha256":"e5b7d11f19ac5286897259c2ac1e8209ee7bee94df199d5155e1b174cce6afbc"},"datadog_checks_base/datadog_checks/checks/network_checks.py":{"sha256":"cdb77741ebeaa7b6a13616873b5725009b7566a77ceef013fe5dd1c76cbdd81b"},"datadog_checks_base/datadog_checks/checks/openmetrics/__init__.py":{"sha256":"96b910b1c359a0b37a0a8753b6e1e50c803ae35bf4f1e7a31418678cf16792c0"},"datadog_checks_base/datadog_checks/checks/openmetrics/base_check.py":{"sha256":"a9ccd2133baa1058f744e494e2bb43cb5221fbbb41b6c3b8a0553ead7f6a851f"},"datadog_checks_base/datadog_checks/checks/openmetrics/mixins.py":{"sha256":"b5b9cf9d77c8dda6d752a4d37d303405fa1935ac071b17a4e8b055160b7d2a28"},"datadog_checks_base/datadog_checks/checks/prometheus/__init__.py":{"sha256":"a12ac852908b6eb9f3b594e893c41a38951a9a1e030b6286c20e76aec9965c8b"},"datadog_checks_base/datadog_checks/checks/prometheus/base_check.py":{"sha256":"882984f28171bfde4a2c34c25f609b5a758917f0c9b9e00b2ba9a0d489ba1e19"},"datadog_checks_base/datadog_checks/checks/prometheus/mixins.py":{"sha256":"aa652ec3963f90c1e7c552d35243d3863f737fa9de5e45131ca55758c5e00de5"},"datadog_checks_base/datadog_checks/checks/prometheus/prometheus_base.py":{"sha256":"434576db21c019a7366f5350b8e305c0790509aadd9cbd980f6c3ac22b87874f"},"datadog_checks_base/datadog_checks/checks/prometheus_check/__init__.py":{"sha256":"9b5434e894e03018e342ee726f635de62122bf0e1d8f59d3f0109f89a95d890d"},"datadog_checks_base/datadog_checks/checks/win/__init__.py":{"sha256":"4441d475ac7181f8e7edf1037da1310d776c647883d0362a5acfb88e44e4d45e"},"datadog_checks_base/datadog_checks/checks/win/winpdh.py":{"sha256":"864f9f437a351bb82a2962e15a1198cc6271f9cc25c3c73522402954fa42ef9e"},"datadog_checks_base/datadog_checks/checks/win/winpdh_base.py":{"sha256":"269e7c39a6562687aa6ad022b1b88c85b5f6be403c11a8412775b3c55715196e"},"datadog_checks_base/datadog_checks/checks/win/winpdh_stub.py":{"sha256":"a1895061a3be05415b331c1b17d2c02b1f912f36ed238948c46d7af68025d7ed"},"datadog_checks_base/datadog_checks/checks/win/wmi/__init__.py":{"sha256":"51008a1bf148ec1c7bc0bb8f6ad3be19ba950e6c13b5cb84a2fd2684fb66327e"},"datadog_checks_base/datadog_checks/checks/win/wmi/counter_type.py":{"sha256":"01ac5dc9d1518c74c4b621a1da0b901da5ffc954abcf81972f8e478abdb098a7"},"datadog_checks_base/datadog_checks/checks/win/wmi/sampler.py":{"sha256":"bbfeea3683c40059f5e1ff52fc459e82200727041a187328d65f58b92b445cdd"},"datadog_checks_base/datadog_checks/checks/winwmi_check.py":{"sha256":"907ea75f4055e675b732171687ce6148d6484d067b36726b942b4e9c5e1d747b"},"datadog_checks_base/datadog_checks/config.py":{"sha256":"3eb01719d94b9e857654c41f7ff9e849a489274c20e010221a7c3b8c240b4a29"},"datadog_checks_base/datadog_checks/errors.py":{"sha256":"785c269eb5fe6dab4881bbbe889cac7aa00f34eff8ae4d54b9a28af3d7af2e18"},"datadog_checks_base/datadog_checks/log.py":{"sha256":"a2bbce80c286344b2a4932da942010a563fea2ea2ba46d40ec69fe8f69910fcd"},"datadog_checks_base/datadog_checks/py.typed":{"sha256":"95aebb28195b8d737effe0df18d71d39c8d8ba6569286fd3930fbc9f9767181e"},"datadog_checks_base/datadog_checks/stubs/__init__.py":{"sha256":"331c49e4d1a353ded64777893a96906746f386f03cf32b30135aa260665377ec"},"datadog_checks_base/datadog_checks/stubs/_util.py":{"sha256":"9989e9f7fbeca50c1359c06188f60c309dc421c40f4a9a407147d18c42c180b5"},"datadog_checks_base/datadog_checks/stubs/aggregator.py":{"sha256":"ea230225c9c41fbb1885a38741cccf1809034d9b1fd696eb6efde1de6bfba762"},"datadog_checks_base/datadog_checks/stubs/datadog_agent.py":{"sha256":"b167bb8f650441e0f3762aa3e0ffe73e1921157f34ff90abe47723db963ec6bf"},"datadog_checks_base/datadog_checks/utils/__init__.py":{"sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},"datadog_checks_base/datadog_checks/utils/common.py":{"sha256":"470a0220a572f2f6df6b61353fb63b82447d569274d15b6e3f5f0c12b5e7f6b9"},"datadog_checks_base/datadog_checks/utils/containers.py":{"sha256":"ca56286c527f7d5f940b0baf5a66a4eba6ad2df036759f6000b0985835c63a29"},"datadog_checks_base/datadog_checks/utils/headers.py":{"sha256":"8f92abe525d4947ba4dd41870d0367f4cda884df95e57d9fce62718f0e8fe8da"},"datadog_checks_base/datadog_checks/utils/limiter.py":{"sha256":"1aad3f848119c3aaa92394962ffbb331a22991bcef173b242347a54cffef22c1"},"datadog_checks_base/datadog_checks/utils/platform.py":{"sha256":"76ca8472c0bf63b866e28aea3bc449e4de63905a41ee9c8662f09e5eb6fef571"},"datadog_checks_base/datadog_checks/utils/prometheus/__init__.py":{"sha256":"f16c179ccf60d6c7d2e76ebb4180895ff85df0c665e6446006043f4b374d757b"},"datadog_checks_base/datadog_checks/utils/prometheus/functions.py":{"sha256":"e2f5ac4c62e0ba31f0758668d2d940424a833c7a1fa9424cde4f5e22d26a1114"},"datadog_checks_base/datadog_checks/utils/prometheus/metrics_pb2.py":{"sha256":"c60dd47541dee138de478b35dcb50a6765355954ade94eb38ec5511ba957e9d7"},"datadog_checks_base/datadog_checks/utils/proxy.py":{"sha256":"723edeaf00a1ee813aa4a6467fc34c3ae419f354c6b6172de678e39b864a8bd7"},"datadog_checks_base/datadog_checks/utils/subprocess_output.py":{"sha256":"80dea34445564d9eee264533455310e69c72b4d640e369ea8c97a365717a64c2"},"datadog_checks_base/datadog_checks/utils/tailfile.py":{"sha256":"6c4aa2725fac2e0cb0f660f545d5a8b3c1954a50a49f1e58c86ddf5cc068c137"},"datadog_checks_base/datadog_checks/utils/timeout.py":{"sha256":"42e848b0a6686bf335dfe8040b07acbb9219c12317cfdf564f0a9a974262c913"},"datadog_checks_base/datadog_checks/utils/tracing.py":{"sha256":"1d06d06a428cf8bc3be4c0e422d6982588a94ba60edb867fca60d5c43b31e435"},"datadog_checks_base/pyproject.toml":{"sha256":"6e047c97ce6b560917a5880e80629158f2be4b1eb5766fd63678d224c0d28c10"},"datadog_cluster_agent/datadog_checks/__init__.py":{"sha256":"9bf116cc5e14139f58802ece354b270c165226e0cd229e867e2cb291b6855643"},"datadog_cluster_agent/datadog_checks/datadog_cluster_agent/__about__.py":{"sha256":"d71d1b9532001b731090b6343e8b96809fc97e43fc3c57a8d7e37dd558b07f1c"},"datadog_cluster_agent/datadog_checks/datadog_cluster_agent/__init__.py":{"sha256":"f2111f23fdd51bfe1675ee777f927a9abf036dc4035c81e048d315925b23f6f9"},"datadog_cluster_agent/datadog_checks/datadog_cluster_agent/check.py":{"sha256":"edd72c798391d5f3ddec023482fc5f6dec4b82ae4a1173f12535fd79cf2e1914"},"datadog_cluster_agent/datadog_checks/datadog_cluster_agent/config_models/__init__.py":{"sha256":"c9cf5c66894430e7edbb00d00613b58ccfd38360f2fe490a23c17cf71ed294dc"},"datadog_cluster_agent/datadog_checks/datadog_cluster_agent/config_models/defaults.py":{"sha256":"16cc866302710ce999a93d7637a6465bcfe95dc43202410fa57da2308ef513db"},"datadog_cluster_agent/datadog_checks/datadog_cluster_agent/config_models/instance.py":{"sha256":"4dee84a87aa8134723997e798ef49557b10e78a2b772d2bbdb40023ca843b6b5"},"datadog_cluster_agent/datadog_checks/datadog_cluster_agent/config_models/shared.py":{"sha256":"6aeb47e93fb5c0a0ff0e0202bb3bb3cf1ae045eadb5749c34337df9abbf78c84"},"datadog_cluster_agent/datadog_checks/datadog_cluster_agent/config_models/validators.py":{"sha256":"0424fe17778b76e1b589b9564d0d543d1b71dba1edd6e5d71a7c528dddf68e0b"},"datadog_cluster_agent/datadog_checks/datadog_cluster_agent/data/auto_conf.yaml":{"sha256":"c1cdfd21cccbc2d08fe4681dbc1c7a47dd9715ab7336a562414d63cc65384a20"},"datadog_cluster_agent/datadog_checks/datadog_cluster_agent/data/conf.yaml.example":{"sha256":"0ea54ebe3c490adc8f79d2c9431256dd4e9d548996573a2398d68444ea2aa216"},"datadog_cluster_agent/pyproject.toml":{"sha256":"61d4b5fedd2508c73f52dd46907572c04422503616a1e6a3589b5ee32eae7b43"},"dns_check/datadog_checks/__init__.py":{"sha256":"fe73dc8f45d35205d366455edc6e8c3a8b29870d773b6f103d5261e25f757b25"},"dns_check/datadog_checks/dns_check/__about__.py":{"sha256":"404703027133730352ec2831dfacac351d58b9669901ef32b2e0fcb47adafd27"},"dns_check/datadog_checks/dns_check/__init__.py":{"sha256":"3e65673287e6731fe4cc5fbfb42d2841c6146fa8ac53971a0b313753c72bf72b"},"dns_check/datadog_checks/dns_check/config_models/__init__.py":{"sha256":"c9cf5c66894430e7edbb00d00613b58ccfd38360f2fe490a23c17cf71ed294dc"},"dns_check/datadog_checks/dns_check/config_models/defaults.py":{"sha256":"6a6824907cf9f122e5793ce997e1f2c3386861174ff8befa9dc7c54733ed6a7a"},"dns_check/datadog_checks/dns_check/config_models/instance.py":{"sha256":"5921a719c0dda75076c54312d57ce794f6dc0eb3f6bd40b5c0209254e5c93475"},"dns_check/datadog_checks/dns_check/config_models/shared.py":{"sha256":"7d42e3c6fcdbfdec55c9d6616937af3a55e971b1320222b8df42ccb3882c353a"},"dns_check/datadog_checks/dns_check/config_models/validators.py":{"sha256":"0424fe17778b76e1b589b9564d0d543d1b71dba1edd6e5d71a7c528dddf68e0b"},"dns_check/datadog_checks/dns_check/data/conf.yaml.example":{"sha256":"64abb8c6e9cbe755c60faba4820978d838b2873fa450f8106ea55b58156aabe9"},"dns_check/datadog_checks/dns_check/dns_check.py":{"sha256":"3da3a0698a1d8f18ec0ac4e4e2b53ef24ff86ae3f6aecf17e7b23d60a0fe3241"},"dns_check/pyproject.toml":{"sha256":"0491bde5d54d79bcb1dafc25ffe56ab1ea2c17faa50f91151a9f513753cd6e52"},"mongo/datadog_checks/__init__.py":{"sha256":"9a3c64b8b00c94da4b4f34618d803d3255808caf21b8afa9195c84b61da66b6a"},"mongo/datadog_checks/mongo/__about__.py":{"sha256":"11d3640c8e045832468b7bfd78aeaf58446723d5c5d96c2cc9bcfb75d3003ab8"},"mongo/datadog_checks/mongo/__init__.py":{"sha256":"61d075d33fa89e5885372d5f3a785337466b5eeebed21233575516434b7b912d"},"mongo/datadog_checks/mongo/api.py":{"sha256":"23a10ac274c02b9dd1a88f150a3a70d04f69382230c42221152c3bcbec537a8d"},"mongo/datadog_checks/mongo/collectors/__init__.py":{"sha256":"ea7880c2ee86eb11efffb297c6a78559a3fd3d02522007f4ff30928d083e00bc"},"mongo/datadog_checks/mongo/collectors/base.py":{"sha256":"059a13b29ff09de742e28c8de388bf4707ac4c6ad3c9abf5b477d84a24d9e29e"},"mongo/datadog_checks/mongo/collectors/coll_stats.py":{"sha256":"e32b15f03a63ad4e7640698d0ff2d7a1d778a5d1596f199257775b4acf224975"},"mongo/datadog_checks/mongo/collectors/conn_pool_stats.py":{"sha256":"37da60e010e13f58c48f7e159d8a2e357479f9e9832aef1c65babe742118d0a2"},"mongo/datadog_checks/mongo/collectors/custom_queries.py":{"sha256":"f631516ce001db4a75caecf1f43c968b427abc75e8a6db77a0fabd1e8d3601d8"},"mongo/datadog_checks/mongo/collectors/db_stat.py":{"sha256":"59fdc96716b1222ef74338855cbd7089b9c8a50ffe545cfa26514cee84419f9d"},"mongo/datadog_checks/mongo/collectors/fsynclock.py":{"sha256":"7dc6cc7527c0d75f11eadb95095ea019af39541af5a0596211a1f9ab25d2e5ee"},"mongo/datadog_checks/mongo/collectors/host_info.py":{"sha256":"132649b269a6aa522ba4971f3275e75e32c7e704383897b3313f512648f58354"},"mongo/datadog_checks/mongo/collectors/index_stats.py":{"sha256":"c19aaffe1a48bf14c0b3304324825f37b77db277ded422364b0c5072322bb532"},"mongo/datadog_checks/mongo/collectors/jumbo_stats.py":{"sha256":"52c8b97a4a9eb38b3248b5154ce3db3b5b0fde7ec11988457d4c82ecd319d510"},"mongo/datadog_checks/mongo/collectors/process_stats.py":{"sha256":"243d568a4211b0570c53999749fc78114501daaf88930a3a20d0dc313be15673"},"mongo/datadog_checks/mongo/collectors/replica.py":{"sha256":"540d191f7a1e32417b613b0854c43c6f39759e97f39b2c627b7f9fc244a60909"},"mongo/datadog_checks/mongo/collectors/replication_info.py":{"sha256":"1816d410df08ee4cb35f20a5bd95e0140acdda90db45853f9f9a138b95129563"},"mongo/datadog_checks/mongo/collectors/server_status.py":{"sha256":"553b3ffe83ed909c30dadd39efe56d807be12b86815916bf8d3cec32618fe193"},"mongo/datadog_checks/mongo/collectors/session_stats.py":{"sha256":"f0fadd88121a0c01621fef8f5b2b39063562e40fd8fef6fcfc68902a10cbdba8"},"mongo/datadog_checks/mongo/collectors/sharded_data_distribution_stats.py":{"sha256":"cad14ad478913b0b3bf96ca59b92dc9aa5a27824b01b9da0be3bb8b1dc679af2"},"mongo/datadog_checks/mongo/collectors/top.py":{"sha256":"2ae019703fb9d854400178bab84bb8c72c8b05b60b25ae87b0856f44e7fd5b09"},"mongo/datadog_checks/mongo/common.py":{"sha256":"01b55dea3aa97b30a943186a05056e8fec6fc561cf000178ccf85c1d6a27eb6e"},"mongo/datadog_checks/mongo/config.py":{"sha256":"d7fd197a4c4d77b81a2a0d6af89be997a6716046e21573978c256d771d509052"},"mongo/datadog_checks/mongo/config_models/__init__.py":{"sha256":"c9cf5c66894430e7edbb00d00613b58ccfd38360f2fe490a23c17cf71ed294dc"},"mongo/datadog_checks/mongo/config_models/defaults.py":{"sha256":"ce4cdfb2d9a7aa264afc61e0f2f16b6d1f3156a6665ad5cf874b7d8fed993323"},"mongo/datadog_checks/mongo/config_models/deprecations.py":{"sha256":"8f7a2da4ae21110d6a35a1c19c533c5bba8fafcd3db333e17552cf2c9ef29c35"},"mongo/datadog_checks/mongo/config_models/instance.py":{"sha256":"5b11c478a242324b632af646f3b1b788a13609d18c07e21dafab883ea62bd7ce"},"mongo/datadog_checks/mongo/config_models/shared.py":{"sha256":"59e3e9392c6d66622003fa9382bcc1975c31df77f379ac370c154619be29dc30"},"mongo/datadog_checks/mongo/config_models/validators.py":{"sha256":"fd66b0faa82cb277479ee3da5492f6b67a6ce44bafb1d6c3cc319e1e473a9e3d"},"mongo/datadog_checks/mongo/data/conf.yaml.example":{"sha256":"7d45703d296a891d9099bf25eea9dbdf667f5252ad0d2e2675dad0ee4f8e3069"},"mongo/datadog_checks/mongo/dbm/__init__.py":{"sha256":"ee840b22269e35c03869d3b7223c20ab5c65895ae23153a8d273c0f866d5b99d"},"mongo/datadog_checks/mongo/dbm/operation_samples.py":{"sha256":"e34ddaebddbd13d8b2a84ced4e59cac7cbc908fa1d29fe070d607930d2bde83c"},"mongo/datadog_checks/mongo/dbm/schemas.py":{"sha256":"710591a768d7683b79ef3de664c42c6cca6d629efb9d38573f980076380ac3e9"},"mongo/datadog_checks/mongo/dbm/slow_operations.py":{"sha256":"61294e225e809aef697bc24c25f562938846b68f0b2c65fecda810e9f3d4af94"},"mongo/datadog_checks/mongo/dbm/types.py":{"sha256":"4ba6e0c051ec3db44ea79864cb4bfe2596692958630f206a79e4eef87ebbb4e8"},"mongo/datadog_checks/mongo/dbm/utils.py":{"sha256":"d8ecc82bd7df0949eafa404e929b11422056cf77649d27a6ad4f323f9eb3d911"},"mongo/datadog_checks/mongo/discovery.py":{"sha256":"e500bf87b5539e5c9cb9fe49b3b7c62f6c7a8beab24d22422105c8147b908dea"},"mongo/datadog_checks/mongo/metrics.py":{"sha256":"b926adc0b9ba32a00878d367a780a56eec46bc4b8bfebb871118eb6278a383b9"},"mongo/datadog_checks/mongo/mongo.py":{"sha256":"ddcf2feb2a72cb8bc2a4d07058174775e0e4dc1dbbceb0855321c3e3ff5e1864"},"mongo/datadog_checks/mongo/utils.py":{"sha256":"4785466e3e5c3b72a51ac715fd789e63e653c4c9982316ddba15a73d5cb5546e"},"mongo/pyproject.toml":{"sha256":"5a0d6393f2fbdfcf1ba60f6663f7a52188b0384792cc519f37a051950a73de3f"},"mysql/datadog_checks/__init__.py":{"sha256":"9a3c64b8b00c94da4b4f34618d803d3255808caf21b8afa9195c84b61da66b6a"},"mysql/datadog_checks/mysql/__about__.py":{"sha256":"ecc7528c2b9587342efc10e3b5348c7f4b4e6153ba70889a98ee6a21465e3dd6"},"mysql/datadog_checks/mysql/__init__.py":{"sha256":"4c8b91ad58403cc613a89e3e3aff174eabc45c5c3341eed2097b92140e14c5b9"},"mysql/datadog_checks/mysql/activity.py":{"sha256":"a238af06051ff07cd5def717a1584a2debf43ddcb888c2284ccf1dffe2774e46"},"mysql/datadog_checks/mysql/collection_utils.py":{"sha256":"b4e9269603f28c08cd51169d1da215c3d7fe43d2c374aecf20319c0397efeb8f"},"mysql/datadog_checks/mysql/config.py":{"sha256":"bdc43bfb692986d3c44eb4aa469f76e801641baae8f0297a03667a4110319265"},"mysql/datadog_checks/mysql/config_models/__init__.py":{"sha256":"c9cf5c66894430e7edbb00d00613b58ccfd38360f2fe490a23c17cf71ed294dc"},"mysql/datadog_checks/mysql/config_models/defaults.py":{"sha256":"f8561dcad6351709702c1f0ffea640a021a48c6195793d19e99451513f6c1f14"},"mysql/datadog_checks/mysql/config_models/instance.py":{"sha256":"8c55e5a8a426e91b83167c5c0b030f489f8071bed45eb0505e0d653583befb3e"},"mysql/datadog_checks/mysql/config_models/shared.py":{"sha256":"0e28bdef38bf42f742007bc48081a27b7229228f8bc0888b8a54b0e833e3c30b"},"mysql/datadog_checks/mysql/config_models/validators.py":{"sha256":"9beccee4f007680175106485383200d3b84d198897f0af516b91097f5794586e"},"mysql/datadog_checks/mysql/const.py":{"sha256":"bbe1a29f16982f187f769af148f09c8b72c347d24c941fd94c6a6031b81d491e"},"mysql/datadog_checks/mysql/cursor.py":{"sha256":"36579b19d3407dfb04c2bb2227f73ccb2713cc802dd673e0d8243554bafb42e4"},"mysql/datadog_checks/mysql/data/conf.yaml.example":{"sha256":"d4afe84e0c57f4c1b4ca6a4905a1f1046f801d1731d1374bf6e931241ad778d4"},"mysql/datadog_checks/mysql/databases_data.py":{"sha256":"7ab742fd54bbb41c43d4beb69971744029c6a52c0ffb5eecead0f2ab1933ea7e"},"mysql/datadog_checks/mysql/innodb_metrics.py":{"sha256":"bf0b19a48091440e35def5d551bf7442c86ebd32eae335ca11b5a2da9163c6a3"},"mysql/datadog_checks/mysql/metadata.py":{"sha256":"5f2b60da3b1d5c06f5fd9fc9dce251b11717f84a0663a516c342b32c9875e658"},"mysql/datadog_checks/mysql/mysql.py":{"sha256":"fd20e00e899723de78868754bffce41272249d4814002a0a27d18a1e6f41b4ff"},"mysql/datadog_checks/mysql/queries.py":{"sha256":"f5693bd5f6b6cb93c37573648dbc8cbf106037ebc07e61e4b49986379ed7e576"},"mysql/datadog_checks/mysql/statement_samples.py":{"sha256":"a58ca2e1833fd515523ea2705bbbe9dca1808f079a71df55573ef4e3f1a764df"},"mysql/datadog_checks/mysql/statements.py":{"sha256":"f75349869f259ec2af90e17a370cba6b76335399d66d5a722e0808cb9df6f3d8"},"mysql/datadog_checks/mysql/util.py":{"sha256":"ed6c9b2ce3eb327f1660e485c4bff2ef9788f51c9244fdc2e105a9ff2a0e30bf"},"mysql/datadog_checks/mysql/version_utils.py":{"sha256":"393097b6536264021b4421ed8adccbfece01202671cd371409b7a7656b8570c4"},"mysql/pyproject.toml":{"sha256":"c35c1d363584a493e98c1ae7bb511a76bdfdcc54660ec65e440018a3a4ddbafd"},"postgres/datadog_checks/__init__.py":{"sha256":"9a3c64b8b00c94da4b4f34618d803d3255808caf21b8afa9195c84b61da66b6a"},"postgres/datadog_checks/postgres/__about__.py":{"sha256":"aca1e95cc9f996863822795043aea06c45560afd443827d61bbcf691891e6148"},"postgres/datadog_checks/postgres/__init__.py":{"sha256":"beb65398de80eb50d7350ecb3c69d146335fa642e8ec842108a618be88e59bf2"},"postgres/datadog_checks/postgres/aws.py":{"sha256":"86c712de2d4b99ca7a8e50c6d57552a38b03ee4858be042806c112ea6fe5f26c"},"postgres/datadog_checks/postgres/azure.py":{"sha256":"f22dd7ae2a0b4ddbb35af1147fcd17a007c481ca0c5fe73bec1439d2cfbf6100"},"postgres/datadog_checks/postgres/config.py":{"sha256":"e159a17503bc0d05ebf3a0aca8c006d8fe7ae1956d67051400c08edd13af9bca"},"postgres/datadog_checks/postgres/config_models/__init__.py":{"sha256":"c9cf5c66894430e7edbb00d00613b58ccfd38360f2fe490a23c17cf71ed294dc"},"postgres/datadog_checks/postgres/config_models/defaults.py":{"sha256":"05110354debc8190d5c87e83e66da3e76beb379609977de848d23c5d4a8fd091"},"postgres/datadog_checks/postgres/config_models/instance.py":{"sha256":"570f94e2ea5703c5bf9bb3ca1cd9a9fbdb7489c79bb0a6591f416f26a958d5be"},"postgres/datadog_checks/postgres/config_models/shared.py":{"sha256":"0e28bdef38bf42f742007bc48081a27b7229228f8bc0888b8a54b0e833e3c30b"},"postgres/datadog_checks/postgres/config_models/validators.py":{"sha256":"6fa54c66701f75695f5c0a7970c720e6a737d5e56fa2a0220010dee5e93496ea"},"postgres/datadog_checks/postgres/connections.py":{"sha256":"756507dc5245aae28db86ce13d17f358741e166422504a682fc8767c4ebb5076"},"postgres/datadog_checks/postgres/cursor.py":{"sha256":"21b46f57d89839c724f3cbcc9e198adced62b8ab84299d39229130ae09231422"},"postgres/datadog_checks/postgres/data/conf.yaml.example":{"sha256":"52ea65886c958ed86aa26e0edc36f1c55e65d17131330d282d9986fce88104e0"},"postgres/datadog_checks/postgres/discovery.py":{"sha256":"e08d4c113e824c490ca92178bb559a3f7091499914b032e473014f20d9a06610"},"postgres/datadog_checks/postgres/explain_parameterized_queries.py":{"sha256":"130a841398a1bffe07c355fd9f317ba0d18ad68d2911cb924302549ad922234e"},"postgres/datadog_checks/postgres/metadata.py":{"sha256":"7dbfbddd09b881f51a58a89760705e0d4be637e5f63397676f9613a8e2340049"},"postgres/datadog_checks/postgres/metrics_cache.py":{"sha256":"ab8327cc641e2f05cce926e9a0acaab46529856168f8f87e933af4878a8c326f"},"postgres/datadog_checks/postgres/postgres.py":{"sha256":"156e63a332f13f453991ac35858aac6951902b6f104e4b608da61fe33a2694c7"},"postgres/datadog_checks/postgres/query_calls_cache.py":{"sha256":"f8058ffbdd750c9cbe49fb45ced0590e0f0418c5635f99cfb4240920f3779f7b"},"postgres/datadog_checks/postgres/relationsmanager.py":{"sha256":"7fe204f4070c97d825430cc15ef70174f3a35c60b582c104a85bfc477044208b"},"postgres/datadog_checks/postgres/statement_samples.py":{"sha256":"382d5337f5f748bb18e56c8357e667a59abc4d2cb692372c4903f29dae77e3f5"},"postgres/datadog_checks/postgres/statements.py":{"sha256":"bf846b252e6cc0c76a1867afa60942e3a23271c32d30a737fdaf5a1ddd70d665"},"postgres/datadog_checks/postgres/util.py":{"sha256":"779b0b7c95f9488ed51b3adfe30f0f62c887ef60b8fb386f1685607b8868a767"},"postgres/datadog_checks/postgres/version_utils.py":{"sha256":"a61999af782afe9d0aadf7ff49817e093de4739319291330df66157641102e0e"},"postgres/pyproject.toml":{"sha256":"984e3c4cf2e27443307f5477f422910f78228ed6667d8f07ce54f2547d33c0f4"},"sqlserver/datadog_checks/__init__.py":{"sha256":"9a3c64b8b00c94da4b4f34618d803d3255808caf21b8afa9195c84b61da66b6a"},"sqlserver/datadog_checks/sqlserver/__about__.py":{"sha256":"cf584d1aa1c901459a1a55e64097339a34b3533fb9ad33b5964f002b14445997"},"sqlserver/datadog_checks/sqlserver/__init__.py":{"sha256":"5cb0fa9aa3dfe21fcdc6404b1fd475678300408f00989133bb0b761aa4fac391"},"sqlserver/datadog_checks/sqlserver/activity.py":{"sha256":"bfb2efde67e6f36145127fc93108f544adf5df0679228fb910e38a39c408d0be"},"sqlserver/datadog_checks/sqlserver/agent_history.py":{"sha256":"6ca6ec85ffab1742a368489067472a5c988ce7764a4484310bc830d2139148b2"},"sqlserver/datadog_checks/sqlserver/azure.py":{"sha256":"46bbf99a3c119c19784a2c111d494fc9d5ca97aa8ad4077b33c341fa9a1f7dd3"},"sqlserver/datadog_checks/sqlserver/config.py":{"sha256":"664da14044876bec779597d7a6237db956a79e0ea2685dfb1b220b939931b1f3"},"sqlserver/datadog_checks/sqlserver/config_models/__init__.py":{"sha256":"c9cf5c66894430e7edbb00d00613b58ccfd38360f2fe490a23c17cf71ed294dc"},"sqlserver/datadog_checks/sqlserver/config_models/defaults.py":{"sha256":"fd287bf46bf10029d9e770e8f35eb90ee5bf8c280a6a2ac307568c40e8f0f5ba"},"sqlserver/datadog_checks/sqlserver/config_models/instance.py":{"sha256":"37f964640a7d03cd4492b7f4a8de939fef9ed3c5b6547e708569daf99824fd5b"},"sqlserver/datadog_checks/sqlserver/config_models/shared.py":{"sha256":"fd4667b5473e8617aa585a0d1260b7d84617c9a940743c52fe167f5fa5b2aad5"},"sqlserver/datadog_checks/sqlserver/config_models/validators.py":{"sha256":"0424fe17778b76e1b589b9564d0d543d1b71dba1edd6e5d71a7c528dddf68e0b"},"sqlserver/datadog_checks/sqlserver/connection.py":{"sha256":"7ca08f4e8a1a3050a81d0fe41dc420db0d0aca499bff0db186edd5a781a63b72"},"sqlserver/datadog_checks/sqlserver/connection_errors.py":{"sha256":"46e49f8c93f4d4c9ecb9db085e0025a1cebb753de98bd22116229710d5690922"},"sqlserver/datadog_checks/sqlserver/const.py":{"sha256":"9acddb9fc5bb8d0e64810e3098560820feefc6337a7bd319898ae04ca08ccaf7"},"sqlserver/datadog_checks/sqlserver/cursor.py":{"sha256":"c4ba12972d28f5e9eef59ab31216961022e4b26f47024bc17ecb814c29a77158"},"sqlserver/datadog_checks/sqlserver/data/conf.yaml.example":{"sha256":"bc306cb0b6ade2e4e2dd68cc2e7e26e7e44a664b410a661636e3ee594294426c"},"sqlserver/datadog_checks/sqlserver/data/driver_config/odbcinst.ini":{"sha256":"55b383a55036ff3af5def0be4444e52ddb163e64972c926a44b082d1e5e62397"},"sqlserver/datadog_checks/sqlserver/database_metrics/__init__.py":{"sha256":"47a8b6420859c2dccc6bd1e822ed8c09474e5d4522d118660e0868cb167e900d"},"sqlserver/datadog_checks/sqlserver/database_metrics/ao_metrics.py":{"sha256":"70f7e64a38011bc901a27e094bc79614714d2149ad8e8ec06ae018568652746d"},"sqlserver/datadog_checks/sqlserver/database_metrics/availability_groups_metrics.py":{"sha256":"73f80a5407684bab7e32a144cd34b1a7975e4689f2ec9db33c8cd2c36f96a3ac"},"sqlserver/datadog_checks/sqlserver/database_metrics/availability_replicas_metrics.py":{"sha256":"9998162cc35398b873faf6e1ee80c2c2bb27d21d9ad62938d8edf223548e0401"},"sqlserver/datadog_checks/sqlserver/database_metrics/base.py":{"sha256":"9005c36c97d05cb7fec3365f5412c5d13447ea4bbc0acca691c3939d6f62c699"},"sqlserver/datadog_checks/sqlserver/database_metrics/database_agent_metrics.py":{"sha256":"2a0d727da73dafef0038ac3047dc61316daf9778f4f2d72f4a59be85f0d727ce"},"sqlserver/datadog_checks/sqlserver/database_metrics/database_backup_metrics.py":{"sha256":"d14117812bd9dd58569bca26a6d8d68bdcccbb27d77096b53f62e0c12db219ab"},"sqlserver/datadog_checks/sqlserver/database_metrics/database_files_metrics.py":{"sha256":"7c79b2a1ebc425c8f87b7aaf2ffa3022a5581fd1d0c4a45adfe941e2aec635cc"},"sqlserver/datadog_checks/sqlserver/database_metrics/database_replication_stats_metrics.py":{"sha256":"4938194ee34f453d76498789ec1cddd1090e7670c8d2b59ed4328e53b937c13a"},"sqlserver/datadog_checks/sqlserver/database_metrics/database_stats_metrics.py":{"sha256":"f874a4497a2e0f82c040c480a557c432b2c7e38663f0eccc3f3f373e0365fdd5"},"sqlserver/datadog_checks/sqlserver/database_metrics/db_fragmentation_metrics.py":{"sha256":"9f003fabc18bacddd0c242be6711591fdbb7c2919bf6ea6e1a560752f0f4491f"},"sqlserver/datadog_checks/sqlserver/database_metrics/fci_metrics.py":{"sha256":"ee766adfea48b3c4b71d3aeeee445fedd64461ad1efdeac4dab2b38e33a49c84"},"sqlserver/datadog_checks/sqlserver/database_metrics/file_stats_metrics.py":{"sha256":"90063d87c2421196740c9eccc5d0b1e3c2df943c7510361ea50aa9e9a8b4d15f"},"sqlserver/datadog_checks/sqlserver/database_metrics/index_usage_metrics.py":{"sha256":"753b281beed7108b119cd1030eb2794d8e60d4e793556b3fc468a1920000243c"},"sqlserver/datadog_checks/sqlserver/database_metrics/master_files_metrics.py":{"sha256":"4f2a4deecace42b1cc485977e2744069dc917f6918f6664c3899d08ad7d6023d"},"sqlserver/datadog_checks/sqlserver/database_metrics/os_schedulers_metrics.py":{"sha256":"99d632ae2570d9fcb52df02f47540b1d8eca75bd37e237d80474c5e2d64cc1f3"},"sqlserver/datadog_checks/sqlserver/database_metrics/os_tasks_metrics.py":{"sha256":"755b0147be8d77913d9f719c277bf68f0e684178387dff781e36f3017623aea0"},"sqlserver/datadog_checks/sqlserver/database_metrics/primary_log_shipping_metrics.py":{"sha256":"dddff1141070f0787aa104dc7dc9153891cb4264391beee20362b09394f9e3d5"},"sqlserver/datadog_checks/sqlserver/database_metrics/secondary_log_shipping_metrics.py":{"sha256":"1a06aa3d6b87f5ec801af33c30e61f48deb9a431b07d2d9b43636ccf2dfce666"},"sqlserver/datadog_checks/sqlserver/database_metrics/server_state_metrics.py":{"sha256":"3592b9bdad0e509bfaa0fa760495222cfcd642568c1c28a13d667c57a0e42ed0"},"sqlserver/datadog_checks/sqlserver/database_metrics/tempdb_file_space_usage_metrics.py":{"sha256":"ec61f3721c6cb89be8a3973416afc809bba9bf7440e0b992fde0f5b206afd4b4"},"sqlserver/datadog_checks/sqlserver/database_metrics/xe_session_metrics.py":{"sha256":"0bb577e85673592cae4cf546b56678697a666c3d2b27a1e333e3df7b5af7ead1"},"sqlserver/datadog_checks/sqlserver/deadlocks.py":{"sha256":"ce0581aafd1f6428c9e4492bd10ce3b10a20cd7f6a7eb87dfc68ebc67cf6f89d"},"sqlserver/datadog_checks/sqlserver/metadata.py":{"sha256":"668afc31e1235fe5048bccfc701532335405fe85452eec575572e650b3ed1f3b"},"sqlserver/datadog_checks/sqlserver/metrics.py":{"sha256":"803016ab8e3ed568e776331b4dd6d9c0fca41e3faa59f2393818fba02170429e"},"sqlserver/datadog_checks/sqlserver/queries.py":{"sha256":"83f90e5164c552b951b86b37b9fcc85c1b462c8fb2df87f3b07fcbb265fed59b"},"sqlserver/datadog_checks/sqlserver/schemas.py":{"sha256":"9b2788fa2ffc6b72831a8f46a4081adefee574eb44ceb55b5e419842bc5153dc"},"sqlserver/datadog_checks/sqlserver/sqlserver.py":{"sha256":"fde60134ea9877ea8de26b2b8b002e1da2175bf4accef857912eaad8eea2f21b"},"sqlserver/datadog_checks/sqlserver/statements.py":{"sha256":"52a22233c8660d51e017be36fb14916abc401244d177bbe01894f90fd980cf17"},"sqlserver/datadog_checks/sqlserver/stored_procedures.py":{"sha256":"52d1330ecc60f6324330cd05bcaf926c42062add9b728adccb818902d5eb8071"},"sqlserver/datadog_checks/sqlserver/utils.py":{"sha256":"bcca615b23b00cc54b5d2bc46a4f7148fd49bafdf7a98ef08dcb9e0e93ca2e3b"},"sqlserver/pyproject.toml":{"sha256":"73e00df6e84ff54c6df36e150ae5336b80654ef8d4cea3dbe5c09eeb6788e23d"}}}} \ No newline at end of file diff --git a/aerospike/CHANGELOG.md b/aerospike/CHANGELOG.md index ceb3be456ee3c..baa0c5576c721 100644 --- a/aerospike/CHANGELOG.md +++ b/aerospike/CHANGELOG.md @@ -2,6 +2,12 @@ +## 4.0.1 / 2024-12-26 + +***Fixed***: + +* Don't skip last index in each namespace ([#18996](https://github.com/DataDog/integrations-core/pull/18996)) + ## 4.0.0 / 2024-10-04 / Agent 7.59.0 ***Removed***: diff --git a/aerospike/changelog.d/18996.fixed b/aerospike/changelog.d/18996.fixed deleted file mode 100644 index f46ba036b3612..0000000000000 --- a/aerospike/changelog.d/18996.fixed +++ /dev/null @@ -1 +0,0 @@ -Don't skip last index in each namespace diff --git a/aerospike/datadog_checks/aerospike/__about__.py b/aerospike/datadog_checks/aerospike/__about__.py index 78967d676d1af..59269a7bb5672 100644 --- a/aerospike/datadog_checks/aerospike/__about__.py +++ b/aerospike/datadog_checks/aerospike/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2019-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '4.0.0' +__version__ = '4.0.1' diff --git a/airflow/CHANGELOG.md b/airflow/CHANGELOG.md index 9dc1367093190..5e0f849f845d9 100644 --- a/airflow/CHANGELOG.md +++ b/airflow/CHANGELOG.md @@ -2,6 +2,12 @@ +## 6.2.0 / 2024-12-26 + +***Added***: + +* Use `start_date` instead of `execution_date` for ongoing duration metrics ([#19278](https://github.com/DataDog/integrations-core/pull/19278)) + ## 6.1.0 / 2024-10-04 / Agent 7.59.0 ***Fixed***: diff --git a/airflow/changelog.d/19278.added b/airflow/changelog.d/19278.added deleted file mode 100644 index 45bf7d91d95ab..0000000000000 --- a/airflow/changelog.d/19278.added +++ /dev/null @@ -1 +0,0 @@ -Use `start_date` instead of `execution_date` for ongoing duration metrics \ No newline at end of file diff --git a/airflow/datadog_checks/airflow/__about__.py b/airflow/datadog_checks/airflow/__about__.py index a1743c47e0d86..dc781a1f01ffc 100644 --- a/airflow/datadog_checks/airflow/__about__.py +++ b/airflow/datadog_checks/airflow/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2019 # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '6.1.0' +__version__ = '6.2.0' diff --git a/cisco_aci/CHANGELOG.md b/cisco_aci/CHANGELOG.md index 550eef386c658..8586a4daa27e7 100644 --- a/cisco_aci/CHANGELOG.md +++ b/cisco_aci/CHANGELOG.md @@ -2,6 +2,16 @@ +## 4.2.0 / 2024-12-26 + +***Added***: + +* [NDM] [Cisco ACI] Support submitting topology metadata (utilizing LLDP neighbor information) ([#18675](https://github.com/DataDog/integrations-core/pull/18675)) + +***Fixed***: + +* [NDM] [Cisco ACI] Fix APIC device status ([#19204](https://github.com/DataDog/integrations-core/pull/19204)) + ## 4.1.0 / 2024-10-31 / Agent 7.60.0 ***Added***: diff --git a/cisco_aci/changelog.d/18675.added b/cisco_aci/changelog.d/18675.added deleted file mode 100644 index 72ee9491e1b34..0000000000000 --- a/cisco_aci/changelog.d/18675.added +++ /dev/null @@ -1 +0,0 @@ -[NDM] [Cisco ACI] Support submitting topology metadata (utilizing LLDP neighbor information) diff --git a/cisco_aci/changelog.d/19204.fixed b/cisco_aci/changelog.d/19204.fixed deleted file mode 100644 index 2ffc1d5bac760..0000000000000 --- a/cisco_aci/changelog.d/19204.fixed +++ /dev/null @@ -1 +0,0 @@ -[NDM] [Cisco ACI] Fix APIC device status diff --git a/cisco_aci/datadog_checks/cisco_aci/__about__.py b/cisco_aci/datadog_checks/cisco_aci/__about__.py index ccf6bd22bcecb..d396e637fa72e 100644 --- a/cisco_aci/datadog_checks/cisco_aci/__about__.py +++ b/cisco_aci/datadog_checks/cisco_aci/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = "4.1.0" +__version__ = "4.2.0" diff --git a/datadog_checks_base/CHANGELOG.md b/datadog_checks_base/CHANGELOG.md index 03d73bac13c24..e70755f160925 100644 --- a/datadog_checks_base/CHANGELOG.md +++ b/datadog_checks_base/CHANGELOG.md @@ -2,6 +2,21 @@ +## 37.3.0 / 2024-12-26 + +***Security***: + +* Add FIPS switch ([#19179](https://github.com/DataDog/integrations-core/pull/19179)) + +***Added***: + +* Show diff to closest metric match when metric test fails ([#18975](https://github.com/DataDog/integrations-core/pull/18975)) +* Use `time_elapsed` metric type for process start time and last GC time metrics ([#19309](https://github.com/DataDog/integrations-core/pull/19309)) + +***Fixed***: + +* Fix "no snapshot data found" error when `agent check --profile-memory` ([#19197](https://github.com/DataDog/integrations-core/pull/19197)) + ## 37.2.0 / 2024-12-05 / Agent 7.60.0 ***Added***: diff --git a/datadog_checks_base/changelog.d/18975.added b/datadog_checks_base/changelog.d/18975.added deleted file mode 100644 index d95d103203c3e..0000000000000 --- a/datadog_checks_base/changelog.d/18975.added +++ /dev/null @@ -1 +0,0 @@ -Show diff to closest metric match when metric test fails diff --git a/datadog_checks_base/changelog.d/19179.security b/datadog_checks_base/changelog.d/19179.security deleted file mode 100644 index e2819d1fafecd..0000000000000 --- a/datadog_checks_base/changelog.d/19179.security +++ /dev/null @@ -1 +0,0 @@ -Add FIPS switch diff --git a/datadog_checks_base/changelog.d/19197.fixed b/datadog_checks_base/changelog.d/19197.fixed deleted file mode 100644 index 31cd6530b5639..0000000000000 --- a/datadog_checks_base/changelog.d/19197.fixed +++ /dev/null @@ -1 +0,0 @@ -Fix "no snapshot data found" error when `agent check --profile-memory` diff --git a/datadog_checks_base/changelog.d/19309.added b/datadog_checks_base/changelog.d/19309.added deleted file mode 100644 index af08c0065b73d..0000000000000 --- a/datadog_checks_base/changelog.d/19309.added +++ /dev/null @@ -1 +0,0 @@ -Use `time_elapsed` metric type for process start time and last GC time metrics \ No newline at end of file diff --git a/datadog_checks_base/datadog_checks/base/__about__.py b/datadog_checks_base/datadog_checks/base/__about__.py index d2262989bc126..1d96edfc82e48 100644 --- a/datadog_checks_base/datadog_checks/base/__about__.py +++ b/datadog_checks_base/datadog_checks/base/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2018-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = "37.2.0" +__version__ = "37.3.0" diff --git a/datadog_cluster_agent/CHANGELOG.md b/datadog_cluster_agent/CHANGELOG.md index cc44ae90777ee..64c44c58bb5ea 100644 --- a/datadog_cluster_agent/CHANGELOG.md +++ b/datadog_cluster_agent/CHANGELOG.md @@ -2,6 +2,12 @@ +## 5.2.0 / 2024-12-26 + +***Added***: + +* add telemetry for local load store in dca ([#19229](https://github.com/DataDog/integrations-core/pull/19229)) + ## 5.1.0 / 2024-10-31 / Agent 7.60.0 ***Added***: diff --git a/datadog_cluster_agent/changelog.d/19229.added b/datadog_cluster_agent/changelog.d/19229.added deleted file mode 100644 index 96fec650c7fe8..0000000000000 --- a/datadog_cluster_agent/changelog.d/19229.added +++ /dev/null @@ -1 +0,0 @@ -add telemetry for local load store in dca diff --git a/datadog_cluster_agent/datadog_checks/datadog_cluster_agent/__about__.py b/datadog_cluster_agent/datadog_checks/datadog_cluster_agent/__about__.py index 414513f536ddb..c953bf2884887 100644 --- a/datadog_cluster_agent/datadog_checks/datadog_cluster_agent/__about__.py +++ b/datadog_cluster_agent/datadog_checks/datadog_cluster_agent/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2021-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '5.1.0' +__version__ = '5.2.0' diff --git a/dns_check/CHANGELOG.md b/dns_check/CHANGELOG.md index 13690f92ee70a..a5883d23c66c8 100644 --- a/dns_check/CHANGELOG.md +++ b/dns_check/CHANGELOG.md @@ -2,6 +2,12 @@ +## 5.0.1 / 2024-12-26 + +***Fixed***: + +* Move timing to be more precise with calculating response times ([#19276](https://github.com/DataDog/integrations-core/pull/19276)) + ## 5.0.0 / 2024-10-04 / Agent 7.59.0 ***Removed***: diff --git a/dns_check/changelog.d/19276.fixed b/dns_check/changelog.d/19276.fixed deleted file mode 100644 index 35d2b98f8129a..0000000000000 --- a/dns_check/changelog.d/19276.fixed +++ /dev/null @@ -1 +0,0 @@ -Move timing to be more precise with calculating response times diff --git a/dns_check/datadog_checks/dns_check/__about__.py b/dns_check/datadog_checks/dns_check/__about__.py index d2601db5d5cc0..8c33f486fe48a 100644 --- a/dns_check/datadog_checks/dns_check/__about__.py +++ b/dns_check/datadog_checks/dns_check/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '5.0.0' +__version__ = '5.0.1' diff --git a/keda/CHANGELOG.md b/keda/CHANGELOG.md index d946c1b64f849..4882ed5d592a7 100644 --- a/keda/CHANGELOG.md +++ b/keda/CHANGELOG.md @@ -2,3 +2,8 @@ +## 1.0.0 / 2024-12-26 + +***Added***: + +* Initial Release ([#19303](https://github.com/DataDog/integrations-core/pull/19303)) diff --git a/keda/changelog.d/19303.added b/keda/changelog.d/19303.added deleted file mode 100644 index cc7498e240e19..0000000000000 --- a/keda/changelog.d/19303.added +++ /dev/null @@ -1 +0,0 @@ -Initial Release diff --git a/keda/datadog_checks/keda/__about__.py b/keda/datadog_checks/keda/__about__.py index e9541ce83e9e5..acbfd1c866b84 100644 --- a/keda/datadog_checks/keda/__about__.py +++ b/keda/datadog_checks/keda/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2024-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '0.0.1' +__version__ = '1.0.0' diff --git a/milvus/CHANGELOG.md b/milvus/CHANGELOG.md index dd71dbd975e36..1b010e7cd74f8 100644 --- a/milvus/CHANGELOG.md +++ b/milvus/CHANGELOG.md @@ -2,3 +2,8 @@ +## 1.0.0 / 2024-12-26 + +***Added***: + +* Initial Release ([#19055](https://github.com/DataDog/integrations-core/pull/19055)) diff --git a/milvus/changelog.d/19055.added b/milvus/changelog.d/19055.added deleted file mode 100644 index aa949b47b7b41..0000000000000 --- a/milvus/changelog.d/19055.added +++ /dev/null @@ -1 +0,0 @@ -Initial Release \ No newline at end of file diff --git a/milvus/datadog_checks/milvus/__about__.py b/milvus/datadog_checks/milvus/__about__.py index e9541ce83e9e5..acbfd1c866b84 100644 --- a/milvus/datadog_checks/milvus/__about__.py +++ b/milvus/datadog_checks/milvus/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2024-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '0.0.1' +__version__ = '1.0.0' diff --git a/mongo/CHANGELOG.md b/mongo/CHANGELOG.md index 682f4352023f3..87f6d903c2462 100644 --- a/mongo/CHANGELOG.md +++ b/mongo/CHANGELOG.md @@ -2,6 +2,12 @@ +## 8.3.1 / 2024-12-26 + +***Fixed***: + +* Skip unauthorized `local` database collections `system.replset`, `replset.election`, and `replset.minvalid` in collection and index stats gathering to avoid permission errors. ([#19244](https://github.com/DataDog/integrations-core/pull/19244)) + ## 8.3.0 / 2024-11-28 ***Added***: diff --git a/mongo/changelog.d/19244.fixed b/mongo/changelog.d/19244.fixed deleted file mode 100644 index 120bd5e2976f1..0000000000000 --- a/mongo/changelog.d/19244.fixed +++ /dev/null @@ -1 +0,0 @@ -Skip unauthorized `local` database collections `system.replset`, `replset.election`, and `replset.minvalid` in collection and index stats gathering to avoid permission errors. diff --git a/mongo/datadog_checks/mongo/__about__.py b/mongo/datadog_checks/mongo/__about__.py index 88bbe435de59f..b401aede304fe 100644 --- a/mongo/datadog_checks/mongo/__about__.py +++ b/mongo/datadog_checks/mongo/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '8.3.0' +__version__ = '8.3.1' diff --git a/mysql/CHANGELOG.md b/mysql/CHANGELOG.md index 30d4995571bb1..b9be0956d0102 100644 --- a/mysql/CHANGELOG.md +++ b/mysql/CHANGELOG.md @@ -2,6 +2,12 @@ +## 14.4.0 / 2024-12-26 + +***Added***: + +* Add `mysql.performance.performance_schema_digest_lost`, the number of digest instances that could not be instrumented in the `events_statements_summary_by_digest` table. ([#19121](https://github.com/DataDog/integrations-core/pull/19121)) + ## 14.3.0 / 2024-11-28 ***Added***: diff --git a/mysql/changelog.d/19121.added b/mysql/changelog.d/19121.added deleted file mode 100644 index 97990bdf0ca9b..0000000000000 --- a/mysql/changelog.d/19121.added +++ /dev/null @@ -1 +0,0 @@ -Add `mysql.performance.performance_schema_digest_lost`, the number of digest instances that could not be instrumented in the `events_statements_summary_by_digest` table. diff --git a/mysql/datadog_checks/mysql/__about__.py b/mysql/datadog_checks/mysql/__about__.py index 58eaa19f57f56..e3db75fa3d1e7 100644 --- a/mysql/datadog_checks/mysql/__about__.py +++ b/mysql/datadog_checks/mysql/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = "14.3.0" +__version__ = "14.4.0" diff --git a/postgres/CHANGELOG.md b/postgres/CHANGELOG.md index 6e304cb914357..2d813a04e204c 100644 --- a/postgres/CHANGELOG.md +++ b/postgres/CHANGELOG.md @@ -2,6 +2,16 @@ +## 22.4.0 / 2024-12-26 + +***Added***: + +* Add postgresql.relation.xmin metric ([#19218](https://github.com/DataDog/integrations-core/pull/19218)) + +***Fixed***: + +* Fix check for Postgres collect query activity to avoid bugs with in-flight duration and missing blocking pids ([#19271](https://github.com/DataDog/integrations-core/pull/19271)) + ## 22.3.0 / 2024-11-28 ***Added***: diff --git a/postgres/changelog.d/19218.added b/postgres/changelog.d/19218.added deleted file mode 100644 index 7ba3bd2933029..0000000000000 --- a/postgres/changelog.d/19218.added +++ /dev/null @@ -1 +0,0 @@ -Add postgresql.relation.xmin metric diff --git a/postgres/changelog.d/19271.fixed b/postgres/changelog.d/19271.fixed deleted file mode 100644 index 9d981b57621e7..0000000000000 --- a/postgres/changelog.d/19271.fixed +++ /dev/null @@ -1 +0,0 @@ -Fix check for Postgres collect query activity to avoid bugs with in-flight duration and missing blocking pids diff --git a/postgres/datadog_checks/postgres/__about__.py b/postgres/datadog_checks/postgres/__about__.py index c510a97eec89f..cdff175ef224f 100644 --- a/postgres/datadog_checks/postgres/__about__.py +++ b/postgres/datadog_checks/postgres/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = "22.3.0" +__version__ = "22.4.0" diff --git a/quarkus/CHANGELOG.md b/quarkus/CHANGELOG.md index d0112b5d3908f..aeacd4bcf761c 100644 --- a/quarkus/CHANGELOG.md +++ b/quarkus/CHANGELOG.md @@ -2,3 +2,8 @@ +## 1.0.0 / 2024-12-26 + +***Added***: + +* Initial Release ([#19196](https://github.com/DataDog/integrations-core/pull/19196)) diff --git a/quarkus/changelog.d/19196.added b/quarkus/changelog.d/19196.added deleted file mode 100644 index aa949b47b7b41..0000000000000 --- a/quarkus/changelog.d/19196.added +++ /dev/null @@ -1 +0,0 @@ -Initial Release \ No newline at end of file diff --git a/quarkus/datadog_checks/quarkus/__about__.py b/quarkus/datadog_checks/quarkus/__about__.py index e9541ce83e9e5..acbfd1c866b84 100644 --- a/quarkus/datadog_checks/quarkus/__about__.py +++ b/quarkus/datadog_checks/quarkus/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2024-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '0.0.1' +__version__ = '1.0.0' diff --git a/requirements-agent-release.txt b/requirements-agent-release.txt index 1982fa9e99de6..603be6bf45000 100644 --- a/requirements-agent-release.txt +++ b/requirements-agent-release.txt @@ -4,8 +4,8 @@ datadog-active-directory==4.0.0; sys_platform == 'win32' datadog-activemq-xml==5.0.0 datadog-activemq==5.0.0 -datadog-aerospike==4.0.0; sys_platform == 'linux2' -datadog-airflow==6.1.0 +datadog-aerospike==4.0.1; sys_platform == 'linux2' +datadog-airflow==6.2.0 datadog-amazon-msk==6.0.0 datadog-ambari==6.0.0; sys_platform != 'win32' datadog-apache==6.0.0 @@ -27,11 +27,11 @@ datadog-cassandra==3.0.0 datadog-ceph==4.0.0; sys_platform != 'win32' datadog-cert-manager==5.1.0 datadog-checkpoint-quantum-firewall==1.0.0 -datadog-checks-base==37.2.0 +datadog-checks-base==37.3.0 datadog-checks-dependency-provider==3.0.0 datadog-checks-downloader==7.0.0 datadog-cilium==5.0.0 -datadog-cisco-aci==4.1.0 +datadog-cisco-aci==4.2.0 datadog-cisco-secure-firewall==1.0.0 datadog-citrix-hypervisor==5.0.0 datadog-clickhouse==5.1.0 @@ -44,11 +44,11 @@ datadog-coredns==5.0.0; sys_platform == 'linux2' datadog-couch==8.1.0 datadog-couchbase==5.0.0 datadog-crio==4.0.0 -datadog-datadog-cluster-agent==5.1.0 +datadog-datadog-cluster-agent==5.2.0 datadog-dcgm==3.1.0 datadog-directory==4.0.0 datadog-disk==7.0.0 -datadog-dns-check==5.0.0 +datadog-dns-check==5.0.1 datadog-dotnetclr==4.0.0; sys_platform == 'win32' datadog-druid==4.0.0 datadog-ecs-fargate==6.0.0 @@ -94,6 +94,7 @@ datadog-journald==3.0.0 datadog-kafka-consumer==6.1.0 datadog-kafka==4.0.0 datadog-karpenter==2.1.0 +datadog-keda==1.0.0 datadog-kong==5.0.0 datadog-kube-apiserver-metrics==6.0.0 datadog-kube-controller-manager==7.0.0 @@ -120,8 +121,9 @@ datadog-marklogic==6.0.0 datadog-mcache==6.0.0; sys_platform != 'win32' datadog-mesos-master==5.0.0; sys_platform != 'win32' datadog-mesos-slave==5.0.0; sys_platform != 'win32' -datadog-mongo==8.3.0 -datadog-mysql==14.3.0 +datadog-milvus==1.0.0 +datadog-mongo==8.3.1 +datadog-mysql==14.4.0 datadog-nagios==3.0.0 datadog-network==5.1.0 datadog-nfsstat==3.0.0; sys_platform == 'linux2' @@ -142,13 +144,14 @@ datadog-pgbouncer==8.0.0; sys_platform != 'win32' datadog-php-fpm==5.0.0 datadog-ping-federate==2.0.0 datadog-postfix==3.0.0; sys_platform != 'win32' -datadog-postgres==22.3.0 +datadog-postgres==22.4.0 datadog-powerdns-recursor==4.0.0 datadog-presto==3.1.0 datadog-process==5.0.0 datadog-prometheus==5.0.0 datadog-proxysql==7.0.0 datadog-pulsar==3.1.0 +datadog-quarkus==1.0.0 datadog-rabbitmq==7.0.0 datadog-ray==2.1.0 datadog-redisdb==7.0.0 @@ -167,11 +170,12 @@ datadog-solr==2.1.0 datadog-sonarqube==5.1.0 datadog-sonicwall-firewall==1.0.0 datadog-spark==6.1.0 -datadog-sqlserver==20.2.0 +datadog-sqlserver==21.0.0 datadog-squid==4.0.0 datadog-ssh-check==4.0.0 datadog-statsd==3.0.0 datadog-strimzi==3.1.0 +datadog-supabase==1.0.0 datadog-supervisord==4.0.0 datadog-suricata==2.0.0 datadog-symantec-endpoint-protection==1.0.0 diff --git a/sqlserver/CHANGELOG.md b/sqlserver/CHANGELOG.md index 4cb8686237ec3..43f88407d0385 100644 --- a/sqlserver/CHANGELOG.md +++ b/sqlserver/CHANGELOG.md @@ -2,6 +2,18 @@ +## 21.0.0 / 2024-12-26 + +***Changed***: + +* Fall back to ``system_health/event_file`` when querying deadlocks if `datadog` XE session wasn't created. ([#19189](https://github.com/DataDog/integrations-core/pull/19189)) + +***Added***: + +* Update configuration structure and allow configuration of all database metrics ([#19111](https://github.com/DataDog/integrations-core/pull/19111)) +* Send schema name as part of index usage metrics ([#19266](https://github.com/DataDog/integrations-core/pull/19266)) +* Add schema tag to db_fragmentation metrics for sqlserver ([#19277](https://github.com/DataDog/integrations-core/pull/19277)) + ## 20.2.0 / 2024-11-28 ***Added***: diff --git a/sqlserver/changelog.d/19111.added b/sqlserver/changelog.d/19111.added deleted file mode 100644 index c3ae6706f8277..0000000000000 --- a/sqlserver/changelog.d/19111.added +++ /dev/null @@ -1 +0,0 @@ -Update configuration structure and allow configuration of all database metrics \ No newline at end of file diff --git a/sqlserver/changelog.d/19189.changed b/sqlserver/changelog.d/19189.changed deleted file mode 100644 index c79730c4307db..0000000000000 --- a/sqlserver/changelog.d/19189.changed +++ /dev/null @@ -1 +0,0 @@ -Fall back to ``system_health/event_file`` when querying deadlocks if `datadog` XE session wasn't created. diff --git a/sqlserver/changelog.d/19266.added b/sqlserver/changelog.d/19266.added deleted file mode 100644 index fdd9c88d9bf1f..0000000000000 --- a/sqlserver/changelog.d/19266.added +++ /dev/null @@ -1 +0,0 @@ -Send schema name as part of index usage metrics diff --git a/sqlserver/changelog.d/19277.added b/sqlserver/changelog.d/19277.added deleted file mode 100644 index 527d2697cc0d2..0000000000000 --- a/sqlserver/changelog.d/19277.added +++ /dev/null @@ -1 +0,0 @@ -Add schema tag to db_fragmentation metrics for sqlserver diff --git a/sqlserver/datadog_checks/sqlserver/__about__.py b/sqlserver/datadog_checks/sqlserver/__about__.py index cc600abdac80d..6919269729939 100644 --- a/sqlserver/datadog_checks/sqlserver/__about__.py +++ b/sqlserver/datadog_checks/sqlserver/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '20.2.0' +__version__ = '21.0.0' diff --git a/supabase/CHANGELOG.md b/supabase/CHANGELOG.md index 59c3ebcf6b575..2551522a7cd24 100644 --- a/supabase/CHANGELOG.md +++ b/supabase/CHANGELOG.md @@ -2,3 +2,8 @@ +## 1.0.0 / 2024-12-26 + +***Added***: + +* Initial Release ([#19307](https://github.com/DataDog/integrations-core/pull/19307)) diff --git a/supabase/changelog.d/19307.added b/supabase/changelog.d/19307.added deleted file mode 100644 index aa949b47b7b41..0000000000000 --- a/supabase/changelog.d/19307.added +++ /dev/null @@ -1 +0,0 @@ -Initial Release \ No newline at end of file diff --git a/supabase/datadog_checks/supabase/__about__.py b/supabase/datadog_checks/supabase/__about__.py index e9541ce83e9e5..acbfd1c866b84 100644 --- a/supabase/datadog_checks/supabase/__about__.py +++ b/supabase/datadog_checks/supabase/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2024-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '0.0.1' +__version__ = '1.0.0' From a0ac38c5deba1623702a38132a59b86e2bcfe443 Mon Sep 17 00:00:00 2001 From: Alicia Scott Date: Fri, 27 Dec 2024 11:00:34 -0700 Subject: [PATCH 7/8] fixing broken links (#19320) --- snmp/README.md | 2 +- snmp_american_power_conversion/README.md | 4 ++-- snmp_arista/README.md | 4 ++-- snmp_aruba/README.md | 4 ++-- snmp_chatsworth_products/README.md | 4 ++-- snmp_check_point/README.md | 4 ++-- snmp_cisco/README.md | 2 +- snmp_dell/README.md | 4 ++-- snmp_fortinet/README.md | 4 ++-- snmp_hewlett_packard_enterprise/README.md | 4 ++-- snmp_netapp/README.md | 4 ++-- 11 files changed, 20 insertions(+), 20 deletions(-) diff --git a/snmp/README.md b/snmp/README.md index 805be6729159b..35ea9f7164bae 100644 --- a/snmp/README.md +++ b/snmp/README.md @@ -26,7 +26,7 @@ Additional helpful documentation, links, and articles: Need help? Contact [Datadog support][4]. -[1]: https://docs.datadoghq.com/network_performance_monitoring/devices/setup +[1]: https://docs.datadoghq.com/network_monitoring/devices/setup [2]: https://www.datadoghq.com/blog/monitor-snmp-with-datadog/ [3]: https://datadoghq.dev/integrations-core/tutorials/snmp/introduction/ [4]: https://docs.datadoghq.com/help/ diff --git a/snmp_american_power_conversion/README.md b/snmp_american_power_conversion/README.md index a4e868875c75f..d4fad09e07624 100644 --- a/snmp_american_power_conversion/README.md +++ b/snmp_american_power_conversion/README.md @@ -29,8 +29,8 @@ Additional helpful documentation, links, and articles: * [Monitor SNMP with Datadog][5] -[1]: https://docs.datadoghq.com/network_performance_monitoring/devices/data -[2]: https://docs.datadoghq.com/network_performance_monitoring/devices/setup +[1]: https://docs.datadoghq.com/network_monitoring/devices/data/ +[2]: https://docs.datadoghq.com/network_monitoring/devices/setup [3]: https://github.com/DataDog/integrations-core/blob/master/snmp_american_power_conversion/assets/service_checks.json [4]: https://docs.datadoghq.com/help/ [5]: https://www.datadoghq.com/blog/monitor-snmp-with-datadog/ diff --git a/snmp_arista/README.md b/snmp_arista/README.md index d6037608bcd54..36cd9b99b5386 100644 --- a/snmp_arista/README.md +++ b/snmp_arista/README.md @@ -31,8 +31,8 @@ Additional helpful documentation, links, and articles: * [Monitor SNMP with Datadog][5] -[1]: https://docs.datadoghq.com/network_performance_monitoring/devices/data -[2]: https://docs.datadoghq.com/network_performance_monitoring/devices/setup +[1]: https://docs.datadoghq.com/network_monitoring/devices/data +[2]: https://docs.datadoghq.com/network_monitoring/devices/setup [3]: https://github.com/DataDog/integrations-core/blob/master/snmp_arista/assets/service_checks.json [4]: https://docs.datadoghq.com/help/ [5]: https://www.datadoghq.com/blog/monitor-snmp-with-datadog/ diff --git a/snmp_aruba/README.md b/snmp_aruba/README.md index 9eb7f0f348c71..a05b13a5cd981 100644 --- a/snmp_aruba/README.md +++ b/snmp_aruba/README.md @@ -31,8 +31,8 @@ Additional helpful documentation, links, and articles: * [Monitor SNMP with Datadog][5] -[1]: https://docs.datadoghq.com/network_performance_monitoring/devices/data -[2]: https://docs.datadoghq.com/network_performance_monitoring/devices/setup +[1]: https://docs.datadoghq.com/network_monitoring/devices/data +[2]: https://docs.datadoghq.com/network_monitoring/devices/setup [3]: https://github.com/DataDog/integrations-core/blob/master/snmp_aruba/assets/service_checks.json [4]: https://docs.datadoghq.com/help/ [5]: https://www.datadoghq.com/blog/monitor-snmp-with-datadog/ diff --git a/snmp_chatsworth_products/README.md b/snmp_chatsworth_products/README.md index abe0cb0ee9ad1..d13955af2f451 100644 --- a/snmp_chatsworth_products/README.md +++ b/snmp_chatsworth_products/README.md @@ -33,8 +33,8 @@ Additional helpful documentation, links, and articles: * [Monitor SNMP with Datadog][5] -[1]: https://docs.datadoghq.com/network_performance_monitoring/devices/data -[2]: https://docs.datadoghq.com/network_performance_monitoring/devices/setup +[1]: https://docs.datadoghq.com/network_monitoring/devices/data +[2]: https://docs.datadoghq.com/network_monitoring/devices/setup [3]: https://github.com/DataDog/integrations-core/blob/master/snmp_chatsworth_products/assets/service_checks.json [4]: https://docs.datadoghq.com/help/ [5]: https://www.datadoghq.com/blog/monitor-snmp-with-datadog/ diff --git a/snmp_check_point/README.md b/snmp_check_point/README.md index 7078e73ebed35..4419c7fe3c92b 100644 --- a/snmp_check_point/README.md +++ b/snmp_check_point/README.md @@ -27,8 +27,8 @@ Additional helpful documentation, links, and articles: * [Monitor SNMP with Datadog][5] -[1]: https://docs.datadoghq.com/network_performance_monitoring/devices/data -[2]: https://docs.datadoghq.com/network_performance_monitoring/devices/setup +[1]: https://docs.datadoghq.com/network_monitoring/devices/data +[2]: https://docs.datadoghq.com/network_monitoring/devices/setup [3]: https://github.com/DataDog/integrations-core/blob/master/snmp_check_point/assets/service_checks.json [4]: https://docs.datadoghq.com/help/ [5]: https://www.datadoghq.com/blog/monitor-snmp-with-datadog/ diff --git a/snmp_cisco/README.md b/snmp_cisco/README.md index 9ee12eed74007..933bb3a53654d 100644 --- a/snmp_cisco/README.md +++ b/snmp_cisco/README.md @@ -48,7 +48,7 @@ Need help? Contact [Datadog support][5]. [1]: https://app.datadoghq.com/account/settings#integrations/meraki [2]: https://app.datadoghq.com/account/settings#integrations/snmp -[3]: https://docs.datadoghq.com/network_performance_monitoring/devices/setup +[3]: https://docs.datadoghq.com/network_monitoring/devices/setup [4]: https://www.datadoghq.com/blog/monitor-snmp-with-datadog/ [5]: https://docs.datadoghq.com/help/ [6]: https://docs.datadoghq.com/network_monitoring/devices/supported_devices/ diff --git a/snmp_dell/README.md b/snmp_dell/README.md index 66837675085bf..f180452cc8dac 100644 --- a/snmp_dell/README.md +++ b/snmp_dell/README.md @@ -42,8 +42,8 @@ Additional helpful documentation, links, and articles: Need help? Contact [Datadog support][4]. -[1]: https://docs.datadoghq.com/network_performance_monitoring/devices/data -[2]: https://docs.datadoghq.com/network_performance_monitoring/devices/setup +[1]: https://docs.datadoghq.com/network_monitoring/devices/data +[2]: https://docs.datadoghq.com/network_monitoring/devices/setup [3]: https://www.datadoghq.com/blog/monitor-snmp-with-datadog/ [4]: https://docs.datadoghq.com/help/ [5]: https://docs.datadoghq.com/network_monitoring/devices/supported_devices/ \ No newline at end of file diff --git a/snmp_fortinet/README.md b/snmp_fortinet/README.md index a25ce7deb4ed1..c6ed9f61a91cc 100644 --- a/snmp_fortinet/README.md +++ b/snmp_fortinet/README.md @@ -31,8 +31,8 @@ Additional helpful documentation, links, and articles: * [Monitor SNMP with Datadog][5] -[1]: https://docs.datadoghq.com/network_performance_monitoring/devices/data -[2]: https://docs.datadoghq.com/network_performance_monitoring/devices/setup +[1]: https://docs.datadoghq.com/network_monitoring/devices/data +[2]: https://docs.datadoghq.com/network_monitoring/devices/setup [3]: https://github.com/DataDog/integrations-core/blob/master/snmp_fortinet/assets/service_checks.json [4]: https://docs.datadoghq.com/help/ [5]: https://www.datadoghq.com/blog/monitor-snmp-with-datadog/ diff --git a/snmp_hewlett_packard_enterprise/README.md b/snmp_hewlett_packard_enterprise/README.md index edc99ea06b0b5..ec66d3084086d 100644 --- a/snmp_hewlett_packard_enterprise/README.md +++ b/snmp_hewlett_packard_enterprise/README.md @@ -33,8 +33,8 @@ Additional helpful documentation, links, and articles: * [Monitor SNMP with Datadog][5] -[1]: https://docs.datadoghq.com/network_performance_monitoring/devices/data -[2]: https://docs.datadoghq.com/network_performance_monitoring/devices/setup +[1]: https://docs.datadoghq.com/network_monitoring/devices/data +[2]: https://docs.datadoghq.com/network_monitoring/devices/setup [3]: https://github.com/DataDog/integrations-core/blob/master/snmp_hewlett_packard_enterprise/assets/service_checks.json [4]: https://docs.datadoghq.com/help/ [5]: https://www.datadoghq.com/blog/monitor-snmp-with-datadog/ diff --git a/snmp_netapp/README.md b/snmp_netapp/README.md index f27220dadb534..b159878312ce5 100644 --- a/snmp_netapp/README.md +++ b/snmp_netapp/README.md @@ -28,8 +28,8 @@ Additional helpful documentation, links, and articles: * [Monitor SNMP with Datadog][5] -[1]: https://docs.datadoghq.com/network_performance_monitoring/devices/data -[2]: https://docs.datadoghq.com/network_performance_monitoring/devices/setup +[1]: https://docs.datadoghq.com/network_monitoring/devices/data +[2]: https://docs.datadoghq.com/network_monitoring/devices/setup [3]: https://github.com/DataDog/integrations-core/blob/master/snmp_netapp/assets/service_checks.json [4]: https://docs.datadoghq.com/help/ [5]: https://www.datadoghq.com/blog/monitor-snmp-with-datadog/ From e6b077a2f4e4526dc00261698d752e7481547e66 Mon Sep 17 00:00:00 2001 From: HadhemiDD <43783545+HadhemiDD@users.noreply.github.com> Date: Mon, 30 Dec 2024 16:10:48 +0100 Subject: [PATCH 8/8] Initial release for integration DuckDB (#19238) * create duckdb * fix readme * implementation v1 * implementation v2 * add tests * test * commit * docker * add tests * bump to python3.12 * clean files * rewrite tests * tests * tests * commit * commit * commit * commit * commit * commit * ci * asset * add service check * metadata * labler * licenses * licenses * tests * remove file * add e2e test * base check * lint * remove service check * commit --- .codecov.yml | 9 + .github/workflows/config/labeler.yml | 2 + .github/workflows/test-all.yml | 20 +++ LICENSE-3rdparty.csv | 1 + README.md | 2 +- agent_requirements.in | 1 + duckdb/CHANGELOG.md | 4 + duckdb/README.md | 60 +++++++ duckdb/assets/configuration/spec.yaml | 34 ++++ duckdb/assets/dashboards/duckdb_overview.json | 29 +++ duckdb/assets/service_checks.json | 2 + duckdb/changelog.d/1.added | 1 + duckdb/datadog_checks/__init__.py | 4 + duckdb/datadog_checks/duckdb/__about__.py | 4 + duckdb/datadog_checks/duckdb/__init__.py | 7 + duckdb/datadog_checks/duckdb/check.py | 166 ++++++++++++++++++ .../duckdb/config_models/__init__.py | 24 +++ .../duckdb/config_models/defaults.py | 24 +++ .../duckdb/config_models/instance.py | 63 +++++++ .../duckdb/config_models/shared.py | 45 +++++ .../duckdb/config_models/validators.py | 13 ++ .../duckdb/data/conf.yaml.example | 67 +++++++ duckdb/datadog_checks/duckdb/queries.py | 68 +++++++ duckdb/hatch.toml | 8 + duckdb/images/IMAGES_README.md | 41 +++++ duckdb/manifest.json | 53 ++++++ duckdb/metadata.csv | 6 + duckdb/pyproject.toml | 62 +++++++ duckdb/tests/__init__.py | 3 + duckdb/tests/common.py | 23 +++ duckdb/tests/conftest.py | 18 ++ duckdb/tests/data/sample.db | Bin 0 -> 12288 bytes duckdb/tests/test_e2e.py | 10 ++ duckdb/tests/test_integration.py | 45 +++++ duckdb/tests/test_unit.py | 18 ++ 35 files changed, 936 insertions(+), 1 deletion(-) create mode 100644 duckdb/CHANGELOG.md create mode 100644 duckdb/README.md create mode 100644 duckdb/assets/configuration/spec.yaml create mode 100644 duckdb/assets/dashboards/duckdb_overview.json create mode 100644 duckdb/assets/service_checks.json create mode 100644 duckdb/changelog.d/1.added create mode 100644 duckdb/datadog_checks/__init__.py create mode 100644 duckdb/datadog_checks/duckdb/__about__.py create mode 100644 duckdb/datadog_checks/duckdb/__init__.py create mode 100644 duckdb/datadog_checks/duckdb/check.py create mode 100644 duckdb/datadog_checks/duckdb/config_models/__init__.py create mode 100644 duckdb/datadog_checks/duckdb/config_models/defaults.py create mode 100644 duckdb/datadog_checks/duckdb/config_models/instance.py create mode 100644 duckdb/datadog_checks/duckdb/config_models/shared.py create mode 100644 duckdb/datadog_checks/duckdb/config_models/validators.py create mode 100644 duckdb/datadog_checks/duckdb/data/conf.yaml.example create mode 100644 duckdb/datadog_checks/duckdb/queries.py create mode 100644 duckdb/hatch.toml create mode 100644 duckdb/images/IMAGES_README.md create mode 100644 duckdb/manifest.json create mode 100644 duckdb/metadata.csv create mode 100644 duckdb/pyproject.toml create mode 100644 duckdb/tests/__init__.py create mode 100644 duckdb/tests/common.py create mode 100644 duckdb/tests/conftest.py create mode 100644 duckdb/tests/data/sample.db create mode 100644 duckdb/tests/test_e2e.py create mode 100644 duckdb/tests/test_integration.py create mode 100644 duckdb/tests/test_unit.py diff --git a/.codecov.yml b/.codecov.yml index b3da4ec81667d..3b23a3da8bf86 100644 --- a/.codecov.yml +++ b/.codecov.yml @@ -186,6 +186,10 @@ coverage: target: 75 flags: - druid + DuckDB: + target: 75 + flags: + - duckdb EKS_Fargate: target: 75 flags: @@ -974,6 +978,11 @@ flags: paths: - druid/datadog_checks/druid - druid/tests + duckdb: + carryforward: true + paths: + - duckdb/datadog_checks/duckdb + - duckdb/tests ecs_fargate: carryforward: true paths: diff --git a/.github/workflows/config/labeler.yml b/.github/workflows/config/labeler.yml index b548315a04731..6084caed5feff 100644 --- a/.github/workflows/config/labeler.yml +++ b/.github/workflows/config/labeler.yml @@ -177,6 +177,8 @@ integration/dotnetclr: - dotnetclr/**/* integration/druid: - druid/**/* +integration/duckdb: +- duckdb/**/* integration/ecs_fargate: - ecs_fargate/**/* integration/eks_anywhere: diff --git a/.github/workflows/test-all.yml b/.github/workflows/test-all.yml index bf58388e435be..4d0f92ea74c8b 100644 --- a/.github/workflows/test-all.yml +++ b/.github/workflows/test-all.yml @@ -1154,6 +1154,26 @@ jobs: minimum-base-package: ${{ inputs.minimum-base-package }} pytest-args: ${{ inputs.pytest-args }} secrets: inherit + j9eb6aa6: + uses: ./.github/workflows/test-target.yml + with: + job-name: DuckDB + target: duckdb + platform: linux + runner: '["ubuntu-22.04"]' + repo: "${{ inputs.repo }}" + python-version: "${{ inputs.python-version }}" + standard: ${{ inputs.standard }} + latest: ${{ inputs.latest }} + agent-image: "${{ inputs.agent-image }}" + agent-image-py2: "${{ inputs.agent-image-py2 }}" + agent-image-windows: "${{ inputs.agent-image-windows }}" + agent-image-windows-py2: "${{ inputs.agent-image-windows-py2 }}" + test-py2: ${{ inputs.test-py2 }} + test-py3: ${{ inputs.test-py3 }} + minimum-base-package: ${{ inputs.minimum-base-package }} + pytest-args: ${{ inputs.pytest-args }} + secrets: inherit j562bfe5: uses: ./.github/workflows/test-target.yml with: diff --git a/LICENSE-3rdparty.csv b/LICENSE-3rdparty.csv index 8af1cd58fd1d1..747ef923c3f87 100644 --- a/LICENSE-3rdparty.csv +++ b/LICENSE-3rdparty.csv @@ -22,6 +22,7 @@ cryptography,PyPI,BSD-3-Clause,Copyright (c) Individual contributors. cryptography,PyPI,PSF,Copyright (c) Individual contributors. ddtrace,PyPI,BSD-3-Clause,"Copyright 2016 Datadog, Inc." dnspython,PyPI,ISC,Copyright (C) Dnspython Contributors +duckdb,PyPI,MIT,Copyright (c) Hannes Muehleisen flup,Vendor,BSD-3-Clause,Copyright (c) 2005 Allan Saddi. All Rights Reserved. flup-py3,Vendor,BSD-3-Clause,"Copyright (c) 2005, 2006 Allan Saddi All rights reserved." foundationdb,PyPI,Apache-2.0,Copyright 2017 FoundationDB diff --git a/README.md b/README.md index fd081156a41a1..734d8ba46033f 100644 --- a/README.md +++ b/README.md @@ -54,4 +54,4 @@ For more information on integrations, please reference our [documentation][11] a [28]: https://img.shields.io/badge/typing-Mypy-blue.svg [29]: https://github.com/python/mypy [30]: https://img.shields.io/badge/license-BSD--3--Clause-9400d3.svg -[31]: https://spdx.org/licenses/BSD-3-Clause.html +[31]: https://spdx.org/licenses/BSD-3-Clause.html \ No newline at end of file diff --git a/agent_requirements.in b/agent_requirements.in index b96253e8f081f..572dee1782565 100644 --- a/agent_requirements.in +++ b/agent_requirements.in @@ -13,6 +13,7 @@ confluent-kafka==2.6.1 cryptography==43.0.1 ddtrace==2.10.6 dnspython==2.6.1 +duckdb==1.1.1 foundationdb==6.3.24 hazelcast-python-client==5.4.0 importlib-metadata==2.1.3; python_version < '3.8' diff --git a/duckdb/CHANGELOG.md b/duckdb/CHANGELOG.md new file mode 100644 index 0000000000000..1a08d7960b6df --- /dev/null +++ b/duckdb/CHANGELOG.md @@ -0,0 +1,4 @@ +# CHANGELOG - DuckDB + + + diff --git a/duckdb/README.md b/duckdb/README.md new file mode 100644 index 0000000000000..e91e3cd5f2e05 --- /dev/null +++ b/duckdb/README.md @@ -0,0 +1,60 @@ +# Agent Check: DuckDB + +## Overview + +This check monitors [DuckDB][1] through the Datadog Agent. + +Include a high level overview of what this integration does: +- What does your product do (in 1-2 sentences)? +- What value will customers get from this integration, and why is it valuable to them? +- What specific data will your integration monitor, and what's the value of that data? + +## Setup + +Follow the instructions below to install and configure this check for an Agent running on a host. For containerized environments, see the [Autodiscovery Integration Templates][3] for guidance on applying these instructions. + +### Installation + +The DuckDB check is included in the [Datadog Agent][2] package. +No additional installation is needed on your server. + +### Configuration + +1. Edit the `duckdb.d/conf.yaml` file, in the `conf.d/` folder at the root of your Agent's configuration directory to start collecting your duckdb performance data. See the [sample duckdb.d/conf.yaml][4] for all available configuration options. + +2. [Restart the Agent][5]. + +### Validation + +[Run the Agent's status subcommand][6] and look for `duckdb` under the Checks section. + +## Data Collected + +### Metrics + +See [metadata.csv][7] for a list of metrics provided by this integration. + +### Events + +The DuckDB integration does not include any events. + +### Service Checks + +The DuckDB integration does not include any service checks. + +See [service_checks.json][8] for a list of service checks provided by this integration. + +## Troubleshooting + +Need help? Contact [Datadog support][9]. + + +[1]: **LINK_TO_INTEGRATION_SITE** +[2]: https://app.datadoghq.com/account/settings/agent/latest +[3]: https://docs.datadoghq.com/agent/kubernetes/integrations/ +[4]: https://github.com/DataDog/integrations-core/blob/master/duckdb/datadog_checks/duckdb/data/conf.yaml.example +[5]: https://docs.datadoghq.com/agent/guide/agent-commands/#start-stop-and-restart-the-agent +[6]: https://docs.datadoghq.com/agent/guide/agent-commands/#agent-status-and-information +[7]: https://github.com/DataDog/integrations-core/blob/master/duckdb/metadata.csv +[8]: https://github.com/DataDog/integrations-core/blob/master/duckdb/assets/service_checks.json +[9]: https://docs.datadoghq.com/help/ diff --git a/duckdb/assets/configuration/spec.yaml b/duckdb/assets/configuration/spec.yaml new file mode 100644 index 0000000000000..b7c19b5c4b2e5 --- /dev/null +++ b/duckdb/assets/configuration/spec.yaml @@ -0,0 +1,34 @@ +name: DuckDB +files: +- name: duckdb.yaml + options: + - template: init_config + options: + - template: init_config/default + - template: instances + options: + - name: db_name + required: true + description: | + The database to connect to (file path). + NOTE: DuckDB databases are stored as files. + value: + example: "/path-to-file/my_database.db" + type: string + - name: connection_attempt + description: | + The number of retries to connect to the database in case of failure + value: + type: integer + default: 3 + display_default: 3 + - template: instances/default + overrides: + min_collection_interval.description: | + This changes the collection interval of this check to avoid + the risk of locking the database file. + If your database file is heavily used in write mode, you changes + further increase this value to minimise the monitoring acccess. + min_collection_interval.value.default: 60 + min_collection_interval.value.example: 60 + min_collection_interval.enabled: true diff --git a/duckdb/assets/dashboards/duckdb_overview.json b/duckdb/assets/dashboards/duckdb_overview.json new file mode 100644 index 0000000000000..96e155112c011 --- /dev/null +++ b/duckdb/assets/dashboards/duckdb_overview.json @@ -0,0 +1,29 @@ +{ + "title": "DuckDB Overview", + "description": "[[suggested_dashboards]]", + "widgets": [ + { + "id": 6432334130190000, + "definition": { + "type": "image", + "url": "https://static.datadoghq.com/static/images/logos/duckdb_small.svg", + "sizing": "contain", + "margin": "md", + "has_background": false, + "has_border": false, + "vertical_align": "center", + "horizontal_align": "center" + }, + "layout": { + "x": 0, + "y": 0, + "width": 2, + "height": 2 + } + } + ], + "template_variables": [], + "layout_type": "ordered", + "notify_list": [], + "reflow_type": "fixed" +} \ No newline at end of file diff --git a/duckdb/assets/service_checks.json b/duckdb/assets/service_checks.json new file mode 100644 index 0000000000000..6c87723be2c74 --- /dev/null +++ b/duckdb/assets/service_checks.json @@ -0,0 +1,2 @@ + +[] diff --git a/duckdb/changelog.d/1.added b/duckdb/changelog.d/1.added new file mode 100644 index 0000000000000..aa949b47b7b41 --- /dev/null +++ b/duckdb/changelog.d/1.added @@ -0,0 +1 @@ +Initial Release \ No newline at end of file diff --git a/duckdb/datadog_checks/__init__.py b/duckdb/datadog_checks/__init__.py new file mode 100644 index 0000000000000..1517d901c0aae --- /dev/null +++ b/duckdb/datadog_checks/__init__.py @@ -0,0 +1,4 @@ +# (C) Datadog, Inc. 2024-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) +__path__ = __import__('pkgutil').extend_path(__path__, __name__) # type: ignore diff --git a/duckdb/datadog_checks/duckdb/__about__.py b/duckdb/datadog_checks/duckdb/__about__.py new file mode 100644 index 0000000000000..e9541ce83e9e5 --- /dev/null +++ b/duckdb/datadog_checks/duckdb/__about__.py @@ -0,0 +1,4 @@ +# (C) Datadog, Inc. 2024-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) +__version__ = '0.0.1' diff --git a/duckdb/datadog_checks/duckdb/__init__.py b/duckdb/datadog_checks/duckdb/__init__.py new file mode 100644 index 0000000000000..f23ef58f4ed30 --- /dev/null +++ b/duckdb/datadog_checks/duckdb/__init__.py @@ -0,0 +1,7 @@ +# (C) Datadog, Inc. 2024-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) +from .__about__ import __version__ +from .check import DuckdbCheck + +__all__ = ['__version__', 'DuckdbCheck'] diff --git a/duckdb/datadog_checks/duckdb/check.py b/duckdb/datadog_checks/duckdb/check.py new file mode 100644 index 0000000000000..2fb746bb40c53 --- /dev/null +++ b/duckdb/datadog_checks/duckdb/check.py @@ -0,0 +1,166 @@ +# (C) Datadog, Inc. 2024-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) +import json +import os +import re +import time +from contextlib import closing, contextmanager +from copy import deepcopy + +import duckdb + +from datadog_checks.base import AgentCheck +from datadog_checks.base.utils.db import QueryManager + +from .queries import DEFAULT_QUERIES + + +class DuckdbCheck(AgentCheck): + + # This will be the prefix of every metric and service check the integration sends + __NAMESPACE__ = 'duckdb' + + def __init__(self, name, init_config, instances): + super(DuckdbCheck, self).__init__(name, init_config, instances) + + self.db_name = self.instance.get('db_name') + self.connection_attempt = int(self.instance.get('connection_attempt', 3)) + + self.tags = self.instance.get('tags', []) + self._connection = None + self._connect_params = None + self._tags = [] + self._query_errors = 0 + + manager_queries = deepcopy(DEFAULT_QUERIES) + + self._query_manager = QueryManager( + self, + self._execute_query_raw, + queries=manager_queries, + tags=self.tags, + error_handler=self._executor_error_handler, + ) + self.check_initializations.append(self.initialize_config) + self.check_initializations.append(self._query_manager.compile_queries) + + def check(self, _): + retry_delay = 5 + max_retries = self.connection_attempt + for attempt in range(1, max_retries + 1): + try: + with self.connect() as conn: + if conn: + self._connection = conn + self._query_manager.execute() + break + except Exception as e: + self.log.warning('Unable to connect to the database: "%s" , retrying...', e) + if attempt < max_retries: + time.sleep(retry_delay) + else: + self.log.error('Max connection retries reached') + + def _execute_query_raw(self, query): + with closing(self._connection.cursor()) as cursor: + query = query.format(self.db_name) + curs = cursor.execute(query) + if len(curs.fetchall()) < 1: + self._query_errors += 1 + self.log.warning('Failed to fetch records from query: `%s`.', query) + return None + for row in cursor.execute(query).fetchall(): + # Try to find the field name or version from the query, anything else would fail + pattern_version = r"\bversion\b" + query_version = re.search(pattern_version, query) + if query_version: + query_name = 'version' + else: + pattern = r"(?i)\bname\s*=\s*'([^']+)'" + query_name = re.search(pattern, query).group(1) + try: + yield self._queries_processor(row, query_name) + except Exception as e: + self.log.debug( + 'Unable to process row returned from query "%s", skipping row %s. %s', query_name, row, e + ) + yield row + + def _queries_processor(self, row, query_name): + unprocessed_row = row + # Return database version + if query_name == 'version': + self.submit_version(row) + return unprocessed_row + + self.log.debug('Row processor returned: %s. \nFrom query: "%s"', unprocessed_row, query_name) + return unprocessed_row + + @contextmanager + def connect(self): + conn = None + # Only attempt connection if the Database file exists + if os.path.exists(self.db_name): + try: + # Try to establish the connection in read only mode + conn = duckdb.connect(self.db_name, read_only=True) + self.log.info('Connected to DuckDB database.') + yield conn + except Exception as e: + if 'Conflicting lock' in str(e): + self.log.error('Lock conflict detected') + else: + self.log.error('Unable to connect to DuckDB database. %s.', e) + finally: + if conn: + conn.close() + else: + self.log.error('Database file not found') + + def initialize_config(self): + self._connect_params = json.dumps( + { + 'db_name': self.db_name, + } + ) + global_tags = [ + 'db_name:{}'.format(self.instance.get('db_name')), + ] + if self.tags is not None: + global_tags.extend(self.tags) + self._tags = global_tags + self._query_manager.tags = self._tags + + @AgentCheck.metadata_entrypoint + def submit_version(self, row): + """ + Example version: v1.1.1 + """ + try: + duckdb_version_row = row[0] + duckdb_version = duckdb_version_row[1:] + version_split = duckdb_version.split('.') + + if len(version_split) >= 3: + major = version_split[0] + minor = version_split[1] + patch = version_split[2] + + version_raw = f'{major}.{minor}.{patch}' + + version_parts = { + 'major': major, + 'minor': minor, + 'patch': patch, + } + self.set_metadata('version', version_raw, scheme='parts', final_scheme='semver', part_map=version_parts) + else: + self.log.debug("Malformed DuckDB version format: %s", duckdb_version_row) + except Exception as e: + self.log.warning("Could not retrieve version metadata: %s", e) + + def _executor_error_handler(self, error): + self.log.debug('Error from query "%s"', error) + self._query_errors += 1 + return error diff --git a/duckdb/datadog_checks/duckdb/config_models/__init__.py b/duckdb/datadog_checks/duckdb/config_models/__init__.py new file mode 100644 index 0000000000000..106fff2032f68 --- /dev/null +++ b/duckdb/datadog_checks/duckdb/config_models/__init__.py @@ -0,0 +1,24 @@ +# (C) Datadog, Inc. 2024-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) + +# This file is autogenerated. +# To change this file you should edit assets/configuration/spec.yaml and then run the following commands: +# ddev -x validate config -s +# ddev -x validate models -s + +from .instance import InstanceConfig +from .shared import SharedConfig + + +class ConfigMixin: + _config_model_instance: InstanceConfig + _config_model_shared: SharedConfig + + @property + def config(self) -> InstanceConfig: + return self._config_model_instance + + @property + def shared_config(self) -> SharedConfig: + return self._config_model_shared diff --git a/duckdb/datadog_checks/duckdb/config_models/defaults.py b/duckdb/datadog_checks/duckdb/config_models/defaults.py new file mode 100644 index 0000000000000..c99e7d0251838 --- /dev/null +++ b/duckdb/datadog_checks/duckdb/config_models/defaults.py @@ -0,0 +1,24 @@ +# (C) Datadog, Inc. 2024-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) + +# This file is autogenerated. +# To change this file you should edit assets/configuration/spec.yaml and then run the following commands: +# ddev -x validate config -s +# ddev -x validate models -s + + +def instance_connection_attempt(): + return 3 + + +def instance_disable_generic_tags(): + return False + + +def instance_empty_default_hostname(): + return False + + +def instance_min_collection_interval(): + return 60 diff --git a/duckdb/datadog_checks/duckdb/config_models/instance.py b/duckdb/datadog_checks/duckdb/config_models/instance.py new file mode 100644 index 0000000000000..7e183b58aad41 --- /dev/null +++ b/duckdb/datadog_checks/duckdb/config_models/instance.py @@ -0,0 +1,63 @@ +# (C) Datadog, Inc. 2024-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) + +# This file is autogenerated. +# To change this file you should edit assets/configuration/spec.yaml and then run the following commands: +# ddev -x validate config -s +# ddev -x validate models -s + +from __future__ import annotations + +from typing import Optional + +from pydantic import BaseModel, ConfigDict, field_validator, model_validator + +from datadog_checks.base.utils.functions import identity +from datadog_checks.base.utils.models import validation + +from . import defaults, validators + + +class MetricPatterns(BaseModel): + model_config = ConfigDict( + arbitrary_types_allowed=True, + frozen=True, + ) + exclude: Optional[tuple[str, ...]] = None + include: Optional[tuple[str, ...]] = None + + +class InstanceConfig(BaseModel): + model_config = ConfigDict( + validate_default=True, + arbitrary_types_allowed=True, + frozen=True, + ) + connection_attempt: Optional[int] = None + db_name: str + disable_generic_tags: Optional[bool] = None + empty_default_hostname: Optional[bool] = None + metric_patterns: Optional[MetricPatterns] = None + min_collection_interval: Optional[float] = None + service: Optional[str] = None + tags: Optional[tuple[str, ...]] = None + + @model_validator(mode='before') + def _initial_validation(cls, values): + return validation.core.initialize_config(getattr(validators, 'initialize_instance', identity)(values)) + + @field_validator('*', mode='before') + def _validate(cls, value, info): + field = cls.model_fields[info.field_name] + field_name = field.alias or info.field_name + if field_name in info.context['configured_fields']: + value = getattr(validators, f'instance_{info.field_name}', identity)(value, field=field) + else: + value = getattr(defaults, f'instance_{info.field_name}', lambda: value)() + + return validation.utils.make_immutable(value) + + @model_validator(mode='after') + def _final_validation(cls, model): + return validation.core.check_model(getattr(validators, 'check_instance', identity)(model)) diff --git a/duckdb/datadog_checks/duckdb/config_models/shared.py b/duckdb/datadog_checks/duckdb/config_models/shared.py new file mode 100644 index 0000000000000..e39d447dfc4b9 --- /dev/null +++ b/duckdb/datadog_checks/duckdb/config_models/shared.py @@ -0,0 +1,45 @@ +# (C) Datadog, Inc. 2024-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) + +# This file is autogenerated. +# To change this file you should edit assets/configuration/spec.yaml and then run the following commands: +# ddev -x validate config -s +# ddev -x validate models -s + +from __future__ import annotations + +from typing import Optional + +from pydantic import BaseModel, ConfigDict, field_validator, model_validator + +from datadog_checks.base.utils.functions import identity +from datadog_checks.base.utils.models import validation + +from . import validators + + +class SharedConfig(BaseModel): + model_config = ConfigDict( + validate_default=True, + arbitrary_types_allowed=True, + frozen=True, + ) + service: Optional[str] = None + + @model_validator(mode='before') + def _initial_validation(cls, values): + return validation.core.initialize_config(getattr(validators, 'initialize_shared', identity)(values)) + + @field_validator('*', mode='before') + def _validate(cls, value, info): + field = cls.model_fields[info.field_name] + field_name = field.alias or info.field_name + if field_name in info.context['configured_fields']: + value = getattr(validators, f'shared_{info.field_name}', identity)(value, field=field) + + return validation.utils.make_immutable(value) + + @model_validator(mode='after') + def _final_validation(cls, model): + return validation.core.check_model(getattr(validators, 'check_shared', identity)(model)) diff --git a/duckdb/datadog_checks/duckdb/config_models/validators.py b/duckdb/datadog_checks/duckdb/config_models/validators.py new file mode 100644 index 0000000000000..70150e85e6124 --- /dev/null +++ b/duckdb/datadog_checks/duckdb/config_models/validators.py @@ -0,0 +1,13 @@ +# (C) Datadog, Inc. 2024-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) + +# Here you can include additional config validators or transformers +# +# def initialize_instance(values, **kwargs): +# if 'my_option' not in values and 'my_legacy_option' in values: +# values['my_option'] = values['my_legacy_option'] +# if values.get('my_number') > 10: +# raise ValueError('my_number max value is 10, got %s' % str(values.get('my_number'))) +# +# return values diff --git a/duckdb/datadog_checks/duckdb/data/conf.yaml.example b/duckdb/datadog_checks/duckdb/data/conf.yaml.example new file mode 100644 index 0000000000000..86f32b93c5534 --- /dev/null +++ b/duckdb/datadog_checks/duckdb/data/conf.yaml.example @@ -0,0 +1,67 @@ +## All options defined here are available to all instances. +# +init_config: + + ## @param service - string - optional + ## Attach the tag `service:` to every metric, event, and service check emitted by this integration. + ## + ## Additionally, this sets the default `service` for every log source. + # + # service: + +## Every instance is scheduled independently of the others. +# +instances: + + ## @param db_name - string - required + ## The database to connect to (file path). + ## NOTE: DuckDB databases are stored as files. + # + - db_name: /path-to-file/my_database.db + + ## @param connection_attempt - integer - optional - default: 3 + ## The number of retries to connect to the database in case of failure + # + # connection_attempt: + + ## @param tags - list of strings - optional + ## A list of tags to attach to every metric and service check emitted by this instance. + ## + ## Learn more about tagging at https://docs.datadoghq.com/tagging + # + # tags: + # - : + # - : + + ## @param service - string - optional + ## Attach the tag `service:` to every metric, event, and service check emitted by this integration. + ## + ## Overrides any `service` defined in the `init_config` section. + # + # service: + + ## @param min_collection_interval - number - optional - default: 60 + ## This changes the collection interval of this check to avoid + ## the risk of locking the database file. + ## If your database file is heavily used in write mode, you changes + ## further increase this value to minimise the monitoring acccess. + # + min_collection_interval: 60 + + ## @param empty_default_hostname - boolean - optional - default: false + ## This forces the check to send metrics with no hostname. + ## + ## This is useful for cluster-level checks. + # + # empty_default_hostname: false + + ## @param metric_patterns - mapping - optional + ## A mapping of metrics to include or exclude, with each entry being a regular expression. + ## + ## Metrics defined in `exclude` will take precedence in case of overlap. + # + # metric_patterns: + # include: + # - + # exclude: + # - diff --git a/duckdb/datadog_checks/duckdb/queries.py b/duckdb/datadog_checks/duckdb/queries.py new file mode 100644 index 0000000000000..e09030edbb3be --- /dev/null +++ b/duckdb/datadog_checks/duckdb/queries.py @@ -0,0 +1,68 @@ +# (C) Datadog, Inc. 2024-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) + + +DUCKDB_VERSION = { + 'name': 'version', + 'query': "SELECT version();", + 'columns': [{'name': 'version', 'type': 'source'}], +} + +DUCKDDB_WAL = { + 'name': 'wal_autocheckpoint', + 'query': " SELECT CAST(SUBSTR(value, 1, LENGTH(value) - 3) AS BIGINT) * " + "CASE " + " WHEN RIGHT(value, 3) = 'KiB' THEN 1024 " + " WHEN RIGHT(value, 3) = 'MiB' THEN 1024 * 1024 " + " WHEN RIGHT(value, 3) = 'GiB' THEN 1024 * 1024 * 1024 " + " WHEN RIGHT(value, 3) = 'TiB' THEN 1024 * 1024 * 1024 * 1024 " + " ELSE 1 " + " END AS value_in_bytes FROM duckdb_settings() WHERE name = 'wal_autocheckpoint';", + 'columns': [{'name': 'wal_autocheckpoint', 'type': 'gauge'}], +} + + +DUCKDDB_THREADS = { + 'name': 'worker_threads', + 'query': "select value from duckdb_settings() where name = 'worker_threads';", + 'columns': [{'name': 'worker_threads', 'type': 'gauge'}], +} + + +DUCKDB_MEMORY_LIMIT = { + 'name': 'memory_limit', + 'query': " SELECT CAST(SUBSTR(value, 1, LENGTH(value) - 3) AS BIGINT) * " + "CASE " + " WHEN RIGHT(value, 3) = 'KiB' THEN 1024 " + " WHEN RIGHT(value, 3) = 'MiB' THEN 1024 * 1024 " + " WHEN RIGHT(value, 3) = 'GiB' THEN 1024 * 1024 * 1024 " + " WHEN RIGHT(value, 3) = 'TiB' THEN 1024 * 1024 * 1024 * 1024 " + " ELSE 1 " + " END AS value_in_bytes FROM duckdb_settings() WHERE name = 'memory_limit';", + 'columns': [{'name': 'memory_limit', 'type': 'gauge'}], +} + + +DUCKDB_PART_WRITE_FLUSH_THRESHOLD = { + 'name': 'partitioned_write_flush_threshold', + 'query': " SELECT CAST(value AS INTEGER) AS value_as_integer " + " FROM duckdb_settings() WHERE name = 'partitioned_write_flush_threshold';", + 'columns': [{'name': 'partitioned_write_flush_threshold', 'type': 'gauge'}], +} + +DUCKDB_PART_WRITE_MAX_OPEN_FILES = { + 'name': 'partitioned_write_max_open_files', + 'query': " SELECT CAST(value AS INTEGER) AS value_as_integer " + " FROM duckdb_settings() WHERE name = 'partitioned_write_max_open_files';", + 'columns': [{'name': 'partitioned_write_max_open_files', 'type': 'gauge'}], +} + +DEFAULT_QUERIES = [ + DUCKDB_VERSION, + DUCKDDB_THREADS, + DUCKDDB_WAL, + DUCKDB_MEMORY_LIMIT, + DUCKDB_PART_WRITE_FLUSH_THRESHOLD, + DUCKDB_PART_WRITE_MAX_OPEN_FILES, +] diff --git a/duckdb/hatch.toml b/duckdb/hatch.toml new file mode 100644 index 0000000000000..c79a82d22f2c5 --- /dev/null +++ b/duckdb/hatch.toml @@ -0,0 +1,8 @@ +[env.collectors.datadog-checks] + +[[envs.default.matrix]] +python = ["3.12"] +version = ["1.1.1"] + +[envs.default.overrides] +matrix.version.env-vars = "DUCKDB_VERSION" \ No newline at end of file diff --git a/duckdb/images/IMAGES_README.md b/duckdb/images/IMAGES_README.md new file mode 100644 index 0000000000000..443f3c45e3385 --- /dev/null +++ b/duckdb/images/IMAGES_README.md @@ -0,0 +1,41 @@ +# Marketplace Media Carousel Guidelines + +## Using the media gallery + +Please upload images to use the media gallery. Integrations require a minimum of 3 images. Images should highlight your product, your integration, and a full image of the Datadog integration dashboard. The gallery +can hold a maximum of 8 pieces of media total, and one of these pieces of media +can be a video (guidelines and submission steps below). Images should be +added to your /images directory and referenced in the manifest.json file. + + +## Image and video requirements + +### Images + +``` +File type : .jpg or .png +File size : ~500 KB per image, with a max of 1 MB per image +File dimensions : The image must be between 1440px and 2880px width, with a 16:9 aspect ratio (for example: 1440x810) +File name : Use only letters, numbers, underscores, and hyphens +Color mode : RGB +Color profile : sRGB +Description : 300 characters maximum +``` + +### Video + +To display a video in your media gallery, please send our team the zipped file +or a link to download the video at `marketplace@datadog.com`. In addition, +please upload a thumbnail image for your video as a part of the pull request. +Once approved, we will upload the file to Vimeo and provide you with the +vimeo_id to add to your manifest.json file. Please note that the gallery can +only hold one video. + +``` +File type : MP4 H.264 +File size : Max 1 video; 1 GB maximum size +File dimensions : The aspect ratio must be exactly 16:9, and the resolution must be 1920x1080 or higher +File name : partnerName-appName.mp4 +Run time : Recommendation of 60 seconds or less +Description : 300 characters maximum +``` diff --git a/duckdb/manifest.json b/duckdb/manifest.json new file mode 100644 index 0000000000000..268dffb4db54a --- /dev/null +++ b/duckdb/manifest.json @@ -0,0 +1,53 @@ +{ + "manifest_version": "2.0.0", + "app_uuid": "a905fbe6-135f-4189-b027-4bdc58e51e29", + "app_id": "duckdb", + "display_on_public_website": false, + "tile": { + "overview": "README.md#Overview", + "configuration": "README.md#Setup", + "support": "README.md#Support", + "changelog": "CHANGELOG.md", + "description": "Integration for DuckDB", + "title": "DuckDB", + "media": [], + "classifier_tags": [ + "Supported OS::Linux", + "Supported OS::Windows", + "Supported OS::macOS", + "Category::Metrics", + "Offering::Integration", + "Submitted Data Type::Metrics" + ] + }, + "assets": { + "integration": { + "auto_install": true, + "source_type_id": 28902456, + "source_type_name": "DuckDB", + "configuration": { + "spec": "assets/configuration/spec.yaml" + }, + "events": { + "creates_events": false + }, + "metrics": { + "prefix": "duckdb.", + "check": "duckdb.memory_limit", + "metadata_path": "metadata.csv" + }, + "service_checks": { + "metadata_path": "assets/service_checks.json" + } + }, + "dashboards": { + "Duckdb Overview": "assets/dashboards/duckdb_overview.json" + } + }, + "author": { + "support_email": "help@datadoghq.com", + "name": "Datadog", + "homepage": "https://www.datadoghq.com", + "sales_email": "info@datadoghq.com" + } +} diff --git a/duckdb/metadata.csv b/duckdb/metadata.csv new file mode 100644 index 0000000000000..0704022a503ab --- /dev/null +++ b/duckdb/metadata.csv @@ -0,0 +1,6 @@ +metric_name,metric_type,interval,unit_name,per_unit_name,description,orientation,integration,short_name,curated_metric,sample_tags +duckdb.memory_limit,gauge,,byte,,The maximum memory of the system.,0,duckdb,,, +duckdb.partitioned_write_flush_threshold,gauge,,,,The threshold in number of rows after which we flush a thread state when writing using PARTITION_BY.,0,duckdb,,, +duckdb.partitioned_write_max_open_files,gauge,,,,The maximum amount of files the system can keep open before flushing to disk when writing using PARTITION_BY.,0,duckdb,,, +duckdb.wal_autocheckpoint,gauge,,byte,,The WAL size threshold at which to automatically trigger a checkpoint.,0,duckdb,,, +duckdb.worker_threads,gauge,,,,The number of total threads used by the system.,0,duckdb,,, diff --git a/duckdb/pyproject.toml b/duckdb/pyproject.toml new file mode 100644 index 0000000000000..801b00ea69063 --- /dev/null +++ b/duckdb/pyproject.toml @@ -0,0 +1,62 @@ +[build-system] +requires = [ + "hatchling>=0.13.0", +] +build-backend = "hatchling.build" + +[project] +name = "datadog-duckdb" +description = "The DuckDB check" +readme = "README.md" +license = "BSD-3-Clause" +requires-python = ">=3.12" +keywords = [ + "datadog", + "datadog agent", + "datadog check", + "duckdb", +] +authors = [ + { name = "Datadog", email = "packages@datadoghq.com" }, +] +classifiers = [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Intended Audience :: System Administrators", + "License :: OSI Approved :: BSD License", + "Private :: Do Not Upload", + "Programming Language :: Python :: 3.12", + "Topic :: System :: Monitoring", +] +dependencies = [ + "datadog-checks-base>=37.0.0", +] +dynamic = [ + "version", +] + +[project.optional-dependencies] +deps = [ + "duckdb==1.1.1", +] + +[project.urls] +Source = "https://github.com/DataDog/integrations-core" + +[tool.hatch.version] +path = "datadog_checks/duckdb/__about__.py" + +[tool.hatch.build.targets.sdist] +include = [ + "/datadog_checks", + "/tests", + "/manifest.json", +] + +[tool.hatch.build.targets.wheel] +include = [ + "/datadog_checks/duckdb", +] +dev-mode-dirs = [ + ".", +] diff --git a/duckdb/tests/__init__.py b/duckdb/tests/__init__.py new file mode 100644 index 0000000000000..9103122bf028d --- /dev/null +++ b/duckdb/tests/__init__.py @@ -0,0 +1,3 @@ +# (C) Datadog, Inc. 2024-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) diff --git a/duckdb/tests/common.py b/duckdb/tests/common.py new file mode 100644 index 0000000000000..7fa9e7a75b9a5 --- /dev/null +++ b/duckdb/tests/common.py @@ -0,0 +1,23 @@ +# (C) Datadog, Inc. 2024-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) +import os + +from datadog_checks.dev import get_here + +HERE = get_here() +DB_NAME = 'data/sample.db' +WRONG_DB_NAME = 'test.db' + +DB = os.path.join(HERE, DB_NAME) + +DEFAULT_INSTANCE = {'db_name': DB} +WRONG_INSTANCE = {'db_name': WRONG_DB_NAME} + +METRICS_MAP = [ + 'duckdb.worker_threads', + 'duckdb.wal_autocheckpoint', + 'duckdb.memory_limit', + 'duckdb.partitioned_write_flush_threshold', + 'duckdb.partitioned_write_max_open_files', +] diff --git a/duckdb/tests/conftest.py b/duckdb/tests/conftest.py new file mode 100644 index 0000000000000..9fbf7220d4ef2 --- /dev/null +++ b/duckdb/tests/conftest.py @@ -0,0 +1,18 @@ +# (C) Datadog, Inc. 2024-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) +from copy import deepcopy + +import pytest + +from . import common + + +@pytest.fixture(scope='session') +def dd_environment(): + yield common.DEFAULT_INSTANCE + + +@pytest.fixture +def instance(): + return deepcopy(common.DEFAULT_INSTANCE) diff --git a/duckdb/tests/data/sample.db b/duckdb/tests/data/sample.db new file mode 100644 index 0000000000000000000000000000000000000000..021514090f2e9aed2388d40ef5c218aeb37bddb8 GIT binary patch literal 12288 zcmeI#u?fOZ5CG6$7;pzykPy)(onX4u89)tb(u!+XI)`IeID%L>hzUp#gn%Ff0`IOl z?hgLv{p#PIb-bFV=d9S|>+o9~7jc{YyW47+?#iUxSN%IC1PBlyK!5-N0t5&UAV7e? za01c&dO6HakM6|RS9JXlChv0k>8J=0AV7cs0RjXF5FkK+0D*A``2UaNo!pWD0RjXF Q5FkK+009C72>c_^0Ox=*MgRZ+ literal 0 HcmV?d00001 diff --git a/duckdb/tests/test_e2e.py b/duckdb/tests/test_e2e.py new file mode 100644 index 0000000000000..c9eab0ad6ab45 --- /dev/null +++ b/duckdb/tests/test_e2e.py @@ -0,0 +1,10 @@ +# (C) Datadog, Inc. 2024-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) +import pytest + + +@pytest.mark.e2e +def test_e2e(dd_agent_check): + aggregator = dd_agent_check() + aggregator.assert_all_metrics_covered() diff --git a/duckdb/tests/test_integration.py b/duckdb/tests/test_integration.py new file mode 100644 index 0000000000000..c5d96a1c15118 --- /dev/null +++ b/duckdb/tests/test_integration.py @@ -0,0 +1,45 @@ +# (C) Datadog, Inc. 2024-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) +import logging + +from datadog_checks.duckdb import DuckdbCheck + +from . import common + + +def test_check(dd_run_check, aggregator, instance): + instance = common.DEFAULT_INSTANCE + check = DuckdbCheck('duckdb', {}, [instance]) + dd_run_check(check) + + for metric in common.METRICS_MAP: + aggregator.assert_metric(metric) + + +def test_failed_connection(dd_run_check, instance, caplog): + caplog.set_level(logging.ERROR) + instance = common.WRONG_INSTANCE + check = DuckdbCheck('duckdb', {}, [instance]) + dd_run_check(check) + + expected_error = "Database file not found" + assert expected_error in caplog.text + + +def test_version(dd_run_check, instance, datadog_agent): + instance = common.DEFAULT_INSTANCE + check = DuckdbCheck('duckdb', {}, [instance]) + check.check_id = 'test:123' + raw_version = '1.1.1' + major, minor, patch = raw_version.split('.') + version_metadata = { + 'version.scheme': 'semver', + 'version.major': major, + 'version.minor': minor, + 'version.patch': patch, + 'version.raw': raw_version, + } + dd_run_check(check) + + datadog_agent.assert_metadata('test:123', version_metadata) diff --git a/duckdb/tests/test_unit.py b/duckdb/tests/test_unit.py new file mode 100644 index 0000000000000..623d1d0e5e51f --- /dev/null +++ b/duckdb/tests/test_unit.py @@ -0,0 +1,18 @@ +# (C) Datadog, Inc. 2024-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) + +import pytest + +from datadog_checks.base import AgentCheck # noqa: F401 +from datadog_checks.base.stubs.aggregator import AggregatorStub # noqa: F401 +from datadog_checks.duckdb import DuckdbCheck + + +def test_empty_instance(dd_run_check): + with pytest.raises( + Exception, + match='InstanceConfig`:\ndb_name\n Field required', + ): + check = DuckdbCheck('duckdb', {}, [{}]) + dd_run_check(check)