From 9dd362dccee26bb3f9cbddb7d63a6be84d6a2b6a Mon Sep 17 00:00:00 2001 From: "agent-platform-auto-pr[bot]" <153269286+agent-platform-auto-pr[bot]@users.noreply.github.com> Date: Thu, 26 Sep 2024 14:41:57 +0200 Subject: [PATCH 01/56] Update dependency resolution (#18659) Co-authored-by: Kyle-Neale --- .deps/metadata.json | 2 +- .deps/resolved/linux-aarch64_3.12.txt | 4 ++-- .deps/resolved/linux-x86_64_3.12.txt | 4 ++-- .deps/resolved/macos-x86_64_3.12.txt | 12 ++++++------ .deps/resolved/windows-x86_64_3.12.txt | 6 +++--- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/.deps/metadata.json b/.deps/metadata.json index ceed1fe9daa85..97e6783d80df3 100644 --- a/.deps/metadata.json +++ b/.deps/metadata.json @@ -1,3 +1,3 @@ { - "sha256": "f867aa9efbf79012a0e0e5f53f511a51899ab4abde16de6c8a3f45f0474a55b6" + "sha256": "4d24a7dbc805b14f8992f1912b8a3aef7608449d08a1697b4cd5b643833c8288" } diff --git a/.deps/resolved/linux-aarch64_3.12.txt b/.deps/resolved/linux-aarch64_3.12.txt index db834846e91cf..9d792013ad211 100644 --- a/.deps/resolved/linux-aarch64_3.12.txt +++ b/.deps/resolved/linux-aarch64_3.12.txt @@ -12,7 +12,7 @@ boto3 @ https://agent-int-packages.datadoghq.com/external/boto3/boto3-1.35.10-py botocore @ https://agent-int-packages.datadoghq.com/external/botocore/botocore-1.35.10-py3-none-any.whl#sha256=0d96d023b9b0cea99a0a428a431d011329d3a958730aee6ed6a6fec5d9bfbc03 bytecode @ https://agent-int-packages.datadoghq.com/external/bytecode/bytecode-0.15.1-py3-none-any.whl#sha256=0a1dc340cac823cff605609b8b214f7f9bf80418c6b9e0fc8c6db1793c27137d cachetools @ https://agent-int-packages.datadoghq.com/external/cachetools/cachetools-5.5.0-py3-none-any.whl#sha256=02134e8439cdc2ffb62023ce1debca2944c3f289d66bb17ead3ab3dede74b292 -cattrs @ https://agent-int-packages.datadoghq.com/external/cattrs/cattrs-24.1.1-py3-none-any.whl#sha256=ec8ce8fdc725de9d07547cd616f968670687c6fa7a2e263b088370c46d834d97 +cattrs @ https://agent-int-packages.datadoghq.com/external/cattrs/cattrs-24.1.2-py3-none-any.whl#sha256=67c7495b760168d931a10233f979b28dc04daf853b30752246f4f8471c6d68d0 certifi @ https://agent-int-packages.datadoghq.com/external/certifi/certifi-2024.8.30-py3-none-any.whl#sha256=922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8 cffi @ https://agent-int-packages.datadoghq.com/external/cffi/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl#sha256=da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5 charset-normalizer @ https://agent-int-packages.datadoghq.com/external/charset-normalizer/charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl#sha256=8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a @@ -20,7 +20,7 @@ clickhouse-cityhash @ https://agent-int-packages.datadoghq.com/external/clickhou clickhouse-driver @ https://agent-int-packages.datadoghq.com/external/clickhouse-driver/clickhouse_driver-0.2.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl#sha256=4a8d8e2888a857d8db3d98765a5ad23ab561241feaef68bbffc5a0bd9c142342 cm-client @ https://agent-int-packages.datadoghq.com/built/cm-client/cm_client-45.0.4-20240402155018-py3-none-manylinux2014_aarch64.whl#sha256=aba3c1683ef1b2099933e030464d29b3ad1c206784ebd15d8a7147ecd6ba24e1 confluent-kafka @ https://agent-int-packages.datadoghq.com/built/confluent-kafka/confluent_kafka-2.5.0-20240917155305-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl#sha256=6dd31639ba4c15fcb59f65842e446ecda997e8c826dec9e9b1bec01748b5066d -cryptography @ https://agent-int-packages.datadoghq.com/external/cryptography/cryptography-43.0.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl#sha256=ac1955ce000cb29ab40def14fd1bbfa7af2017cca696ee696925615cafd0dce5 +cryptography @ https://agent-int-packages.datadoghq.com/external/cryptography/cryptography-43.0.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl#sha256=1bbcce1a551e262dfbafb6e6252f1ae36a248e615ca44ba302df077a846a8806 ddsketch @ https://agent-int-packages.datadoghq.com/external/ddsketch/ddsketch-3.0.1-py3-none-any.whl#sha256=6d047b455fe2837c43d366ff1ae6ba0c3166e15499de8688437a75cea914224e ddtrace @ https://agent-int-packages.datadoghq.com/external/ddtrace/ddtrace-2.10.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl#sha256=081bb12a54c46c9804e0645320d827deaff626b9035ba13ac97567149e07cdb5 decorator @ https://agent-int-packages.datadoghq.com/external/decorator/decorator-5.1.1-py3-none-any.whl#sha256=b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186 diff --git a/.deps/resolved/linux-x86_64_3.12.txt b/.deps/resolved/linux-x86_64_3.12.txt index 547651afd658a..804727b3c7694 100644 --- a/.deps/resolved/linux-x86_64_3.12.txt +++ b/.deps/resolved/linux-x86_64_3.12.txt @@ -12,7 +12,7 @@ boto3 @ https://agent-int-packages.datadoghq.com/external/boto3/boto3-1.35.10-py botocore @ https://agent-int-packages.datadoghq.com/external/botocore/botocore-1.35.10-py3-none-any.whl#sha256=0d96d023b9b0cea99a0a428a431d011329d3a958730aee6ed6a6fec5d9bfbc03 bytecode @ https://agent-int-packages.datadoghq.com/external/bytecode/bytecode-0.15.1-py3-none-any.whl#sha256=0a1dc340cac823cff605609b8b214f7f9bf80418c6b9e0fc8c6db1793c27137d cachetools @ https://agent-int-packages.datadoghq.com/external/cachetools/cachetools-5.5.0-py3-none-any.whl#sha256=02134e8439cdc2ffb62023ce1debca2944c3f289d66bb17ead3ab3dede74b292 -cattrs @ https://agent-int-packages.datadoghq.com/external/cattrs/cattrs-24.1.1-py3-none-any.whl#sha256=ec8ce8fdc725de9d07547cd616f968670687c6fa7a2e263b088370c46d834d97 +cattrs @ https://agent-int-packages.datadoghq.com/external/cattrs/cattrs-24.1.2-py3-none-any.whl#sha256=67c7495b760168d931a10233f979b28dc04daf853b30752246f4f8471c6d68d0 certifi @ https://agent-int-packages.datadoghq.com/external/certifi/certifi-2024.8.30-py3-none-any.whl#sha256=922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8 cffi @ https://agent-int-packages.datadoghq.com/external/cffi/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93 charset-normalizer @ https://agent-int-packages.datadoghq.com/external/charset-normalizer/charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b @@ -20,7 +20,7 @@ clickhouse-cityhash @ https://agent-int-packages.datadoghq.com/external/clickhou clickhouse-driver @ https://agent-int-packages.datadoghq.com/external/clickhouse-driver/clickhouse_driver-0.2.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=6dbcee870c60d9835e5dce1456ab6b9d807e6669246357f4b321ef747b90fa43 cm-client @ https://agent-int-packages.datadoghq.com/built/cm-client/cm_client-45.0.4-20240402154838-py3-none-manylinux2014_x86_64.whl#sha256=aba3c1683ef1b2099933e030464d29b3ad1c206784ebd15d8a7147ecd6ba24e1 confluent-kafka @ https://agent-int-packages.datadoghq.com/built/confluent-kafka/confluent_kafka-2.5.0-20240917155249-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=aea2f7e617f82476c56eed42d0b5cf6b944a2769d93c8bf7baf0adef19d19bf7 -cryptography @ https://agent-int-packages.datadoghq.com/external/cryptography/cryptography-43.0.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=299d3da8e00b7e2b54bb02ef58d73cd5f55fb31f33ebbf33bd00d9aa6807df7e +cryptography @ https://agent-int-packages.datadoghq.com/external/cryptography/cryptography-43.0.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=58d4e9129985185a06d849aa6df265bdd5a74ca6e1b736a77959b498e0505b85 ddsketch @ https://agent-int-packages.datadoghq.com/external/ddsketch/ddsketch-3.0.1-py3-none-any.whl#sha256=6d047b455fe2837c43d366ff1ae6ba0c3166e15499de8688437a75cea914224e ddtrace @ https://agent-int-packages.datadoghq.com/external/ddtrace/ddtrace-2.10.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=5fc70ac472093093d9908965d95d977206372a3ddc8a2562acf9dfd57c6864d8 decorator @ https://agent-int-packages.datadoghq.com/external/decorator/decorator-5.1.1-py3-none-any.whl#sha256=b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186 diff --git a/.deps/resolved/macos-x86_64_3.12.txt b/.deps/resolved/macos-x86_64_3.12.txt index 6797c57ce674a..aa5723edb5b87 100644 --- a/.deps/resolved/macos-x86_64_3.12.txt +++ b/.deps/resolved/macos-x86_64_3.12.txt @@ -11,15 +11,15 @@ boto3 @ https://agent-int-packages.datadoghq.com/external/boto3/boto3-1.35.10-py botocore @ https://agent-int-packages.datadoghq.com/external/botocore/botocore-1.35.10-py3-none-any.whl#sha256=0d96d023b9b0cea99a0a428a431d011329d3a958730aee6ed6a6fec5d9bfbc03 bytecode @ https://agent-int-packages.datadoghq.com/external/bytecode/bytecode-0.15.1-py3-none-any.whl#sha256=0a1dc340cac823cff605609b8b214f7f9bf80418c6b9e0fc8c6db1793c27137d cachetools @ https://agent-int-packages.datadoghq.com/external/cachetools/cachetools-5.5.0-py3-none-any.whl#sha256=02134e8439cdc2ffb62023ce1debca2944c3f289d66bb17ead3ab3dede74b292 -cattrs @ https://agent-int-packages.datadoghq.com/external/cattrs/cattrs-24.1.1-py3-none-any.whl#sha256=ec8ce8fdc725de9d07547cd616f968670687c6fa7a2e263b088370c46d834d97 +cattrs @ https://agent-int-packages.datadoghq.com/external/cattrs/cattrs-24.1.2-py3-none-any.whl#sha256=67c7495b760168d931a10233f979b28dc04daf853b30752246f4f8471c6d68d0 certifi @ https://agent-int-packages.datadoghq.com/external/certifi/certifi-2024.8.30-py3-none-any.whl#sha256=922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8 cffi @ https://agent-int-packages.datadoghq.com/external/cffi/cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl#sha256=805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4 charset-normalizer @ https://agent-int-packages.datadoghq.com/external/charset-normalizer/charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl#sha256=ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b clickhouse-cityhash @ https://agent-int-packages.datadoghq.com/external/clickhouse-cityhash/clickhouse_cityhash-1.0.2.4-cp312-cp312-macosx_10_9_x86_64.whl#sha256=261fc1b0bf349de66b2d9e3d367879a561b516ca8e54e85e0c27b7c1a4f639b4 clickhouse-driver @ https://agent-int-packages.datadoghq.com/external/clickhouse-driver/clickhouse_driver-0.2.9-cp312-cp312-macosx_10_9_x86_64.whl#sha256=fcb2fd00e58650ae206a6d5dbc83117240e622471aa5124733fbf2805eb8bda0 cm-client @ https://agent-int-packages.datadoghq.com/built/cm-client/cm_client-45.0.4-20240402154932-py3-none-macosx_10_12_universal2.whl#sha256=aba3c1683ef1b2099933e030464d29b3ad1c206784ebd15d8a7147ecd6ba24e1 -confluent-kafka @ https://agent-int-packages.datadoghq.com/built/confluent-kafka/confluent_kafka-2.5.0-20240920201038-cp312-cp312-macosx_10_13_universal2.whl#sha256=d4581e376a04b4a9616f2d9e12817a77d4f35183c75af2a49f306a596a5d7f10 -cryptography @ https://agent-int-packages.datadoghq.com/external/cryptography/cryptography-43.0.0-cp39-abi3-macosx_10_9_universal2.whl#sha256=7b3f5fe74a5ca32d4d0f302ffe6680fcc5c28f8ef0dc0ae8f40c0f3a1b4fca66 +confluent-kafka @ https://agent-int-packages.datadoghq.com/built/confluent-kafka/confluent_kafka-2.5.0-20240925130313-cp312-cp312-macosx_10_13_universal2.whl#sha256=1b49cdc768bf5dcaa5f4b77d5f538919c9b7ffe9acc0e3bcfbf47b345061c9d0 +cryptography @ https://agent-int-packages.datadoghq.com/external/cryptography/cryptography-43.0.1-cp39-abi3-macosx_10_9_universal2.whl#sha256=ac119bb76b9faa00f48128b7f5679e1d8d437365c5d26f1c2c3f0da4ce1b553d ddsketch @ https://agent-int-packages.datadoghq.com/external/ddsketch/ddsketch-3.0.1-py3-none-any.whl#sha256=6d047b455fe2837c43d366ff1ae6ba0c3166e15499de8688437a75cea914224e ddtrace @ https://agent-int-packages.datadoghq.com/external/ddtrace/ddtrace-2.10.6-cp312-cp312-macosx_12_0_x86_64.whl#sha256=401f77b0564c3f990b58b9f21055331ca9efcdfa06dfa6ccff13cf21f8329ba5 decorator @ https://agent-int-packages.datadoghq.com/external/decorator/decorator-5.1.1-py3-none-any.whl#sha256=b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186 @@ -50,7 +50,7 @@ lz4 @ https://agent-int-packages.datadoghq.com/external/lz4/lz4-4.3.3-cp312-cp31 mmh3 @ https://agent-int-packages.datadoghq.com/external/mmh3/mmh3-4.1.0-cp312-cp312-macosx_10_9_x86_64.whl#sha256=d6af3e2287644b2b08b5924ed3a88c97b87b44ad08e79ca9f93d3470a54a41c5 msal @ https://agent-int-packages.datadoghq.com/external/msal/msal-1.31.0-py3-none-any.whl#sha256=96bc37cff82ebe4b160d5fc0f1196f6ca8b50e274ecd0ec5bf69c438514086e7 msal-extensions @ https://agent-int-packages.datadoghq.com/external/msal-extensions/msal_extensions-1.2.0-py3-none-any.whl#sha256=cf5ba83a2113fa6dc011a254a72f1c223c88d7dfad74cc30617c4679a417704d -netifaces @ https://agent-int-packages.datadoghq.com/built/netifaces/netifaces-0.11.0-20240920201038-cp312-cp312-macosx_10_13_universal2.whl#sha256=8d13d51ea7f30db34f8c004731294029539e5c7e4c681c5aaec81c0810d2b97f +netifaces @ https://agent-int-packages.datadoghq.com/built/netifaces/netifaces-0.11.0-20240925130314-cp312-cp312-macosx_10_13_universal2.whl#sha256=8ae87fdf0f1a16d50129e7ac75fb4e72e78e183a491eb49224bff124234becee oauthlib @ https://agent-int-packages.datadoghq.com/external/oauthlib/oauthlib-3.2.2-py3-none-any.whl#sha256=8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca openstacksdk @ https://agent-int-packages.datadoghq.com/external/openstacksdk/openstacksdk-3.3.0-py3-none-any.whl#sha256=e6d4121b87354984caf0e3c032e2ebf4d4440374f86c81c27ec52ca5df359157 opentelemetry-api @ https://agent-int-packages.datadoghq.com/external/opentelemetry-api/opentelemetry_api-1.27.0-py3-none-any.whl#sha256=953d5871815e7c30c81b56d910c707588000fff7a3ca1c73e6531911d53065e7 @@ -76,7 +76,7 @@ pydantic @ https://agent-int-packages.datadoghq.com/external/pydantic/pydantic-2 pydantic-core @ https://agent-int-packages.datadoghq.com/external/pydantic-core/pydantic_core-2.20.1-cp312-cp312-macosx_10_12_x86_64.whl#sha256=595ba5be69b35777474fa07f80fc260ea71255656191adb22a8c53aba4479231 pyjwt @ https://agent-int-packages.datadoghq.com/external/pyjwt/PyJWT-2.9.0-py3-none-any.whl#sha256=3b02fb0f44517787776cf48f2ae25d8e14f300e6d7545a4315cee571a415e850 pymongo @ https://agent-int-packages.datadoghq.com/external/pymongo/pymongo-4.8.0-cp312-cp312-macosx_10_9_x86_64.whl#sha256=e6a720a3d22b54183352dc65f08cd1547204d263e0651b213a0a2e577e838526 -pymqi @ https://agent-int-packages.datadoghq.com/built/pymqi/pymqi-1.12.10-20240920201038-cp312-cp312-macosx_10_13_universal2.whl#sha256=6da471b29b2b8868b6e52213501e06cd62d4ce93a8b5230059aa8875fa67e553 +pymqi @ https://agent-int-packages.datadoghq.com/built/pymqi/pymqi-1.12.10-20240925130314-cp312-cp312-macosx_10_13_universal2.whl#sha256=29ba37f0e0a9aea68639401fc010309a166435978ee22cad3d23ca54369d129f pymysql @ https://agent-int-packages.datadoghq.com/external/pymysql/PyMySQL-1.1.1-py3-none-any.whl#sha256=4de15da4c61dc132f4fb9ab763063e693d521a80fd0e87943b9a453dd4c19d6c pynacl @ https://agent-int-packages.datadoghq.com/external/pynacl/PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl#sha256=401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1 pyodbc @ https://agent-int-packages.datadoghq.com/external/pyodbc/pyodbc-5.1.0-cp312-cp312-macosx_10_9_x86_64.whl#sha256=d3d9cc4af703c4817b6e604315910b0cf5dcb68056d52b25ca072dd59c52dcbc @@ -120,7 +120,7 @@ tuf @ https://agent-int-packages.datadoghq.com/external/tuf/tuf-4.0.0-py3-none-a typing-extensions @ https://agent-int-packages.datadoghq.com/external/typing-extensions/typing_extensions-4.12.2-py3-none-any.whl#sha256=04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d tzlocal @ https://agent-int-packages.datadoghq.com/external/tzlocal/tzlocal-5.2-py3-none-any.whl#sha256=49816ef2fe65ea8ac19d19aa7a1ae0551c834303d5014c6d5a62e4cbda8047b8 uhashring @ https://agent-int-packages.datadoghq.com/external/uhashring/uhashring-2.3-py3-none-any.whl#sha256=7ee8a25ca495a97effad10bd563c83b4054a6d7606d9530757049a04edab9297 -uptime @ https://agent-int-packages.datadoghq.com/built/uptime/uptime-3.0.1-20240920201039-cp312-cp312-macosx_10_13_universal2.whl#sha256=65287c5b2716c07cacef3b1b213faa385b565cf935f3e26abeb2154ed32f2a20 +uptime @ https://agent-int-packages.datadoghq.com/built/uptime/uptime-3.0.1-20240925130314-cp312-cp312-macosx_10_13_universal2.whl#sha256=70ca64090111af57ae340a46ef38a53e1714ae4a80eeabe78075846075b53b52 urllib3 @ https://agent-int-packages.datadoghq.com/external/urllib3/urllib3-2.2.3-py3-none-any.whl#sha256=ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac vertica-python @ https://agent-int-packages.datadoghq.com/external/vertica-python/vertica_python-1.4.0-py3-none-any.whl#sha256=50fecd7687f4b0b9f6dee6e2b35c195af2a4f702ece01bd12e080b51756e000b websocket-client @ https://agent-int-packages.datadoghq.com/external/websocket-client/websocket_client-1.8.0-py3-none-any.whl#sha256=17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526 diff --git a/.deps/resolved/windows-x86_64_3.12.txt b/.deps/resolved/windows-x86_64_3.12.txt index 1ac031a440aa1..f6b4e0163512a 100644 --- a/.deps/resolved/windows-x86_64_3.12.txt +++ b/.deps/resolved/windows-x86_64_3.12.txt @@ -11,7 +11,7 @@ boto3 @ https://agent-int-packages.datadoghq.com/external/boto3/boto3-1.35.10-py botocore @ https://agent-int-packages.datadoghq.com/external/botocore/botocore-1.35.10-py3-none-any.whl#sha256=0d96d023b9b0cea99a0a428a431d011329d3a958730aee6ed6a6fec5d9bfbc03 bytecode @ https://agent-int-packages.datadoghq.com/external/bytecode/bytecode-0.15.1-py3-none-any.whl#sha256=0a1dc340cac823cff605609b8b214f7f9bf80418c6b9e0fc8c6db1793c27137d cachetools @ https://agent-int-packages.datadoghq.com/external/cachetools/cachetools-5.5.0-py3-none-any.whl#sha256=02134e8439cdc2ffb62023ce1debca2944c3f289d66bb17ead3ab3dede74b292 -cattrs @ https://agent-int-packages.datadoghq.com/external/cattrs/cattrs-24.1.1-py3-none-any.whl#sha256=ec8ce8fdc725de9d07547cd616f968670687c6fa7a2e263b088370c46d834d97 +cattrs @ https://agent-int-packages.datadoghq.com/external/cattrs/cattrs-24.1.2-py3-none-any.whl#sha256=67c7495b760168d931a10233f979b28dc04daf853b30752246f4f8471c6d68d0 certifi @ https://agent-int-packages.datadoghq.com/external/certifi/certifi-2024.8.30-py3-none-any.whl#sha256=922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8 cffi @ https://agent-int-packages.datadoghq.com/external/cffi/cffi-1.17.1-cp312-cp312-win_amd64.whl#sha256=51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903 charset-normalizer @ https://agent-int-packages.datadoghq.com/external/charset-normalizer/charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl#sha256=96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001 @@ -19,7 +19,7 @@ clickhouse-cityhash @ https://agent-int-packages.datadoghq.com/external/clickhou clickhouse-driver @ https://agent-int-packages.datadoghq.com/external/clickhouse-driver/clickhouse_driver-0.2.9-cp312-cp312-win_amd64.whl#sha256=de6624e28eeffd01668803d28ae89e3d4e359b1bff8b60e4933e1cb3c6f86f18 cm-client @ https://agent-int-packages.datadoghq.com/built/cm-client/cm_client-45.0.4-20240402154627-py3-none-win_amd64.whl#sha256=1743b32a221d2a0804b4e425ffd53468e8f1754da217fe1e7bd9ff7800fd90f8 confluent-kafka @ https://agent-int-packages.datadoghq.com/external/confluent-kafka/confluent_kafka-2.5.0-cp312-cp312-win_amd64.whl#sha256=d668b5c426af595271bf6fce2917a6c3a15453656077a59db85f440958b5ccc2 -cryptography @ https://agent-int-packages.datadoghq.com/external/cryptography/cryptography-43.0.0-cp39-abi3-win_amd64.whl#sha256=0663585d02f76929792470451a5ba64424acc3cd5227b03921dab0e2f27b1709 +cryptography @ https://agent-int-packages.datadoghq.com/external/cryptography/cryptography-43.0.1-cp39-abi3-win_amd64.whl#sha256=d75601ad10b059ec832e78823b348bfa1a59f6b8d545db3a24fd44362a1564cb ddsketch @ https://agent-int-packages.datadoghq.com/external/ddsketch/ddsketch-3.0.1-py3-none-any.whl#sha256=6d047b455fe2837c43d366ff1ae6ba0c3166e15499de8688437a75cea914224e ddtrace @ https://agent-int-packages.datadoghq.com/external/ddtrace/ddtrace-2.10.6-cp312-cp312-win_amd64.whl#sha256=bb183a535e5b24828a45901babd9fd15a1350c9d5096de5ba463287d0c8c64d1 decorator @ https://agent-int-packages.datadoghq.com/external/decorator/decorator-5.1.1-py3-none-any.whl#sha256=b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186 @@ -116,7 +116,7 @@ supervisor @ https://agent-int-packages.datadoghq.com/external/supervisor/superv tomlkit @ https://agent-int-packages.datadoghq.com/external/tomlkit/tomlkit-0.13.2-py3-none-any.whl#sha256=7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde tuf @ https://agent-int-packages.datadoghq.com/external/tuf/tuf-4.0.0-py3-none-any.whl#sha256=a22ab5fa6daf910b3052929fdce42ccad8a300e5e85715daaff9592aed980f7a typing-extensions @ https://agent-int-packages.datadoghq.com/external/typing-extensions/typing_extensions-4.12.2-py3-none-any.whl#sha256=04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d -tzdata @ https://agent-int-packages.datadoghq.com/external/tzdata/tzdata-2024.1-py2.py3-none-any.whl#sha256=9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252 +tzdata @ https://agent-int-packages.datadoghq.com/external/tzdata/tzdata-2024.2-py2.py3-none-any.whl#sha256=a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd tzlocal @ https://agent-int-packages.datadoghq.com/external/tzlocal/tzlocal-5.2-py3-none-any.whl#sha256=49816ef2fe65ea8ac19d19aa7a1ae0551c834303d5014c6d5a62e4cbda8047b8 uptime @ https://agent-int-packages.datadoghq.com/built/uptime/uptime-3.0.1-20240830145554-cp312-cp312-win_amd64.whl#sha256=3428f0d06d749e2b07f4b783429de36dca4bd437fe0b4df558074fa898cae5c0 urllib3 @ https://agent-int-packages.datadoghq.com/external/urllib3/urllib3-2.2.3-py3-none-any.whl#sha256=ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac From b0834e773a83524410a9fa608179a6a16f70bbec Mon Sep 17 00:00:00 2001 From: Kyle Neale Date: Thu, 26 Sep 2024 18:14:20 +0200 Subject: [PATCH 02/56] Add ability to pass a CA cert to Clickhouse (#18677) * Add ability to pass a CA cert to Clickhouse * small fix and add changelog * fix test --- clickhouse/assets/configuration/spec.yaml | 4 ++++ clickhouse/changelog.d/18677.added | 1 + clickhouse/datadog_checks/clickhouse/clickhouse.py | 2 ++ .../datadog_checks/clickhouse/config_models/instance.py | 1 + clickhouse/datadog_checks/clickhouse/data/conf.yaml.example | 5 +++++ clickhouse/tests/test_unit.py | 1 + 6 files changed, 14 insertions(+) create mode 100644 clickhouse/changelog.d/18677.added diff --git a/clickhouse/assets/configuration/spec.yaml b/clickhouse/assets/configuration/spec.yaml index 9c42e8e00c2b7..d5d042cebf06f 100644 --- a/clickhouse/assets/configuration/spec.yaml +++ b/clickhouse/assets/configuration/spec.yaml @@ -57,6 +57,10 @@ files: - lz4hc value: type: string + - name: tls_ca_cert + description: The path to the CA certificate file. + value: + type: string - name: tls_verify description: Whether or not to connect securely using TLS. The server must also support this. value: diff --git a/clickhouse/changelog.d/18677.added b/clickhouse/changelog.d/18677.added new file mode 100644 index 0000000000000..bf957b282adea --- /dev/null +++ b/clickhouse/changelog.d/18677.added @@ -0,0 +1 @@ +Add ability to pass a CA cert to Clickhouse \ No newline at end of file diff --git a/clickhouse/datadog_checks/clickhouse/clickhouse.py b/clickhouse/datadog_checks/clickhouse/clickhouse.py index e640169d9e749..fe362e96f47ae 100644 --- a/clickhouse/datadog_checks/clickhouse/clickhouse.py +++ b/clickhouse/datadog_checks/clickhouse/clickhouse.py @@ -26,6 +26,7 @@ def __init__(self, name, init_config, instances): self._read_timeout = float(self.instance.get('read_timeout', 10)) self._compression = self.instance.get('compression', False) self._tls_verify = is_affirmative(self.instance.get('tls_verify', False)) + self._tls_ca_cert = self.instance.get('tls_ca_cert', None) self._tags = self.instance.get('tags', []) # Add global tags @@ -108,6 +109,7 @@ def connect(self): sync_request_timeout=self._connect_timeout, compression=self._compression, secure=self._tls_verify, + ca_certs=self._tls_ca_cert, settings={}, # Make every client unique for server logs client_name='datadog-{}'.format(self.check_id), diff --git a/clickhouse/datadog_checks/clickhouse/config_models/instance.py b/clickhouse/datadog_checks/clickhouse/config_models/instance.py index c8ce7fa7c2dab..438b23dc2919a 100644 --- a/clickhouse/datadog_checks/clickhouse/config_models/instance.py +++ b/clickhouse/datadog_checks/clickhouse/config_models/instance.py @@ -62,6 +62,7 @@ class InstanceConfig(BaseModel): server: str service: Optional[str] = None tags: Optional[tuple[str, ...]] = None + tls_ca_cert: Optional[str] = None tls_verify: Optional[bool] = None use_global_custom_queries: Optional[str] = None username: Optional[str] = None diff --git a/clickhouse/datadog_checks/clickhouse/data/conf.yaml.example b/clickhouse/datadog_checks/clickhouse/data/conf.yaml.example index 2b19c052ae599..9dbea83674bd1 100644 --- a/clickhouse/datadog_checks/clickhouse/data/conf.yaml.example +++ b/clickhouse/datadog_checks/clickhouse/data/conf.yaml.example @@ -69,6 +69,11 @@ instances: # # compression: + ## @param tls_ca_cert - string - optional + ## The path to the CA certificate file. + # + # tls_ca_cert: + ## @param tls_verify - boolean - optional - default: false ## Whether or not to connect securely using TLS. The server must also support this. # diff --git a/clickhouse/tests/test_unit.py b/clickhouse/tests/test_unit.py index 3734bfa6c04bc..b49ae2060b9fc 100644 --- a/clickhouse/tests/test_unit.py +++ b/clickhouse/tests/test_unit.py @@ -29,6 +29,7 @@ def test_config(instance): sync_request_timeout=10, compression=False, secure=False, + ca_certs=None, settings={}, client_name='datadog-test-clickhouse', ) From 6c74bbeb2981bc45f3129ed98b090bca0a62dbab Mon Sep 17 00:00:00 2001 From: Janae Quinones <62717289+Janaeq@users.noreply.github.com> Date: Thu, 26 Sep 2024 16:31:52 -0400 Subject: [PATCH 03/56] Update spec.yaml (#18664) * Update spec.yaml * add event_id example --- win32_event_log/assets/configuration/spec.yaml | 2 ++ .../datadog_checks/win32_event_log/data/conf.yaml.example | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/win32_event_log/assets/configuration/spec.yaml b/win32_event_log/assets/configuration/spec.yaml index 39aaa32fd49e6..262e79cec845c 100644 --- a/win32_event_log/assets/configuration/spec.yaml +++ b/win32_event_log/assets/configuration/spec.yaml @@ -404,6 +404,8 @@ files: type: array items: type: string + example: + - '1101' - name: message_filters description: | The `message_filters` filter instructs the check to only capture diff --git a/win32_event_log/datadog_checks/win32_event_log/data/conf.yaml.example b/win32_event_log/datadog_checks/win32_event_log/data/conf.yaml.example index b005a9f50466a..e2afc9dbebe67 100644 --- a/win32_event_log/datadog_checks/win32_event_log/data/conf.yaml.example +++ b/win32_event_log/datadog_checks/win32_event_log/data/conf.yaml.example @@ -329,7 +329,8 @@ instances: ## ## Note: This is only used when `legacy_mode` is set to `true`. # - # event_id: [] + # event_id: + # - '1101' ## @param message_filters - list of strings - optional ## The `message_filters` filter instructs the check to only capture From 965ba2dd5d2e74bd36e8a49c6031a235c2c38f59 Mon Sep 17 00:00:00 2001 From: Sarah Witt Date: Thu, 26 Sep 2024 16:33:22 -0400 Subject: [PATCH 04/56] Add note about property metrics (#18678) * Add note about property metrics * Apply suggestions from code review Co-authored-by: DeForest Richards <56796055+drichards-87@users.noreply.github.com> --------- Co-authored-by: DeForest Richards <56796055+drichards-87@users.noreply.github.com> --- vsphere/README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/vsphere/README.md b/vsphere/README.md index 0faebf500ce53..57cc9a8a9797e 100644 --- a/vsphere/README.md +++ b/vsphere/README.md @@ -57,6 +57,18 @@ collect_per_instance_filters: `disk` metrics are specific for each disk on the host, therefore these metrics need to be enabled using `collect_per_instance_filters` to be collected. +#### Collecting property metrics + +The vSphere integration can also collect property-based metrics. These are configuration properties, such as if a host is in maintenance mode or a cluster is configured with DRS. + +To enable property metrics, configure the following option: +``` +collect_property_metrics: true +``` + +Property metrics are prefixed by the resource name. For example, host property metrics metrics are prefixed with `vsphere.host.*`, and VM property metrics are prefixed with `vsphere.vm.*`. View all the possible property metrics in the [metadata.csv][10]. + + ### Events This check watches vCenter's Event Manager for events and emits them to Datadog. The check defaults to emit the following event types: From 6aa3c4d17423230d1ac7b1aeaddb2f731243661e Mon Sep 17 00:00:00 2001 From: Ilia Kurenkov Date: Fri, 27 Sep 2024 10:40:16 +0200 Subject: [PATCH 05/56] Add integration for Anyscale (#18643) * Add integration for Anyscale * fix manifest * add labeler config * more manifest fixes * Apply suggestions from code review Co-authored-by: Austin Lai <76412946+alai97@users.noreply.github.com> * Apply suggestions from code review * Update anyscale/manifest.json * Update anyscale/manifest.json --------- Co-authored-by: dkirov-dd <166512750+dkirov-dd@users.noreply.github.com> Co-authored-by: Austin Lai <76412946+alai97@users.noreply.github.com> --- .github/workflows/config/labeler.yml | 2 + anyscale/CHANGELOG.md | 7 + anyscale/README.md | 24 + .../assets/dashboards/anyscale_overview.json | 1632 +++++++++++++++++ anyscale/assets/monitors/cpu_utilization.json | 31 + anyscale/assets/monitors/failed_task.json | 33 + anyscale/assets/monitors/gpu_utilization.json | 31 + anyscale/assets/monitors/mem_utilization.json | 32 + anyscale/assets/service_checks.json | 1 + anyscale/manifest.json | 48 + 10 files changed, 1841 insertions(+) create mode 100644 anyscale/CHANGELOG.md create mode 100644 anyscale/README.md create mode 100644 anyscale/assets/dashboards/anyscale_overview.json create mode 100644 anyscale/assets/monitors/cpu_utilization.json create mode 100644 anyscale/assets/monitors/failed_task.json create mode 100644 anyscale/assets/monitors/gpu_utilization.json create mode 100644 anyscale/assets/monitors/mem_utilization.json create mode 100644 anyscale/assets/service_checks.json create mode 100644 anyscale/manifest.json diff --git a/.github/workflows/config/labeler.yml b/.github/workflows/config/labeler.yml index 9245eb81c5729..3ee22357e5d4b 100644 --- a/.github/workflows/config/labeler.yml +++ b/.github/workflows/config/labeler.yml @@ -55,6 +55,8 @@ integration/amazon_msk: - amazon_msk/**/* integration/ambari: - ambari/**/* +integration/anyscale: +- anyscale/**/* integration/apache: - apache/**/* integration/appgate_sdp: diff --git a/anyscale/CHANGELOG.md b/anyscale/CHANGELOG.md new file mode 100644 index 0000000000000..a4a7a679943d0 --- /dev/null +++ b/anyscale/CHANGELOG.md @@ -0,0 +1,7 @@ +# CHANGELOG - Anyscale + +## 1.0.0 / 2024-09-21 + +***Added***: + +* Initial Release \ No newline at end of file diff --git a/anyscale/README.md b/anyscale/README.md new file mode 100644 index 0000000000000..37b241cba2cc3 --- /dev/null +++ b/anyscale/README.md @@ -0,0 +1,24 @@ +# Agent Check: Anyscale + +## Overview + +This check monitors [Anyscale][1]. Anyscale is a compute platform that hosts [Ray][5] clusters. + +## Setup + +To install and configure the Datadog Agent with the Ray integration on Anyscale, see the [official Anyscale documentation][6]. + +## Data Collected + +See the [Ray integration's Data Collected section][4]. + +## Troubleshooting + +Need help? Contact [Datadog support][3]. + +[1]: https://docs.anyscale.com/ +[2]: https://app.datadoghq.com/account/settings/agent/latest +[3]: https://docs.datadoghq.com/help/ +[4]: https://docs.datadoghq.com/integrations/ray/?tab=host#data-collected +[5]: https://docs.ray.io/en/latest/ +[6]: https://docs.anyscale.com/monitoring/datadog/ diff --git a/anyscale/assets/dashboards/anyscale_overview.json b/anyscale/assets/dashboards/anyscale_overview.json new file mode 100644 index 0000000000000..2ca39d279832d --- /dev/null +++ b/anyscale/assets/dashboards/anyscale_overview.json @@ -0,0 +1,1632 @@ +{ + "author_name": "Datadog", + "description": "**Anyscale**\n\nThis dashboard provides insights into your Anyscale services. You can use the dashboard to track health status, performance, and resource utilization metrics from all your services. You can also get in-depth information on the workload deployment that are currently running in your instance, the workers they leverage, and the resource consumption breakdown. \n\n**Useful Links**\n\n* [Integration Docs](https://docs.datadoghq.com/integrations/anyscale)\n*", + "layout_type": "ordered", + "template_variables": [ + { + "available_values": [], + "default": "*", + "name": "service", + "prefix": "service" + }, + { + "available_values": [], + "default": "*", + "name": "host", + "prefix": "host" + }, + { + "available_values": [], + "default": "*", + "name": "node", + "prefix": "node" + }, + { + "available_values": [], + "default": "*", + "name": "component", + "prefix": "component" + } + ], + "title": "Anyscale Overview Dashboard", + "widgets": [ + { + "definition": { + "banner_img": "", + "layout_type": "ordered", + "show_title": false, + "title": "New group", + "type": "group", + "widgets": [ + { + "definition": { + "has_background": true, + "has_border": true, + "horizontal_align": "center", + "sizing": "contain", + "type": "image", + "url": "/static/images/logos/anyscale_large.svg", + "url_dark_theme": "/static/images/logos/anyscale_reversed_large.svg", + "vertical_align": "center" + }, + "id": 3838651690068190, + "layout": { + "height": 2, + "width": 6, + "x": 0, + "y": 0 + } + }, + { + "definition": { + "background_color": "white", + "content": "**Anyscale**\n\nThis dashboard provides insights into your Anyscale services. You can use the dashboard to track health status, performance, and resource utilization metrics from all your services. You can also get in-depth information on the workload deployment that are currently running in your instance, the workers they leverage, and the resource consumption breakdown. ", + "font_size": "14", + "has_padding": true, + "show_tick": false, + "text_align": "left", + "tick_edge": "left", + "tick_pos": "50%", + "type": "note", + "vertical_align": "top" + }, + "id": 5765057495183900, + "layout": { + "height": 4, + "width": 3, + "x": 0, + "y": 2 + } + }, + { + "definition": { + "background_color": "white", + "content": "**Useful Links**\n\n* [Integration Docs](https://docs.datadoghq.com/integrations/anyscale)\n*\n", + "font_size": "16", + "has_padding": true, + "show_tick": false, + "text_align": "left", + "tick_edge": "left", + "tick_pos": "50%", + "type": "note", + "vertical_align": "top" + }, + "id": 607314244154516, + "layout": { + "height": 4, + "width": 3, + "x": 3, + "y": 2 + } + } + ] + }, + "id": 6955576996753366, + "layout": { + "height": 7, + "width": 6, + "x": 0, + "y": 0 + } + }, + { + "definition": { + "background_color": "vivid_blue", + "layout_type": "ordered", + "show_title": true, + "title": "Overview", + "type": "group", + "widgets": [ + { + "definition": { + "background_color": "blue", + "content": "This section provides you with an overview of your system activity. The monitor summary notifies you of Anyscale alerts. ", + "font_size": "14", + "has_padding": true, + "show_tick": false, + "text_align": "center", + "tick_edge": "left", + "tick_pos": "50%", + "type": "note", + "vertical_align": "center" + }, + "id": 2433716659549980, + "layout": { + "height": 1, + "width": 6, + "x": 0, + "y": 0 + } + }, + { + "definition": { + "color_preference": "text", + "count": 50, + "display_format": "countsAndList", + "hide_zero_counts": true, + "query": "ray.io", + "show_last_triggered": false, + "show_priority": false, + "sort": "status,asc", + "start": 0, + "summary_type": "groups", + "title": "Anyscale Monitor Summary", + "type": "manage_status" + }, + "id": 8740824674228522, + "layout": { + "height": 3, + "width": 6, + "x": 0, + "y": 1 + } + }, + { + "definition": { + "check": "ray.openmetrics.health", + "group_by": [], + "grouping": "cluster", + "tags": [], + "time": { + "live_span": "1d" + }, + "title": "Service checks", + "title_align": "left", + "title_size": "16", + "type": "check_status" + }, + "id": 3431939964933534, + "layout": { + "height": 2, + "width": 3, + "x": 0, + "y": 4 + } + }, + { + "definition": { + "autoscale": true, + "precision": 2, + "requests": [ + { + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query1", + "query": "sum:ray.cluster.active_nodes{$service,$host}" + } + ], + "response_format": "scalar" + } + ], + "timeseries_background": { + "type": "bars", + "yaxis": {} + }, + "title": "Nodes", + "title_align": "left", + "title_size": "16", + "type": "query_value" + }, + "id": 4356505464961250, + "layout": { + "height": 2, + "width": 3, + "x": 3, + "y": 4 + } + } + ] + }, + "id": 8178300534998464, + "layout": { + "height": 7, + "width": 6, + "x": 6, + "y": 0 + } + }, + { + "definition": { + "background_color": "vivid_blue", + "layout_type": "ordered", + "show_title": true, + "title": "Resource Utilization Metrics", + "type": "group", + "widgets": [ + { + "definition": { + "background_color": "blue", + "content": "This section provides a breakdown of your resource utilization. This includes a summary of CPU, Memory, USS and RSS by component as well as network speeds, disk usage and node-specific memory/cpu usage.", + "font_size": "14", + "has_padding": true, + "show_tick": false, + "text_align": "center", + "tick_edge": "left", + "tick_pos": "50%", + "type": "note", + "vertical_align": "center" + }, + "id": 3524283164149716, + "layout": { + "height": 1, + "width": 12, + "x": 0, + "y": 0 + } + }, + { + "definition": { + "has_search_bar": "auto", + "requests": [ + { + "formulas": [ + { + "cell_display_mode": "bar", + "formula": "query1", + "limit": { + "count": 500, + "order": "desc" + } + }, + { + "cell_display_mode": "number", + "conditional_formats": [ + { + "comparator": ">", + "palette": "white_on_yellow", + "value": 15 + }, + { + "comparator": ">", + "palette": "white_on_red", + "value": 60 + }, + { + "comparator": ">", + "palette": "white_on_green", + "value": 0 + } + ], + "formula": "query3" + }, + { + "cell_display_mode": "trend", + "formula": "query4" + }, + { + "cell_display_mode": "trend", + "formula": "query5" + } + ], + "queries": [ + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query1", + "query": "avg:ray.component.mem_shared{*} by {component}" + }, + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query3", + "query": "avg:ray.component.cpu_percentage{*} by {component}" + }, + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query4", + "query": "avg:ray.component.uss{*} by {component}" + }, + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query5", + "query": "avg:ray.component.rss{*} by {component}" + } + ], + "response_format": "scalar" + } + ], + "title": "Resource Usage by Components ", + "title_align": "left", + "title_size": "16", + "type": "query_table" + }, + "id": 5907266281280340, + "layout": { + "height": 6, + "width": 12, + "x": 0, + "y": 1 + } + }, + { + "definition": { + "legend_columns": [ + "avg", + "min", + "max", + "value", + "sum" + ], + "legend_layout": "auto", + "requests": [ + { + "display_type": "line", + "formulas": [ + { + "formula": "query2" + }, + { + "formula": "query3" + } + ], + "queries": [ + { + "data_source": "metrics", + "name": "query2", + "query": "avg:ray.node.network.received{*} by {service}" + }, + { + "data_source": "metrics", + "name": "query3", + "query": "avg:ray.node.network.sent{*} by {service}" + } + ], + "response_format": "timeseries", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "dog_classic" + } + } + ], + "show_legend": true, + "title": "Node Network Speeds", + "title_align": "left", + "title_size": "16", + "type": "timeseries" + }, + "id": 1104009546721264, + "layout": { + "height": 4, + "width": 6, + "x": 0, + "y": 7 + } + }, + { + "definition": { + "legend": { + "type": "automatic" + }, + "requests": [ + { + "formulas": [ + { + "formula": "query1 + query2", + "limit": { + "order": "desc" + } + } + ], + "queries": [ + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query1", + "query": "avg:ray.cluster.active_nodes{*} by {service}" + }, + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query2", + "query": "avg:ray.cluster.active_nodes{*} by {service}" + } + ], + "response_format": "scalar", + "style": { + "palette": "datadog16" + } + } + ], + "title": "Nodes (Active/Fail/Pending)", + "title_align": "left", + "title_size": "16", + "type": "sunburst" + }, + "id": 3531655451473916, + "layout": { + "height": 3, + "width": 3, + "x": 6, + "y": 7 + } + }, + { + "definition": { + "autoscale": true, + "precision": 2, + "requests": [ + { + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query1", + "query": "avg:ray.component.cpu_percentage{$service}" + } + ], + "response_format": "scalar" + } + ], + "timeseries_background": { + "type": "area" + }, + "title": "CPU of all components on node", + "title_align": "left", + "title_size": "16", + "type": "query_value" + }, + "id": 2893103864406290, + "layout": { + "height": 3, + "width": 3, + "x": 9, + "y": 7 + } + }, + { + "definition": { + "legend_columns": [ + "avg", + "min", + "max", + "value", + "sum" + ], + "legend_layout": "vertical", + "requests": [ + { + "display_type": "line", + "formulas": [ + { + "alias": "available", + "formula": "query1" + }, + { + "alias": "shared", + "formula": "query2" + }, + { + "alias": "total", + "formula": "query3" + }, + { + "alias": "used", + "formula": "query4" + } + ], + "queries": [ + { + "data_source": "metrics", + "name": "query1", + "query": "avg:ray.node.mem.available{*} by {service}" + }, + { + "data_source": "metrics", + "name": "query2", + "query": "avg:ray.node.mem.shared{*} by {service}" + }, + { + "data_source": "metrics", + "name": "query3", + "query": "avg:ray.node.mem.total{*} by {service}" + }, + { + "data_source": "metrics", + "name": "query4", + "query": "avg:ray.node.mem.used{*} by {service}" + } + ], + "response_format": "timeseries", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "dog_classic" + } + } + ], + "show_legend": false, + "time": {}, + "title": "Anyscale Node Memory", + "title_align": "left", + "title_size": "16", + "type": "timeseries" + }, + "id": 3446286850058486, + "layout": { + "height": 4, + "width": 6, + "x": 6, + "y": 10 + } + }, + { + "definition": { + "legend_columns": [ + "avg", + "min", + "max", + "value", + "sum" + ], + "legend_layout": "horizontal", + "requests": [ + { + "display_type": "line", + "formulas": [ + { + "alias": "Free", + "formula": "query1" + }, + { + "alias": "Used", + "formula": "query2" + } + ], + "queries": [ + { + "data_source": "metrics", + "name": "query1", + "query": "avg:ray.node.disk.free{$service,$host}" + }, + { + "data_source": "metrics", + "name": "query2", + "query": "avg:ray.node.disk.usage{$service,$host}" + } + ], + "response_format": "timeseries", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "dog_classic" + } + } + ], + "show_legend": true, + "title": "Disk Usage", + "title_align": "left", + "title_size": "16", + "type": "timeseries", + "yaxis": { + "include_zero": false, + "scale": "log" + } + }, + "id": 5009738032661612, + "layout": { + "height": 3, + "width": 6, + "x": 0, + "y": 11 + } + }, + { + "definition": { + "legend_columns": [ + "avg", + "min", + "max", + "value", + "sum" + ], + "legend_layout": "auto", + "requests": [ + { + "display_type": "line", + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "data_source": "metrics", + "name": "query1", + "query": "avg:ray.node.gpus_utilization{*} by {host}" + } + ], + "response_format": "timeseries", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "dog_classic" + } + } + ], + "show_legend": true, + "title": "Node GPU Utilization", + "title_align": "left", + "title_size": "16", + "type": "timeseries" + }, + "id": 870829157681004, + "layout": { + "height": 3, + "width": 6, + "x": 0, + "y": 14 + } + }, + { + "definition": { + "legend_columns": [ + "avg", + "min", + "max", + "value", + "sum" + ], + "legend_layout": "auto", + "requests": [ + { + "display_type": "line", + "formulas": [ + { + "alias": "Queued Queries", + "formula": "query2" + }, + { + "alias": "Replica Restarts", + "formula": "query4" + } + ], + "queries": [ + { + "data_source": "metrics", + "name": "query2", + "query": "sum:ray.serve.deployment.queued_queries{*}" + }, + { + "data_source": "metrics", + "name": "query4", + "query": "sum:ray.serve.deployment.replica.starts{*}" + } + ], + "response_format": "timeseries", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "dog_classic" + } + } + ], + "show_legend": true, + "title": "Queries Waiting for Replica Assignments vs Replica Restarts", + "title_align": "left", + "title_size": "16", + "type": "timeseries" + }, + "id": 442436673003936, + "layout": { + "height": 3, + "width": 6, + "x": 6, + "y": 14 + } + } + ] + }, + "id": 959789313432540, + "layout": { + "height": 18, + "width": 12, + "x": 0, + "y": 7 + } + }, + { + "definition": { + "background_color": "vivid_blue", + "layout_type": "ordered", + "show_title": true, + "title": "Logs", + "type": "group", + "widgets": [ + { + "definition": { + "background_color": "blue", + "content": "When investigating logs, you can refer to the timeseries data to see the ratio of a certain log status to other expected statuses. In situations where you notice an increase in the ratio of error logs, you can refer to the log stream set up to filter erroneous logs.", + "font_size": "14", + "has_padding": true, + "show_tick": false, + "text_align": "center", + "tick_edge": "left", + "tick_pos": "50%", + "type": "note", + "vertical_align": "top" + }, + "id": 4153974323492632, + "layout": { + "height": 1, + "width": 12, + "x": 0, + "y": 0 + } + }, + { + "definition": { + "legend_columns": [ + "avg", + "min", + "max", + "value", + "sum" + ], + "legend_layout": "horizontal", + "requests": [ + { + "display_type": "bars", + "formulas": [ + { + "formula": "a" + } + ], + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "logs", + "group_by": [ + { + "facet": "status", + "limit": 50, + "should_exclude_missing": true, + "sort": { + "aggregation": "count", + "order": "desc" + } + } + ], + "indexes": [ + "*" + ], + "name": "a", + "search": { + "query": "source:anyscale " + }, + "storage": "online_archives" + } + ], + "response_format": "timeseries", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "semantic" + } + } + ], + "show_legend": true, + "title": "Count per Log Status", + "title_align": "left", + "title_size": "16", + "type": "timeseries" + }, + "id": 8479415087389006, + "layout": { + "height": 4, + "width": 8, + "x": 0, + "y": 1 + } + }, + { + "definition": { + "requests": [ + { + "columns": [ + { + "field": "status_line", + "width": "auto" + }, + { + "field": "timestamp", + "width": "auto" + }, + { + "field": "host", + "width": "auto" + }, + { + "field": "service", + "width": "auto" + }, + { + "field": "content", + "width": "compact" + } + ], + "query": { + "data_source": "logs_stream", + "indexes": [], + "query_string": "source:ray status:error ", + "storage": "hot" + }, + "response_format": "event_list" + } + ], + "time": { + "live_span": "1mo" + }, + "title": "Error Logs", + "title_align": "left", + "title_size": "16", + "type": "list_stream" + }, + "id": 2307319545140206, + "layout": { + "height": 4, + "width": 4, + "x": 8, + "y": 1 + } + } + ] + }, + "id": 1911052397730552, + "layout": { + "height": 6, + "width": 12, + "x": 0, + "y": 25 + } + }, + { + "definition": { + "background_color": "vivid_blue", + "layout_type": "ordered", + "show_title": true, + "title": "Scheduler Metrics", + "type": "group", + "widgets": [ + { + "definition": { + "background_color": "blue", + "content": "Scheduler metrics categorize Pending and Failed tasks by the reason they are blocked, and showcase the time for workloads (e.g. task/actor/etc.) to be placed. Users can troubleshoot task failures, and optimize task placement algorithms using this data. ", + "font_size": "14", + "has_padding": true, + "show_tick": false, + "text_align": "center", + "tick_edge": "left", + "tick_pos": "50%", + "type": "note", + "vertical_align": "center" + }, + "id": 2501952917707794, + "layout": { + "height": 1, + "width": 12, + "x": 0, + "y": 0 + } + }, + { + "definition": { + "legend": { + "type": "table" + }, + "requests": [ + { + "formulas": [ + { + "formula": "query1", + "limit": { + "order": "desc" + } + } + ], + "queries": [ + { + "aggregator": "max", + "data_source": "metrics", + "name": "query1", + "query": "max:ray.scheduler.unscheduleable_tasks{*} by {reason,nodeaddress}" + } + ], + "response_format": "scalar", + "style": { + "palette": "datadog16" + } + } + ], + "title": "Pending Tasks with Reason for Blocker", + "title_align": "left", + "title_size": "16", + "type": "sunburst" + }, + "id": 5313203282719858, + "layout": { + "height": 5, + "width": 12, + "x": 0, + "y": 1 + } + }, + { + "definition": { + "legend": { + "type": "table" + }, + "requests": [ + { + "formulas": [ + { + "formula": "query1", + "limit": { + "count": 500, + "order": "desc" + } + } + ], + "queries": [ + { + "aggregator": "max", + "data_source": "metrics", + "name": "query1", + "query": "max:ray.scheduler.failed_worker_startup{*} by {reason,nodeaddress}" + } + ], + "response_format": "scalar", + "style": { + "palette": "datadog16" + } + } + ], + "title": "Failed Tasks with Reason for Worker Unavailability", + "title_align": "left", + "title_size": "16", + "type": "sunburst" + }, + "id": 8936048485216646, + "layout": { + "height": 4, + "width": 12, + "x": 0, + "y": 6 + } + }, + { + "definition": { + "requests": [ + { + "change_type": "absolute", + "formulas": [ + { + "formula": "hour_before(query1)" + }, + { + "formula": "query1" + } + ], + "increase_good": true, + "order_by": "change", + "order_dir": "asc", + "queries": [ + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query1", + "query": "sum:ray.scheduler.placement_time.sum{*} by {workloadtype,workerid}.as_count()" + } + ], + "response_format": "scalar" + } + ], + "title": "Time for Workload to be placed", + "title_align": "left", + "title_size": "16", + "type": "change" + }, + "id": 2788205553571296, + "layout": { + "height": 5, + "width": 12, + "x": 0, + "y": 10 + } + } + ] + }, + "id": 3042283118937458, + "layout": { + "height": 16, + "is_column_break": true, + "width": 12, + "x": 0, + "y": 0 + } + }, + { + "definition": { + "background_color": "vivid_blue", + "layout_type": "ordered", + "show_title": true, + "title": "Process", + "type": "group", + "widgets": [ + { + "definition": { + "background_color": "blue", + "content": "Processes are lightweight, parallel units of computation that encapsulate tasks or functions. They provide a flexible way to distribute and execute workloads within the Anyscale framework. This section provides the resource usage and status of processes.", + "font_size": "14", + "has_padding": true, + "show_tick": false, + "text_align": "center", + "tick_edge": "left", + "tick_pos": "50%", + "type": "note", + "vertical_align": "center" + }, + "id": 7064250345570960, + "layout": { + "height": 1, + "width": 12, + "x": 0, + "y": 0 + } + }, + { + "definition": { + "legend_columns": [ + "avg", + "min", + "max", + "value", + "sum" + ], + "legend_layout": "auto", + "requests": [ + { + "display_type": "line", + "formulas": [ + { + "alias": "Processes created by Worker Pool", + "formula": "query1" + }, + { + "alias": "Workers started from Cached Worker Processes", + "formula": "query2" + }, + { + "alias": "Cumulative number of lease requests from raylet", + "formula": "query3" + } + ], + "queries": [ + { + "data_source": "metrics", + "name": "query1", + "query": "avg:ray.internal_num.processes.started{*}" + }, + { + "data_source": "metrics", + "name": "query2", + "query": "avg:ray.internal_num.processes.started.from_cache{*}" + }, + { + "data_source": "metrics", + "name": "query3", + "query": "avg:ray.internal_num.spilled_tasks{*}" + } + ], + "response_format": "timeseries", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "dog_classic" + } + } + ], + "show_legend": true, + "title": "Processes Started", + "title_align": "left", + "title_size": "16", + "type": "timeseries" + }, + "id": 1870381558866414, + "layout": { + "height": 3, + "width": 12, + "x": 0, + "y": 1 + } + }, + { + "definition": { + "legend_columns": [ + "avg", + "min", + "max", + "value", + "sum" + ], + "legend_layout": "auto", + "requests": [ + { + "display_type": "line", + "formulas": [ + { + "alias": "Job Mismatch", + "formula": "query1" + }, + { + "alias": "Environment Mismatch", + "formula": "query2" + } + ], + "queries": [ + { + "data_source": "metrics", + "name": "query1", + "query": "sum:ray.internal_num.processes.skipped.job_mismatch{*} by {service,component}" + }, + { + "data_source": "metrics", + "name": "query2", + "query": "sum:ray.internal_num.processes.skipped.runtime_environment_mismatch{*} by {service,component}" + } + ], + "response_format": "timeseries", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "dog_classic" + } + } + ], + "show_legend": true, + "title": "Processes Skipped", + "title_align": "left", + "title_size": "16", + "type": "timeseries" + }, + "id": 994532257112456, + "layout": { + "height": 2, + "width": 12, + "x": 0, + "y": 4 + } + }, + { + "definition": { + "legend_columns": [ + "avg", + "min", + "max", + "value", + "sum" + ], + "legend_layout": "auto", + "requests": [ + { + "display_type": "line", + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "data_source": "metrics", + "name": "query1", + "query": "sum:ray.process.cpu_seconds.count{$service,$host}.as_count()" + } + ], + "response_format": "timeseries", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "dog_classic" + } + } + ], + "show_legend": false, + "time": {}, + "title": "CPU Usage", + "title_align": "left", + "title_size": "16", + "type": "timeseries", + "yaxis": { + "include_zero": false, + "scale": "log" + } + }, + "id": 6010260285436924, + "layout": { + "height": 3, + "width": 12, + "x": 0, + "y": 6 + } + }, + { + "definition": { + "legend_columns": [ + "avg", + "min", + "max", + "value", + "sum" + ], + "legend_layout": "horizontal", + "requests": [ + { + "display_type": "line", + "formulas": [ + { + "alias": "Open", + "formula": "query1" + }, + { + "alias": "Max", + "formula": "query2" + } + ], + "queries": [ + { + "data_source": "metrics", + "name": "query1", + "query": "avg:ray.process.open_fds{$service,$host}" + }, + { + "data_source": "metrics", + "name": "query2", + "query": "avg:ray.process.max_fds{$service,$host}" + } + ], + "response_format": "timeseries", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "dog_classic" + } + } + ], + "show_legend": true, + "title": "File descriptors", + "title_align": "left", + "title_size": "16", + "type": "timeseries", + "yaxis": { + "include_zero": false, + "scale": "log" + } + }, + "id": 5609772683109400, + "layout": { + "height": 2, + "width": 12, + "x": 0, + "y": 9 + } + }, + { + "definition": { + "legend_columns": [ + "avg", + "min", + "max", + "value", + "sum" + ], + "legend_layout": "horizontal", + "requests": [ + { + "display_type": "line", + "formulas": [ + { + "alias": "Virtual", + "formula": "query1" + }, + { + "alias": "Resident", + "formula": "query2" + } + ], + "queries": [ + { + "data_source": "metrics", + "name": "query1", + "query": "avg:ray.process.virtual_memory{$service,$host}" + }, + { + "data_source": "metrics", + "name": "query2", + "query": "avg:ray.process.resident_memory{$service,$host}" + } + ], + "response_format": "timeseries", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "dog_classic" + } + } + ], + "show_legend": true, + "title": "Virtual and Resident Memory", + "title_align": "left", + "title_size": "16", + "type": "timeseries", + "yaxis": { + "include_zero": false, + "scale": "log" + } + }, + "id": 6966822935599484, + "layout": { + "height": 2, + "width": 12, + "x": 0, + "y": 11 + } + } + ] + }, + "id": 490832987302744, + "layout": { + "height": 14, + "width": 12, + "x": 0, + "y": 16 + } + }, + { + "definition": { + "background_color": "vivid_blue", + "layout_type": "ordered", + "show_title": true, + "title": "Serve", + "type": "group", + "widgets": [ + { + "definition": { + "background_color": "blue", + "content": "This section provides information on HTTP requests and Queued queries for Anyscale Serve.", + "font_size": "14", + "has_padding": true, + "show_tick": false, + "text_align": "center", + "tick_edge": "left", + "tick_pos": "50%", + "type": "note", + "vertical_align": "center" + }, + "id": 7924116123644004, + "layout": { + "height": 1, + "width": 12, + "x": 0, + "y": 0 + } + }, + { + "definition": { + "legend_columns": [ + "avg", + "min", + "max", + "value", + "sum" + ], + "legend_layout": "vertical", + "requests": [ + { + "display_type": "line", + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "data_source": "metrics", + "name": "query1", + "query": "avg:ray.serve.num_http_requests{$service, $host} by {status_code,application}" + } + ], + "response_format": "timeseries", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "dog_classic" + } + } + ], + "show_legend": true, + "title": "Number of HTTP Requests", + "title_align": "left", + "title_size": "16", + "type": "timeseries" + }, + "id": 4986655360776724, + "layout": { + "height": 4, + "width": 6, + "x": 0, + "y": 1 + } + }, + { + "definition": { + "legend_columns": [ + "avg", + "min", + "max", + "value", + "sum" + ], + "legend_layout": "vertical", + "requests": [ + { + "display_type": "line", + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "data_source": "metrics", + "name": "query1", + "query": "sum:ray.serve.http_request_latency.sum{$service,$host} by {application}.as_count()" + } + ], + "response_format": "timeseries", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "classic" + } + } + ], + "show_legend": true, + "title": "HTTP Request Latency", + "title_align": "left", + "title_size": "16", + "type": "timeseries" + }, + "id": 1170771293853962, + "layout": { + "height": 4, + "width": 6, + "x": 6, + "y": 1 + } + }, + { + "definition": { + "legend": { + "type": "automatic" + }, + "requests": [ + { + "formulas": [ + { + "formula": "query1", + "limit": { + "count": 500, + "order": "desc" + } + } + ], + "queries": [ + { + "aggregator": "sum", + "data_source": "metrics", + "name": "query1", + "query": "sum:ray.serve.deployment.queued_queries{$service,$host} by {application}" + } + ], + "response_format": "scalar", + "style": { + "palette": "classic" + } + } + ], + "title": "Current Number of Queued Queries per Application", + "title_align": "left", + "title_size": "16", + "type": "sunburst" + }, + "id": 6255318614136780, + "layout": { + "height": 4, + "width": 6, + "x": 0, + "y": 5 + } + }, + { + "definition": { + "legend_columns": [ + "avg", + "min", + "max", + "value", + "sum" + ], + "legend_layout": "vertical", + "requests": [ + { + "display_type": "line", + "formulas": [ + { + "formula": "query1" + }, + { + "formula": "query2" + } + ], + "queries": [ + { + "data_source": "metrics", + "name": "query1", + "query": "sum:ray.serve.deployment.queued_queries{$service,$host} by {application}" + }, + { + "data_source": "metrics", + "name": "query2", + "query": "sum:ray.serve.deployment.queued_queries{$service,$host} by {application}" + } + ], + "response_format": "timeseries", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "classic" + } + } + ], + "show_legend": true, + "title": "Queued queries", + "title_align": "left", + "title_size": "16", + "type": "timeseries" + }, + "id": 4034336023274302, + "layout": { + "height": 4, + "width": 6, + "x": 6, + "y": 5 + } + } + ] + }, + "id": 4905175075577830, + "layout": { + "height": 10, + "width": 12, + "x": 0, + "y": 30 + } + } + ] +} diff --git a/anyscale/assets/monitors/cpu_utilization.json b/anyscale/assets/monitors/cpu_utilization.json new file mode 100644 index 0000000000000..9ee0d09ceaf79 --- /dev/null +++ b/anyscale/assets/monitors/cpu_utilization.json @@ -0,0 +1,31 @@ +{ + "version": 2, + "created_at": "2023-12-13", + "last_updated_at": "2023-12-13", + "title": "High CPU Utilization on Anyscale node", + "description": "Running machine learning or data processing workloads with Anyscale can be computationally intensive. This monitor notifies you when the CPU utilization on a Anyscale node is high.", + "definition": { + "id": 136348522, + "name": "CPU Utilization maxing out on Anyscale node", + "type": "query alert", + "query": "avg(last_5m):max:ray.node.cpu_utilization{*} by {host} > 98", + "message": "{{#is_alert}}\nCPU Utilization is at {{value}}%. Please check resource provisioning. This occurred on node: {{nodeaddress.name}}. \n{{/is_alert}}\n\n##Please note that you can use a similar query for GPU Utilization\n##replace the above metric with ray.node.gram_used or ray.node.gpus_utilization", + "tags": [], + "options": { + "thresholds": { + "critical": 98 + }, + "notify_audit": false, + "include_tags": true, + "new_group_delay": 60, + "notify_no_data": false, + "avalanche_window": 10, + "silenced": {} + }, + "priority": null, + "restricted_roles": null + }, + "tags": [ + "integration:ray" + ] +} diff --git a/anyscale/assets/monitors/failed_task.json b/anyscale/assets/monitors/failed_task.json new file mode 100644 index 0000000000000..319046d43d991 --- /dev/null +++ b/anyscale/assets/monitors/failed_task.json @@ -0,0 +1,33 @@ +{ + "version": 2, + "created_at": "2023-12-13", + "last_updated_at": "2023-12-13", + "title": "High Number of Failed Tasks on Anyscale Node", + "description": "Tasks are scheduled to workers by the Anyscale scheduler. This monitor alerts when there are too many scheduling failures within a specified time period due to a particular reason.", + "definition": { + "id": 136348417, + "name": "High Number of Failed Tasks on Anyscale Node", + "type": "query alert", + "query": "avg(last_5m):avg:ray.scheduler.failed_worker_startup{*} by {reason,nodeaddress} > 25", + "message": "{{#is_alert}}\nThere are {{value}} tasks that failed to be schedule because workers were not available. This occurred on node: {{nodeaddress.name}}. The stated reason was {{reason.name}}.\n{{/is_alert}}", + "tags": [], + "options": { + "thresholds": { + "critical": 25 + }, + "notify_audit": false, + "include_tags": true, + "new_group_delay": 60, + "renotify_interval": 0, + "escalation_message": "", + "notify_no_data": false, + "avalanche_window": 10, + "silenced": {} + }, + "priority": null, + "restricted_roles": null + }, + "tags": [ + "integration:anyscale" + ] +} diff --git a/anyscale/assets/monitors/gpu_utilization.json b/anyscale/assets/monitors/gpu_utilization.json new file mode 100644 index 0000000000000..752d0801b1673 --- /dev/null +++ b/anyscale/assets/monitors/gpu_utilization.json @@ -0,0 +1,31 @@ +{ + "version": 2, + "created_at": "2023-12-13", + "last_updated_at": "2023-12-13", + "title": "GPU Utilization low on Anyscale Node", + "description": "Ray can leverage the computing power of GPUs to perform machine learning or data processing tasks. Underutilizing available GPU can be expensive. This monitor alerts when the GPU utilization is low on a Anyscale node indicating overprovisioning.", + "definition": { + "id": 136350024, + "name": "GPU Utilization low on Anyscale Node", + "type": "query alert", + "query": "avg(last_5m):max:ray.node.gpus_utilization{*} by {host} < 30", + "message": "{{#is_alert}}\nGPU Utilization is under {{value}}%. Your system may be overprovisioned. This occurred on node: {{nodeaddress.name}}. \n{{/is_alert}}", + "tags": [], + "options": { + "thresholds": { + "critical": 30 + }, + "notify_audit": false, + "include_tags": true, + "new_group_delay": 60, + "notify_no_data": false, + "avalanche_window": 10, + "silenced": {} + }, + "priority": null, + "restricted_roles": null + }, + "tags": [ + "integration:anyscale" + ] +} diff --git a/anyscale/assets/monitors/mem_utilization.json b/anyscale/assets/monitors/mem_utilization.json new file mode 100644 index 0000000000000..2b95f9c246e91 --- /dev/null +++ b/anyscale/assets/monitors/mem_utilization.json @@ -0,0 +1,32 @@ +{ + "version": 2, + "created_at": "2023-12-13", + "last_updated_at": "2023-12-13", + "title": "High Memory Usage", + "description": "Running Anyscale machine learning or data processing workloads can be computationally intensive. This monitor notifies you when the Anyscale node is running low on available memory.", + "definition": { + "id": 136348497, + "name": "High Memory Usage on Anyscale Node", + "type": "query alert", + "query": "avg(last_5m):100 * avg:ray.node.mem.available{*} / avg:ray.node.mem.total{*} < 5", + "message": "{{#is_alert}} \nThere is less than {{value}}% memory available.\n\n{{/is_alert}}\n\n{{#is_warning}}\nThere is less than {{value}}% memory available.\n\n{{/is_warning}}", + "tags": [], + "options": { + "thresholds": { + "critical": 5, + "warning": 10 + }, + "notify_audit": false, + "include_tags": false, + "notify_no_data": false, + "avalanche_window": 10, + "new_host_delay": 300, + "silenced": {} + }, + "priority": null, + "restricted_roles": null + }, + "tags": [ + "integration:anyscale" + ] +} diff --git a/anyscale/assets/service_checks.json b/anyscale/assets/service_checks.json new file mode 100644 index 0000000000000..fe51488c7066f --- /dev/null +++ b/anyscale/assets/service_checks.json @@ -0,0 +1 @@ +[] diff --git a/anyscale/manifest.json b/anyscale/manifest.json new file mode 100644 index 0000000000000..2b06968f440ff --- /dev/null +++ b/anyscale/manifest.json @@ -0,0 +1,48 @@ +{ + "manifest_version": "2.0.0", + "app_uuid": "e3d14556-99b3-4c17-a51a-4d66ef622601", + "app_id": "anyscale", + "display_on_public_website": false, + "tile": { + "overview": "README.md#Overview", + "configuration": "README.md#Setup", + "support": "README.md#Support", + "changelog": "CHANGELOG.md", + "description": "Monitor the health and performance of Anyscale", + "title": "Anyscale", + "media": [], + "classifier_tags": [ + "Supported OS::Linux", + "Supported OS::Windows", + "Supported OS::macOS", + "Category::AI/ML", + "Offering::Integration", + "Queried Data Type::Metrics" + ] + }, + "assets": { + "integration": { + "auto_install": true, + "source_type_id": 27164037, + "source_type_name": "Anyscale", + "service_checks": { + "metadata_path": "assets/service_checks.json" + } + }, + "dashboards": { + "Anyscale Overview": "assets/dashboards/anyscale_overview.json" + }, + "monitors": { + "High CPU Utilization on Anyscale node": "assets/monitors/cpu_utilization.json", + "Low GPU Utilization low on Anyscale Node": "assets/monitors/gpu_utilization.json", + "High Memory Usage": "assets/monitors/mem_utilization.json", + "High Number of Failed Tasks on Anyscale Node": "assets/monitors/failed_task.json" + } + }, + "author": { + "support_email": "help@datadoghq.com", + "name": "Datadog", + "homepage": "https://www.datadoghq.com", + "sales_email": "info@datadoghq.com" + } +} From d9cc06e75020d58191be6b176554e1806734b42e Mon Sep 17 00:00:00 2001 From: Zhengda Lu Date: Fri, 27 Sep 2024 07:40:04 -0400 Subject: [PATCH 06/56] run sqlserver tests on ubuntu 20.04 (#18683) --- .ddev/config.toml | 2 +- .github/workflows/test-all.yml | 2 +- sqlserver/tests/compose/docker-compose.yaml | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.ddev/config.toml b/.ddev/config.toml index e61e8b7c0a9e8..4a4d131e5ea52 100644 --- a/.ddev/config.toml +++ b/.ddev/config.toml @@ -57,7 +57,7 @@ runners = { linux = ["ubuntu-20.04"] } [overrides.ci.sqlserver] platforms = ["windows", "linux"] -runners = { windows = ["windows-2019"] } +runners = { windows = ["windows-2019"], linux = ["ubuntu-20.04"] } [overrides.ci.tcp_check] platforms = ["linux", "windows"] diff --git a/.github/workflows/test-all.yml b/.github/workflows/test-all.yml index 95733db00cf31..dde2cb206fa04 100644 --- a/.github/workflows/test-all.yml +++ b/.github/workflows/test-all.yml @@ -3280,7 +3280,7 @@ jobs: job-name: SQL Server on Linux target: sqlserver platform: linux - runner: '["ubuntu-22.04"]' + runner: '["ubuntu-20.04"]' repo: "${{ inputs.repo }}" python-version: "${{ inputs.python-version }}" standard: ${{ inputs.standard }} diff --git a/sqlserver/tests/compose/docker-compose.yaml b/sqlserver/tests/compose/docker-compose.yaml index 630134061c170..84fe2603ce724 100644 --- a/sqlserver/tests/compose/docker-compose.yaml +++ b/sqlserver/tests/compose/docker-compose.yaml @@ -2,7 +2,6 @@ services: sqlserver: # https://hub.docker.com/_/microsoft-mssql-server # https://docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-docker?view=sql-server-linux-2017 - #image: mcr.microsoft.com/mssql/server:2017-latest-ubuntu build: context: . dockerfile: Dockerfile From c14b128c8390501e05b78563e8a182d12246f87f Mon Sep 17 00:00:00 2001 From: Kyle Neale Date: Fri, 27 Sep 2024 14:04:13 +0200 Subject: [PATCH 07/56] Upgrade psutil to fix performance (#18688) * Upgrade psutil to fix performance * Add changelog --- agent_requirements.in | 2 +- btrfs/changelog.d/18688.added | 1 + btrfs/pyproject.toml | 2 +- disk/changelog.d/18688.added | 1 + disk/pyproject.toml | 2 +- gunicorn/changelog.d/18688.added | 1 + gunicorn/pyproject.toml | 2 +- ibm_mq/changelog.d/18688.added | 1 + ibm_mq/pyproject.toml | 2 +- mongo/changelog.d/18688.added | 1 + mongo/pyproject.toml | 2 +- network/changelog.d/18688.added | 1 + network/pyproject.toml | 2 +- process/changelog.d/18688.added | 1 + process/pyproject.toml | 2 +- system_core/changelog.d/18688.added | 1 + system_core/pyproject.toml | 2 +- system_swap/changelog.d/18688.added | 1 + system_swap/pyproject.toml | 2 +- 19 files changed, 19 insertions(+), 10 deletions(-) create mode 100644 btrfs/changelog.d/18688.added create mode 100644 disk/changelog.d/18688.added create mode 100644 gunicorn/changelog.d/18688.added create mode 100644 ibm_mq/changelog.d/18688.added create mode 100644 mongo/changelog.d/18688.added create mode 100644 network/changelog.d/18688.added create mode 100644 process/changelog.d/18688.added create mode 100644 system_core/changelog.d/18688.added create mode 100644 system_swap/changelog.d/18688.added diff --git a/agent_requirements.in b/agent_requirements.in index 84d177ba06f66..173fd9e7eb8dc 100644 --- a/agent_requirements.in +++ b/agent_requirements.in @@ -31,7 +31,7 @@ paramiko==3.4.1 ply==3.11 prometheus-client==0.20.0 protobuf==5.27.3 -psutil==5.9.6 +psutil==6.0.0 psycopg2-binary==2.9.9 pyasn1==0.4.8 pycryptodomex==3.20.0 diff --git a/btrfs/changelog.d/18688.added b/btrfs/changelog.d/18688.added new file mode 100644 index 0000000000000..30f2555bc26eb --- /dev/null +++ b/btrfs/changelog.d/18688.added @@ -0,0 +1 @@ +Upgrade psutil to 6.0.0 to fix performance issues addressed \ No newline at end of file diff --git a/btrfs/pyproject.toml b/btrfs/pyproject.toml index ad329e8005800..c2b615d730f17 100644 --- a/btrfs/pyproject.toml +++ b/btrfs/pyproject.toml @@ -36,7 +36,7 @@ license = "BSD-3-Clause" [project.optional-dependencies] deps = [ - "psutil==5.9.6", + "psutil==6.0.0", ] [project.urls] diff --git a/disk/changelog.d/18688.added b/disk/changelog.d/18688.added new file mode 100644 index 0000000000000..30f2555bc26eb --- /dev/null +++ b/disk/changelog.d/18688.added @@ -0,0 +1 @@ +Upgrade psutil to 6.0.0 to fix performance issues addressed \ No newline at end of file diff --git a/disk/pyproject.toml b/disk/pyproject.toml index 1145213a95847..a241e8474ec50 100644 --- a/disk/pyproject.toml +++ b/disk/pyproject.toml @@ -36,7 +36,7 @@ license = "BSD-3-Clause" [project.optional-dependencies] deps = [ - "psutil==5.9.6", + "psutil==6.0.0", ] [project.urls] diff --git a/gunicorn/changelog.d/18688.added b/gunicorn/changelog.d/18688.added new file mode 100644 index 0000000000000..30f2555bc26eb --- /dev/null +++ b/gunicorn/changelog.d/18688.added @@ -0,0 +1 @@ +Upgrade psutil to 6.0.0 to fix performance issues addressed \ No newline at end of file diff --git a/gunicorn/pyproject.toml b/gunicorn/pyproject.toml index b62153254f0f4..10de6c2dbe851 100644 --- a/gunicorn/pyproject.toml +++ b/gunicorn/pyproject.toml @@ -36,7 +36,7 @@ license = "BSD-3-Clause" [project.optional-dependencies] deps = [ - "psutil==5.9.6", + "psutil==6.0.0", ] [project.urls] diff --git a/ibm_mq/changelog.d/18688.added b/ibm_mq/changelog.d/18688.added new file mode 100644 index 0000000000000..30f2555bc26eb --- /dev/null +++ b/ibm_mq/changelog.d/18688.added @@ -0,0 +1 @@ +Upgrade psutil to 6.0.0 to fix performance issues addressed \ No newline at end of file diff --git a/ibm_mq/pyproject.toml b/ibm_mq/pyproject.toml index 8b6ad681af2e3..0209998de6ac7 100644 --- a/ibm_mq/pyproject.toml +++ b/ibm_mq/pyproject.toml @@ -37,7 +37,7 @@ requires-python = ">=3.9" [project.optional-dependencies] deps = [ - "psutil==5.9.6", + "psutil==6.0.0", "pymqi==1.12.10; (sys_platform != 'darwin' or platform_machine != 'arm64')", ] diff --git a/mongo/changelog.d/18688.added b/mongo/changelog.d/18688.added new file mode 100644 index 0000000000000..30f2555bc26eb --- /dev/null +++ b/mongo/changelog.d/18688.added @@ -0,0 +1 @@ +Upgrade psutil to 6.0.0 to fix performance issues addressed \ No newline at end of file diff --git a/mongo/pyproject.toml b/mongo/pyproject.toml index 396d10d68c97c..5d03d25ee7772 100644 --- a/mongo/pyproject.toml +++ b/mongo/pyproject.toml @@ -38,7 +38,7 @@ license = "BSD-3-Clause" [project.optional-dependencies] deps = [ "cachetools==5.5.0", - "psutil==5.9.6", + "psutil==6.0.0", "pymongo[srv]==4.8.0; python_version >= '3.9'", ] diff --git a/network/changelog.d/18688.added b/network/changelog.d/18688.added new file mode 100644 index 0000000000000..30f2555bc26eb --- /dev/null +++ b/network/changelog.d/18688.added @@ -0,0 +1 @@ +Upgrade psutil to 6.0.0 to fix performance issues addressed \ No newline at end of file diff --git a/network/pyproject.toml b/network/pyproject.toml index 4cf3786b61423..c10796848e372 100644 --- a/network/pyproject.toml +++ b/network/pyproject.toml @@ -36,7 +36,7 @@ license = "BSD-3-Clause" [project.optional-dependencies] deps = [ - "psutil==5.9.6", + "psutil==6.0.0", ] [project.urls] diff --git a/process/changelog.d/18688.added b/process/changelog.d/18688.added new file mode 100644 index 0000000000000..30f2555bc26eb --- /dev/null +++ b/process/changelog.d/18688.added @@ -0,0 +1 @@ +Upgrade psutil to 6.0.0 to fix performance issues addressed \ No newline at end of file diff --git a/process/pyproject.toml b/process/pyproject.toml index 419ff8e36d0b6..9500e21819712 100644 --- a/process/pyproject.toml +++ b/process/pyproject.toml @@ -36,7 +36,7 @@ license = "BSD-3-Clause" [project.optional-dependencies] deps = [ - "psutil==5.9.6", + "psutil==6.0.0", ] [project.urls] diff --git a/system_core/changelog.d/18688.added b/system_core/changelog.d/18688.added new file mode 100644 index 0000000000000..30f2555bc26eb --- /dev/null +++ b/system_core/changelog.d/18688.added @@ -0,0 +1 @@ +Upgrade psutil to 6.0.0 to fix performance issues addressed \ No newline at end of file diff --git a/system_core/pyproject.toml b/system_core/pyproject.toml index 5b520d4b36a43..f22c63e31ccac 100644 --- a/system_core/pyproject.toml +++ b/system_core/pyproject.toml @@ -36,7 +36,7 @@ license = "BSD-3-Clause" [project.optional-dependencies] deps = [ - "psutil==5.9.6", + "psutil==6.0.0", ] [project.urls] diff --git a/system_swap/changelog.d/18688.added b/system_swap/changelog.d/18688.added new file mode 100644 index 0000000000000..30f2555bc26eb --- /dev/null +++ b/system_swap/changelog.d/18688.added @@ -0,0 +1 @@ +Upgrade psutil to 6.0.0 to fix performance issues addressed \ No newline at end of file diff --git a/system_swap/pyproject.toml b/system_swap/pyproject.toml index d5a7a97cccd36..28a1c1007d75b 100644 --- a/system_swap/pyproject.toml +++ b/system_swap/pyproject.toml @@ -36,7 +36,7 @@ license = "BSD-3-Clause" [project.optional-dependencies] deps = [ - "psutil==5.9.6", + "psutil==6.0.0", ] [project.urls] From 018da8794e38cbd56207ba07fc511ffee120d6e1 Mon Sep 17 00:00:00 2001 From: Steven Yuen Date: Fri, 27 Sep 2024 15:56:19 +0200 Subject: [PATCH 08/56] Sy/elastic sc tags (#18687) * add ability to not use host and port in service checks * change tag name * changelog * lint * change description * comment out param by default --- elastic/assets/configuration/spec.yaml | 9 +++++ elastic/changelog.d/18687.added | 1 + elastic/datadog_checks/elastic/config.py | 5 ++- .../elastic/config_models/defaults.py | 4 ++ .../elastic/config_models/instance.py | 1 + .../elastic/data/conf.yaml.example | 8 +++- elastic/tests/test_unit.py | 38 ++++++++++++++++++- 7 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 elastic/changelog.d/18687.added diff --git a/elastic/assets/configuration/spec.yaml b/elastic/assets/configuration/spec.yaml index 45494dac84829..e89548516085a 100644 --- a/elastic/assets/configuration/spec.yaml +++ b/elastic/assets/configuration/spec.yaml @@ -105,6 +105,15 @@ files: example: false - name: disable_legacy_cluster_tag description: Enable to stop submitting the tag `cluster_name`, which has been renamed to `elastic_cluster`. + value: + type: boolean + display_default: false + example: true + enabled: false + - name: disable_legacy_service_check_tags + description: | + Disable the submission of the elasticsearch `host` and `port` as tags in service checks. + Submit them as `url` instead. value: type: boolean display_default: false diff --git a/elastic/changelog.d/18687.added b/elastic/changelog.d/18687.added new file mode 100644 index 0000000000000..b7b2a755765b6 --- /dev/null +++ b/elastic/changelog.d/18687.added @@ -0,0 +1 @@ +Add functionality to not use `host` and `port` tags in service checks diff --git a/elastic/datadog_checks/elastic/config.py b/elastic/datadog_checks/elastic/config.py index 18b111307e1a9..e408e165b5d0c 100644 --- a/elastic/datadog_checks/elastic/config.py +++ b/elastic/datadog_checks/elastic/config.py @@ -58,7 +58,10 @@ def from_instance(instance): host = parsed.hostname custom_tags = instance.get('tags', []) - service_check_tags = ['host:{}'.format(host), 'port:{}'.format(port)] + if is_affirmative(instance.get('disable_legacy_service_check_tags', False)): + service_check_tags = ['url:{}'.format(url)] + else: + service_check_tags = ['host:{}'.format(host), 'port:{}'.format(port)] service_check_tags.extend(custom_tags) custom_queries = instance.get('custom_queries', []) diff --git a/elastic/datadog_checks/elastic/config_models/defaults.py b/elastic/datadog_checks/elastic/config_models/defaults.py index 4275721ee189d..291085f114554 100644 --- a/elastic/datadog_checks/elastic/config_models/defaults.py +++ b/elastic/datadog_checks/elastic/config_models/defaults.py @@ -48,6 +48,10 @@ def instance_disable_legacy_cluster_tag(): return False +def instance_disable_legacy_service_check_tags(): + return False + + def instance_empty_default_hostname(): return False diff --git a/elastic/datadog_checks/elastic/config_models/instance.py b/elastic/datadog_checks/elastic/config_models/instance.py index b311db088fd42..39112f93ccc01 100644 --- a/elastic/datadog_checks/elastic/config_models/instance.py +++ b/elastic/datadog_checks/elastic/config_models/instance.py @@ -90,6 +90,7 @@ class InstanceConfig(BaseModel): detailed_index_stats: Optional[bool] = None disable_generic_tags: Optional[bool] = None disable_legacy_cluster_tag: Optional[bool] = None + disable_legacy_service_check_tags: Optional[bool] = None empty_default_hostname: Optional[bool] = None extra_headers: Optional[MappingProxyType[str, Any]] = None gc_collectors_as_rate: Optional[bool] = None diff --git a/elastic/datadog_checks/elastic/data/conf.yaml.example b/elastic/datadog_checks/elastic/data/conf.yaml.example index ae40777e5c2c4..64d73b10eeb3a 100644 --- a/elastic/datadog_checks/elastic/data/conf.yaml.example +++ b/elastic/datadog_checks/elastic/data/conf.yaml.example @@ -132,7 +132,13 @@ instances: ## @param disable_legacy_cluster_tag - boolean - optional - default: false ## Enable to stop submitting the tag `cluster_name`, which has been renamed to `elastic_cluster`. # - disable_legacy_cluster_tag: true + # disable_legacy_cluster_tag: true + + ## @param disable_legacy_service_check_tags - boolean - optional - default: false + ## Disable the submission of the elasticsearch `host` and `port` as tags in service checks. + ## Submit them as `url` instead. + # + disable_legacy_service_check_tags: true ## @param custom_queries - list of mappings - optional ## Run custom queries for Elasticsearch. Each custom query endpoint can collect multiple metrics and tags. diff --git a/elastic/tests/test_unit.py b/elastic/tests/test_unit.py index d92ca613a2957..214d49b27e56d 100644 --- a/elastic/tests/test_unit.py +++ b/elastic/tests/test_unit.py @@ -7,7 +7,7 @@ import mock import pytest -from datadog_checks.base import ConfigurationError +from datadog_checks.base import ConfigurationError, is_affirmative from datadog_checks.dev.http import MockResponse from datadog_checks.elastic import ESCheck from datadog_checks.elastic.elastic import AuthenticationError, get_value_from_path @@ -178,6 +178,42 @@ def test__get_data_creates_critical_service_alert(aggregator, instance): ) +@pytest.mark.parametrize( + 'es_instance', + [ + pytest.param( + {'url': 'http://localhost:9200', 'disable_legacy_service_check_tags': 'true'}, + id="disable legacy service check behavior", + ), + pytest.param( + {'url': 'http://localhost:9200', 'disable_legacy_service_check_tags': 'false'}, + id="use legacy service check behavior", + ), + ], +) +def test_disable_legacy_sc_tags(aggregator, es_instance): + with mock.patch( + 'requests.get', + return_value=MockResponse(status_code=500), + ): + check = ESCheck('elastic', {}, instances=[es_instance]) + + with pytest.raises(Exception): + check._get_data(url='test.com') + + if is_affirmative(es_instance['disable_legacy_service_check_tags']): + expected_tags = ['url:http://localhost:9200'] + else: + expected_tags = ['host:localhost', 'port:9200'] + + aggregator.assert_service_check( + check.SERVICE_CHECK_CONNECT_NAME, + status=check.CRITICAL, + tags=expected_tags, + message="Error 500 Server Error: None for url: None when hitting test.com", + ) + + @pytest.mark.parametrize( 'version, return_value', [ From 0eac08733ce073b83c47a88e6b340e60fa5ac065 Mon Sep 17 00:00:00 2001 From: Boris Kozlov Date: Fri, 27 Sep 2024 16:04:57 +0200 Subject: [PATCH 09/56] Collect sqlserver deadlock data (#18108) * Creating a test for the deadlock * added test * Deadlocks first impl * first full version * Added checks * Added the deadlock file * Added exception for truncated xml * Added exception handling when obfuscating * adopted oto the activity pipeline * Use activity event pipline for the deadlock event * Removed pdb * Added logs * Improved queries * Added a new query * fix import * use temp table * Made test stable * Added obfuscation unit test * Applied formatting * Fixed linter errors * propagated errors * removed old imports * Added setup to all variants * Remove unused changes * Added changelog * deadlocks spec * formatted spce * Improced changelog * Improved deadlock test * Improved unit tests * Fixed data model * print the number of deadlocks found in test case * test for empty payloads * send payload only if deadlocks found * refactor deadlock event extraction * refactor deadlock event extraction after deadlock create * deadlock events to deadlock payloads * test for obfuscation errors * test for obfuscation errors * test refactoring completed * obfuscation bug fix * test with dbm: false * removed reliance on temp table * replace last date with offset * default interval * improved error handling * fixes * Update sqlserver/assets/configuration/spec.yaml Co-authored-by: Justin * renamed config to deadlocks_collection * refactor all deadlock funcs in the deadlock.py * refactoring * deadlocks in separate job * separate deadlock tests * linter * deadlocks as async job * payload as a list of dicts * renamed query varaible * query signatures * fixed test cases * aux functions from utils to deadlock_test * change query signature struct * spid as int * db rows in dict * deadlock timestamp * read date in test case * fixed test_deadlock_xml_bad_format * refactored test__create_deadlock_rows * fixed test_deadlock_calls_obfuscator * linster * disabled by default * fixing rebasing errors * fixing rebasing errors * restore test_unit from master * restore tests/utils from master * linter * linter * linter * linter * licence * instance fix * import order * linter: import order * asset validation * get_deadlock_obj * lookback * key error * linter * exception handling * enrich exception only on code error * remove sqlncli from ci * test diag change * supported only with odbc --------- Co-authored-by: Nenad Noveljic <18366081+nenadnoveljic@users.noreply.github.com> Co-authored-by: Justin --- .../windows/41_install_native_client.bat | 3 - sqlserver/assets/configuration/spec.yaml | 23 ++ sqlserver/changelog.d/18108.added | 1 + sqlserver/datadog_checks/sqlserver/config.py | 1 + .../sqlserver/config_models/instance.py | 11 + .../datadog_checks/sqlserver/deadlocks.py | 193 +++++++++++ sqlserver/datadog_checks/sqlserver/queries.py | 17 + sqlserver/datadog_checks/sqlserver/schemas.py | 1 - .../datadog_checks/sqlserver/sqlserver.py | 11 +- sqlserver/hatch.toml | 2 +- .../tests/compose-ha/sql/aoag_primary.sql | 15 + .../setup.sql | 15 + .../tests/compose-high-cardinality/setup.sql | 15 + sqlserver/tests/compose-windows/setup.sql | 15 + sqlserver/tests/compose/setup.sql | 15 + .../deadlocks/sqlserver_deadlock_event.xml | 140 ++++++++ sqlserver/tests/test_deadlocks.py | 328 ++++++++++++++++++ 17 files changed, 800 insertions(+), 6 deletions(-) delete mode 100644 .ddev/ci/scripts/sqlserver/windows/41_install_native_client.bat create mode 100644 sqlserver/changelog.d/18108.added create mode 100644 sqlserver/datadog_checks/sqlserver/deadlocks.py create mode 100644 sqlserver/tests/deadlocks/sqlserver_deadlock_event.xml create mode 100644 sqlserver/tests/test_deadlocks.py diff --git a/.ddev/ci/scripts/sqlserver/windows/41_install_native_client.bat b/.ddev/ci/scripts/sqlserver/windows/41_install_native_client.bat deleted file mode 100644 index 0fbd0e0b47cdd..0000000000000 --- a/.ddev/ci/scripts/sqlserver/windows/41_install_native_client.bat +++ /dev/null @@ -1,3 +0,0 @@ -powershell -Command "Invoke-WebRequest https://download.microsoft.com/download/F/3/C/F3C64941-22A0-47E9-BC9B-1A19B4CA3E88/ENU/x64/sqlncli.msi -OutFile sqlncli.msi" -msiexec /quiet /passive /qn /i sqlncli.msi IACCEPTSQLNCLILICENSETERMS=YES -del sqlncli.msi diff --git a/sqlserver/assets/configuration/spec.yaml b/sqlserver/assets/configuration/spec.yaml index c5d7643bd8815..a78b914ccbfc4 100644 --- a/sqlserver/assets/configuration/spec.yaml +++ b/sqlserver/assets/configuration/spec.yaml @@ -760,6 +760,29 @@ files: value: type: number example: 10 + - name: deadlocks_collection + hidden: True + description: | + Configure the collection of deadlock data. The feature is supported for odbc connector only. + options: + - name: enabled + description: | + Enable the collection of deadlock data. Requires `dbm: true`. Disabled by default. + value: + type: boolean + example: false + - name: collection_interval + description: | + Set the interval for collecting deadlock data, in seconds. Defaults to 600 seconds. + value: + type: number + example: 600 + - name: max_deadlocks + description: | + Set the maximum number of deadlocks to retrieve per collection. + value: + type: number + example: 100 - template: instances/default - template: logs example: diff --git a/sqlserver/changelog.d/18108.added b/sqlserver/changelog.d/18108.added new file mode 100644 index 0000000000000..a75d5681d83d1 --- /dev/null +++ b/sqlserver/changelog.d/18108.added @@ -0,0 +1 @@ +Added deadlock collection feature to the SQL Server integration. diff --git a/sqlserver/datadog_checks/sqlserver/config.py b/sqlserver/datadog_checks/sqlserver/config.py index a26440949a82d..166299b3c2bb6 100644 --- a/sqlserver/datadog_checks/sqlserver/config.py +++ b/sqlserver/datadog_checks/sqlserver/config.py @@ -50,6 +50,7 @@ def __init__(self, init_config, instance, log): self.settings_config: dict = instance.get('collect_settings', {}) or {} self.activity_config: dict = instance.get('query_activity', {}) or {} self.schema_config: dict = instance.get('schemas_collection', {}) or {} + self.deadlocks_config: dict = instance.get('deadlocks_collection', {}) or {} self.cloud_metadata: dict = {} aws: dict = instance.get('aws', {}) or {} gcp: dict = instance.get('gcp', {}) or {} diff --git a/sqlserver/datadog_checks/sqlserver/config_models/instance.py b/sqlserver/datadog_checks/sqlserver/config_models/instance.py index d37ad477a430f..ef0200cb763a7 100644 --- a/sqlserver/datadog_checks/sqlserver/config_models/instance.py +++ b/sqlserver/datadog_checks/sqlserver/config_models/instance.py @@ -68,6 +68,16 @@ class CustomQuery(BaseModel): tags: Optional[tuple[str, ...]] = None +class DeadlocksCollection(BaseModel): + model_config = ConfigDict( + arbitrary_types_allowed=True, + frozen=True, + ) + collection_interval: Optional[float] = None + enabled: Optional[bool] = None + max_deadlocks: Optional[float] = None + + class Gcp(BaseModel): model_config = ConfigDict( arbitrary_types_allowed=True, @@ -185,6 +195,7 @@ class InstanceConfig(BaseModel): database_instance_collection_interval: Optional[float] = None db_fragmentation_object_names: Optional[tuple[str, ...]] = None dbm: Optional[bool] = None + deadlocks_collection: Optional[DeadlocksCollection] = None disable_generic_tags: Optional[bool] = None driver: Optional[str] = None dsn: Optional[str] = None diff --git a/sqlserver/datadog_checks/sqlserver/deadlocks.py b/sqlserver/datadog_checks/sqlserver/deadlocks.py new file mode 100644 index 0000000000000..b623760188330 --- /dev/null +++ b/sqlserver/datadog_checks/sqlserver/deadlocks.py @@ -0,0 +1,193 @@ +# (C) Datadog, Inc. 2024-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) + +import xml.etree.ElementTree as ET +from time import time + +from datadog_checks.base.utils.db.sql import compute_sql_signature +from datadog_checks.base.utils.db.utils import DBMAsyncJob, default_json_event_encoding, obfuscate_sql_with_metadata +from datadog_checks.base.utils.serialization import json +from datadog_checks.base.utils.tracking import tracked_method +from datadog_checks.sqlserver.config import SQLServerConfig +from datadog_checks.sqlserver.const import STATIC_INFO_ENGINE_EDITION, STATIC_INFO_VERSION +from datadog_checks.sqlserver.queries import DEADLOCK_QUERY, DEADLOCK_TIMESTAMP_ALIAS, DEADLOCK_XML_ALIAS + +try: + import datadog_agent +except ImportError: + from ..stubs import datadog_agent + +DEFAULT_COLLECTION_INTERVAL = 600 +MAX_DEADLOCKS = 100 +MAX_PAYLOAD_BYTES = 19e6 + +PAYLOAD_TIMESTAMP = "deadlock_timestamp" +PAYLOAD_QUERY_SIGNATURE = "query_signatures" +PAYLOAD_XML = "xml" + + +def agent_check_getter(self): + return self._check + + +class Deadlocks(DBMAsyncJob): + def __init__(self, check, config: SQLServerConfig): + self.tags = [t for t in check.tags if not t.startswith('dd.internal')] + self._check = check + self._log = self._check.log + self._config = config + self._last_deadlock_timestamp = time() + self._max_deadlocks = config.deadlocks_config.get("max_deadlocks", MAX_DEADLOCKS) + self._deadlock_payload_max_bytes = MAX_PAYLOAD_BYTES + self.collection_interval = config.deadlocks_config.get("collection_interval", DEFAULT_COLLECTION_INTERVAL) + super(Deadlocks, self).__init__( + check, + run_sync=True, + enabled=self._config.deadlocks_config.get('enabled', False), + expected_db_exceptions=(), + min_collection_interval=self._config.min_collection_interval, + dbms="sqlserver", + rate_limit=1 / float(self.collection_interval), + job_name="deadlocks", + shutdown_callback=self._close_db_conn, + ) + self._conn_key_prefix = "dbm-deadlocks-" + + def _close_db_conn(self): + pass + + def obfuscate_no_except_wrapper(self, sql_text): + try: + sql_text = obfuscate_sql_with_metadata( + sql_text, self._config.obfuscator_options, replace_null_character=True + )['query'] + except Exception as e: + sql_text = "ERROR: failed to obfuscate" + error_text = "Failed to obfuscate sql text within a deadlock" + if self._config.log_unobfuscated_queries: + error_text += "=[%s]" % sql_text + error_text += " | err=[%s]" + self._log.error(error_text, e) + return sql_text + + def _obfuscate_xml(self, root): + process_list = root.find(".//process-list") + if process_list is None: + raise Exception("process-list element not found. The deadlock XML is in an unexpected format.") + query_signatures = [] + for process in process_list.findall('process'): + for inputbuf in process.findall('.//inputbuf'): + if inputbuf.text is not None: + inputbuf.text = self.obfuscate_no_except_wrapper(inputbuf.text) + spid = process.get('spid') + if spid is not None: + try: + spid = int(spid) + except ValueError: + self._log.error("spid not an integer. Skipping query signature computation.") + continue + if spid in query_signatures: + continue + query_signatures.append({"spid": spid, "signature": compute_sql_signature(inputbuf.text)}) + else: + self._log.error("spid not found in process element. Skipping query signature computation.") + for frame in process.findall('.//frame'): + if frame.text is not None: + frame.text = self.obfuscate_no_except_wrapper(frame.text) + return query_signatures + + def _get_lookback_seconds(self): + return min(-60, self._last_deadlock_timestamp - time()) + + def _query_deadlocks(self): + with self._check.connection.open_managed_default_connection(key_prefix=self._conn_key_prefix): + with self._check.connection.get_managed_cursor(key_prefix=self._conn_key_prefix) as cursor: + self._log.debug("collecting sql server deadlocks") + self._log.debug( + "Running query [%s] with max deadlocks %s and timestamp %s", + DEADLOCK_QUERY, + self._max_deadlocks, + self._last_deadlock_timestamp, + ) + try: + cursor.execute(DEADLOCK_QUERY, (self._max_deadlocks, self._get_lookback_seconds())) + except Exception as e: + if "Data column of Unknown ADO type" in str(e): + raise Exception(f"{str(e)} | cursor.description: {cursor.description}") + raise e + + columns = [column[0] for column in cursor.description] + return [dict(zip(columns, row)) for row in cursor.fetchall()] + + def _create_deadlock_rows(self): + db_rows = self._query_deadlocks() + deadlock_events = [] + total_number_of_characters = 0 + for i, row in enumerate(db_rows): + try: + root = ET.fromstring(row[DEADLOCK_XML_ALIAS]) + except Exception as e: + self._log.error( + """An error occurred while collecting SQLServer deadlocks. + One of the deadlock XMLs couldn't be parsed. The error: {}. XML: {}""".format( + e, row + ) + ) + continue + query_signatures = {} + try: + query_signatures = self._obfuscate_xml(root) + except Exception as e: + error = "An error occurred while obfuscating SQLServer deadlocks. The error: {}".format(e) + self._log.error(error) + continue + + total_number_of_characters += len(row) + len(query_signatures) + if total_number_of_characters > self._deadlock_payload_max_bytes: + self._log.warning( + """We've dropped {} deadlocks from a total of {} deadlocks as the + max deadlock payload of {} bytes was exceeded.""".format( + len(db_rows) - i, len(db_rows), self._deadlock_payload_max_bytes + ) + ) + break + + deadlock_events.append( + { + PAYLOAD_TIMESTAMP: row[DEADLOCK_TIMESTAMP_ALIAS], + PAYLOAD_XML: ET.tostring(root, encoding='unicode'), + PAYLOAD_QUERY_SIGNATURE: query_signatures, + } + ) + self._last_deadlock_timestamp = time() + return deadlock_events + + @tracked_method(agent_check_getter=agent_check_getter) + def collect_deadlocks(self): + rows = self._create_deadlock_rows() + # Send payload only if deadlocks found + if rows: + deadlocks_event = self._create_deadlock_event(rows) + payload = json.dumps(deadlocks_event, default=default_json_event_encoding) + self._log.debug("Deadlocks payload: %s", str(payload)) + self._check.database_monitoring_query_activity(payload) + + def _create_deadlock_event(self, deadlock_rows): + event = { + "host": self._check.resolved_hostname, + "ddagentversion": datadog_agent.get_version(), + "ddsource": "sqlserver", + "dbm_type": "deadlocks", + "collection_interval": self.collection_interval, + "ddtags": self.tags, + "timestamp": time() * 1000, + 'sqlserver_version': self._check.static_info_cache.get(STATIC_INFO_VERSION, ""), + 'sqlserver_engine_edition': self._check.static_info_cache.get(STATIC_INFO_ENGINE_EDITION, ""), + "cloud_metadata": self._config.cloud_metadata, + "sqlserver_deadlocks": deadlock_rows, + } + return event + + def run_job(self): + self.collect_deadlocks() diff --git a/sqlserver/datadog_checks/sqlserver/queries.py b/sqlserver/datadog_checks/sqlserver/queries.py index 230b5152f7867..48b27d812e87f 100644 --- a/sqlserver/datadog_checks/sqlserver/queries.py +++ b/sqlserver/datadog_checks/sqlserver/queries.py @@ -214,6 +214,23 @@ FK.name, FK.parent_object_id, FK.referenced_object_id; """ +DEADLOCK_TIMESTAMP_ALIAS = "timestamp" +DEADLOCK_XML_ALIAS = "event_xml" +DEADLOCK_QUERY = """ +SELECT TOP(?) xdr.value('@timestamp', 'datetime') AS [{timestamp}], + xdr.query('.') AS [{xml}] +FROM (SELECT CAST([target_data] AS XML) AS Target_Data + FROM sys.dm_xe_session_targets AS xt + INNER JOIN sys.dm_xe_sessions AS xs ON xs.address = xt.event_session_address + WHERE xs.name = N'system_health' + AND xt.target_name = N'ring_buffer' + ) AS XML_Data +CROSS APPLY Target_Data.nodes('RingBufferTarget/event[@name="xml_deadlock_report"]') AS XEventData(xdr) +WHERE xdr.value('@timestamp', 'datetime') >= DATEADD(SECOND, ?, GETDATE()) +;""".format( + **{"timestamp": DEADLOCK_TIMESTAMP_ALIAS, "xml": DEADLOCK_XML_ALIAS} +) + def get_query_ao_availability_groups(sqlserver_major_version): """ diff --git a/sqlserver/datadog_checks/sqlserver/schemas.py b/sqlserver/datadog_checks/sqlserver/schemas.py index 8d645796ef615..b40dd59415fa8 100644 --- a/sqlserver/datadog_checks/sqlserver/schemas.py +++ b/sqlserver/datadog_checks/sqlserver/schemas.py @@ -32,7 +32,6 @@ class SubmitData: - def __init__(self, submit_data_function, base_event, logger): self._submit_to_agent_queue = submit_data_function self._base_event = base_event diff --git a/sqlserver/datadog_checks/sqlserver/sqlserver.py b/sqlserver/datadog_checks/sqlserver/sqlserver.py index c2f9599b308d5..427aab153a4e5 100644 --- a/sqlserver/datadog_checks/sqlserver/sqlserver.py +++ b/sqlserver/datadog_checks/sqlserver/sqlserver.py @@ -1,6 +1,7 @@ # (C) Datadog, Inc. 2018-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) + from __future__ import division import copy @@ -12,7 +13,11 @@ from datadog_checks.base import AgentCheck from datadog_checks.base.config import is_affirmative from datadog_checks.base.utils.db import QueryExecutor, QueryManager -from datadog_checks.base.utils.db.utils import default_json_event_encoding, resolve_db_host, tracked_query +from datadog_checks.base.utils.db.utils import ( + default_json_event_encoding, + resolve_db_host, + tracked_query, +) from datadog_checks.base.utils.serialization import json from datadog_checks.sqlserver.activity import SqlserverActivity from datadog_checks.sqlserver.agent_history import SqlserverAgentHistory @@ -23,6 +28,7 @@ SqlserverDBFragmentationMetrics, SqlserverIndexUsageMetrics, ) +from datadog_checks.sqlserver.deadlocks import Deadlocks from datadog_checks.sqlserver.metadata import SqlserverMetadata from datadog_checks.sqlserver.schemas import Schemas from datadog_checks.sqlserver.statements import SqlserverStatementMetrics @@ -135,6 +141,7 @@ def __init__(self, name, init_config, instances): self.sql_metadata = SqlserverMetadata(self, self._config) self.activity = SqlserverActivity(self, self._config) self.agent_history = SqlserverAgentHistory(self, self._config) + self.deadlocks = Deadlocks(self, self._config) self.static_info_cache = TTLCache( maxsize=100, @@ -171,6 +178,7 @@ def cancel(self): self.activity.cancel() self.sql_metadata.cancel() self._schemas.cancel() + self.deadlocks.cancel() def config_checks(self): if self._config.autodiscovery and self.instance.get("database"): @@ -785,6 +793,7 @@ def check(self, _): self.activity.run_job_loop(self.tags) self.sql_metadata.run_job_loop(self.tags) self._schemas.run_job_loop(self.tags) + self.deadlocks.run_job_loop(self.tags) else: self.log.debug("Skipping check") diff --git a/sqlserver/hatch.toml b/sqlserver/hatch.toml index 843ea38127536..b996a56b88920 100644 --- a/sqlserver/hatch.toml +++ b/sqlserver/hatch.toml @@ -14,7 +14,7 @@ setup = ["single", "ha"] [[envs.default.matrix]] python = ["3.12"] os = ["windows"] -driver = ["SQLOLEDB", "SQLNCLI11", "MSOLEDBSQL", "odbc"] +driver = ["SQLOLEDB", "MSOLEDBSQL", "odbc"] version = ["2019", "2022"] setup = ["single"] diff --git a/sqlserver/tests/compose-ha/sql/aoag_primary.sql b/sqlserver/tests/compose-ha/sql/aoag_primary.sql index bc6574d39e2f6..3a3193f6dd662 100644 --- a/sqlserver/tests/compose-ha/sql/aoag_primary.sql +++ b/sqlserver/tests/compose-ha/sql/aoag_primary.sql @@ -121,6 +121,21 @@ CREATE USER bob FOR LOGIN bob; CREATE USER fred FOR LOGIN fred; GO +-- Create a simple table for deadlocks +CREATE TABLE [datadog_test-1].dbo.deadlocks (a int PRIMARY KEY not null ,b int null); + +INSERT INTO [datadog_test-1].dbo.deadlocks VALUES (1,10),(2,20),(3,30) + +-- Grant permissions to bob and fred to update the deadlocks table +GRANT INSERT ON [datadog_test-1].dbo.deadlocks TO bob; +GRANT UPDATE ON [datadog_test-1].dbo.deadlocks TO bob; +GRANT DELETE ON [datadog_test-1].dbo.deadlocks TO bob; + +GRANT INSERT ON [datadog_test-1].dbo.deadlocks TO fred; +GRANT UPDATE ON [datadog_test-1].dbo.deadlocks TO fred; +GRANT DELETE ON [datadog_test-1].dbo.deadlocks TO fred; +GO + EXEC sp_addrolemember 'db_datareader', 'bob' EXEC sp_addrolemember 'db_datareader', 'fred' EXEC sp_addrolemember 'db_datawriter', 'bob' diff --git a/sqlserver/tests/compose-high-cardinality-windows/setup.sql b/sqlserver/tests/compose-high-cardinality-windows/setup.sql index f33ceff2df42e..4446dbdb52c70 100644 --- a/sqlserver/tests/compose-high-cardinality-windows/setup.sql +++ b/sqlserver/tests/compose-high-cardinality-windows/setup.sql @@ -118,6 +118,21 @@ CREATE USER fred FOR LOGIN fred; -- database so it's copied by default to new databases GO +-- Create a simple table for deadlocks +CREATE TABLE [datadog_test-1].dbo.deadlocks (a int PRIMARY KEY not null ,b int null); + +INSERT INTO [datadog_test-1].dbo.deadlocks VALUES (1,10),(2,20),(3,30) + +-- Grant permissions to bob and fred to update the deadlocks table +GRANT INSERT ON [datadog_test-1].dbo.deadlocks TO bob; +GRANT UPDATE ON [datadog_test-1].dbo.deadlocks TO bob; +GRANT DELETE ON [datadog_test-1].dbo.deadlocks TO bob; + +GRANT INSERT ON [datadog_test-1].dbo.deadlocks TO fred; +GRANT UPDATE ON [datadog_test-1].dbo.deadlocks TO fred; +GRANT DELETE ON [datadog_test-1].dbo.deadlocks TO fred; +GO + EXEC sp_addrolemember 'db_datareader', 'bob' EXEC sp_addrolemember 'db_datareader', 'fred' EXEC sp_addrolemember 'db_datawriter', 'bob' diff --git a/sqlserver/tests/compose-high-cardinality/setup.sql b/sqlserver/tests/compose-high-cardinality/setup.sql index 839fd7c690679..f9d89b4a5a9df 100644 --- a/sqlserver/tests/compose-high-cardinality/setup.sql +++ b/sqlserver/tests/compose-high-cardinality/setup.sql @@ -251,6 +251,21 @@ CREATE CLUSTERED INDEX thingsindex ON [datadog_test-1].dbo.ϑings (name); DECLARE @table_prefix VARCHAR(100) = 'CREATE TABLE [datadog_test-1].dbo.' DECLARE @table_columns VARCHAR(500) = ' (id INT NOT NULL IDENTITY, col1_txt TEXT, col2_txt TEXT, col3_txt TEXT, col4_txt TEXT, col5_txt TEXT, col6_txt TEXT, col7_txt TEXT, col8_txt TEXT, col9_txt TEXT, col10_txt TEXT, col11_float FLOAT, col12_float FLOAT, col13_float FLOAT, col14_int INT, col15_int INT, col16_int INT, col17_date DATE, PRIMARY KEY(id));'; +-- Create a simple table for deadlocks +CREATE TABLE [datadog_test-1].dbo.deadlocks (a int PRIMARY KEY not null ,b int null); + +INSERT INTO [datadog_test-1].dbo.deadlocks VALUES (1,10),(2,20),(3,30) + +-- Grant permissions to bob and fred to update the deadlocks table +GRANT INSERT ON [datadog_test-1].dbo.deadlocks TO bob; +GRANT UPDATE ON [datadog_test-1].dbo.deadlocks TO bob; +GRANT DELETE ON [datadog_test-1].dbo.deadlocks TO bob; + +GRANT INSERT ON [datadog_test-1].dbo.deadlocks TO fred; +GRANT UPDATE ON [datadog_test-1].dbo.deadlocks TO fred; +GRANT DELETE ON [datadog_test-1].dbo.deadlocks TO fred; +GO + -- Create a main table which contains high cardinality data for testing. DECLARE @main_table_query VARCHAR(600) = @table_prefix + 'high_cardinality' + @table_columns; EXEC (@main_table_query); diff --git a/sqlserver/tests/compose-windows/setup.sql b/sqlserver/tests/compose-windows/setup.sql index da285a3535baf..5160b7012f40d 100644 --- a/sqlserver/tests/compose-windows/setup.sql +++ b/sqlserver/tests/compose-windows/setup.sql @@ -120,6 +120,21 @@ CREATE USER fred FOR LOGIN fred; -- database so it's copied by default to new databases GO +-- Create a simple table for deadlocks +CREATE TABLE [datadog_test-1].dbo.deadlocks (a int PRIMARY KEY not null ,b int null); + +INSERT INTO [datadog_test-1].dbo.deadlocks VALUES (1,10),(2,20),(3,30) + +-- Grant permissions to bob and fred to update the deadlocks table +GRANT INSERT ON [datadog_test-1].dbo.deadlocks TO bob; +GRANT UPDATE ON [datadog_test-1].dbo.deadlocks TO bob; +GRANT DELETE ON [datadog_test-1].dbo.deadlocks TO bob; + +GRANT INSERT ON [datadog_test-1].dbo.deadlocks TO fred; +GRANT UPDATE ON [datadog_test-1].dbo.deadlocks TO fred; +GRANT DELETE ON [datadog_test-1].dbo.deadlocks TO fred; +GO + EXEC sp_addrolemember 'db_datareader', 'bob' EXEC sp_addrolemember 'db_datareader', 'fred' EXEC sp_addrolemember 'db_datawriter', 'bob' diff --git a/sqlserver/tests/compose/setup.sql b/sqlserver/tests/compose/setup.sql index c8749702677a9..5cb9b50a42e11 100644 --- a/sqlserver/tests/compose/setup.sql +++ b/sqlserver/tests/compose/setup.sql @@ -104,6 +104,21 @@ CREATE USER fred FOR LOGIN fred; CREATE CLUSTERED INDEX thingsindex ON [datadog_test-1].dbo.ϑings (name); GO +-- Create a simple table for deadlocks +CREATE TABLE [datadog_test-1].dbo.deadlocks (a int PRIMARY KEY not null ,b int null); + +INSERT INTO [datadog_test-1].dbo.deadlocks VALUES (1,10),(2,20),(3,30) + +-- Grant permissions to bob and fred to update the deadlocks table +GRANT INSERT ON [datadog_test-1].dbo.deadlocks TO bob; +GRANT UPDATE ON [datadog_test-1].dbo.deadlocks TO bob; +GRANT DELETE ON [datadog_test-1].dbo.deadlocks TO bob; + +GRANT INSERT ON [datadog_test-1].dbo.deadlocks TO fred; +GRANT UPDATE ON [datadog_test-1].dbo.deadlocks TO fred; +GRANT DELETE ON [datadog_test-1].dbo.deadlocks TO fred; +GO + EXEC sp_addrolemember 'db_datareader', 'bob' EXEC sp_addrolemember 'db_datareader', 'fred' EXEC sp_addrolemember 'db_datawriter', 'bob' diff --git a/sqlserver/tests/deadlocks/sqlserver_deadlock_event.xml b/sqlserver/tests/deadlocks/sqlserver_deadlock_event.xml new file mode 100644 index 0000000000000..0384345f9c6eb --- /dev/null +++ b/sqlserver/tests/deadlocks/sqlserver_deadlock_event.xml @@ -0,0 +1,140 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + unknown + + + unknown + + + + update [datadog_test-1].[dbo].[t] set n=1 where n=1 + + rollback + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + unknown + + + unknown + + + + begin TRANSACTION + + update [datadog_test-1].[dbo].[t] set n=1 where n=1 + + update [datadog_test-1].[dbo].[t] set n=2 where n=2 + + rollback + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sqlserver/tests/test_deadlocks.py b/sqlserver/tests/test_deadlocks.py new file mode 100644 index 0000000000000..1099a0dfcd1f6 --- /dev/null +++ b/sqlserver/tests/test_deadlocks.py @@ -0,0 +1,328 @@ +# (C) Datadog, Inc. 2024-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) + +from __future__ import unicode_literals + +import concurrent +import logging +import os +import re +import xml.etree.ElementTree as ET +from copy import copy, deepcopy +from threading import Event + +import pytest +from mock import patch + +from datadog_checks.sqlserver import SQLServer +from datadog_checks.sqlserver.deadlocks import ( + PAYLOAD_QUERY_SIGNATURE, + PAYLOAD_TIMESTAMP, + Deadlocks, +) +from datadog_checks.sqlserver.queries import DEADLOCK_TIMESTAMP_ALIAS, DEADLOCK_XML_ALIAS + +from .common import CHECK_NAME +from .utils import not_windows_ado + +try: + import pyodbc +except ImportError: + pyodbc = None + + +@pytest.fixture +def dbm_instance(instance_docker): + instance_docker['dbm'] = True + # set a very small collection interval so the tests go fast + instance_docker['query_activity'] = { + 'enabled': False, + } + # do not need query_metrics for these tests + instance_docker['query_metrics'] = {'enabled': False} + instance_docker['procedure_metrics'] = {'enabled': False} + instance_docker['collect_settings'] = {'enabled': False} + instance_docker['deadlocks_collection'] = {'enabled': True, 'collection_interval': 0.1} + return copy(instance_docker) + + +def run_check_and_return_deadlock_payloads(dd_run_check, check, aggregator): + dd_run_check(check) + dbm_activity = aggregator.get_event_platform_events("dbm-activity") + matched = [] + for event in dbm_activity: + if "sqlserver_deadlocks" in event: + matched.append(event) + return matched + + +def _get_conn_for_user(instance_docker, user, timeout=1, _autocommit=False): + # Make DB connection + conn_str = 'DRIVER={};Server={};Database=master;UID={};PWD={};TrustServerCertificate=yes;'.format( + instance_docker['driver'], instance_docker['host'], user, "Password12!" + ) + conn = pyodbc.connect(conn_str, timeout=timeout, autocommit=_autocommit) + conn.timeout = timeout + return conn + + +def _run_first_deadlock_query(conn, event1, event2): + exception_text = "" + try: + conn.cursor().execute("BEGIN TRAN foo;") + conn.cursor().execute("UPDATE [datadog_test-1].dbo.deadlocks SET b = b + 10 WHERE a = 1;") + event1.set() + event2.wait() + conn.cursor().execute("UPDATE [datadog_test-1].dbo.deadlocks SET b = b + 100 WHERE a = 2;") + except Exception as e: + # Exception is expected due to a deadlock + exception_text = str(e) + pass + conn.commit() + return exception_text + + +def _run_second_deadlock_query(conn, event1, event2): + exception_text = "" + try: + event1.wait() + conn.cursor().execute("BEGIN TRAN bar;") + conn.cursor().execute("UPDATE [datadog_test-1].dbo.deadlocks SET b = b + 10 WHERE a = 2;") + event2.set() + conn.cursor().execute("UPDATE [datadog_test-1].dbo.deadlocks SET b = b + 20 WHERE a = 1;") + except Exception as e: + # Exception is expected due to a deadlock + exception_text = str(e) + pass + conn.commit() + return exception_text + + +def _create_deadlock(bob_conn, fred_conn): + executor = concurrent.futures.thread.ThreadPoolExecutor(2) + event1 = Event() + event2 = Event() + + futures_first_query = executor.submit(_run_first_deadlock_query, bob_conn, event1, event2) + futures_second_query = executor.submit(_run_second_deadlock_query, fred_conn, event1, event2) + exception_1_text = futures_first_query.result() + exception_2_text = futures_second_query.result() + executor.shutdown() + return "deadlock" in exception_1_text or "deadlock" in exception_2_text + + +# TODO: remove @not_windows_ado when the functionality is supported for MSOLEDBSQL +@not_windows_ado +@pytest.mark.integration +@pytest.mark.usefixtures('dd_environment') +def test_deadlocks(aggregator, dd_run_check, init_config, dbm_instance): + sqlserver_check = SQLServer(CHECK_NAME, {}, [dbm_instance]) + + deadlock_payloads = run_check_and_return_deadlock_payloads(dd_run_check, sqlserver_check, aggregator) + assert not deadlock_payloads, "shouldn't have sent an empty payload" + + created_deadlock = False + # Rarely instead of creating a deadlock one of the transactions time outs + for _ in range(0, 3): + bob_conn = _get_conn_for_user(dbm_instance, 'bob', 3) + fred_conn = _get_conn_for_user(dbm_instance, 'fred', 3) + created_deadlock = _create_deadlock(bob_conn, fred_conn) + bob_conn.close() + fred_conn.close() + if created_deadlock: + break + try: + assert created_deadlock, "Couldn't create a deadlock, exiting" + except AssertionError as e: + raise e + + dbm_instance_no_dbm = deepcopy(dbm_instance) + dbm_instance_no_dbm['dbm'] = False + sqlserver_check_no_dbm = SQLServer(CHECK_NAME, init_config, [dbm_instance_no_dbm]) + deadlock_payloads = run_check_and_return_deadlock_payloads(dd_run_check, sqlserver_check_no_dbm, aggregator) + assert len(deadlock_payloads) == 0, "deadlock should be behind dbm" + + dbm_instance['dbm_enabled'] = True + deadlock_payloads = run_check_and_return_deadlock_payloads(dd_run_check, sqlserver_check, aggregator) + try: + assert len(deadlock_payloads) == 1, "Should have collected one deadlock payload, but collected: {}.".format( + len(deadlock_payloads) + ) + except AssertionError as e: + raise e + deadlocks = deadlock_payloads[0]['sqlserver_deadlocks'] + found = 0 + for d in deadlocks: + assert "ERROR" not in d, "Shouldn't have generated an error" + assert isinstance(d, dict), "sqlserver_deadlocks should be a dictionary" + try: + root = ET.fromstring(d["xml"]) + except ET.ParseError as e: + logging.error("deadlock events: %s", str(deadlocks)) + raise e + process_list = root.find(".//process-list") + for process in process_list.findall('process'): + if process.find('inputbuf').text == "UPDATE [datadog_test-1].dbo.deadlocks SET b = b + 100 WHERE a = 2;": + found += 1 + try: + assert ( + found == 1 + ), "Should have collected the UPDATE statement in deadlock exactly once, but collected: {}.".format(found) + except AssertionError as e: + logging.error("deadlock payload: %s", str(deadlocks)) + raise e + + +DEADLOCKS_PLAN_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), "deadlocks") + + +def _load_test_deadlocks_xml(filename): + with open(os.path.join(DEADLOCKS_PLAN_DIR, filename), 'r') as f: + return f.read() + + +@pytest.fixture +def deadlocks_collection_instance(instance_docker): + instance_docker['dbm'] = True + instance_docker['deadlocks_collection'] = { + 'enabled': True, + 'collection_interval': 1.0, + } + instance_docker['min_collection_interval'] = 1 + # do not need other dbm metrics + instance_docker['query_activity'] = {'enabled': False} + instance_docker['query_metrics'] = {'enabled': False} + instance_docker['procedure_metrics'] = {'enabled': False} + instance_docker['collect_settings'] = {'enabled': False} + return copy(instance_docker) + + +def get_deadlock_obj(deadlocks_collection_instance): + check = SQLServer(CHECK_NAME, {}, [deadlocks_collection_instance]) + return check.deadlocks + + +def test__create_deadlock_rows(deadlocks_collection_instance): + deadlocks_obj = get_deadlock_obj(deadlocks_collection_instance) + xml = _load_test_deadlocks_xml("sqlserver_deadlock_event.xml") + with patch.object( + Deadlocks, + '_query_deadlocks', + return_value=[{DEADLOCK_TIMESTAMP_ALIAS: "2024-09-20T12:07:16.647000", DEADLOCK_XML_ALIAS: xml}], + ): + rows = deadlocks_obj._create_deadlock_rows() + assert len(rows) == 1, "Should have created one deadlock row" + row = rows[0] + assert row[PAYLOAD_TIMESTAMP], "Should have a timestamp" + query_signatures = row[PAYLOAD_QUERY_SIGNATURE] + assert len(query_signatures) == 2, "Should have two query signatures" + first_mapping = query_signatures[0] + assert "spid" in first_mapping, "Should have spid in query signatures" + assert isinstance(first_mapping["spid"], int), "spid should be an int" + + +def test_deadlock_xml_bad_format(deadlocks_collection_instance): + test_xml = """ + + + + + + + + + + + + + """ + deadlocks_obj = get_deadlock_obj(deadlocks_collection_instance) + root = ET.fromstring(test_xml) + try: + deadlocks_obj._obfuscate_xml(root) + except Exception as e: + result = str(e) + assert result == "process-list element not found. The deadlock XML is in an unexpected format." + else: + AssertionError("Should have raised an exception for bad XML format") + + +def test_deadlock_calls_obfuscator(deadlocks_collection_instance): + test_xml = """ + + + + + + + + + + + + \nunknown + \nunknown + + \nUPDATE [datadog_test-1].dbo.deadlocks SET b = b + 100 WHERE a = 2; + + + + \nunknown + \nunknown + + \nUPDATE [datadog_test-1].dbo.deadlocks SET b = b + 20 WHERE a = 1; + + + + + + + """ + + expected_xml_string = ( + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + "obfuscated " + "obfuscated " + " " + "obfuscated " + " " + " " + " " + "obfuscated " + "obfuscated " + " " + "obfuscated " + " " + " " + " " + " " + " " + "" + ) + + with patch('datadog_checks.sqlserver.deadlocks.Deadlocks.obfuscate_no_except_wrapper', return_value="obfuscated"): + deadlocks_obj = get_deadlock_obj(deadlocks_collection_instance) + root = ET.fromstring(test_xml) + deadlocks_obj._obfuscate_xml(root) + result_string = ET.tostring(root, encoding='unicode') + result_string = result_string.replace('\t', '').replace('\n', '') + result_string = re.sub(r'\s{2,}', ' ', result_string) + assert expected_xml_string == result_string + + +def test__get_lookback_seconds(deadlocks_collection_instance): + deadlocks_obj = get_deadlock_obj(deadlocks_collection_instance) + deadlocks_obj._last_deadlock_timestamp = 100 + lookback_seconds = deadlocks_obj._get_lookback_seconds() + assert isinstance(lookback_seconds, float), "Should return a float" From 0fc6bd894fd6158160a2d97d0e292b11539c005e Mon Sep 17 00:00:00 2001 From: Zhengda Lu Date: Fri, 27 Sep 2024 11:02:35 -0400 Subject: [PATCH 10/56] add sqlserver agent completed job metrics to metadata (#18691) --- sqlserver/metadata.csv | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sqlserver/metadata.csv b/sqlserver/metadata.csv index 1183e8e60114c..3e2c423e326c1 100644 --- a/sqlserver/metadata.csv +++ b/sqlserver/metadata.csv @@ -6,6 +6,8 @@ sqlserver.access.probe_scans,gauge,,operation,second,Number of probe scans per s sqlserver.access.range_scans,gauge,,operation,second,Number of qualified range scans through indexes per second. (Perf. Counter: `Access Methods - Range Scans/sec`),-1,sql_server,range scans,, sqlserver.agent.active_jobs.duration,gauge,,second,,Duration of currently running jobs on sqlserver agent,0,sql_server,agent job duration,, sqlserver.agent.active_jobs.step_info,gauge,,,,Presence of a most recent completed step for active jobs running on the sqlserver agent.,0,sql_server,agent job step info,, +sqlserver.agent.completed_jobs.duration,gauge,,second,,Duration of completed jobs on sqlserver agent (DBM Only),0,sql_server,agent job duration,, +sqlserver.agent.completed_jobs.executions,gauge,,execution,,Number of executions of completed jobs on sqlserver agent (DBM Only),0,sql_server,agent job executions,, sqlserver.ao.ag_sync_health,gauge,,,,"Availability group synchronization health: 0 = Not healthy, 1 = Partially healthy, 2 = Healthy. Tags: `availability_group`, `availability_group_name`, `synchronization_health_desc`",0,sql_server,ag sync health,, sqlserver.ao.filestream_send_rate,gauge,,byte,second,"The rate at which the FILESTREAM files are shipped to the secondary replica. Tags: `availability_group`, `availability_group_name`, `replica_server_name`, `failover_mode`, `availability_mode`, `db`, `replica_id`, `database_id`, `database_state`, `synchronization_state`, `failover_cluster`, `replica_role`",0,sql_server,filestream send rate,, sqlserver.ao.is_primary_replica,gauge,,,,"Denotes if a replica is a primary(1) or secondary(0). Tags: `availability_group`, `availability_group_name`, `replica_server_name`, `failover_mode`, `availability_mode`, `db`, `replica_id`, `database_id`, `database_state`, `synchronization_state`, `failover_cluster`, `replica_role`",0,sql_server,is primary replica,, From cfda54d26a34a330608bca6e7150c9a3291960bd Mon Sep 17 00:00:00 2001 From: "agent-platform-auto-pr[bot]" <153269286+agent-platform-auto-pr[bot]@users.noreply.github.com> Date: Fri, 27 Sep 2024 17:30:39 +0200 Subject: [PATCH 11/56] Update dependency resolution (#18690) Co-authored-by: Kyle-Neale --- .deps/metadata.json | 2 +- .deps/resolved/linux-aarch64_3.12.txt | 18 +++++++++--------- .deps/resolved/linux-x86_64_3.12.txt | 4 ++-- .deps/resolved/macos-x86_64_3.12.txt | 10 +++++----- .deps/resolved/windows-x86_64_3.12.txt | 2 +- 5 files changed, 18 insertions(+), 18 deletions(-) diff --git a/.deps/metadata.json b/.deps/metadata.json index 97e6783d80df3..bbc7d9488c8fe 100644 --- a/.deps/metadata.json +++ b/.deps/metadata.json @@ -1,3 +1,3 @@ { - "sha256": "4d24a7dbc805b14f8992f1912b8a3aef7608449d08a1697b4cd5b643833c8288" + "sha256": "5aae01baa583616f45d5179e564993f81193c37a9a6167e91f273d5db8c94039" } diff --git a/.deps/resolved/linux-aarch64_3.12.txt b/.deps/resolved/linux-aarch64_3.12.txt index 9d792013ad211..5c8d35818c87a 100644 --- a/.deps/resolved/linux-aarch64_3.12.txt +++ b/.deps/resolved/linux-aarch64_3.12.txt @@ -1,4 +1,4 @@ -aerospike @ https://agent-int-packages.datadoghq.com/built/aerospike/aerospike-7.1.1-20240917155304-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl#sha256=8573244c130f49445cf9af1c1423f13e0c2a2aef7395045e21a0e3cf760c2213 +aerospike @ https://agent-int-packages.datadoghq.com/built/aerospike/aerospike-7.1.1-20240927122405-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl#sha256=5c67c8f142b7f853224bd42ab270eccb28f644e5713e4636687a394ea160cebe annotated-types @ https://agent-int-packages.datadoghq.com/external/annotated-types/annotated_types-0.7.0-py3-none-any.whl#sha256=1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53 asn1crypto @ https://agent-int-packages.datadoghq.com/external/asn1crypto/asn1crypto-1.5.1-py2.py3-none-any.whl#sha256=db4e40728b728508912cbb3d44f19ce188f218e9eba635821bb4b68564f8fd67 attrs @ https://agent-int-packages.datadoghq.com/external/attrs/attrs-24.2.0-py3-none-any.whl#sha256=81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2 @@ -19,7 +19,7 @@ charset-normalizer @ https://agent-int-packages.datadoghq.com/external/charset-n clickhouse-cityhash @ https://agent-int-packages.datadoghq.com/external/clickhouse-cityhash/clickhouse_cityhash-1.0.2.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl#sha256=bbfd83713e5a7a700c4a8200e921bc580fd7cba5f3b9d732172a5d82b12b3e20 clickhouse-driver @ https://agent-int-packages.datadoghq.com/external/clickhouse-driver/clickhouse_driver-0.2.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl#sha256=4a8d8e2888a857d8db3d98765a5ad23ab561241feaef68bbffc5a0bd9c142342 cm-client @ https://agent-int-packages.datadoghq.com/built/cm-client/cm_client-45.0.4-20240402155018-py3-none-manylinux2014_aarch64.whl#sha256=aba3c1683ef1b2099933e030464d29b3ad1c206784ebd15d8a7147ecd6ba24e1 -confluent-kafka @ https://agent-int-packages.datadoghq.com/built/confluent-kafka/confluent_kafka-2.5.0-20240917155305-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl#sha256=6dd31639ba4c15fcb59f65842e446ecda997e8c826dec9e9b1bec01748b5066d +confluent-kafka @ https://agent-int-packages.datadoghq.com/built/confluent-kafka/confluent_kafka-2.5.0-20240927122406-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl#sha256=78cdc9414fbe39a3790745c401d766f05c00ef3cef76d587e6962cc6e30bd82f cryptography @ https://agent-int-packages.datadoghq.com/external/cryptography/cryptography-43.0.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl#sha256=1bbcce1a551e262dfbafb6e6252f1ae36a248e615ca44ba302df077a846a8806 ddsketch @ https://agent-int-packages.datadoghq.com/external/ddsketch/ddsketch-3.0.1-py3-none-any.whl#sha256=6d047b455fe2837c43d366ff1ae6ba0c3166e15499de8688437a75cea914224e ddtrace @ https://agent-int-packages.datadoghq.com/external/ddtrace/ddtrace-2.10.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl#sha256=081bb12a54c46c9804e0645320d827deaff626b9035ba13ac97567149e07cdb5 @@ -31,7 +31,7 @@ envier @ https://agent-int-packages.datadoghq.com/external/envier/envier-0.5.2-p filelock @ https://agent-int-packages.datadoghq.com/external/filelock/filelock-3.16.1-py3-none-any.whl#sha256=2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0 foundationdb @ https://agent-int-packages.datadoghq.com/built/foundationdb/foundationdb-6.3.24-20240402155019-py3-none-manylinux2014_aarch64.whl#sha256=14259f824080062cc890965747597ff00a9d6c76a1eb926673fed68a45860ccd google-auth @ https://agent-int-packages.datadoghq.com/external/google-auth/google_auth-2.35.0-py2.py3-none-any.whl#sha256=25df55f327ef021de8be50bad0dfd4a916ad0de96da86cd05661c9297723ad3f -gssapi @ https://agent-int-packages.datadoghq.com/built/gssapi/gssapi-1.8.3-20240917155305-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl#sha256=4043e268278e0e4430d92cfb51db3103bd238b5c658197b7a9c2acc35c789d67 +gssapi @ https://agent-int-packages.datadoghq.com/built/gssapi/gssapi-1.8.3-20240927122406-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl#sha256=68c49678b96cd4a9a6dadf147df17a938afdb516fa34392cca383089698b0d4f hazelcast-python-client @ https://agent-int-packages.datadoghq.com/external/hazelcast-python-client/hazelcast_python_client-5.4.0-py3-none-any.whl#sha256=16195cd58feb2dd3be1594d08d42527ae00797548a6a9d6a601aae2e8514ff5f idna @ https://agent-int-packages.datadoghq.com/external/idna/idna-3.10-py3-none-any.whl#sha256=946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3 importlib-metadata @ https://agent-int-packages.datadoghq.com/external/importlib-metadata/importlib_metadata-8.4.0-py3-none-any.whl#sha256=66f342cc6ac9818fc6ff340576acd24d65ba0b3efabb2b4ac08b598965a4a2f1 @@ -42,16 +42,16 @@ jmespath @ https://agent-int-packages.datadoghq.com/external/jmespath/jmespath-1 jsonpatch @ https://agent-int-packages.datadoghq.com/external/jsonpatch/jsonpatch-1.33-py2.py3-none-any.whl#sha256=0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade jsonpointer @ https://agent-int-packages.datadoghq.com/external/jsonpointer/jsonpointer-3.0.0-py2.py3-none-any.whl#sha256=13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942 keystoneauth1 @ https://agent-int-packages.datadoghq.com/external/keystoneauth1/keystoneauth1-5.8.0-py3-none-any.whl#sha256=e69dff80c509ab64d4de4494658d914e81f26af720828dc584ceee74ecd666d9 -krb5 @ https://agent-int-packages.datadoghq.com/built/krb5/krb5-0.6.0-20240917155306-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl#sha256=47e12d5a37cd54c721688b99389cf6bdd555597ad08ab6787273ddc63a10a1e7 +krb5 @ https://agent-int-packages.datadoghq.com/built/krb5/krb5-0.6.0-20240927122407-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl#sha256=20cf08afe47a442dbc1a0ae4f90c948a4aa870fdbc99a8bb1c4fcae4acb62763 kubernetes @ https://agent-int-packages.datadoghq.com/external/kubernetes/kubernetes-30.1.0-py2.py3-none-any.whl#sha256=e212e8b7579031dd2e512168b617373bc1e03888d41ac4e04039240a292d478d ldap3 @ https://agent-int-packages.datadoghq.com/external/ldap3/ldap3-2.9.1-py2.py3-none-any.whl#sha256=5869596fc4948797020d3f03b7939da938778a0f9e2009f7a072ccf92b8e8d70 looseversion @ https://agent-int-packages.datadoghq.com/external/looseversion/looseversion-1.3.0-py2.py3-none-any.whl#sha256=781ef477b45946fc03dd4c84ea87734b21137ecda0e1e122bcb3c8d16d2a56e0 -lxml @ https://agent-int-packages.datadoghq.com/built/lxml/lxml-4.9.4-20240917155306-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl#sha256=06e8662fc23fce90e509842155152aacaca06be101edc42de77614f2e2c726db +lxml @ https://agent-int-packages.datadoghq.com/built/lxml/lxml-4.9.4-20240927122408-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl#sha256=7640e04af52463ddd9874a760ba5454d41c5876a4dcf1008d281ddc3976bee59 lz4 @ https://agent-int-packages.datadoghq.com/external/lz4/lz4-4.3.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl#sha256=33c9a6fd20767ccaf70649982f8f3eeb0884035c150c0b818ea660152cf3c809 mmh3 @ https://agent-int-packages.datadoghq.com/external/mmh3/mmh3-4.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl#sha256=ba245e94b8d54765e14c2d7b6214e832557e7856d5183bc522e17884cab2f45d msal @ https://agent-int-packages.datadoghq.com/external/msal/msal-1.31.0-py3-none-any.whl#sha256=96bc37cff82ebe4b160d5fc0f1196f6ca8b50e274ecd0ec5bf69c438514086e7 msal-extensions @ https://agent-int-packages.datadoghq.com/external/msal-extensions/msal_extensions-1.2.0-py3-none-any.whl#sha256=cf5ba83a2113fa6dc011a254a72f1c223c88d7dfad74cc30617c4679a417704d -netifaces @ https://agent-int-packages.datadoghq.com/built/netifaces/netifaces-0.11.0-20240917155307-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl#sha256=b18f919b60520879078083d19caaf9bb25c52381d9622ceae708245cf9826b25 +netifaces @ https://agent-int-packages.datadoghq.com/built/netifaces/netifaces-0.11.0-20240927122409-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl#sha256=db7f9da2452e82251b10963b32598f30e759f44e489001f4f5cb23f4e5d9e747 oauthlib @ https://agent-int-packages.datadoghq.com/external/oauthlib/oauthlib-3.2.2-py3-none-any.whl#sha256=8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca openstacksdk @ https://agent-int-packages.datadoghq.com/external/openstacksdk/openstacksdk-3.3.0-py3-none-any.whl#sha256=e6d4121b87354984caf0e3c032e2ebf4d4440374f86c81c27ec52ca5df359157 opentelemetry-api @ https://agent-int-packages.datadoghq.com/external/opentelemetry-api/opentelemetry_api-1.27.0-py3-none-any.whl#sha256=953d5871815e7c30c81b56d910c707588000fff7a3ca1c73e6531911d53065e7 @@ -66,7 +66,7 @@ ply @ https://agent-int-packages.datadoghq.com/external/ply/ply-3.11-py2.py3-non portalocker @ https://agent-int-packages.datadoghq.com/external/portalocker/portalocker-2.10.1-py3-none-any.whl#sha256=53a5984ebc86a025552264b459b46a2086e269b21823cb572f8f28ee759e45bf prometheus-client @ https://agent-int-packages.datadoghq.com/external/prometheus-client/prometheus_client-0.20.0-py3-none-any.whl#sha256=cde524a85bce83ca359cc837f28b8c0db5cac7aa653a588fd7e84ba061c329e7 protobuf @ https://agent-int-packages.datadoghq.com/external/protobuf/protobuf-5.27.3-cp38-abi3-manylinux2014_aarch64.whl#sha256=b8a994fb3d1c11156e7d1e427186662b64694a62b55936b2b9348f0a7c6625ce -psutil @ https://agent-int-packages.datadoghq.com/built/psutil/psutil-5.9.6-20240917155307-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl#sha256=2ba6dce6cf517094b99ea70c0e82d657bdf4156a3eb5d775cf67bc7f44e02005 +psutil @ https://agent-int-packages.datadoghq.com/external/psutil/psutil-6.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl#sha256=e2e8d0054fc88153ca0544f5c4d554d42e33df2e009c4ff42284ac9ebdef4132 psycopg2-binary @ https://agent-int-packages.datadoghq.com/external/psycopg2-binary/psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl#sha256=8f8544b092a29a6ddd72f3556a9fcf249ec412e10ad28be6a0c0d948924f2212 pyasn1 @ https://agent-int-packages.datadoghq.com/external/pyasn1/pyasn1-0.4.8-py2.py3-none-any.whl#sha256=39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d pyasn1-modules @ https://agent-int-packages.datadoghq.com/external/pyasn1-modules/pyasn1_modules-0.4.1-py3-none-any.whl#sha256=49bfa96b45a292b711e986f222502c1c9a5e1f4e568fc30e2574a6c7d07838fd @@ -79,7 +79,7 @@ pyjwt @ https://agent-int-packages.datadoghq.com/external/pyjwt/PyJWT-2.9.0-py3- pymongo @ https://agent-int-packages.datadoghq.com/external/pymongo/pymongo-4.8.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl#sha256=c6b804bb4f2d9dc389cc9e827d579fa327272cdb0629a99bfe5b83cb3e269ebf pymysql @ https://agent-int-packages.datadoghq.com/external/pymysql/PyMySQL-1.1.1-py3-none-any.whl#sha256=4de15da4c61dc132f4fb9ab763063e693d521a80fd0e87943b9a453dd4c19d6c pynacl @ https://agent-int-packages.datadoghq.com/external/pynacl/PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl#sha256=a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394 -pyodbc @ https://agent-int-packages.datadoghq.com/built/pyodbc/pyodbc-5.1.0-20240917155308-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl#sha256=677380a4d52d3c02d426d11a77fcf205f19926da759f070eeed4007e546f6b4a +pyodbc @ https://agent-int-packages.datadoghq.com/built/pyodbc/pyodbc-5.1.0-20240927122409-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl#sha256=c7b2833a210f5c230de8dc29d22971ddd5ed40f7f1c996eee11422aff58d849e pyopenssl @ https://agent-int-packages.datadoghq.com/external/pyopenssl/pyOpenSSL-24.2.1-py3-none-any.whl#sha256=967d5719b12b243588573f39b0c677637145c7a1ffedcd495a487e58177fbb8d pysmi @ https://agent-int-packages.datadoghq.com/external/pysmi/pysmi-1.2.1-py3-none-any.whl#sha256=d97c60de9f81d33ab2899124d95a94fa7fefacc86ab6e00cbfec543a073e6d33 pysnmp @ https://agent-int-packages.datadoghq.com/external/pysnmp/pysnmp-5.1.0-py3-none-any.whl#sha256=375a8adfc6820faf24ace6761a6d20544e60580d714ff7266df272850c39b439 @@ -120,7 +120,7 @@ tuf @ https://agent-int-packages.datadoghq.com/external/tuf/tuf-4.0.0-py3-none-a typing-extensions @ https://agent-int-packages.datadoghq.com/external/typing-extensions/typing_extensions-4.12.2-py3-none-any.whl#sha256=04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d tzlocal @ https://agent-int-packages.datadoghq.com/external/tzlocal/tzlocal-5.2-py3-none-any.whl#sha256=49816ef2fe65ea8ac19d19aa7a1ae0551c834303d5014c6d5a62e4cbda8047b8 uhashring @ https://agent-int-packages.datadoghq.com/external/uhashring/uhashring-2.3-py3-none-any.whl#sha256=7ee8a25ca495a97effad10bd563c83b4054a6d7606d9530757049a04edab9297 -uptime @ https://agent-int-packages.datadoghq.com/built/uptime/uptime-3.0.1-20240917155308-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl#sha256=6e4a3bb156fe2f24c0f00f17ee735a6caccb674aa6f307a164248c989baa8914 +uptime @ https://agent-int-packages.datadoghq.com/built/uptime/uptime-3.0.1-20240927122410-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl#sha256=c68df01ef226cb567ae03cc5e310f5053c4e3f9d76a4cb843ee9f804b7945e09 urllib3 @ https://agent-int-packages.datadoghq.com/external/urllib3/urllib3-2.2.3-py3-none-any.whl#sha256=ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac vertica-python @ https://agent-int-packages.datadoghq.com/external/vertica-python/vertica_python-1.4.0-py3-none-any.whl#sha256=50fecd7687f4b0b9f6dee6e2b35c195af2a4f702ece01bd12e080b51756e000b websocket-client @ https://agent-int-packages.datadoghq.com/external/websocket-client/websocket_client-1.8.0-py3-none-any.whl#sha256=17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526 diff --git a/.deps/resolved/linux-x86_64_3.12.txt b/.deps/resolved/linux-x86_64_3.12.txt index 804727b3c7694..724bb3e357115 100644 --- a/.deps/resolved/linux-x86_64_3.12.txt +++ b/.deps/resolved/linux-x86_64_3.12.txt @@ -19,7 +19,7 @@ charset-normalizer @ https://agent-int-packages.datadoghq.com/external/charset-n clickhouse-cityhash @ https://agent-int-packages.datadoghq.com/external/clickhouse-cityhash/clickhouse_cityhash-1.0.2.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=f1f8fec4027cd648f72009ef59c9b76c5a27a33ca166b4e79e46542009429813 clickhouse-driver @ https://agent-int-packages.datadoghq.com/external/clickhouse-driver/clickhouse_driver-0.2.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=6dbcee870c60d9835e5dce1456ab6b9d807e6669246357f4b321ef747b90fa43 cm-client @ https://agent-int-packages.datadoghq.com/built/cm-client/cm_client-45.0.4-20240402154838-py3-none-manylinux2014_x86_64.whl#sha256=aba3c1683ef1b2099933e030464d29b3ad1c206784ebd15d8a7147ecd6ba24e1 -confluent-kafka @ https://agent-int-packages.datadoghq.com/built/confluent-kafka/confluent_kafka-2.5.0-20240917155249-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=aea2f7e617f82476c56eed42d0b5cf6b944a2769d93c8bf7baf0adef19d19bf7 +confluent-kafka @ https://agent-int-packages.datadoghq.com/built/confluent-kafka/confluent_kafka-2.5.0-20240927122344-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=aea2f7e617f82476c56eed42d0b5cf6b944a2769d93c8bf7baf0adef19d19bf7 cryptography @ https://agent-int-packages.datadoghq.com/external/cryptography/cryptography-43.0.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=58d4e9129985185a06d849aa6df265bdd5a74ca6e1b736a77959b498e0505b85 ddsketch @ https://agent-int-packages.datadoghq.com/external/ddsketch/ddsketch-3.0.1-py3-none-any.whl#sha256=6d047b455fe2837c43d366ff1ae6ba0c3166e15499de8688437a75cea914224e ddtrace @ https://agent-int-packages.datadoghq.com/external/ddtrace/ddtrace-2.10.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=5fc70ac472093093d9908965d95d977206372a3ddc8a2562acf9dfd57c6864d8 @@ -66,7 +66,7 @@ ply @ https://agent-int-packages.datadoghq.com/external/ply/ply-3.11-py2.py3-non portalocker @ https://agent-int-packages.datadoghq.com/external/portalocker/portalocker-2.10.1-py3-none-any.whl#sha256=53a5984ebc86a025552264b459b46a2086e269b21823cb572f8f28ee759e45bf prometheus-client @ https://agent-int-packages.datadoghq.com/external/prometheus-client/prometheus_client-0.20.0-py3-none-any.whl#sha256=cde524a85bce83ca359cc837f28b8c0db5cac7aa653a588fd7e84ba061c329e7 protobuf @ https://agent-int-packages.datadoghq.com/external/protobuf/protobuf-5.27.3-cp38-abi3-manylinux2014_x86_64.whl#sha256=a55c48f2a2092d8e213bd143474df33a6ae751b781dd1d1f4d953c128a415b25 -psutil @ https://agent-int-packages.datadoghq.com/external/psutil/psutil-5.9.6-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=748c9dd2583ed86347ed65d0035f45fa8c851e8d90354c122ab72319b5f366f4 +psutil @ https://agent-int-packages.datadoghq.com/external/psutil/psutil-6.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=5fd9a97c8e94059b0ef54a7d4baf13b405011176c3b6ff257c247cae0d560ecd psycopg2-binary @ https://agent-int-packages.datadoghq.com/external/psycopg2-binary/psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=6e6f98446430fdf41bd36d4faa6cb409f5140c1c2cf58ce0bbdaf16af7d3f119 pyasn1 @ https://agent-int-packages.datadoghq.com/external/pyasn1/pyasn1-0.4.8-py2.py3-none-any.whl#sha256=39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d pyasn1-modules @ https://agent-int-packages.datadoghq.com/external/pyasn1-modules/pyasn1_modules-0.4.1-py3-none-any.whl#sha256=49bfa96b45a292b711e986f222502c1c9a5e1f4e568fc30e2574a6c7d07838fd diff --git a/.deps/resolved/macos-x86_64_3.12.txt b/.deps/resolved/macos-x86_64_3.12.txt index aa5723edb5b87..1233562cbb882 100644 --- a/.deps/resolved/macos-x86_64_3.12.txt +++ b/.deps/resolved/macos-x86_64_3.12.txt @@ -18,7 +18,7 @@ charset-normalizer @ https://agent-int-packages.datadoghq.com/external/charset-n clickhouse-cityhash @ https://agent-int-packages.datadoghq.com/external/clickhouse-cityhash/clickhouse_cityhash-1.0.2.4-cp312-cp312-macosx_10_9_x86_64.whl#sha256=261fc1b0bf349de66b2d9e3d367879a561b516ca8e54e85e0c27b7c1a4f639b4 clickhouse-driver @ https://agent-int-packages.datadoghq.com/external/clickhouse-driver/clickhouse_driver-0.2.9-cp312-cp312-macosx_10_9_x86_64.whl#sha256=fcb2fd00e58650ae206a6d5dbc83117240e622471aa5124733fbf2805eb8bda0 cm-client @ https://agent-int-packages.datadoghq.com/built/cm-client/cm_client-45.0.4-20240402154932-py3-none-macosx_10_12_universal2.whl#sha256=aba3c1683ef1b2099933e030464d29b3ad1c206784ebd15d8a7147ecd6ba24e1 -confluent-kafka @ https://agent-int-packages.datadoghq.com/built/confluent-kafka/confluent_kafka-2.5.0-20240925130313-cp312-cp312-macosx_10_13_universal2.whl#sha256=1b49cdc768bf5dcaa5f4b77d5f538919c9b7ffe9acc0e3bcfbf47b345061c9d0 +confluent-kafka @ https://agent-int-packages.datadoghq.com/built/confluent-kafka/confluent_kafka-2.5.0-20240927122353-cp312-cp312-macosx_10_13_universal2.whl#sha256=8dc85c2841a7460e65c687cf5f99fea845e571bd7a5aa4ef0d36a68b473c1bb2 cryptography @ https://agent-int-packages.datadoghq.com/external/cryptography/cryptography-43.0.1-cp39-abi3-macosx_10_9_universal2.whl#sha256=ac119bb76b9faa00f48128b7f5679e1d8d437365c5d26f1c2c3f0da4ce1b553d ddsketch @ https://agent-int-packages.datadoghq.com/external/ddsketch/ddsketch-3.0.1-py3-none-any.whl#sha256=6d047b455fe2837c43d366ff1ae6ba0c3166e15499de8688437a75cea914224e ddtrace @ https://agent-int-packages.datadoghq.com/external/ddtrace/ddtrace-2.10.6-cp312-cp312-macosx_12_0_x86_64.whl#sha256=401f77b0564c3f990b58b9f21055331ca9efcdfa06dfa6ccff13cf21f8329ba5 @@ -50,7 +50,7 @@ lz4 @ https://agent-int-packages.datadoghq.com/external/lz4/lz4-4.3.3-cp312-cp31 mmh3 @ https://agent-int-packages.datadoghq.com/external/mmh3/mmh3-4.1.0-cp312-cp312-macosx_10_9_x86_64.whl#sha256=d6af3e2287644b2b08b5924ed3a88c97b87b44ad08e79ca9f93d3470a54a41c5 msal @ https://agent-int-packages.datadoghq.com/external/msal/msal-1.31.0-py3-none-any.whl#sha256=96bc37cff82ebe4b160d5fc0f1196f6ca8b50e274ecd0ec5bf69c438514086e7 msal-extensions @ https://agent-int-packages.datadoghq.com/external/msal-extensions/msal_extensions-1.2.0-py3-none-any.whl#sha256=cf5ba83a2113fa6dc011a254a72f1c223c88d7dfad74cc30617c4679a417704d -netifaces @ https://agent-int-packages.datadoghq.com/built/netifaces/netifaces-0.11.0-20240925130314-cp312-cp312-macosx_10_13_universal2.whl#sha256=8ae87fdf0f1a16d50129e7ac75fb4e72e78e183a491eb49224bff124234becee +netifaces @ https://agent-int-packages.datadoghq.com/built/netifaces/netifaces-0.11.0-20240927122354-cp312-cp312-macosx_10_13_universal2.whl#sha256=9bef8e8a7dd7b7e3da861d2a65d2c88e0e0f8ef10106e69d2c5a6f5a7f274471 oauthlib @ https://agent-int-packages.datadoghq.com/external/oauthlib/oauthlib-3.2.2-py3-none-any.whl#sha256=8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca openstacksdk @ https://agent-int-packages.datadoghq.com/external/openstacksdk/openstacksdk-3.3.0-py3-none-any.whl#sha256=e6d4121b87354984caf0e3c032e2ebf4d4440374f86c81c27ec52ca5df359157 opentelemetry-api @ https://agent-int-packages.datadoghq.com/external/opentelemetry-api/opentelemetry_api-1.27.0-py3-none-any.whl#sha256=953d5871815e7c30c81b56d910c707588000fff7a3ca1c73e6531911d53065e7 @@ -65,7 +65,7 @@ ply @ https://agent-int-packages.datadoghq.com/external/ply/ply-3.11-py2.py3-non portalocker @ https://agent-int-packages.datadoghq.com/external/portalocker/portalocker-2.10.1-py3-none-any.whl#sha256=53a5984ebc86a025552264b459b46a2086e269b21823cb572f8f28ee759e45bf prometheus-client @ https://agent-int-packages.datadoghq.com/external/prometheus-client/prometheus_client-0.20.0-py3-none-any.whl#sha256=cde524a85bce83ca359cc837f28b8c0db5cac7aa653a588fd7e84ba061c329e7 protobuf @ https://agent-int-packages.datadoghq.com/external/protobuf/protobuf-5.27.3-cp38-abi3-macosx_10_9_universal2.whl#sha256=68248c60d53f6168f565a8c76dc58ba4fa2ade31c2d1ebdae6d80f969cdc2d4f -psutil @ https://agent-int-packages.datadoghq.com/external/psutil/psutil-5.9.6-cp36-abi3-macosx_10_9_x86_64.whl#sha256=c69596f9fc2f8acd574a12d5f8b7b1ba3765a641ea5d60fb4736bf3c08a8214a +psutil @ https://agent-int-packages.datadoghq.com/external/psutil/psutil-6.0.0-cp36-abi3-macosx_10_9_x86_64.whl#sha256=c588a7e9b1173b6e866756dde596fd4cad94f9399daf99ad8c3258b3cb2b47a0 psycopg2-binary @ https://agent-int-packages.datadoghq.com/external/psycopg2-binary/psycopg2_binary-2.9.9-cp312-cp312-macosx_10_9_x86_64.whl#sha256=8532fd6e6e2dc57bcb3bc90b079c60de896d2128c5d9d6f24a63875a95a088cf pyasn1 @ https://agent-int-packages.datadoghq.com/external/pyasn1/pyasn1-0.4.8-py2.py3-none-any.whl#sha256=39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d pyasn1-modules @ https://agent-int-packages.datadoghq.com/external/pyasn1-modules/pyasn1_modules-0.4.1-py3-none-any.whl#sha256=49bfa96b45a292b711e986f222502c1c9a5e1f4e568fc30e2574a6c7d07838fd @@ -76,7 +76,7 @@ pydantic @ https://agent-int-packages.datadoghq.com/external/pydantic/pydantic-2 pydantic-core @ https://agent-int-packages.datadoghq.com/external/pydantic-core/pydantic_core-2.20.1-cp312-cp312-macosx_10_12_x86_64.whl#sha256=595ba5be69b35777474fa07f80fc260ea71255656191adb22a8c53aba4479231 pyjwt @ https://agent-int-packages.datadoghq.com/external/pyjwt/PyJWT-2.9.0-py3-none-any.whl#sha256=3b02fb0f44517787776cf48f2ae25d8e14f300e6d7545a4315cee571a415e850 pymongo @ https://agent-int-packages.datadoghq.com/external/pymongo/pymongo-4.8.0-cp312-cp312-macosx_10_9_x86_64.whl#sha256=e6a720a3d22b54183352dc65f08cd1547204d263e0651b213a0a2e577e838526 -pymqi @ https://agent-int-packages.datadoghq.com/built/pymqi/pymqi-1.12.10-20240925130314-cp312-cp312-macosx_10_13_universal2.whl#sha256=29ba37f0e0a9aea68639401fc010309a166435978ee22cad3d23ca54369d129f +pymqi @ https://agent-int-packages.datadoghq.com/built/pymqi/pymqi-1.12.10-20240927122355-cp312-cp312-macosx_10_13_universal2.whl#sha256=add50e67e505276651ca7134f17938b22808f21235e04229478c9536dc1591c0 pymysql @ https://agent-int-packages.datadoghq.com/external/pymysql/PyMySQL-1.1.1-py3-none-any.whl#sha256=4de15da4c61dc132f4fb9ab763063e693d521a80fd0e87943b9a453dd4c19d6c pynacl @ https://agent-int-packages.datadoghq.com/external/pynacl/PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl#sha256=401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1 pyodbc @ https://agent-int-packages.datadoghq.com/external/pyodbc/pyodbc-5.1.0-cp312-cp312-macosx_10_9_x86_64.whl#sha256=d3d9cc4af703c4817b6e604315910b0cf5dcb68056d52b25ca072dd59c52dcbc @@ -120,7 +120,7 @@ tuf @ https://agent-int-packages.datadoghq.com/external/tuf/tuf-4.0.0-py3-none-a typing-extensions @ https://agent-int-packages.datadoghq.com/external/typing-extensions/typing_extensions-4.12.2-py3-none-any.whl#sha256=04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d tzlocal @ https://agent-int-packages.datadoghq.com/external/tzlocal/tzlocal-5.2-py3-none-any.whl#sha256=49816ef2fe65ea8ac19d19aa7a1ae0551c834303d5014c6d5a62e4cbda8047b8 uhashring @ https://agent-int-packages.datadoghq.com/external/uhashring/uhashring-2.3-py3-none-any.whl#sha256=7ee8a25ca495a97effad10bd563c83b4054a6d7606d9530757049a04edab9297 -uptime @ https://agent-int-packages.datadoghq.com/built/uptime/uptime-3.0.1-20240925130314-cp312-cp312-macosx_10_13_universal2.whl#sha256=70ca64090111af57ae340a46ef38a53e1714ae4a80eeabe78075846075b53b52 +uptime @ https://agent-int-packages.datadoghq.com/built/uptime/uptime-3.0.1-20240927122356-cp312-cp312-macosx_10_13_universal2.whl#sha256=2e28ae71936be80f7ef4a2eddfd19123e91583e5ac1e557bf23def8f0626e655 urllib3 @ https://agent-int-packages.datadoghq.com/external/urllib3/urllib3-2.2.3-py3-none-any.whl#sha256=ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac vertica-python @ https://agent-int-packages.datadoghq.com/external/vertica-python/vertica_python-1.4.0-py3-none-any.whl#sha256=50fecd7687f4b0b9f6dee6e2b35c195af2a4f702ece01bd12e080b51756e000b websocket-client @ https://agent-int-packages.datadoghq.com/external/websocket-client/websocket_client-1.8.0-py3-none-any.whl#sha256=17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526 diff --git a/.deps/resolved/windows-x86_64_3.12.txt b/.deps/resolved/windows-x86_64_3.12.txt index f6b4e0163512a..f14e2807bb4e7 100644 --- a/.deps/resolved/windows-x86_64_3.12.txt +++ b/.deps/resolved/windows-x86_64_3.12.txt @@ -63,7 +63,7 @@ ply @ https://agent-int-packages.datadoghq.com/external/ply/ply-3.11-py2.py3-non portalocker @ https://agent-int-packages.datadoghq.com/external/portalocker/portalocker-2.10.1-py3-none-any.whl#sha256=53a5984ebc86a025552264b459b46a2086e269b21823cb572f8f28ee759e45bf prometheus-client @ https://agent-int-packages.datadoghq.com/external/prometheus-client/prometheus_client-0.20.0-py3-none-any.whl#sha256=cde524a85bce83ca359cc837f28b8c0db5cac7aa653a588fd7e84ba061c329e7 protobuf @ https://agent-int-packages.datadoghq.com/external/protobuf/protobuf-5.27.3-cp310-abi3-win_amd64.whl#sha256=16ddf3f8c6c41e1e803da7abea17b1793a97ef079a912e42351eabb19b2cffe7 -psutil @ https://agent-int-packages.datadoghq.com/external/psutil/psutil-5.9.6-cp37-abi3-win_amd64.whl#sha256=6e5fb8dc711a514da83098bc5234264e551ad980cec5f85dabf4d38ed6f15e9a +psutil @ https://agent-int-packages.datadoghq.com/external/psutil/psutil-6.0.0-cp37-abi3-win_amd64.whl#sha256=33ea5e1c975250a720b3a6609c490db40dae5d83a4eb315170c4fe0d8b1f34b3 psycopg2-binary @ https://agent-int-packages.datadoghq.com/external/psycopg2-binary/psycopg2_binary-2.9.9-cp312-cp312-win_amd64.whl#sha256=81ff62668af011f9a48787564ab7eded4e9fb17a4a6a74af5ffa6a457400d2ab pyasn1 @ https://agent-int-packages.datadoghq.com/external/pyasn1/pyasn1-0.4.8-py2.py3-none-any.whl#sha256=39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d pyasn1-modules @ https://agent-int-packages.datadoghq.com/external/pyasn1-modules/pyasn1_modules-0.4.1-py3-none-any.whl#sha256=49bfa96b45a292b711e986f222502c1c9a5e1f4e568fc30e2574a6c7d07838fd From e6db76d6ffb55adb16bf31870b7e2be0a6da8b50 Mon Sep 17 00:00:00 2001 From: NouemanKHAL Date: Fri, 27 Sep 2024 17:46:33 +0200 Subject: [PATCH 12/56] Add `kubevirt_handler` integration (#18283) * initial scaffolding * report health check metric * report kubevirt_handler metrics * update spec.yaml and config/models * ddev validate * rename Kubevirt to KubeVirt * Add E2E tests * fix CI and e2e tests * fix manifest.json * delete dashboard file * ddev validate ci * apply suggestions from other PRs * remove time.sleep from dd_environment env setup * ddev validate ci * add DEFAULT_METRIC_LIMIT = 0 * ddev validate labeler --sync * ddev validate ci * add basic units to metadata.csv * add more units in metadata.csv * send the kubevirt version as metadata * update README integration link * fix manifest.json using deleted .info metric * update README * fix manifest metrics entries * update manifest.json --- .codecov.yml | 9 + .github/workflows/config/labeler.yml | 2 + .github/workflows/test-all.yml | 20 + kubevirt_handler/CHANGELOG.md | 3 + kubevirt_handler/README.md | 53 + .../assets/configuration/spec.yaml | 41 + kubevirt_handler/assets/service_checks.json | 1 + kubevirt_handler/changelog.d/18283.added | 1 + kubevirt_handler/datadog_checks/__init__.py | 4 + .../kubevirt_handler/__about__.py | 4 + .../kubevirt_handler/__init__.py | 7 + .../datadog_checks/kubevirt_handler/check.py | 142 + .../config_models/__init__.py | 24 + .../config_models/defaults.py | 132 + .../config_models/instance.py | 175 + .../kubevirt_handler/config_models/shared.py | 60 + .../config_models/validators.py | 13 + .../kubevirt_handler/data/conf.yaml.example | 641 ++ .../kubevirt_handler/metrics.py | 48 + kubevirt_handler/hatch.toml | 4 + kubevirt_handler/images/IMAGES_README.md | 41 + kubevirt_handler/manifest.json | 54 + kubevirt_handler/metadata.csv | 46 + kubevirt_handler/pyproject.toml | 60 + kubevirt_handler/tests/__init__.py | 3 + kubevirt_handler/tests/conftest.py | 92 + kubevirt_handler/tests/fixtures/healthz.txt | 17 + kubevirt_handler/tests/fixtures/metrics.txt | 802 ++ kubevirt_handler/tests/kind/kubevirt-cr.yaml | 14 + .../tests/kind/kubevirt-operator.yaml | 7574 +++++++++++++++++ kubevirt_handler/tests/kind/vm.yaml | 37 + kubevirt_handler/tests/test_e2e.py | 25 + kubevirt_handler/tests/test_unit.py | 179 + 33 files changed, 10328 insertions(+) create mode 100644 kubevirt_handler/CHANGELOG.md create mode 100644 kubevirt_handler/README.md create mode 100644 kubevirt_handler/assets/configuration/spec.yaml create mode 100644 kubevirt_handler/assets/service_checks.json create mode 100644 kubevirt_handler/changelog.d/18283.added create mode 100644 kubevirt_handler/datadog_checks/__init__.py create mode 100644 kubevirt_handler/datadog_checks/kubevirt_handler/__about__.py create mode 100644 kubevirt_handler/datadog_checks/kubevirt_handler/__init__.py create mode 100644 kubevirt_handler/datadog_checks/kubevirt_handler/check.py create mode 100644 kubevirt_handler/datadog_checks/kubevirt_handler/config_models/__init__.py create mode 100644 kubevirt_handler/datadog_checks/kubevirt_handler/config_models/defaults.py create mode 100644 kubevirt_handler/datadog_checks/kubevirt_handler/config_models/instance.py create mode 100644 kubevirt_handler/datadog_checks/kubevirt_handler/config_models/shared.py create mode 100644 kubevirt_handler/datadog_checks/kubevirt_handler/config_models/validators.py create mode 100644 kubevirt_handler/datadog_checks/kubevirt_handler/data/conf.yaml.example create mode 100644 kubevirt_handler/datadog_checks/kubevirt_handler/metrics.py create mode 100644 kubevirt_handler/hatch.toml create mode 100644 kubevirt_handler/images/IMAGES_README.md create mode 100644 kubevirt_handler/manifest.json create mode 100644 kubevirt_handler/metadata.csv create mode 100644 kubevirt_handler/pyproject.toml create mode 100644 kubevirt_handler/tests/__init__.py create mode 100644 kubevirt_handler/tests/conftest.py create mode 100644 kubevirt_handler/tests/fixtures/healthz.txt create mode 100644 kubevirt_handler/tests/fixtures/metrics.txt create mode 100644 kubevirt_handler/tests/kind/kubevirt-cr.yaml create mode 100644 kubevirt_handler/tests/kind/kubevirt-operator.yaml create mode 100644 kubevirt_handler/tests/kind/vm.yaml create mode 100644 kubevirt_handler/tests/test_e2e.py create mode 100644 kubevirt_handler/tests/test_unit.py diff --git a/.codecov.yml b/.codecov.yml index 3793030e8e9b3..80ed894e54960 100644 --- a/.codecov.yml +++ b/.codecov.yml @@ -314,6 +314,10 @@ coverage: target: 75 flags: - kong + KubeVirt_Handler: + target: 75 + flags: + - kubevirt_handler KubeVirt_Controller: target: 75 flags: @@ -1171,6 +1175,11 @@ flags: paths: - kubernetes_state/datadog_checks/kubernetes_state - kubernetes_state/tests + kubevirt_handler: + carryforward: true + paths: + - kubevirt_handler/datadog_checks/kubevirt_handler + - kubevirt_handler/tests kubevirt_controller: carryforward: true paths: diff --git a/.github/workflows/config/labeler.yml b/.github/workflows/config/labeler.yml index 3ee22357e5d4b..34a011d6d6928 100644 --- a/.github/workflows/config/labeler.yml +++ b/.github/workflows/config/labeler.yml @@ -303,6 +303,8 @@ integration/kubevirt_api: - kubevirt_api/**/* integration/kubevirt_controller: - kubevirt_controller/**/* +integration/kubevirt_handler: +- kubevirt_handler/**/* integration/kyototycoon: - kyototycoon/**/* integration/kyverno: diff --git a/.github/workflows/test-all.yml b/.github/workflows/test-all.yml index dde2cb206fa04..470ae9879c379 100644 --- a/.github/workflows/test-all.yml +++ b/.github/workflows/test-all.yml @@ -2234,6 +2234,26 @@ jobs: minimum-base-package: ${{ inputs.minimum-base-package }} pytest-args: ${{ inputs.pytest-args }} secrets: inherit + j4f368cf: + uses: ./.github/workflows/test-target.yml + with: + job-name: KubeVirt Handler + target: kubevirt_handler + 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 j61e565f: uses: ./.github/workflows/test-target.yml with: diff --git a/kubevirt_handler/CHANGELOG.md b/kubevirt_handler/CHANGELOG.md new file mode 100644 index 0000000000000..934b76a9af53b --- /dev/null +++ b/kubevirt_handler/CHANGELOG.md @@ -0,0 +1,3 @@ +# CHANGELOG - KubeVirt Handler + + diff --git a/kubevirt_handler/README.md b/kubevirt_handler/README.md new file mode 100644 index 0000000000000..33908b202c1e4 --- /dev/null +++ b/kubevirt_handler/README.md @@ -0,0 +1,53 @@ +# Agent Check: KubeVirt Handler + +## Overview + +This check monitors [KubeVirt Handler][1] through the Datadog Agent. + +## 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 KubeVirt Handler check is included in the [Datadog Agent][2] package. +No additional installation is needed on your server. + +### Configuration + +1. Edit the `kubevirt_handler.d/conf.yaml` file, in the `conf.d/` folder at the root of your Agent's configuration directory to start collecting your kubevirt_handler performance data. See the [sample kubevirt_handler.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 `kubevirt_handler` under the Checks section. + +## Data Collected + +### Metrics + +See [metadata.csv][7] for a list of metrics provided by this integration. + +### Events + +The KubeVirt Handler integration does not include any events. + +### Service Checks + +The KubeVirt Handler integration does not include any service checks. + +## Troubleshooting + +Need help? Contact [Datadog support][9]. + + +[1]: https://docs.datadoghq.com/integrations/kubevirt_handler +[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/kubevirt_handler/datadog_checks/kubevirt_handler/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/kubevirt_handler/metadata.csv +[8]: https://github.com/DataDog/integrations-core/blob/master/kubevirt_handler/assets/service_checks.json +[9]: https://docs.datadoghq.com/help/ diff --git a/kubevirt_handler/assets/configuration/spec.yaml b/kubevirt_handler/assets/configuration/spec.yaml new file mode 100644 index 0000000000000..084e5db80a3f3 --- /dev/null +++ b/kubevirt_handler/assets/configuration/spec.yaml @@ -0,0 +1,41 @@ +name: KubeVirt Handler +files: + - name: kubevirt_handler.yaml + options: + - template: init_config + options: + - template: init_config/openmetrics + - template: instances + options: + - name: kubevirt_handler_metrics_endpoint + description: | + URL to the KubeVirt Handler Service /metrics endpoint. + value: + display_default: null + example: https://10.244.0.38:443/metrics + type: string + - name: kubevirt_handler_healthz_endpoint + description: | + URL to check the KubeVirt Handler /healthz endpoint. + value: + display_default: null + example: https://10.244.0.38:443/healthz + type: string + - name: kube_namespace + description: | + The namespace where the KubeVirt Handler is running. (Provided via autodiscovery template variables) + value: + display_default: null + example: kubevirt + type: string + - name: kube_pod_name + description: | + The name of the KubeVirt Handler pod. (Provided via autodiscovery template variables) + value: + display_default: null + example: virt-handler-id-1234 + type: string + - template: instances/openmetrics + overrides: + openmetrics_endpoint.required: false + openmetrics_endpoint.hidden: true diff --git a/kubevirt_handler/assets/service_checks.json b/kubevirt_handler/assets/service_checks.json new file mode 100644 index 0000000000000..fe51488c7066f --- /dev/null +++ b/kubevirt_handler/assets/service_checks.json @@ -0,0 +1 @@ +[] diff --git a/kubevirt_handler/changelog.d/18283.added b/kubevirt_handler/changelog.d/18283.added new file mode 100644 index 0000000000000..aa949b47b7b41 --- /dev/null +++ b/kubevirt_handler/changelog.d/18283.added @@ -0,0 +1 @@ +Initial Release \ No newline at end of file diff --git a/kubevirt_handler/datadog_checks/__init__.py b/kubevirt_handler/datadog_checks/__init__.py new file mode 100644 index 0000000000000..1517d901c0aae --- /dev/null +++ b/kubevirt_handler/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/kubevirt_handler/datadog_checks/kubevirt_handler/__about__.py b/kubevirt_handler/datadog_checks/kubevirt_handler/__about__.py new file mode 100644 index 0000000000000..e9541ce83e9e5 --- /dev/null +++ b/kubevirt_handler/datadog_checks/kubevirt_handler/__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/kubevirt_handler/datadog_checks/kubevirt_handler/__init__.py b/kubevirt_handler/datadog_checks/kubevirt_handler/__init__.py new file mode 100644 index 0000000000000..ffcd004f8e1fc --- /dev/null +++ b/kubevirt_handler/datadog_checks/kubevirt_handler/__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 KubeVirtHandlerCheck + +__all__ = ['__version__', 'KubeVirtHandlerCheck'] diff --git a/kubevirt_handler/datadog_checks/kubevirt_handler/check.py b/kubevirt_handler/datadog_checks/kubevirt_handler/check.py new file mode 100644 index 0000000000000..f009596b2cc1a --- /dev/null +++ b/kubevirt_handler/datadog_checks/kubevirt_handler/check.py @@ -0,0 +1,142 @@ +# (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 OpenMetricsBaseCheckV2, is_affirmative +from datadog_checks.base.checks.openmetrics.v2.transform import get_native_dynamic_transformer + +from .metrics import METRICS_MAP + + +class KubeVirtHandlerCheck(OpenMetricsBaseCheckV2): + # This will be the prefix of every metric and service check the integration sends + __NAMESPACE__ = "kubevirt_handler" + DEFAULT_METRIC_LIMIT = 0 + + def __init__(self, name, init_config, instances): + super(KubeVirtHandlerCheck, self).__init__(name, init_config, instances) + self.check_initializations.appendleft(self._parse_config) + self.check_initializations.append(self._init_base_tags) + self.check_initializations.append(self._configure_additional_transformers) + + def check(self, _): + # type: (Any) -> None + + if self.kubevirt_handler_healthz_endpoint: + self._report_health_check(self.kubevirt_handler_healthz_endpoint) + else: + self.log.warning( + "Skipping health check. Please provide a `kubevirt_handler_healthz_endpoint` to ensure the health of the KubeVirt Handler." # noqa: E501 + ) + + super().check(_) + + def _report_health_check(self, health_endpoint): + try: + self.log.debug("Checking health status at %s", health_endpoint) + response = self.http.get(health_endpoint, verify=self.tls_verify) + response.raise_for_status() + self.gauge("can_connect", 1, tags=[f"endpoint:{health_endpoint}", *self.base_tags]) + except Exception as e: + self.log.error( + "Cannot connect to KubeVirt Handler HTTP endpoint '%s': %s.\n", + health_endpoint, + str(e), + ) + self.gauge("can_connect", 0, tags=[f"endpoint:{health_endpoint}", *self.base_tags]) + raise + + def _parse_config(self): + self.kubevirt_handler_healthz_endpoint = self.instance.get("kubevirt_handler_healthz_endpoint") + self.kubevirt_handler_metrics_endpoint = self.instance.get("kubevirt_handler_metrics_endpoint") + self.kube_namespace = self.instance.get("kube_namespace") + self.pod_name = self.instance.get("kube_pod_name") + self.tls_verify = is_affirmative(self.instance.get("tls_verify")) + + self.scraper_configs = [] + + instance = { + "openmetrics_endpoint": self.kubevirt_handler_metrics_endpoint, + "namespace": self.__NAMESPACE__, + "enable_health_service_check": False, + "tls_verify": self.tls_verify, + } + + self.scraper_configs.append(instance) + + def _init_base_tags(self): + self.base_tags = [ + "pod_name:{}".format(self.pod_name), + "kube_namespace:{}".format(self.kube_namespace), + ] + + def _configure_additional_transformers(self): + metric_transformer = self.scrapers[self.kubevirt_handler_metrics_endpoint].metric_transformer + metric_transformer.add_custom_transformer("kubevirt_info", self.configure_metadata_transformer) + metric_transformer.add_custom_transformer(r".*", self.configure_transformer_kubevirt_metrics(), pattern=True) + + def configure_metadata_transformer(self, metric, sample_data, runtime_data): + """ + Parse the kubevirt_info metric to extract the kubevirt version. + """ + for sample, *_ in sample_data: + kubeversion = sample.labels["kubeversion"] + version_split = kubeversion[1:].split(".") + + major = version_split[0] + minor = version_split[1] + patch = version_split[2] + + version_raw = kubeversion + + version_parts = { + "major": major, + "minor": minor, + "patch": patch, + } + + self.set_metadata("version", version_raw, scheme="semver", part_map=version_parts) + + def configure_transformer_kubevirt_metrics(self): + """ + Return a metrics transformer that adds tags to all the collected metrics. + """ + + def transform(_metric, sample_data, _runtime_data): + for sample, tags, hostname in sample_data: + metric_name = _metric.name + metric_type = _metric.type + + # ignore metrics we don't collect + if metric_name not in METRICS_MAP: + continue + + # attach tags to the metric + tags = tags + self.base_tags + + # apply the METRICS_MAP mapping for the metric name + new_metric_name = METRICS_MAP[metric_name] + if isinstance(new_metric_name, dict) and "name" in new_metric_name: + new_metric_name = new_metric_name["name"] + + # call the correct metric submission method based on the metric type + if metric_type == "counter": + self.count(new_metric_name + ".count", sample.value, tags=tags, hostname=hostname) + elif metric_type == "gauge": + self.gauge(new_metric_name, sample.value, tags=tags, hostname=hostname) + else: + metric_transformer = self.scrapers[self.kubevirt_handler_metrics_endpoint].metric_transformer + + native_transformer = get_native_dynamic_transformer( + self, new_metric_name, None, metric_transformer.global_options + ) + + def add_tag_to_sample(sample, pod_tags): + [sample, tags, hostname] = sample + return [sample, tags + pod_tags, hostname] + + modified_sample_data = (add_tag_to_sample(x, self.base_tags) for x in sample_data) + native_transformer(_metric, modified_sample_data, _runtime_data) + + return transform diff --git a/kubevirt_handler/datadog_checks/kubevirt_handler/config_models/__init__.py b/kubevirt_handler/datadog_checks/kubevirt_handler/config_models/__init__.py new file mode 100644 index 0000000000000..106fff2032f68 --- /dev/null +++ b/kubevirt_handler/datadog_checks/kubevirt_handler/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/kubevirt_handler/datadog_checks/kubevirt_handler/config_models/defaults.py b/kubevirt_handler/datadog_checks/kubevirt_handler/config_models/defaults.py new file mode 100644 index 0000000000000..bf7519af75f42 --- /dev/null +++ b/kubevirt_handler/datadog_checks/kubevirt_handler/config_models/defaults.py @@ -0,0 +1,132 @@ +# (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 shared_skip_proxy(): + return False + + +def shared_timeout(): + return 10 + + +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/kubevirt_handler/datadog_checks/kubevirt_handler/config_models/instance.py b/kubevirt_handler/datadog_checks/kubevirt_handler/config_models/instance.py new file mode 100644 index 0000000000000..b872f4bf2c426 --- /dev/null +++ b/kubevirt_handler/datadog_checks/kubevirt_handler/config_models/instance.py @@ -0,0 +1,175 @@ +# (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 + kube_namespace: Optional[str] = None + kube_pod_name: Optional[str] = None + kubevirt_handler_healthz_endpoint: Optional[str] = None + kubevirt_handler_metrics_endpoint: 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 + 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 + 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/kubevirt_handler/datadog_checks/kubevirt_handler/config_models/shared.py b/kubevirt_handler/datadog_checks/kubevirt_handler/config_models/shared.py new file mode 100644 index 0000000000000..0e8a9ecab10a2 --- /dev/null +++ b/kubevirt_handler/datadog_checks/kubevirt_handler/config_models/shared.py @@ -0,0 +1,60 @@ +# (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 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 SharedConfig(BaseModel): + model_config = ConfigDict( + validate_default=True, + arbitrary_types_allowed=True, + frozen=True, + ) + proxy: Optional[Proxy] = None + service: Optional[str] = None + skip_proxy: Optional[bool] = None + timeout: Optional[float] = 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) + else: + value = getattr(defaults, f'shared_{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_shared', identity)(model)) diff --git a/kubevirt_handler/datadog_checks/kubevirt_handler/config_models/validators.py b/kubevirt_handler/datadog_checks/kubevirt_handler/config_models/validators.py new file mode 100644 index 0000000000000..70150e85e6124 --- /dev/null +++ b/kubevirt_handler/datadog_checks/kubevirt_handler/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/kubevirt_handler/datadog_checks/kubevirt_handler/data/conf.yaml.example b/kubevirt_handler/datadog_checks/kubevirt_handler/data/conf.yaml.example new file mode 100644 index 0000000000000..9a14762e11f1b --- /dev/null +++ b/kubevirt_handler/datadog_checks/kubevirt_handler/data/conf.yaml.example @@ -0,0 +1,641 @@ +## All options defined here are available to all instances. +# +init_config: + + ## @param proxy - mapping - optional + ## Set HTTP or HTTPS proxies for all instances. Use the `no_proxy` list + ## to specify hosts that must bypass proxies. + ## + ## The SOCKS protocol is also supported like so: + ## + ## 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 + ## If set to `true`, this makes the check bypass any proxy + ## settings enabled and attempt to reach services directly. + # + # skip_proxy: false + + ## @param timeout - number - optional - default: 10 + ## The timeout for connecting to services. + # + # timeout: 10 + + ## @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 kubevirt_handler_metrics_endpoint - string - optional + ## URL to the KubeVirt Handler Service /metrics endpoint. + # + # kubevirt_handler_metrics_endpoint: https://10.244.0.38:443/metrics + + ## @param kubevirt_handler_healthz_endpoint - string - optional + ## URL to check the KubeVirt Handler /healthz endpoint. + # + # kubevirt_handler_healthz_endpoint: https://10.244.0.38:443/healthz + + ## @param kube_namespace - string - optional + ## The namespace where the KubeVirt Handler is running. (Provided via autodiscovery template variables) + # + # kube_namespace: kubevirt + + ## @param kube_pod_name - string - optional + ## The name of the KubeVirt Handler pod. (Provided via autodiscovery template variables) + # + # kube_pod_name: virt-handler-id-1234 + + ## @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/kubevirt_handler/datadog_checks/kubevirt_handler/metrics.py b/kubevirt_handler/datadog_checks/kubevirt_handler/metrics.py new file mode 100644 index 0000000000000..fd396f97ac728 --- /dev/null +++ b/kubevirt_handler/datadog_checks/kubevirt_handler/metrics.py @@ -0,0 +1,48 @@ +# (C) Datadog, Inc. 2024-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) + + +METRICS_MAP = { + "kubevirt_info": "info", + "kubevirt_vmi_cpu_system_usage_seconds": "vmi.cpu_system_usage_seconds", + "kubevirt_vmi_cpu_usage_seconds": "vmi.cpu_usage_seconds", + "kubevirt_vmi_cpu_user_usage_seconds": "vmi.cpu_user_usage_seconds", + "kubevirt_vmi_memory_actual_balloon_bytes": "vmi.memory_actual_balloon_bytes", + "kubevirt_vmi_memory_available_bytes": "vmi.memory_available_bytes", + "kubevirt_vmi_memory_domain_bytes": "vmi.memory_domain_bytes", + "kubevirt_vmi_memory_pgmajfault": "vmi.memory_pgmajfault", + "kubevirt_vmi_memory_pgminfault": "vmi.memory_pgminfault", + "kubevirt_vmi_memory_resident_bytes": "vmi.memory_resident_bytes", + "kubevirt_vmi_memory_swap_in_traffic_bytes": "vmi.memory_swap_in_traffic_bytes", + "kubevirt_vmi_memory_swap_out_traffic_bytes": "vmi.memory_swap_out_traffic_bytes", + "kubevirt_vmi_memory_unused_bytes": "vmi.memory_unused_bytes", + "kubevirt_vmi_memory_usable_bytes": "vmi.memory_usable_bytes", + "kubevirt_vmi_network_receive_bytes": "vmi.network_receive_bytes", + "kubevirt_vmi_network_receive_errors": "vmi.network_receive_errors", + "kubevirt_vmi_network_receive_packets_dropped": "vmi.network_receive_packets_dropped", + "kubevirt_vmi_network_receive_packets": "vmi.network_receive_packets", + "kubevirt_vmi_network_transmit_bytes": "vmi.network_transmit_bytes", + "kubevirt_vmi_network_transmit_errors": "vmi.network_transmit_errors", + "kubevirt_vmi_network_transmit_packets_dropped": "vmi.network_transmit_packets_dropped", + "kubevirt_vmi_network_transmit_packets": "vmi.network_transmit_packets", + "kubevirt_vmi_node_cpu_affinity": "vmi.node_cpu_affinity", + "kubevirt_vmi_storage_flush_requests": "vmi.storage_flush_requests", + "kubevirt_vmi_storage_flush_times_seconds": "vmi.storage_flush_times_seconds", + "kubevirt_vmi_storage_iops_read": "vmi.storage_iops_read", + "kubevirt_vmi_storage_iops_write": "vmi.storage_iops_write", + "kubevirt_vmi_storage_read_times_seconds": "vmi.storage_read_times_seconds", + "kubevirt_vmi_storage_read_traffic_bytes": "vmi.storage_read_traffic_bytes", + "kubevirt_vmi_storage_write_times_seconds": "vmi.storage_write_times_seconds", + "kubevirt_vmi_storage_write_traffic_bytes": "vmi.storage_write_traffic_bytes", + "kubevirt_vmi_vcpu_delay_seconds": "vmi.vcpu_delay_seconds", + "kubevirt_vmi_vcpu_seconds": "vmi.vcpu_seconds", + "kubevirt_vmi_vcpu_wait_seconds": "vmi.vcpu_wait_seconds", + "kubevirt_workqueue_adds": "workqueue.adds", + "kubevirt_workqueue_depth": "workqueue.depth", + "kubevirt_workqueue_longest_running_processor_seconds": "workqueue.longest_running_processor_seconds", + "kubevirt_workqueue_queue_duration_seconds": "workqueue.queue_duration_seconds", + "kubevirt_workqueue_retries": "workqueue.retries", + "kubevirt_workqueue_unfinished_work_seconds": "workqueue.unfinished_work_seconds", + "kubevirt_workqueue_work_duration_seconds": "workqueue.work_duration_seconds", +} diff --git a/kubevirt_handler/hatch.toml b/kubevirt_handler/hatch.toml new file mode 100644 index 0000000000000..001e43ce25414 --- /dev/null +++ b/kubevirt_handler/hatch.toml @@ -0,0 +1,4 @@ +[env.collectors.datadog-checks] + +[[envs.default.matrix]] +python = ["3.11"] diff --git a/kubevirt_handler/images/IMAGES_README.md b/kubevirt_handler/images/IMAGES_README.md new file mode 100644 index 0000000000000..70612c2830ffb --- /dev/null +++ b/kubevirt_handler/images/IMAGES_README.md @@ -0,0 +1,41 @@ +# Marketplace Media Carousel Guidelines + +## Using the media gallery + +To use the media gallery, you must upload a minimum of one image. 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/kubevirt_handler/manifest.json b/kubevirt_handler/manifest.json new file mode 100644 index 0000000000000..ea197c1090e70 --- /dev/null +++ b/kubevirt_handler/manifest.json @@ -0,0 +1,54 @@ +{ + "manifest_version": "2.0.0", + "app_uuid": "751006a9-b87a-4f54-acc5-2886ec49073e", + "app_id": "kubevirt-handler", + "display_on_public_website": false, + "tile": { + "overview": "README.md#Overview", + "configuration": "README.md#Setup", + "support": "README.md#Support", + "changelog": "CHANGELOG.md", + "description": "Collect key metrics to monitor the health of your KubeVirt Handler Daemons.", + "title": "KubeVirt Handler", + "media": [], + "classifier_tags": [ + "Category::Containers", + "Category::Kubernetes", + "Supported OS::Linux", + "Supported OS::Windows", + "Supported OS::macOS", + "Offering::Integration", + "Submitted Data Type::Metrics" + ] + }, + "assets": { + "integration": { + "auto_install": true, + "source_type_id": 22778164, + "source_type_name": "KubeVirt Handler", + "configuration": { + "spec": "assets/configuration/spec.yaml" + }, + "events": { + "creates_events": false + }, + "metrics": { + "prefix": "kubevirt_handler.", + "check": [ + "kubevirt_handler.can_connect", + "kubevirt_handler.vmi.cpu_system_usage_seconds.count" + ], + "metadata_path": "metadata.csv" + }, + "service_checks": { + "metadata_path": "assets/service_checks.json" + } + } + }, + "author": { + "support_email": "help@datadoghq.com", + "name": "Datadog", + "homepage": "https://www.datadoghq.com", + "sales_email": "info@datadoghq.com" + } +} diff --git a/kubevirt_handler/metadata.csv b/kubevirt_handler/metadata.csv new file mode 100644 index 0000000000000..1b9faba853995 --- /dev/null +++ b/kubevirt_handler/metadata.csv @@ -0,0 +1,46 @@ +metric_name,metric_type,interval,unit_name,per_unit_name,description,orientation,integration,short_name,curated_metric,sample_tags +kubevirt_handler.can_connect,gauge,,,,Whether the check can connect to the KubeVirt Handler or not.,0,kubevirt_handler,handler connect,, +kubevirt_handler.vmi.cpu_system_usage_seconds.count,count,,second,,"Total CPU time spent in system mode.",0,kubevirt_handler,short_name,, +kubevirt_handler.vmi.cpu_usage_seconds.count,count,,second,,"Total CPU time spent in all modes (sum of both vcpu and hypervisor usage).",0,kubevirt_handler,short_name,, +kubevirt_handler.vmi.cpu_user_usage_seconds.count,count,,second,,"Total CPU time spent in user mode.",0,kubevirt_handler,short_name,, +kubevirt_handler.vmi.memory_actual_balloon_bytes,gauge,,byte,,"Current balloon size in bytes.",0,kubevirt_handler,short_name,, +kubevirt_handler.vmi.memory_available_bytes,gauge,,byte,,"Amount of usable memory as seen by the domain.",0,kubevirt_handler,short_name,, +kubevirt_handler.vmi.memory_domain_bytes,gauge,,byte,,"The amount of memory in bytes allocated to the domain.",0,kubevirt_handler,short_name,, +kubevirt_handler.vmi.memory_pgmajfault.count,count,,page,,"The number of page faults when disk IO was required.",0,kubevirt_handler,short_name,, +kubevirt_handler.vmi.memory_pgminfault.count,count,,page,,"The number of other page faults, when disk IO was not required.",0,kubevirt_handler,short_name,, +kubevirt_handler.vmi.memory_resident_bytes,gauge,,byte,,"Resident set size of the process running the domain.",0,kubevirt_handler,short_name,, +kubevirt_handler.vmi.memory_swap_in_traffic_bytes,gauge,,byte,,"The total amount of data read from swap space of the guest in bytes.",0,kubevirt_handler,short_name,, +kubevirt_handler.vmi.memory_swap_out_traffic_bytes,gauge,,byte,,"The total amount of memory written out to swap space of the guest in bytes.",0,kubevirt_handler,short_name,, +kubevirt_handler.vmi.memory_unused_bytes,gauge,,byte,,"The amount of memory left completely unused by the system.",0,kubevirt_handler,short_name,, +kubevirt_handler.vmi.memory_usable_bytes,gauge,,byte,,"The amount of memory which can be reclaimed by balloon without pushing the guest system to swap, corresponds to 'Available' in /proc/meminfo",0,kubevirt_handler,short_name,, +kubevirt_handler.vmi.network_receive_bytes.count,count,,byte,,"Total network traffic received in bytes.",0,kubevirt_handler,short_name,, +kubevirt_handler.vmi.network_receive_errors.count,count,,packet,,"Total network received error packets.",0,kubevirt_handler,short_name,, +kubevirt_handler.vmi.network_receive_packets.count,count,,packet,,"Total network traffic received packets.",0,kubevirt_handler,short_name,, +kubevirt_handler.vmi.network_receive_packets_dropped.count,count,,packet,,"The total number of rx packets dropped on vNIC interfaces.",0,kubevirt_handler,short_name,, +kubevirt_handler.vmi.network_transmit_bytes.count,count,,byte,,"Total network traffic transmitted in bytes.",0,kubevirt_handler,short_name,, +kubevirt_handler.vmi.network_transmit_errors.count,count,,packet,,"Total network transmitted error packets.",0,kubevirt_handler,short_name,, +kubevirt_handler.vmi.network_transmit_packets.count,count,,packet,,"Total network traffic transmitted packets.",0,kubevirt_handler,short_name,, +kubevirt_handler.vmi.network_transmit_packets_dropped.count,count,,packet,,"The total number of tx packets dropped on vNIC interfaces.",0,kubevirt_handler,short_name,, +kubevirt_handler.vmi.node_cpu_affinity,gauge,,,,"Number of VMI CPU affinities to node physical cores.",0,kubevirt_handler,short_name,, +kubevirt_handler.vmi.storage_flush_requests.count,count,,request,,"Total storage flush requests.",0,kubevirt_handler,short_name,, +kubevirt_handler.vmi.storage_flush_times_seconds.count,count,,second,,"Total time spent on cache flushing.",0,kubevirt_handler,short_name,, +kubevirt_handler.vmi.storage_iops_read.count,count,,read,,"Total number of I/O read operations.",0,kubevirt_handler,short_name,, +kubevirt_handler.vmi.storage_iops_write.count,count,,write,,"Total number of I/O write operations.",0,kubevirt_handler,short_name,, +kubevirt_handler.vmi.storage_read_times_seconds.count,count,,second,,"Total time spent on read operations.",0,kubevirt_handler,short_name,, +kubevirt_handler.vmi.storage_read_traffic_bytes.count,count,,byte,,"Total number of bytes read from storage.",0,kubevirt_handler,short_name,, +kubevirt_handler.vmi.storage_write_times_seconds.count,count,,second,,"Total time spent on write operations.",0,kubevirt_handler,short_name,, +kubevirt_handler.vmi.storage_write_traffic_bytes.count,count,,byte,,"Total number of written bytes.",0,kubevirt_handler,short_name,, +kubevirt_handler.vmi.vcpu_delay_seconds.count,count,,second,,"Amount of time spent by each vcpu waiting in the queue instead of running.",0,kubevirt_handler,short_name,, +kubevirt_handler.vmi.vcpu_seconds.count,count,,second,,"Total amount of time spent in each state by each vcpu (cpu_time excluding hypervisor time). Where `id` is the vcpu identifier and `state` can be one of the following: [`OFFLINE`, `RUNNING`, `BLOCKED`].",0,kubevirt_handler,short_name,, +kubevirt_handler.vmi.vcpu_wait_seconds.count,count,,second,,"Amount of time spent by each vcpu while waiting on I/O.",0,kubevirt_handler,short_name,, +kubevirt_handler.workqueue.adds.count,count,,item,,"Total number of adds handled by workqueue",0,kubevirt_handler,short_name,, +kubevirt_handler.workqueue.depth,gauge,,item,,"Current depth of workqueue",0,kubevirt_handler,short_name,, +kubevirt_handler.workqueue.longest_running_processor_seconds,gauge,,second,,"How many seconds has the longest running processor for workqueue been running.",0,kubevirt_handler,short_name,, +kubevirt_handler.workqueue.queue_duration_seconds.bucket,count,,second,,"How long an item stays in workqueue before being requested.",0,kubevirt_handler,short_name,, +kubevirt_handler.workqueue.queue_duration_seconds.count,count,,second,,"How long an item stays in workqueue before being requested.",0,kubevirt_handler,short_name,, +kubevirt_handler.workqueue.queue_duration_seconds.sum,count,,second,,"How long an item stays in workqueue before being requested.",0,kubevirt_handler,short_name,, +kubevirt_handler.workqueue.retries.count,count,,,,"Total number of retries handled by workqueue",0,kubevirt_handler,short_name,, +kubevirt_handler.workqueue.unfinished_work_seconds,gauge,,second,,"How many seconds of work has done that is in progress and hasn't been observed by work_duration. Large values indicate stuck threads. One can deduce the number of stuck threads by observing the rate at which this increases.",0,kubevirt_handler,short_name,, +kubevirt_handler.workqueue.work_duration_seconds.bucket,count,,second,,"How long in seconds processing an item from workqueue takes.",0,kubevirt_handler,short_name,, +kubevirt_handler.workqueue.work_duration_seconds.count,count,,second,,"How long in seconds processing an item from workqueue takes.",0,kubevirt_handler,short_name,, +kubevirt_handler.workqueue.work_duration_seconds.sum,count,,second,,"How long in seconds processing an item from workqueue takes.",0,kubevirt_handler,short_name,, \ No newline at end of file diff --git a/kubevirt_handler/pyproject.toml b/kubevirt_handler/pyproject.toml new file mode 100644 index 0000000000000..41884d9e03d39 --- /dev/null +++ b/kubevirt_handler/pyproject.toml @@ -0,0 +1,60 @@ +[build-system] +requires = [ + "hatchling>=0.13.0", +] +build-backend = "hatchling.build" + +[project] +name = "datadog-kubevirt-handler" +description = "The KubeVirt Handler check" +readme = "README.md" +license = "BSD-3-Clause" +requires-python = ">=3.11" +keywords = [ + "datadog", + "datadog agent", + "datadog check", + "kubevirt_handler", +] +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.11", + "Topic :: System :: Monitoring", +] +dependencies = [ + "datadog-checks-base>=32.6.0", +] +dynamic = [ + "version", +] + +[project.optional-dependencies] +deps = [] + +[project.urls] +Source = "https://github.com/DataDog/integrations-core" + +[tool.hatch.version] +path = "datadog_checks/kubevirt_handler/__about__.py" + +[tool.hatch.build.targets.sdist] +include = [ + "/datadog_checks", + "/tests", + "/manifest.json", +] + +[tool.hatch.build.targets.wheel] +include = [ + "/datadog_checks/kubevirt_handler", +] +dev-mode-dirs = [ + ".", +] diff --git a/kubevirt_handler/tests/__init__.py b/kubevirt_handler/tests/__init__.py new file mode 100644 index 0000000000000..9103122bf028d --- /dev/null +++ b/kubevirt_handler/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/kubevirt_handler/tests/conftest.py b/kubevirt_handler/tests/conftest.py new file mode 100644 index 0000000000000..7bc0bc1bad6d3 --- /dev/null +++ b/kubevirt_handler/tests/conftest.py @@ -0,0 +1,92 @@ +# (C) Datadog, Inc. 2024-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) +import os +from contextlib import ExitStack + +import pytest + +from datadog_checks.dev import get_here, run_command +from datadog_checks.dev.http import MockResponse +from datadog_checks.dev.kind import kind_run +from datadog_checks.dev.kube_port_forward import port_forward + +HERE = get_here() +KUBEVIRT_VERSION = "v1.2.2" + + +def setup_kubevirt(): + # deploy the KubeVirt operator + run_command(["kubectl", "create", "-f", os.path.join(HERE, "kind", "kubevirt-operator.yaml")]) + + # deploy the KubeVirt Custom Resource Definitions + run_command(["kubectl", "create", "-f", os.path.join(HERE, "kind", "kubevirt-cr.yaml")]) + + # enable nested virtualization + run_command( + [ + "kubectl", + "-n", + "kubevirt", + "patch", + "kubevirt", + "kubevirt", + "--type=merge", + "--patch", + '{"spec":{"configuration":{"developerConfiguration":{"useEmulation":true}}}}', + ] + ) + + # wait for kubevirt deployment + run_command( + [ + "kubectl", + "wait", + "kubevirt.kubevirt.io/kubevirt", + "-n", + "kubevirt", + "--for=jsonpath={.status.phase}=Deployed", + "--timeout=2m", + ] + ) + + +@pytest.fixture(scope="session") +def dd_environment(): + with kind_run(conditions=[setup_kubevirt], sleep=10) as kubeconfig, ExitStack() as stack: + instance = {} + + host, port = stack.enter_context(port_forward(kubeconfig, "kubevirt", 8443, "daemonset", "virt-handler")) + + instance["kubevirt_handler_metrics_endpoint"] = f"https://{host}:{port}/metrics" + instance["kubevirt_handler_healthz_endpoint"] = f"https://{host}:{port}/healthz" + instance["kube_namespace"] = "kubevirt" + instance["kube_pod_name"] = "virt-handler-98cf864cc-zkgcd" + instance["tls_verify"] = "false" + + yield {"instances": [instance]} + + +@pytest.fixture +def instance(): + return { + "kubevirt_handler_healthz_endpoint": "https://127.0.0.1:8443/healthz", + "kubevirt_handler_metrics_endpoint": "https://127.0.0.1:8443/metrics", + "kube_namespace": "kubevirt", + "kube_pod_name": "virt-handler-some-id", + } + + +def mock_http_responses(url, **_params): + mapping = { + "https://127.0.0.1:8443/healthz": "healthz.txt", + "https://127.0.0.1:8443/metrics": "metrics.txt", + } + + fixtures_file = mapping.get(url) + + if not fixtures_file: + raise Exception(f"url `{url}` not registered") + + with open(os.path.join(HERE, "fixtures", fixtures_file)) as f: + return MockResponse(content=f.read()) diff --git a/kubevirt_handler/tests/fixtures/healthz.txt b/kubevirt_handler/tests/fixtures/healthz.txt new file mode 100644 index 0000000000000..02b53aa53fee9 --- /dev/null +++ b/kubevirt_handler/tests/fixtures/healthz.txt @@ -0,0 +1,17 @@ +{ + "apiserver": { + "connectivity": "ok", + "version": { + "buildDate": "2024-06-27T19:09:53Z", + "compiler": "gc", + "gitCommit": "04088714581f0ad0a9e2c81c6ecc36bdd30d4b53", + "gitTreeState": "clean", + "gitVersion": "v1.30.2-eks-db838b0", + "goVersion": "go1.22.4", + "major": "1", + "minor": "30+", + "platform": "linux/amd64" + } + }, + "config-resource-version": "3243404" +} \ No newline at end of file diff --git a/kubevirt_handler/tests/fixtures/metrics.txt b/kubevirt_handler/tests/fixtures/metrics.txt new file mode 100644 index 0000000000000..610832eed7397 --- /dev/null +++ b/kubevirt_handler/tests/fixtures/metrics.txt @@ -0,0 +1,802 @@ +# 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{quantile="0"} 4.9735e-05 +go_gc_duration_seconds{quantile="0.25"} 6.245e-05 +go_gc_duration_seconds{quantile="0.5"} 7.272e-05 +go_gc_duration_seconds{quantile="0.75"} 0.000100238 +go_gc_duration_seconds{quantile="1"} 0.002951245 +go_gc_duration_seconds_sum 0.204560487 +go_gc_duration_seconds_count 1875 +# HELP go_goroutines Number of goroutines that currently exist. +# TYPE go_goroutines gauge +go_goroutines 177 +# HELP go_info Information about the Go environment. +# TYPE go_info gauge +go_info{version="go1.21.8 X:nocoverageredesign"} 1 +# HELP go_memstats_alloc_bytes Number of bytes allocated and still in use. +# TYPE go_memstats_alloc_bytes gauge +go_memstats_alloc_bytes 2.1352688e+07 +# 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 4.080429088e+09 +# 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 1.925698e+06 +# HELP go_memstats_frees_total Total number of frees. +# TYPE go_memstats_frees_total counter +go_memstats_frees_total 3.8863331e+07 +# 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 6.188536e+06 +# 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 2.1352688e+07 +# 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 6.9525504e+07 +# 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 2.8286976e+07 +# HELP go_memstats_heap_objects Number of allocated objects. +# TYPE go_memstats_heap_objects gauge +go_memstats_heap_objects 130532 +# 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 6.9189632e+07 +# 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 9.781248e+07 +# 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 1.7225147024544632e+09 +# HELP go_memstats_lookups_total Total number of pointer lookups. +# TYPE go_memstats_lookups_total counter +go_memstats_lookups_total 0 +# HELP go_memstats_mallocs_total Total number of mallocs. +# TYPE go_memstats_mallocs_total counter +go_memstats_mallocs_total 3.8993863e+07 +# 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 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 15600 +# 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 464688 +# 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 488880 +# 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 3.7487872e+07 +# 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 482878 +# 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 2.850816e+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 2.850816e+06 +# HELP go_memstats_sys_bytes Number of bytes obtained from system. +# TYPE go_memstats_sys_bytes gauge +go_memstats_sys_bytes 1.09764888e+08 +# HELP go_threads Number of OS threads created. +# TYPE go_threads gauge +go_threads 13 +# HELP kubevirt_info Version information +# TYPE kubevirt_info gauge +kubevirt_info{goversion="go1.21.8 X:nocoverageredesign",kubeversion="v1.2.2"} 1 +# HELP kubevirt_vmi_cpu_system_usage_seconds_total Total CPU time spent in system mode. +# TYPE kubevirt_vmi_cpu_system_usage_seconds_total counter +kubevirt_vmi_cpu_system_usage_seconds_total{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 110.09 +kubevirt_vmi_cpu_system_usage_seconds_total{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 120.08 +kubevirt_vmi_cpu_system_usage_seconds_total{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 109.31 +kubevirt_vmi_cpu_system_usage_seconds_total{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 51.13 +# HELP kubevirt_vmi_cpu_usage_seconds_total Total CPU time spent in all modes (sum of both vcpu and hypervisor usage). +# TYPE kubevirt_vmi_cpu_usage_seconds_total counter +kubevirt_vmi_cpu_usage_seconds_total{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 397.3 +kubevirt_vmi_cpu_usage_seconds_total{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 415.3 +kubevirt_vmi_cpu_usage_seconds_total{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 386.89 +kubevirt_vmi_cpu_usage_seconds_total{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 193.19 +# HELP kubevirt_vmi_cpu_user_usage_seconds_total Total CPU time spent in user mode. +# TYPE kubevirt_vmi_cpu_user_usage_seconds_total counter +kubevirt_vmi_cpu_user_usage_seconds_total{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 287.21 +kubevirt_vmi_cpu_user_usage_seconds_total{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 295.22 +kubevirt_vmi_cpu_user_usage_seconds_total{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 277.58 +kubevirt_vmi_cpu_user_usage_seconds_total{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 142.06 +# HELP kubevirt_vmi_memory_actual_balloon_bytes Current balloon size in bytes. +# TYPE kubevirt_vmi_memory_actual_balloon_bytes gauge +kubevirt_vmi_memory_actual_balloon_bytes{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 6.4e+07 +kubevirt_vmi_memory_actual_balloon_bytes{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 6.4e+07 +kubevirt_vmi_memory_actual_balloon_bytes{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 6.4e+07 +kubevirt_vmi_memory_actual_balloon_bytes{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 6.4e+07 +# HELP kubevirt_vmi_memory_available_bytes amount of usable memory as seen by the domain. This value may not be accurate if a balloon driver is in use or if the guest OS does not initialize all assigned pages +# TYPE kubevirt_vmi_memory_available_bytes gauge +kubevirt_vmi_memory_available_bytes{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 4.5617152e+07 +kubevirt_vmi_memory_available_bytes{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 4.5617152e+07 +kubevirt_vmi_memory_available_bytes{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 4.5617152e+07 +kubevirt_vmi_memory_available_bytes{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 4.5617152e+07 +# HELP kubevirt_vmi_memory_domain_bytes The amount of memory in bytes allocated to the domain. The `memory` value in domain xml file. +# TYPE kubevirt_vmi_memory_domain_bytes gauge +kubevirt_vmi_memory_domain_bytes{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 6.4e+07 +kubevirt_vmi_memory_domain_bytes{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 6.4e+07 +kubevirt_vmi_memory_domain_bytes{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 6.4e+07 +kubevirt_vmi_memory_domain_bytes{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 6.4e+07 +# HELP kubevirt_vmi_memory_pgmajfault_total The number of page faults when disk IO was required. Page faults occur when a process makes a valid access to virtual memory that is not available. When servicing the page fault, if disk IO is required, it is considered as major fault. +# TYPE kubevirt_vmi_memory_pgmajfault_total counter +kubevirt_vmi_memory_pgmajfault_total{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 18 +kubevirt_vmi_memory_pgmajfault_total{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 21 +kubevirt_vmi_memory_pgmajfault_total{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 21 +kubevirt_vmi_memory_pgmajfault_total{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 18 +# HELP kubevirt_vmi_memory_pgminfault_total The number of other page faults, when disk IO was not required. Page faults occur when a process makes a valid access to virtual memory that is not available. When servicing the page fault, if disk IO is NOT required, it is considered as minor fault. +# TYPE kubevirt_vmi_memory_pgminfault_total counter +kubevirt_vmi_memory_pgminfault_total{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 31695 +kubevirt_vmi_memory_pgminfault_total{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 31692 +kubevirt_vmi_memory_pgminfault_total{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 31669 +kubevirt_vmi_memory_pgminfault_total{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 31706 +# HELP kubevirt_vmi_memory_resident_bytes Resident set size of the process running the domain. +# TYPE kubevirt_vmi_memory_resident_bytes gauge +kubevirt_vmi_memory_resident_bytes{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 2.06589952e+08 +kubevirt_vmi_memory_resident_bytes{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 2.06688256e+08 +kubevirt_vmi_memory_resident_bytes{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 2.07474688e+08 +kubevirt_vmi_memory_resident_bytes{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 2.0529152e+08 +# HELP kubevirt_vmi_memory_swap_in_traffic_bytes The total amount of data read from swap space of the guest in bytes. +# TYPE kubevirt_vmi_memory_swap_in_traffic_bytes gauge +kubevirt_vmi_memory_swap_in_traffic_bytes{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +kubevirt_vmi_memory_swap_in_traffic_bytes{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +kubevirt_vmi_memory_swap_in_traffic_bytes{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +kubevirt_vmi_memory_swap_in_traffic_bytes{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +# HELP kubevirt_vmi_memory_swap_out_traffic_bytes The total amount of memory written out to swap space of the guest in bytes. +# TYPE kubevirt_vmi_memory_swap_out_traffic_bytes gauge +kubevirt_vmi_memory_swap_out_traffic_bytes{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +kubevirt_vmi_memory_swap_out_traffic_bytes{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +kubevirt_vmi_memory_swap_out_traffic_bytes{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +kubevirt_vmi_memory_swap_out_traffic_bytes{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +# HELP kubevirt_vmi_memory_unused_bytes The amount of memory left completely unused by the system. Memory that is available but used for reclaimable caches should NOT be reported as free. +# TYPE kubevirt_vmi_memory_unused_bytes gauge +kubevirt_vmi_memory_unused_bytes{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 8.331264e+06 +kubevirt_vmi_memory_unused_bytes{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 8.462336e+06 +kubevirt_vmi_memory_unused_bytes{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 8.433664e+06 +kubevirt_vmi_memory_unused_bytes{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 8.343552e+06 +# HELP kubevirt_vmi_memory_usable_bytes The amount of memory which can be reclaimed by balloon without pushing the guest system to swap, corresponds to 'Available' in /proc/meminfo +# TYPE kubevirt_vmi_memory_usable_bytes gauge +kubevirt_vmi_memory_usable_bytes{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 2.4768512e+07 +kubevirt_vmi_memory_usable_bytes{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 2.4772608e+07 +kubevirt_vmi_memory_usable_bytes{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 2.4752128e+07 +kubevirt_vmi_memory_usable_bytes{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 2.4743936e+07 +# HELP kubevirt_vmi_network_receive_bytes_total Total network traffic received in bytes. +# TYPE kubevirt_vmi_network_receive_bytes_total counter +kubevirt_vmi_network_receive_bytes_total{interface="default",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 12143 +kubevirt_vmi_network_receive_bytes_total{interface="default",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 12089 +kubevirt_vmi_network_receive_bytes_total{interface="default",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 11739 +kubevirt_vmi_network_receive_bytes_total{interface="default",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 7663 +# HELP kubevirt_vmi_network_receive_errors_total Total network received error packets. +# TYPE kubevirt_vmi_network_receive_errors_total counter +kubevirt_vmi_network_receive_errors_total{interface="default",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +kubevirt_vmi_network_receive_errors_total{interface="default",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +kubevirt_vmi_network_receive_errors_total{interface="default",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +kubevirt_vmi_network_receive_errors_total{interface="default",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +# HELP kubevirt_vmi_network_receive_packets_dropped_total The total number of rx packets dropped on vNIC interfaces. +# TYPE kubevirt_vmi_network_receive_packets_dropped_total counter +kubevirt_vmi_network_receive_packets_dropped_total{interface="default",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +kubevirt_vmi_network_receive_packets_dropped_total{interface="default",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +kubevirt_vmi_network_receive_packets_dropped_total{interface="default",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +kubevirt_vmi_network_receive_packets_dropped_total{interface="default",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +# HELP kubevirt_vmi_network_receive_packets_total Total network traffic received packets. +# TYPE kubevirt_vmi_network_receive_packets_total counter +kubevirt_vmi_network_receive_packets_total{interface="default",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 155 +kubevirt_vmi_network_receive_packets_total{interface="default",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 154 +kubevirt_vmi_network_receive_packets_total{interface="default",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 149 +kubevirt_vmi_network_receive_packets_total{interface="default",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 91 +# HELP kubevirt_vmi_network_traffic_bytes_total deprecated. +# TYPE kubevirt_vmi_network_traffic_bytes_total counter +kubevirt_vmi_network_traffic_bytes_total{interface="tap0",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal",type="rx"} 12143 +kubevirt_vmi_network_traffic_bytes_total{interface="tap0",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal",type="tx"} 2157 +kubevirt_vmi_network_traffic_bytes_total{interface="tap0",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal",type="rx"} 12089 +kubevirt_vmi_network_traffic_bytes_total{interface="tap0",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal",type="tx"} 2157 +kubevirt_vmi_network_traffic_bytes_total{interface="tap0",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal",type="rx"} 11739 +kubevirt_vmi_network_traffic_bytes_total{interface="tap0",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal",type="tx"} 2157 +kubevirt_vmi_network_traffic_bytes_total{interface="tap0",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal",type="rx"} 7663 +kubevirt_vmi_network_traffic_bytes_total{interface="tap0",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal",type="tx"} 2157 +# HELP kubevirt_vmi_network_transmit_bytes_total Total network traffic transmitted in bytes. +# TYPE kubevirt_vmi_network_transmit_bytes_total counter +kubevirt_vmi_network_transmit_bytes_total{interface="default",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 2157 +kubevirt_vmi_network_transmit_bytes_total{interface="default",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 2157 +kubevirt_vmi_network_transmit_bytes_total{interface="default",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 2157 +kubevirt_vmi_network_transmit_bytes_total{interface="default",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 2157 +# HELP kubevirt_vmi_network_transmit_errors_total Total network transmitted error packets. +# TYPE kubevirt_vmi_network_transmit_errors_total counter +kubevirt_vmi_network_transmit_errors_total{interface="default",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +kubevirt_vmi_network_transmit_errors_total{interface="default",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +kubevirt_vmi_network_transmit_errors_total{interface="default",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +kubevirt_vmi_network_transmit_errors_total{interface="default",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +# HELP kubevirt_vmi_network_transmit_packets_dropped_total The total number of tx packets dropped on vNIC interfaces. +# TYPE kubevirt_vmi_network_transmit_packets_dropped_total counter +kubevirt_vmi_network_transmit_packets_dropped_total{interface="default",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +kubevirt_vmi_network_transmit_packets_dropped_total{interface="default",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +kubevirt_vmi_network_transmit_packets_dropped_total{interface="default",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +kubevirt_vmi_network_transmit_packets_dropped_total{interface="default",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +# HELP kubevirt_vmi_network_transmit_packets_total Total network traffic transmitted packets. +# TYPE kubevirt_vmi_network_transmit_packets_total counter +kubevirt_vmi_network_transmit_packets_total{interface="default",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 21 +kubevirt_vmi_network_transmit_packets_total{interface="default",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 21 +kubevirt_vmi_network_transmit_packets_total{interface="default",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 21 +kubevirt_vmi_network_transmit_packets_total{interface="default",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 21 +# HELP kubevirt_vmi_node_cpu_affinity Number of VMI CPU affinities to node physical cores. +# TYPE kubevirt_vmi_node_cpu_affinity gauge +kubevirt_vmi_node_cpu_affinity{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 2 +kubevirt_vmi_node_cpu_affinity{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 2 +kubevirt_vmi_node_cpu_affinity{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 2 +kubevirt_vmi_node_cpu_affinity{kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 2 +# HELP kubevirt_vmi_storage_flush_requests_total Total storage flush requests. +# TYPE kubevirt_vmi_storage_flush_requests_total counter +kubevirt_vmi_storage_flush_requests_total{drive="cloudinitdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +kubevirt_vmi_storage_flush_requests_total{drive="cloudinitdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +kubevirt_vmi_storage_flush_requests_total{drive="cloudinitdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +kubevirt_vmi_storage_flush_requests_total{drive="cloudinitdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +kubevirt_vmi_storage_flush_requests_total{drive="containerdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 27 +kubevirt_vmi_storage_flush_requests_total{drive="containerdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 27 +kubevirt_vmi_storage_flush_requests_total{drive="containerdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 27 +kubevirt_vmi_storage_flush_requests_total{drive="containerdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 27 +# HELP kubevirt_vmi_storage_flush_times_seconds_total Total time spent on cache flushing. +# TYPE kubevirt_vmi_storage_flush_times_seconds_total counter +kubevirt_vmi_storage_flush_times_seconds_total{drive="cloudinitdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +kubevirt_vmi_storage_flush_times_seconds_total{drive="cloudinitdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +kubevirt_vmi_storage_flush_times_seconds_total{drive="cloudinitdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +kubevirt_vmi_storage_flush_times_seconds_total{drive="cloudinitdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +kubevirt_vmi_storage_flush_times_seconds_total{drive="containerdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0.027409991 +kubevirt_vmi_storage_flush_times_seconds_total{drive="containerdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0.035236182 +kubevirt_vmi_storage_flush_times_seconds_total{drive="containerdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0.021652017 +kubevirt_vmi_storage_flush_times_seconds_total{drive="containerdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0.031011467 +# HELP kubevirt_vmi_storage_iops_read_total Total number of I/O read operations. +# TYPE kubevirt_vmi_storage_iops_read_total counter +kubevirt_vmi_storage_iops_read_total{drive="cloudinitdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 37 +kubevirt_vmi_storage_iops_read_total{drive="cloudinitdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 37 +kubevirt_vmi_storage_iops_read_total{drive="cloudinitdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 37 +kubevirt_vmi_storage_iops_read_total{drive="cloudinitdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 37 +kubevirt_vmi_storage_iops_read_total{drive="containerdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 1074 +kubevirt_vmi_storage_iops_read_total{drive="containerdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 1109 +kubevirt_vmi_storage_iops_read_total{drive="containerdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 1111 +kubevirt_vmi_storage_iops_read_total{drive="containerdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 1103 +# HELP kubevirt_vmi_storage_iops_write_total Total number of I/O write operations. +# TYPE kubevirt_vmi_storage_iops_write_total counter +kubevirt_vmi_storage_iops_write_total{drive="cloudinitdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +kubevirt_vmi_storage_iops_write_total{drive="cloudinitdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +kubevirt_vmi_storage_iops_write_total{drive="cloudinitdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +kubevirt_vmi_storage_iops_write_total{drive="cloudinitdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +kubevirt_vmi_storage_iops_write_total{drive="containerdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 376 +kubevirt_vmi_storage_iops_write_total{drive="containerdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 380 +kubevirt_vmi_storage_iops_write_total{drive="containerdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 381 +kubevirt_vmi_storage_iops_write_total{drive="containerdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 381 +# HELP kubevirt_vmi_storage_read_times_seconds_total Total time spent on read operations. +# TYPE kubevirt_vmi_storage_read_times_seconds_total counter +kubevirt_vmi_storage_read_times_seconds_total{drive="cloudinitdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0.036076314 +kubevirt_vmi_storage_read_times_seconds_total{drive="cloudinitdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0.036427565 +kubevirt_vmi_storage_read_times_seconds_total{drive="cloudinitdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0.023200456 +kubevirt_vmi_storage_read_times_seconds_total{drive="cloudinitdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0.030489989 +kubevirt_vmi_storage_read_times_seconds_total{drive="containerdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 1.185274588 +kubevirt_vmi_storage_read_times_seconds_total{drive="containerdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 1.095161689 +kubevirt_vmi_storage_read_times_seconds_total{drive="containerdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 1.031214763 +kubevirt_vmi_storage_read_times_seconds_total{drive="containerdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 1.219122621 +# HELP kubevirt_vmi_storage_read_traffic_bytes_total Total number of bytes read from storage. +# TYPE kubevirt_vmi_storage_read_traffic_bytes_total counter +kubevirt_vmi_storage_read_traffic_bytes_total{drive="cloudinitdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 173568 +kubevirt_vmi_storage_read_traffic_bytes_total{drive="cloudinitdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 173568 +kubevirt_vmi_storage_read_traffic_bytes_total{drive="cloudinitdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 173568 +kubevirt_vmi_storage_read_traffic_bytes_total{drive="cloudinitdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 173568 +kubevirt_vmi_storage_read_traffic_bytes_total{drive="containerdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 2.2044672e+07 +kubevirt_vmi_storage_read_traffic_bytes_total{drive="containerdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 2.2070272e+07 +kubevirt_vmi_storage_read_traffic_bytes_total{drive="containerdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 2.213376e+07 +kubevirt_vmi_storage_read_traffic_bytes_total{drive="containerdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 2.2007808e+07 +# HELP kubevirt_vmi_storage_write_times_seconds_total Total time spent on write operations. +# TYPE kubevirt_vmi_storage_write_times_seconds_total counter +kubevirt_vmi_storage_write_times_seconds_total{drive="cloudinitdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +kubevirt_vmi_storage_write_times_seconds_total{drive="cloudinitdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +kubevirt_vmi_storage_write_times_seconds_total{drive="cloudinitdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +kubevirt_vmi_storage_write_times_seconds_total{drive="cloudinitdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +kubevirt_vmi_storage_write_times_seconds_total{drive="containerdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 3.44507966 +kubevirt_vmi_storage_write_times_seconds_total{drive="containerdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 3.476135676 +kubevirt_vmi_storage_write_times_seconds_total{drive="containerdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 2.95795906 +kubevirt_vmi_storage_write_times_seconds_total{drive="containerdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 3.812077287 +# HELP kubevirt_vmi_storage_write_traffic_bytes_total Total number of written bytes. +# TYPE kubevirt_vmi_storage_write_traffic_bytes_total counter +kubevirt_vmi_storage_write_traffic_bytes_total{drive="cloudinitdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +kubevirt_vmi_storage_write_traffic_bytes_total{drive="cloudinitdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +kubevirt_vmi_storage_write_traffic_bytes_total{drive="cloudinitdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +kubevirt_vmi_storage_write_traffic_bytes_total{drive="cloudinitdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +kubevirt_vmi_storage_write_traffic_bytes_total{drive="containerdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 1.2408832e+07 +kubevirt_vmi_storage_write_traffic_bytes_total{drive="containerdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 1.2411904e+07 +kubevirt_vmi_storage_write_traffic_bytes_total{drive="containerdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 1.241088e+07 +kubevirt_vmi_storage_write_traffic_bytes_total{drive="containerdisk",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 1.2408832e+07 +# HELP kubevirt_vmi_vcpu_delay_seconds_total Amount of time spent by each vcpu waiting in the queue instead of running. +# TYPE kubevirt_vmi_vcpu_delay_seconds_total counter +kubevirt_vmi_vcpu_delay_seconds_total{id="0",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 21.632295298 +kubevirt_vmi_vcpu_delay_seconds_total{id="0",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 31.020036404 +kubevirt_vmi_vcpu_delay_seconds_total{id="0",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 19.0588205 +kubevirt_vmi_vcpu_delay_seconds_total{id="0",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 6.744160432 +# HELP kubevirt_vmi_vcpu_seconds_total Total amount of time spent in each state by each vcpu (cpu_time excluding hypervisor time). Where `id` is the vcpu identifier and `state` can be one of the following: [`OFFLINE`, `RUNNING`, `BLOCKED`]. +# TYPE kubevirt_vmi_vcpu_seconds_total counter +kubevirt_vmi_vcpu_seconds_total{id="0",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal",state="running"} 238300 +kubevirt_vmi_vcpu_seconds_total{id="0",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal",state="running"} 247100 +kubevirt_vmi_vcpu_seconds_total{id="0",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal",state="running"} 230380 +kubevirt_vmi_vcpu_seconds_total{id="0",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal",state="running"} 118440 +# HELP kubevirt_vmi_vcpu_wait_seconds_total Amount of time spent by each vcpu while waiting on I/O. +# TYPE kubevirt_vmi_vcpu_wait_seconds_total counter +kubevirt_vmi_vcpu_wait_seconds_total{id="0",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-1",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +kubevirt_vmi_vcpu_wait_seconds_total{id="0",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-2",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +kubevirt_vmi_vcpu_wait_seconds_total{id="0",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-4",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +kubevirt_vmi_vcpu_wait_seconds_total{id="0",kubernetes_vmi_label_kubevirt_io_domain="testvm",kubernetes_vmi_label_kubevirt_io_nodeName="ip-192-168-58-28.eu-west-3.compute.internal",kubernetes_vmi_label_kubevirt_io_size="small",name="aws-kubevirt-vm-6",namespace="default",node="ip-192-168-58-28.eu-west-3.compute.internal"} 0 +# HELP kubevirt_workqueue_adds_total Total number of adds handled by workqueue +# TYPE kubevirt_workqueue_adds_total counter +kubevirt_workqueue_adds_total{name="virt-handler-node-labeller"} 800 +kubevirt_workqueue_adds_total{name="virt-handler-vm"} 2552 +# HELP kubevirt_workqueue_depth Current depth of workqueue +# TYPE kubevirt_workqueue_depth gauge +kubevirt_workqueue_depth{name="virt-handler-node-labeller"} 0 +kubevirt_workqueue_depth{name="virt-handler-vm"} 0 +# HELP kubevirt_workqueue_longest_running_processor_seconds How many seconds has the longest running processor for workqueue been running. +# TYPE kubevirt_workqueue_longest_running_processor_seconds gauge +kubevirt_workqueue_longest_running_processor_seconds{name="virt-handler-node-labeller"} 0 +kubevirt_workqueue_longest_running_processor_seconds{name="virt-handler-vm"} 0 +# HELP kubevirt_workqueue_queue_duration_seconds How long an item stays in workqueue before being requested. +# TYPE kubevirt_workqueue_queue_duration_seconds histogram +kubevirt_workqueue_queue_duration_seconds_bucket{name="virt-handler-node-labeller",le="1e-08"} 0 +kubevirt_workqueue_queue_duration_seconds_bucket{name="virt-handler-node-labeller",le="1e-07"} 0 +kubevirt_workqueue_queue_duration_seconds_bucket{name="virt-handler-node-labeller",le="1e-06"} 0 +kubevirt_workqueue_queue_duration_seconds_bucket{name="virt-handler-node-labeller",le="9.999999999999999e-06"} 18 +kubevirt_workqueue_queue_duration_seconds_bucket{name="virt-handler-node-labeller",le="9.999999999999999e-05"} 793 +kubevirt_workqueue_queue_duration_seconds_bucket{name="virt-handler-node-labeller",le="0.001"} 798 +kubevirt_workqueue_queue_duration_seconds_bucket{name="virt-handler-node-labeller",le="0.01"} 798 +kubevirt_workqueue_queue_duration_seconds_bucket{name="virt-handler-node-labeller",le="0.1"} 799 +kubevirt_workqueue_queue_duration_seconds_bucket{name="virt-handler-node-labeller",le="1"} 800 +kubevirt_workqueue_queue_duration_seconds_bucket{name="virt-handler-node-labeller",le="10"} 800 +kubevirt_workqueue_queue_duration_seconds_bucket{name="virt-handler-node-labeller",le="+Inf"} 800 +kubevirt_workqueue_queue_duration_seconds_sum{name="virt-handler-node-labeller"} 0.16665142600000019 +kubevirt_workqueue_queue_duration_seconds_count{name="virt-handler-node-labeller"} 800 +kubevirt_workqueue_queue_duration_seconds_bucket{name="virt-handler-vm",le="1e-08"} 0 +kubevirt_workqueue_queue_duration_seconds_bucket{name="virt-handler-vm",le="1e-07"} 0 +kubevirt_workqueue_queue_duration_seconds_bucket{name="virt-handler-vm",le="1e-06"} 0 +kubevirt_workqueue_queue_duration_seconds_bucket{name="virt-handler-vm",le="9.999999999999999e-06"} 2470 +kubevirt_workqueue_queue_duration_seconds_bucket{name="virt-handler-vm",le="9.999999999999999e-05"} 2529 +kubevirt_workqueue_queue_duration_seconds_bucket{name="virt-handler-vm",le="0.001"} 2538 +kubevirt_workqueue_queue_duration_seconds_bucket{name="virt-handler-vm",le="0.01"} 2540 +kubevirt_workqueue_queue_duration_seconds_bucket{name="virt-handler-vm",le="0.1"} 2548 +kubevirt_workqueue_queue_duration_seconds_bucket{name="virt-handler-vm",le="1"} 2552 +kubevirt_workqueue_queue_duration_seconds_bucket{name="virt-handler-vm",le="10"} 2552 +kubevirt_workqueue_queue_duration_seconds_bucket{name="virt-handler-vm",le="+Inf"} 2552 +kubevirt_workqueue_queue_duration_seconds_sum{name="virt-handler-vm"} 3.9256964050000023 +kubevirt_workqueue_queue_duration_seconds_count{name="virt-handler-vm"} 2552 +# HELP kubevirt_workqueue_retries_total Total number of retries handled by workqueue +# TYPE kubevirt_workqueue_retries_total counter +kubevirt_workqueue_retries_total{name="virt-handler-node-labeller"} 0 +kubevirt_workqueue_retries_total{name="virt-handler-vm"} 4 +# HELP kubevirt_workqueue_unfinished_work_seconds How many seconds of work has done that is in progress and hasn't been observed by work_duration. Large values indicate stuck threads. One can deduce the number of stuck threads by observing the rate at which this increases. +# TYPE kubevirt_workqueue_unfinished_work_seconds gauge +kubevirt_workqueue_unfinished_work_seconds{name="virt-handler-node-labeller"} 0 +kubevirt_workqueue_unfinished_work_seconds{name="virt-handler-vm"} 0 +# HELP kubevirt_workqueue_work_duration_seconds How long in seconds processing an item from workqueue takes. +# TYPE kubevirt_workqueue_work_duration_seconds histogram +kubevirt_workqueue_work_duration_seconds_bucket{name="virt-handler-node-labeller",le="1e-08"} 0 +kubevirt_workqueue_work_duration_seconds_bucket{name="virt-handler-node-labeller",le="1e-07"} 0 +kubevirt_workqueue_work_duration_seconds_bucket{name="virt-handler-node-labeller",le="1e-06"} 0 +kubevirt_workqueue_work_duration_seconds_bucket{name="virt-handler-node-labeller",le="9.999999999999999e-06"} 0 +kubevirt_workqueue_work_duration_seconds_bucket{name="virt-handler-node-labeller",le="9.999999999999999e-05"} 0 +kubevirt_workqueue_work_duration_seconds_bucket{name="virt-handler-node-labeller",le="0.001"} 0 +kubevirt_workqueue_work_duration_seconds_bucket{name="virt-handler-node-labeller",le="0.01"} 513 +kubevirt_workqueue_work_duration_seconds_bucket{name="virt-handler-node-labeller",le="0.1"} 796 +kubevirt_workqueue_work_duration_seconds_bucket{name="virt-handler-node-labeller",le="1"} 800 +kubevirt_workqueue_work_duration_seconds_bucket{name="virt-handler-node-labeller",le="10"} 800 +kubevirt_workqueue_work_duration_seconds_bucket{name="virt-handler-node-labeller",le="+Inf"} 800 +kubevirt_workqueue_work_duration_seconds_sum{name="virt-handler-node-labeller"} 8.983542171000003 +kubevirt_workqueue_work_duration_seconds_count{name="virt-handler-node-labeller"} 800 +kubevirt_workqueue_work_duration_seconds_bucket{name="virt-handler-vm",le="1e-08"} 0 +kubevirt_workqueue_work_duration_seconds_bucket{name="virt-handler-vm",le="1e-07"} 0 +kubevirt_workqueue_work_duration_seconds_bucket{name="virt-handler-vm",le="1e-06"} 0 +kubevirt_workqueue_work_duration_seconds_bucket{name="virt-handler-vm",le="9.999999999999999e-06"} 4 +kubevirt_workqueue_work_duration_seconds_bucket{name="virt-handler-vm",le="9.999999999999999e-05"} 4 +kubevirt_workqueue_work_duration_seconds_bucket{name="virt-handler-vm",le="0.001"} 4 +kubevirt_workqueue_work_duration_seconds_bucket{name="virt-handler-vm",le="0.01"} 4 +kubevirt_workqueue_work_duration_seconds_bucket{name="virt-handler-vm",le="0.1"} 2425 +kubevirt_workqueue_work_duration_seconds_bucket{name="virt-handler-vm",le="1"} 2548 +kubevirt_workqueue_work_duration_seconds_bucket{name="virt-handler-vm",le="10"} 2552 +kubevirt_workqueue_work_duration_seconds_bucket{name="virt-handler-vm",le="+Inf"} 2552 +kubevirt_workqueue_work_duration_seconds_sum{name="virt-handler-vm"} 171.68139235400002 +kubevirt_workqueue_work_duration_seconds_count{name="virt-handler-vm"} 2552 +# HELP process_cpu_seconds_total Total user and system CPU time spent in seconds. +# TYPE process_cpu_seconds_total counter +process_cpu_seconds_total 196.84 +# HELP process_max_fds Maximum number of open file descriptors. +# TYPE process_max_fds gauge +process_max_fds 1.048576e+06 +# HELP process_open_fds Number of open file descriptors. +# TYPE process_open_fds gauge +process_open_fds 44 +# HELP process_resident_memory_bytes Resident memory size in bytes. +# TYPE process_resident_memory_bytes gauge +process_resident_memory_bytes 7.8794752e+07 +# 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 1.72229006453e+09 +# HELP process_virtual_memory_bytes Virtual memory size in bytes. +# TYPE process_virtual_memory_bytes gauge +process_virtual_memory_bytes 2.238455808e+09 +# 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 1.8446744073709552e+19 +# 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 1 +# 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{code="200"} 1 +promhttp_metric_handler_requests_total{code="500"} 0 +promhttp_metric_handler_requests_total{code="503"} 0 +# HELP rest_client_rate_limiter_duration_seconds Client side rate limiter latency in seconds. Broken down by verb and URL. +# TYPE rest_client_rate_limiter_duration_seconds histogram +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/configmaps?fieldSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.001"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/configmaps?fieldSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.002"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/configmaps?fieldSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.004"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/configmaps?fieldSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.008"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/configmaps?fieldSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.016"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/configmaps?fieldSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.032"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/configmaps?fieldSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.064"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/configmaps?fieldSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.128"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/configmaps?fieldSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.256"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/configmaps?fieldSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.512"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/configmaps?fieldSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="+Inf"} 1 +rest_client_rate_limiter_duration_seconds_sum{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/configmaps?fieldSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET"} 1.433e-06 +rest_client_rate_limiter_duration_seconds_count{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/configmaps?fieldSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/events",verb="POST",le="0.001"} 8 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/events",verb="POST",le="0.002"} 8 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/events",verb="POST",le="0.004"} 8 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/events",verb="POST",le="0.008"} 8 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/events",verb="POST",le="0.016"} 8 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/events",verb="POST",le="0.032"} 8 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/events",verb="POST",le="0.064"} 8 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/events",verb="POST",le="0.128"} 8 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/events",verb="POST",le="0.256"} 8 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/events",verb="POST",le="0.512"} 8 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/events",verb="POST",le="+Inf"} 8 +rest_client_rate_limiter_duration_seconds_sum{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/events",verb="POST"} 1.8045999999999996e-05 +rest_client_rate_limiter_duration_seconds_count{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/events",verb="POST"} 8 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="GET",le="0.001"} 5497 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="GET",le="0.002"} 5497 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="GET",le="0.004"} 5497 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="GET",le="0.008"} 5499 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="GET",le="0.016"} 5499 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="GET",le="0.032"} 5499 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="GET",le="0.064"} 5499 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="GET",le="0.128"} 5499 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="GET",le="0.256"} 5499 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="GET",le="0.512"} 5499 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="GET",le="+Inf"} 5499 +rest_client_rate_limiter_duration_seconds_sum{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="GET"} 0.09202629000000012 +rest_client_rate_limiter_duration_seconds_count{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="GET"} 5499 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="PATCH",le="0.001"} 2347 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="PATCH",le="0.002"} 2347 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="PATCH",le="0.004"} 2347 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="PATCH",le="0.008"} 2347 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="PATCH",le="0.016"} 2347 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="PATCH",le="0.032"} 2347 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="PATCH",le="0.064"} 2347 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="PATCH",le="0.128"} 2347 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="PATCH",le="0.256"} 2347 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="PATCH",le="0.512"} 2347 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="PATCH",le="+Inf"} 2347 +rest_client_rate_limiter_duration_seconds_sum{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="PATCH"} 0.014310617999999989 +rest_client_rate_limiter_duration_seconds_count{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="PATCH"} 2347 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/apiextensions.k8s.io/v1/customresourcedefinitions?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.001"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/apiextensions.k8s.io/v1/customresourcedefinitions?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.002"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/apiextensions.k8s.io/v1/customresourcedefinitions?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.004"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/apiextensions.k8s.io/v1/customresourcedefinitions?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.008"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/apiextensions.k8s.io/v1/customresourcedefinitions?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.016"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/apiextensions.k8s.io/v1/customresourcedefinitions?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.032"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/apiextensions.k8s.io/v1/customresourcedefinitions?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.064"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/apiextensions.k8s.io/v1/customresourcedefinitions?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.128"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/apiextensions.k8s.io/v1/customresourcedefinitions?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.256"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/apiextensions.k8s.io/v1/customresourcedefinitions?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.512"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/apiextensions.k8s.io/v1/customresourcedefinitions?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="+Inf"} 1 +rest_client_rate_limiter_duration_seconds_sum{url="https://10.100.0.1:443/apis/apiextensions.k8s.io/v1/customresourcedefinitions?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET"} 1.638e-06 +rest_client_rate_limiter_duration_seconds_count{url="https://10.100.0.1:443/apis/apiextensions.k8s.io/v1/customresourcedefinitions?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/kubevirts?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.001"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/kubevirts?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.002"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/kubevirts?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.004"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/kubevirts?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.008"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/kubevirts?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.016"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/kubevirts?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.032"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/kubevirts?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.064"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/kubevirts?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.128"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/kubevirts?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.256"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/kubevirts?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.512"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/kubevirts?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="+Inf"} 1 +rest_client_rate_limiter_duration_seconds_sum{url="https://10.100.0.1:443/apis/kubevirt.io/v1/kubevirts?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET"} 1.368e-06 +rest_client_rate_limiter_duration_seconds_count{url="https://10.100.0.1:443/apis/kubevirt.io/v1/kubevirts?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/namespaces/%7Bnamespace%7D/virtualmachineinstances/%7Bname%7D",verb="PUT",le="0.001"} 20 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/namespaces/%7Bnamespace%7D/virtualmachineinstances/%7Bname%7D",verb="PUT",le="0.002"} 20 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/namespaces/%7Bnamespace%7D/virtualmachineinstances/%7Bname%7D",verb="PUT",le="0.004"} 20 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/namespaces/%7Bnamespace%7D/virtualmachineinstances/%7Bname%7D",verb="PUT",le="0.008"} 20 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/namespaces/%7Bnamespace%7D/virtualmachineinstances/%7Bname%7D",verb="PUT",le="0.016"} 20 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/namespaces/%7Bnamespace%7D/virtualmachineinstances/%7Bname%7D",verb="PUT",le="0.032"} 20 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/namespaces/%7Bnamespace%7D/virtualmachineinstances/%7Bname%7D",verb="PUT",le="0.064"} 20 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/namespaces/%7Bnamespace%7D/virtualmachineinstances/%7Bname%7D",verb="PUT",le="0.128"} 20 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/namespaces/%7Bnamespace%7D/virtualmachineinstances/%7Bname%7D",verb="PUT",le="0.256"} 20 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/namespaces/%7Bnamespace%7D/virtualmachineinstances/%7Bname%7D",verb="PUT",le="0.512"} 20 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/namespaces/%7Bnamespace%7D/virtualmachineinstances/%7Bname%7D",verb="PUT",le="+Inf"} 20 +rest_client_rate_limiter_duration_seconds_sum{url="https://10.100.0.1:443/apis/kubevirt.io/v1/namespaces/%7Bnamespace%7D/virtualmachineinstances/%7Bname%7D",verb="PUT"} 6.943800000000001e-05 +rest_client_rate_limiter_duration_seconds_count{url="https://10.100.0.1:443/apis/kubevirt.io/v1/namespaces/%7Bnamespace%7D/virtualmachineinstances/%7Bname%7D",verb="PUT"} 20 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/virtualmachineinstances?labelSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.001"} 2 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/virtualmachineinstances?labelSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.002"} 2 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/virtualmachineinstances?labelSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.004"} 2 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/virtualmachineinstances?labelSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.008"} 2 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/virtualmachineinstances?labelSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.016"} 2 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/virtualmachineinstances?labelSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.032"} 2 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/virtualmachineinstances?labelSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.064"} 2 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/virtualmachineinstances?labelSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.128"} 2 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/virtualmachineinstances?labelSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.256"} 2 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/virtualmachineinstances?labelSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.512"} 2 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/virtualmachineinstances?labelSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="+Inf"} 2 +rest_client_rate_limiter_duration_seconds_sum{url="https://10.100.0.1:443/apis/kubevirt.io/v1/virtualmachineinstances?labelSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET"} 4.5160000000000005e-06 +rest_client_rate_limiter_duration_seconds_count{url="https://10.100.0.1:443/apis/kubevirt.io/v1/virtualmachineinstances?labelSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET"} 2 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/version",verb="GET",le="0.001"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/version",verb="GET",le="0.002"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/version",verb="GET",le="0.004"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/version",verb="GET",le="0.008"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/version",verb="GET",le="0.016"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/version",verb="GET",le="0.032"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/version",verb="GET",le="0.064"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/version",verb="GET",le="0.128"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/version",verb="GET",le="0.256"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/version",verb="GET",le="0.512"} 1 +rest_client_rate_limiter_duration_seconds_bucket{url="https://10.100.0.1:443/version",verb="GET",le="+Inf"} 1 +rest_client_rate_limiter_duration_seconds_sum{url="https://10.100.0.1:443/version",verb="GET"} 2.322e-06 +rest_client_rate_limiter_duration_seconds_count{url="https://10.100.0.1:443/version",verb="GET"} 1 +# HELP rest_client_request_latency_seconds Request latency in seconds. Broken down by verb and URL. +# TYPE rest_client_request_latency_seconds histogram +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/configmaps?fieldSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.005"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/configmaps?fieldSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.025"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/configmaps?fieldSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.05"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/configmaps?fieldSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.1"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/configmaps?fieldSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.2"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/configmaps?fieldSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.4"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/configmaps?fieldSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.6"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/configmaps?fieldSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.8"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/configmaps?fieldSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="1"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/configmaps?fieldSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="1.25"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/configmaps?fieldSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="1.5"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/configmaps?fieldSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="2"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/configmaps?fieldSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="3"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/configmaps?fieldSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="4"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/configmaps?fieldSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="5"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/configmaps?fieldSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="6"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/configmaps?fieldSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="8"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/configmaps?fieldSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="10"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/configmaps?fieldSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="15"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/configmaps?fieldSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="20"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/configmaps?fieldSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="30"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/configmaps?fieldSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="45"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/configmaps?fieldSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="60"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/configmaps?fieldSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="+Inf"} 1 +rest_client_request_latency_seconds_sum{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/configmaps?fieldSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET"} 0.002243092 +rest_client_request_latency_seconds_count{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/configmaps?fieldSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/events",verb="POST",le="0.005"} 0 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/events",verb="POST",le="0.025"} 7 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/events",verb="POST",le="0.05"} 8 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/events",verb="POST",le="0.1"} 8 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/events",verb="POST",le="0.2"} 8 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/events",verb="POST",le="0.4"} 8 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/events",verb="POST",le="0.6"} 8 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/events",verb="POST",le="0.8"} 8 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/events",verb="POST",le="1"} 8 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/events",verb="POST",le="1.25"} 8 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/events",verb="POST",le="1.5"} 8 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/events",verb="POST",le="2"} 8 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/events",verb="POST",le="3"} 8 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/events",verb="POST",le="4"} 8 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/events",verb="POST",le="5"} 8 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/events",verb="POST",le="6"} 8 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/events",verb="POST",le="8"} 8 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/events",verb="POST",le="10"} 8 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/events",verb="POST",le="15"} 8 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/events",verb="POST",le="20"} 8 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/events",verb="POST",le="30"} 8 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/events",verb="POST",le="45"} 8 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/events",verb="POST",le="60"} 8 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/events",verb="POST",le="+Inf"} 8 +rest_client_request_latency_seconds_sum{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/events",verb="POST"} 0.125952513 +rest_client_request_latency_seconds_count{url="https://10.100.0.1:443/api/v1/namespaces/%7Bnamespace%7D/events",verb="POST"} 8 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="GET",le="0.005"} 74 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="GET",le="0.025"} 5419 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="GET",le="0.05"} 5469 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="GET",le="0.1"} 5485 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="GET",le="0.2"} 5496 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="GET",le="0.4"} 5499 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="GET",le="0.6"} 5499 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="GET",le="0.8"} 5499 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="GET",le="1"} 5499 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="GET",le="1.25"} 5499 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="GET",le="1.5"} 5499 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="GET",le="2"} 5499 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="GET",le="3"} 5499 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="GET",le="4"} 5499 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="GET",le="5"} 5499 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="GET",le="6"} 5499 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="GET",le="8"} 5499 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="GET",le="10"} 5499 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="GET",le="15"} 5499 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="GET",le="20"} 5499 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="GET",le="30"} 5499 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="GET",le="45"} 5499 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="GET",le="60"} 5499 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="GET",le="+Inf"} 5499 +rest_client_request_latency_seconds_sum{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="GET"} 50.253009939 +rest_client_request_latency_seconds_count{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="GET"} 5499 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="PATCH",le="0.005"} 0 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="PATCH",le="0.025"} 1582 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="PATCH",le="0.05"} 2267 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="PATCH",le="0.1"} 2340 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="PATCH",le="0.2"} 2344 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="PATCH",le="0.4"} 2347 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="PATCH",le="0.6"} 2347 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="PATCH",le="0.8"} 2347 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="PATCH",le="1"} 2347 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="PATCH",le="1.25"} 2347 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="PATCH",le="1.5"} 2347 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="PATCH",le="2"} 2347 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="PATCH",le="3"} 2347 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="PATCH",le="4"} 2347 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="PATCH",le="5"} 2347 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="PATCH",le="6"} 2347 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="PATCH",le="8"} 2347 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="PATCH",le="10"} 2347 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="PATCH",le="15"} 2347 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="PATCH",le="20"} 2347 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="PATCH",le="30"} 2347 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="PATCH",le="45"} 2347 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="PATCH",le="60"} 2347 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="PATCH",le="+Inf"} 2347 +rest_client_request_latency_seconds_sum{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="PATCH"} 60.20290004700005 +rest_client_request_latency_seconds_count{url="https://10.100.0.1:443/api/v1/nodes/%7Bname%7D",verb="PATCH"} 2347 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/apiextensions.k8s.io/v1/customresourcedefinitions?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.005"} 0 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/apiextensions.k8s.io/v1/customresourcedefinitions?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.025"} 0 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/apiextensions.k8s.io/v1/customresourcedefinitions?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.05"} 0 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/apiextensions.k8s.io/v1/customresourcedefinitions?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.1"} 0 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/apiextensions.k8s.io/v1/customresourcedefinitions?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.2"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/apiextensions.k8s.io/v1/customresourcedefinitions?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.4"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/apiextensions.k8s.io/v1/customresourcedefinitions?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.6"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/apiextensions.k8s.io/v1/customresourcedefinitions?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.8"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/apiextensions.k8s.io/v1/customresourcedefinitions?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="1"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/apiextensions.k8s.io/v1/customresourcedefinitions?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="1.25"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/apiextensions.k8s.io/v1/customresourcedefinitions?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="1.5"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/apiextensions.k8s.io/v1/customresourcedefinitions?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="2"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/apiextensions.k8s.io/v1/customresourcedefinitions?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="3"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/apiextensions.k8s.io/v1/customresourcedefinitions?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="4"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/apiextensions.k8s.io/v1/customresourcedefinitions?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="5"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/apiextensions.k8s.io/v1/customresourcedefinitions?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="6"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/apiextensions.k8s.io/v1/customresourcedefinitions?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="8"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/apiextensions.k8s.io/v1/customresourcedefinitions?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="10"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/apiextensions.k8s.io/v1/customresourcedefinitions?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="15"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/apiextensions.k8s.io/v1/customresourcedefinitions?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="20"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/apiextensions.k8s.io/v1/customresourcedefinitions?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="30"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/apiextensions.k8s.io/v1/customresourcedefinitions?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="45"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/apiextensions.k8s.io/v1/customresourcedefinitions?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="60"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/apiextensions.k8s.io/v1/customresourcedefinitions?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="+Inf"} 1 +rest_client_request_latency_seconds_sum{url="https://10.100.0.1:443/apis/apiextensions.k8s.io/v1/customresourcedefinitions?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET"} 0.14079302 +rest_client_request_latency_seconds_count{url="https://10.100.0.1:443/apis/apiextensions.k8s.io/v1/customresourcedefinitions?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/kubevirts?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.005"} 0 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/kubevirts?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.025"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/kubevirts?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.05"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/kubevirts?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.1"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/kubevirts?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.2"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/kubevirts?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.4"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/kubevirts?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.6"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/kubevirts?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.8"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/kubevirts?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="1"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/kubevirts?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="1.25"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/kubevirts?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="1.5"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/kubevirts?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="2"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/kubevirts?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="3"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/kubevirts?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="4"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/kubevirts?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="5"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/kubevirts?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="6"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/kubevirts?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="8"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/kubevirts?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="10"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/kubevirts?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="15"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/kubevirts?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="20"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/kubevirts?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="30"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/kubevirts?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="45"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/kubevirts?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="60"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/kubevirts?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="+Inf"} 1 +rest_client_request_latency_seconds_sum{url="https://10.100.0.1:443/apis/kubevirt.io/v1/kubevirts?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET"} 0.012085376 +rest_client_request_latency_seconds_count{url="https://10.100.0.1:443/apis/kubevirt.io/v1/kubevirts?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/namespaces/%7Bnamespace%7D/virtualmachineinstances/%7Bname%7D",verb="PUT",le="0.005"} 0 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/namespaces/%7Bnamespace%7D/virtualmachineinstances/%7Bname%7D",verb="PUT",le="0.025"} 9 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/namespaces/%7Bnamespace%7D/virtualmachineinstances/%7Bname%7D",verb="PUT",le="0.05"} 19 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/namespaces/%7Bnamespace%7D/virtualmachineinstances/%7Bname%7D",verb="PUT",le="0.1"} 20 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/namespaces/%7Bnamespace%7D/virtualmachineinstances/%7Bname%7D",verb="PUT",le="0.2"} 20 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/namespaces/%7Bnamespace%7D/virtualmachineinstances/%7Bname%7D",verb="PUT",le="0.4"} 20 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/namespaces/%7Bnamespace%7D/virtualmachineinstances/%7Bname%7D",verb="PUT",le="0.6"} 20 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/namespaces/%7Bnamespace%7D/virtualmachineinstances/%7Bname%7D",verb="PUT",le="0.8"} 20 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/namespaces/%7Bnamespace%7D/virtualmachineinstances/%7Bname%7D",verb="PUT",le="1"} 20 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/namespaces/%7Bnamespace%7D/virtualmachineinstances/%7Bname%7D",verb="PUT",le="1.25"} 20 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/namespaces/%7Bnamespace%7D/virtualmachineinstances/%7Bname%7D",verb="PUT",le="1.5"} 20 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/namespaces/%7Bnamespace%7D/virtualmachineinstances/%7Bname%7D",verb="PUT",le="2"} 20 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/namespaces/%7Bnamespace%7D/virtualmachineinstances/%7Bname%7D",verb="PUT",le="3"} 20 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/namespaces/%7Bnamespace%7D/virtualmachineinstances/%7Bname%7D",verb="PUT",le="4"} 20 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/namespaces/%7Bnamespace%7D/virtualmachineinstances/%7Bname%7D",verb="PUT",le="5"} 20 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/namespaces/%7Bnamespace%7D/virtualmachineinstances/%7Bname%7D",verb="PUT",le="6"} 20 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/namespaces/%7Bnamespace%7D/virtualmachineinstances/%7Bname%7D",verb="PUT",le="8"} 20 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/namespaces/%7Bnamespace%7D/virtualmachineinstances/%7Bname%7D",verb="PUT",le="10"} 20 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/namespaces/%7Bnamespace%7D/virtualmachineinstances/%7Bname%7D",verb="PUT",le="15"} 20 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/namespaces/%7Bnamespace%7D/virtualmachineinstances/%7Bname%7D",verb="PUT",le="20"} 20 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/namespaces/%7Bnamespace%7D/virtualmachineinstances/%7Bname%7D",verb="PUT",le="30"} 20 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/namespaces/%7Bnamespace%7D/virtualmachineinstances/%7Bname%7D",verb="PUT",le="45"} 20 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/namespaces/%7Bnamespace%7D/virtualmachineinstances/%7Bname%7D",verb="PUT",le="60"} 20 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/namespaces/%7Bnamespace%7D/virtualmachineinstances/%7Bname%7D",verb="PUT",le="+Inf"} 20 +rest_client_request_latency_seconds_sum{url="https://10.100.0.1:443/apis/kubevirt.io/v1/namespaces/%7Bnamespace%7D/virtualmachineinstances/%7Bname%7D",verb="PUT"} 0.526331432 +rest_client_request_latency_seconds_count{url="https://10.100.0.1:443/apis/kubevirt.io/v1/namespaces/%7Bnamespace%7D/virtualmachineinstances/%7Bname%7D",verb="PUT"} 20 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/virtualmachineinstances?labelSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.005"} 0 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/virtualmachineinstances?labelSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.025"} 2 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/virtualmachineinstances?labelSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.05"} 2 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/virtualmachineinstances?labelSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.1"} 2 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/virtualmachineinstances?labelSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.2"} 2 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/virtualmachineinstances?labelSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.4"} 2 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/virtualmachineinstances?labelSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.6"} 2 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/virtualmachineinstances?labelSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="0.8"} 2 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/virtualmachineinstances?labelSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="1"} 2 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/virtualmachineinstances?labelSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="1.25"} 2 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/virtualmachineinstances?labelSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="1.5"} 2 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/virtualmachineinstances?labelSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="2"} 2 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/virtualmachineinstances?labelSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="3"} 2 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/virtualmachineinstances?labelSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="4"} 2 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/virtualmachineinstances?labelSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="5"} 2 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/virtualmachineinstances?labelSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="6"} 2 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/virtualmachineinstances?labelSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="8"} 2 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/virtualmachineinstances?labelSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="10"} 2 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/virtualmachineinstances?labelSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="15"} 2 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/virtualmachineinstances?labelSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="20"} 2 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/virtualmachineinstances?labelSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="30"} 2 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/virtualmachineinstances?labelSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="45"} 2 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/virtualmachineinstances?labelSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="60"} 2 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/apis/kubevirt.io/v1/virtualmachineinstances?labelSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET",le="+Inf"} 2 +rest_client_request_latency_seconds_sum{url="https://10.100.0.1:443/apis/kubevirt.io/v1/virtualmachineinstances?labelSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET"} 0.021060896000000003 +rest_client_request_latency_seconds_count{url="https://10.100.0.1:443/apis/kubevirt.io/v1/virtualmachineinstances?labelSelector=%7Bvalue%7D&limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D",verb="GET"} 2 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/version",verb="GET",le="0.005"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/version",verb="GET",le="0.025"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/version",verb="GET",le="0.05"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/version",verb="GET",le="0.1"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/version",verb="GET",le="0.2"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/version",verb="GET",le="0.4"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/version",verb="GET",le="0.6"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/version",verb="GET",le="0.8"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/version",verb="GET",le="1"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/version",verb="GET",le="1.25"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/version",verb="GET",le="1.5"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/version",verb="GET",le="2"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/version",verb="GET",le="3"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/version",verb="GET",le="4"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/version",verb="GET",le="5"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/version",verb="GET",le="6"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/version",verb="GET",le="8"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/version",verb="GET",le="10"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/version",verb="GET",le="15"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/version",verb="GET",le="20"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/version",verb="GET",le="30"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/version",verb="GET",le="45"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/version",verb="GET",le="60"} 1 +rest_client_request_latency_seconds_bucket{url="https://10.100.0.1:443/version",verb="GET",le="+Inf"} 1 +rest_client_request_latency_seconds_sum{url="https://10.100.0.1:443/version",verb="GET"} 0.002780404 +rest_client_request_latency_seconds_count{url="https://10.100.0.1:443/version",verb="GET"} 1 +# HELP rest_client_requests_total Number of HTTP requests, partitioned by status code, method, and host. +# TYPE rest_client_requests_total counter +rest_client_requests_total{code="200",host="10.100.0.1:443",method="GET",resource="configmaps",verb="LIST"} 511 +rest_client_requests_total{code="200",host="10.100.0.1:443",method="GET",resource="customresourcedefinitions",verb="LIST"} 499 +rest_client_requests_total{code="200",host="10.100.0.1:443",method="GET",resource="kubevirts",verb="LIST"} 503 +rest_client_requests_total{code="200",host="10.100.0.1:443",method="GET",resource="nodes",verb="GET"} 5499 +rest_client_requests_total{code="200",host="10.100.0.1:443",method="GET",resource="none",verb="none"} 1 +rest_client_requests_total{code="200",host="10.100.0.1:443",method="GET",resource="virtualmachineinstances",verb="LIST"} 998 +rest_client_requests_total{code="200",host="10.100.0.1:443",method="PATCH",resource="nodes",verb="PATCH"} 2347 +rest_client_requests_total{code="200",host="10.100.0.1:443",method="PUT",resource="virtualmachineinstances",verb="UPDATE"} 16 +rest_client_requests_total{code="201",host="10.100.0.1:443",method="POST",resource="events",verb="CREATE"} 8 +rest_client_requests_total{code="409",host="10.100.0.1:443",method="PUT",resource="virtualmachineinstances",verb="UPDATE"} 4 diff --git a/kubevirt_handler/tests/kind/kubevirt-cr.yaml b/kubevirt_handler/tests/kind/kubevirt-cr.yaml new file mode 100644 index 0000000000000..32db65bee1818 --- /dev/null +++ b/kubevirt_handler/tests/kind/kubevirt-cr.yaml @@ -0,0 +1,14 @@ +--- +apiVersion: kubevirt.io/v1 +kind: KubeVirt +metadata: + name: kubevirt + namespace: kubevirt +spec: + certificateRotateStrategy: {} + configuration: + developerConfiguration: + featureGates: [] + customizeComponents: {} + imagePullPolicy: IfNotPresent + workloadUpdateStrategy: {} diff --git a/kubevirt_handler/tests/kind/kubevirt-operator.yaml b/kubevirt_handler/tests/kind/kubevirt-operator.yaml new file mode 100644 index 0000000000000..bd650b81c21c3 --- /dev/null +++ b/kubevirt_handler/tests/kind/kubevirt-operator.yaml @@ -0,0 +1,7574 @@ +--- +apiVersion: v1 +kind: Namespace +metadata: + labels: + kubevirt.io: "" + pod-security.kubernetes.io/enforce: "privileged" + name: kubevirt +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + labels: + operator.kubevirt.io: "" + name: kubevirts.kubevirt.io +spec: + group: kubevirt.io + names: + categories: + - all + kind: KubeVirt + plural: kubevirts + shortNames: + - kv + - kvs + singular: kubevirt + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + - jsonPath: .status.phase + name: Phase + type: string + name: v1 + schema: + openAPIV3Schema: + description: KubeVirt represents the object deploying all KubeVirt resources + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + properties: + certificateRotateStrategy: + properties: + selfSigned: + properties: + ca: + description: CA configuration CA certs are kept in the CA + bundle as long as they are valid + properties: + duration: + description: The requested 'duration' (i.e. lifetime) + of the Certificate. + type: string + renewBefore: + description: The amount of time before the currently issued + certificate's "notAfter" time that we will begin to + attempt to renew the certificate. + type: string + type: object + caOverlapInterval: + description: Deprecated. Use CA.Duration and CA.RenewBefore + instead + type: string + caRotateInterval: + description: Deprecated. Use CA.Duration instead + type: string + certRotateInterval: + description: Deprecated. Use Server.Duration instead + type: string + server: + description: Server configuration Certs are rotated and discarded + properties: + duration: + description: The requested 'duration' (i.e. lifetime) + of the Certificate. + type: string + renewBefore: + description: The amount of time before the currently issued + certificate's "notAfter" time that we will begin to + attempt to renew the certificate. + type: string + type: object + type: object + type: object + configuration: + description: holds kubevirt configurations. same as the virt-configMap + properties: + additionalGuestMemoryOverheadRatio: + description: AdditionalGuestMemoryOverheadRatio can be used to + increase the virtualization infrastructure overhead. This is + useful, since the calculation of this overhead is not accurate + and cannot be entirely known in advance. The ratio that is being + set determines by which factor to increase the overhead calculated + by KubeVirt. A higher ratio means that the VMs would be less + compromised by node pressures, but would mean that fewer VMs + could be scheduled to a node. If not set, the default is 1. + type: string + apiConfiguration: + description: ReloadableComponentConfiguration holds all generic + k8s configuration options which can be reloaded by components + without requiring a restart. + properties: + restClient: + description: RestClient can be used to tune certain aspects + of the k8s client in use. + properties: + rateLimiter: + description: RateLimiter allows selecting and configuring + different rate limiters for the k8s client. + properties: + tokenBucketRateLimiter: + properties: + burst: + description: Maximum burst for throttle. If it's + zero, the component default will be used + type: integer + qps: + description: QPS indicates the maximum QPS to + the apiserver from this client. If it's zero, + the component default will be used + type: number + required: + - burst + - qps + type: object + type: object + type: object + type: object + architectureConfiguration: + properties: + amd64: + properties: + emulatedMachines: + items: + type: string + type: array + x-kubernetes-list-type: atomic + machineType: + type: string + ovmfPath: + type: string + type: object + arm64: + properties: + emulatedMachines: + items: + type: string + type: array + x-kubernetes-list-type: atomic + machineType: + type: string + ovmfPath: + type: string + type: object + defaultArchitecture: + type: string + ppc64le: + properties: + emulatedMachines: + items: + type: string + type: array + x-kubernetes-list-type: atomic + machineType: + type: string + ovmfPath: + type: string + type: object + type: object + autoCPULimitNamespaceLabelSelector: + description: When set, AutoCPULimitNamespaceLabelSelector will + set a CPU limit on virt-launcher for VMIs running inside namespaces + that match the label selector. The CPU limit will equal the + number of requested vCPUs. This setting does not apply to VMIs + with dedicated CPUs. + properties: + matchExpressions: + description: matchExpressions is a list of label selector + requirements. The requirements are ANDed. + items: + description: A label selector requirement is a selector + that contains values, a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key that the selector + applies to. + type: string + operator: + description: operator represents a key's relationship + to a set of values. Valid operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. If + the operator is In or NotIn, the values array must + be non-empty. If the operator is Exists or DoesNotExist, + the values array must be empty. This array is replaced + during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} pairs. A + single {key,value} in the matchLabels map is equivalent + to an element of matchExpressions, whose key field is "key", + the operator is "In", and the values array contains only + "value". The requirements are ANDed. + type: object + type: object + controllerConfiguration: + description: ReloadableComponentConfiguration holds all generic + k8s configuration options which can be reloaded by components + without requiring a restart. + properties: + restClient: + description: RestClient can be used to tune certain aspects + of the k8s client in use. + properties: + rateLimiter: + description: RateLimiter allows selecting and configuring + different rate limiters for the k8s client. + properties: + tokenBucketRateLimiter: + properties: + burst: + description: Maximum burst for throttle. If it's + zero, the component default will be used + type: integer + qps: + description: QPS indicates the maximum QPS to + the apiserver from this client. If it's zero, + the component default will be used + type: number + required: + - burst + - qps + type: object + type: object + type: object + type: object + cpuModel: + type: string + cpuRequest: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + defaultRuntimeClass: + type: string + developerConfiguration: + description: DeveloperConfiguration holds developer options + properties: + cpuAllocationRatio: + description: 'For each requested virtual CPU, CPUAllocationRatio + defines how much physical CPU to request per VMI from the + hosting node. The value is in fraction of a CPU thread (or + core on non-hyperthreaded nodes). For example, a value of + 1 means 1 physical CPU thread per VMI CPU thread. A value + of 100 would be 1% of a physical thread allocated for each + requested VMI thread. This option has no effect on VMIs + that request dedicated CPUs. More information at: https://kubevirt.io/user-guide/operations/node_overcommit/#node-cpu-allocation-ratio + Defaults to 10' + type: integer + diskVerification: + description: DiskVerification holds container disks verification + limits + properties: + memoryLimit: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + required: + - memoryLimit + type: object + featureGates: + description: FeatureGates is the list of experimental features + to enable. Defaults to none + items: + type: string + type: array + logVerbosity: + description: LogVerbosity sets log verbosity level of various + components + properties: + nodeVerbosity: + additionalProperties: + type: integer + description: NodeVerbosity represents a map of nodes with + a specific verbosity level + type: object + virtAPI: + type: integer + virtController: + type: integer + virtHandler: + type: integer + virtLauncher: + type: integer + virtOperator: + type: integer + type: object + memoryOvercommit: + description: MemoryOvercommit is the percentage of memory + we want to give VMIs compared to the amount given to its + parent pod (virt-launcher). For example, a value of 102 + means the VMI will "see" 2% more memory than its parent + pod. Values under 100 are effectively "undercommits". Overcommits + can lead to memory exhaustion, which in turn can lead to + crashes. Use carefully. Defaults to 100 + type: integer + minimumClusterTSCFrequency: + description: Allow overriding the automatically determined + minimum TSC frequency of the cluster and fixate the minimum + to this frequency. + format: int64 + type: integer + minimumReservePVCBytes: + description: MinimumReservePVCBytes is the amount of space, + in bytes, to leave unused on disks. Defaults to 131072 (128KiB) + format: int64 + type: integer + nodeSelectors: + additionalProperties: + type: string + description: NodeSelectors allows restricting VMI creation + to nodes that match a set of labels. Defaults to none + type: object + pvcTolerateLessSpaceUpToPercent: + description: LessPVCSpaceToleration determines how much smaller, + in percentage, disk PVCs are allowed to be compared to the + requested size (to account for various overheads). Defaults + to 10 + type: integer + useEmulation: + description: UseEmulation can be set to true to allow fallback + to software emulation in case hardware-assisted emulation + is not available. Defaults to false + type: boolean + type: object + emulatedMachines: + description: Deprecated. Use architectureConfiguration instead. + items: + type: string + type: array + evictionStrategy: + description: EvictionStrategy defines at the cluster level if + the VirtualMachineInstance should be migrated instead of shut-off + in case of a node drain. If the VirtualMachineInstance specific + field is set it overrides the cluster level one. + type: string + handlerConfiguration: + description: ReloadableComponentConfiguration holds all generic + k8s configuration options which can be reloaded by components + without requiring a restart. + properties: + restClient: + description: RestClient can be used to tune certain aspects + of the k8s client in use. + properties: + rateLimiter: + description: RateLimiter allows selecting and configuring + different rate limiters for the k8s client. + properties: + tokenBucketRateLimiter: + properties: + burst: + description: Maximum burst for throttle. If it's + zero, the component default will be used + type: integer + qps: + description: QPS indicates the maximum QPS to + the apiserver from this client. If it's zero, + the component default will be used + type: number + required: + - burst + - qps + type: object + type: object + type: object + type: object + imagePullPolicy: + description: PullPolicy describes a policy for if/when to pull + a container image + type: string + ksmConfiguration: + description: KSMConfiguration holds the information regarding + the enabling the KSM in the nodes (if available). + properties: + nodeLabelSelector: + description: NodeLabelSelector is a selector that filters + in which nodes the KSM will be enabled. Empty NodeLabelSelector + will enable ksm for every node. + properties: + matchExpressions: + description: matchExpressions is a list of label selector + requirements. The requirements are ANDed. + items: + description: A label selector requirement is a selector + that contains values, a key, and an operator that + relates the key and values. + properties: + key: + description: key is the label key that the selector + applies to. + type: string + operator: + description: operator represents a key's relationship + to a set of values. Valid operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. + If the operator is In or NotIn, the values array + must be non-empty. If the operator is Exists or + DoesNotExist, the values array must be empty. + This array is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} pairs. + A single {key,value} in the matchLabels map is equivalent + to an element of matchExpressions, whose key field is + "key", the operator is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + type: object + liveUpdateConfiguration: + description: LiveUpdateConfiguration holds defaults for live update + features + properties: + maxCpuSockets: + description: MaxCpuSockets holds the maximum amount of sockets + that can be hotplugged + format: int32 + type: integer + maxGuest: + anyOf: + - type: integer + - type: string + description: MaxGuest defines the maximum amount memory that + can be allocated to the guest using hotplug. + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + maxHotplugRatio: + description: 'MaxHotplugRatio is the ratio used to define + the max amount of a hotplug resource that can be made available + to a VM when the specific Max* setting is not defined (MaxCpuSockets, + MaxGuest) Example: VM is configured with 512Mi of guest + memory, if MaxGuest is not defined and MaxHotplugRatio is + 2 then MaxGuest = 1Gi defaults to 4' + format: int32 + type: integer + type: object + machineType: + description: Deprecated. Use architectureConfiguration instead. + type: string + mediatedDevicesConfiguration: + description: MediatedDevicesConfiguration holds information about + MDEV types to be defined, if available + properties: + mediatedDeviceTypes: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mediatedDevicesTypes: + description: Deprecated. Use mediatedDeviceTypes instead. + items: + type: string + type: array + x-kubernetes-list-type: atomic + nodeMediatedDeviceTypes: + items: + description: NodeMediatedDeviceTypesConfig holds information + about MDEV types to be defined in a specific node that + matches the NodeSelector field. + properties: + mediatedDeviceTypes: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mediatedDevicesTypes: + description: Deprecated. Use mediatedDeviceTypes instead. + items: + type: string + type: array + x-kubernetes-list-type: atomic + nodeSelector: + additionalProperties: + type: string + description: 'NodeSelector is a selector which must + be true for the vmi to fit on a node. Selector which + must match a node''s labels for the vmi to be scheduled + on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/' + type: object + required: + - nodeSelector + type: object + type: array + x-kubernetes-list-type: atomic + type: object + memBalloonStatsPeriod: + format: int32 + type: integer + migrations: + description: MigrationConfiguration holds migration options. Can + be overridden for specific groups of VMs though migration policies. + Visit https://kubevirt.io/user-guide/operations/migration_policies/ + for more information. + properties: + allowAutoConverge: + description: AllowAutoConverge allows the platform to compromise + performance/availability of VMIs to guarantee successful + VMI live migrations. Defaults to false + type: boolean + allowPostCopy: + description: AllowPostCopy enables post-copy live migrations. + Such migrations allow even the busiest VMIs to successfully + live-migrate. However, events like a network failure can + cause a VMI crash. If set to true, migrations will still + start in pre-copy, but switch to post-copy when CompletionTimeoutPerGiB + triggers. Defaults to false + type: boolean + bandwidthPerMigration: + anyOf: + - type: integer + - type: string + description: BandwidthPerMigration limits the amount of network + bandwidth live migrations are allowed to use. The value + is in quantity per second. Defaults to 0 (no limit) + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + completionTimeoutPerGiB: + description: CompletionTimeoutPerGiB is the maximum number + of seconds per GiB a migration is allowed to take. If a + live-migration takes longer to migrate than this value multiplied + by the size of the VMI, the migration will be cancelled, + unless AllowPostCopy is true. Defaults to 800 + format: int64 + type: integer + disableTLS: + description: When set to true, DisableTLS will disable the + additional layer of live migration encryption provided by + KubeVirt. This is usually a bad idea. Defaults to false + type: boolean + matchSELinuxLevelOnMigration: + description: By default, the SELinux level of target virt-launcher + pods is forced to the level of the source virt-launcher. + When set to true, MatchSELinuxLevelOnMigration lets the + CRI auto-assign a random level to the target. That will + ensure the target virt-launcher doesn't share categories + with another pod on the node. However, migrations will fail + when using RWX volumes that don't automatically deal with + SELinux levels. + type: boolean + network: + description: Network is the name of the CNI network to use + for live migrations. By default, migrations go through the + pod network. + type: string + nodeDrainTaintKey: + description: 'NodeDrainTaintKey defines the taint key that + indicates a node should be drained. Note: this option relies + on the deprecated node taint feature. Default: kubevirt.io/drain' + type: string + parallelMigrationsPerCluster: + description: ParallelMigrationsPerCluster is the total number + of concurrent live migrations allowed cluster-wide. Defaults + to 5 + format: int32 + type: integer + parallelOutboundMigrationsPerNode: + description: ParallelOutboundMigrationsPerNode is the maximum + number of concurrent outgoing live migrations allowed per + node. Defaults to 2 + format: int32 + type: integer + progressTimeout: + description: ProgressTimeout is the maximum number of seconds + a live migration is allowed to make no progress. Hitting + this timeout means a migration transferred 0 data for that + many seconds. The migration is then considered stuck and + therefore cancelled. Defaults to 150 + format: int64 + type: integer + unsafeMigrationOverride: + description: UnsafeMigrationOverride allows live migrations + to occur even if the compatibility check indicates the migration + will be unsafe to the guest. Defaults to false + type: boolean + type: object + minCPUModel: + type: string + network: + description: NetworkConfiguration holds network options + properties: + binding: + additionalProperties: + properties: + domainAttachmentType: + description: 'DomainAttachmentType is a standard domain + network attachment method kubevirt supports. Supported + values: "tap". The standard domain attachment can + be used instead or in addition to the sidecarImage. + version: 1alphav1' + type: string + migration: + description: 'Migration means the VM using the plugin + can be safely migrated version: 1alphav1' + properties: + method: + description: 'Method defines a pre-defined migration + methodology version: 1alphav1' + type: string + type: object + networkAttachmentDefinition: + description: 'NetworkAttachmentDefinition references + to a NetworkAttachmentDefinition CR object. Format: + , /. If namespace is not specified, + VMI namespace is assumed. version: 1alphav1' + type: string + sidecarImage: + description: 'SidecarImage references a container image + that runs in the virt-launcher pod. The sidecar handles + (libvirt) domain configuration and optional services. + version: 1alphav1' + type: string + type: object + type: object + defaultNetworkInterface: + type: string + permitBridgeInterfaceOnPodNetwork: + type: boolean + permitSlirpInterface: + type: boolean + type: object + obsoleteCPUModels: + additionalProperties: + type: boolean + type: object + ovmfPath: + description: Deprecated. Use architectureConfiguration instead. + type: string + permittedHostDevices: + description: PermittedHostDevices holds information about devices + allowed for passthrough + properties: + mediatedDevices: + items: + description: MediatedHostDevice represents a host mediated + device allowed for passthrough + properties: + externalResourceProvider: + type: boolean + mdevNameSelector: + type: string + resourceName: + type: string + required: + - mdevNameSelector + - resourceName + type: object + type: array + x-kubernetes-list-type: atomic + pciHostDevices: + items: + description: PciHostDevice represents a host PCI device + allowed for passthrough + properties: + externalResourceProvider: + description: If true, KubeVirt will leave the allocation + and monitoring to an external device plugin + type: boolean + pciVendorSelector: + description: The vendor_id:product_id tuple of the PCI + device + type: string + resourceName: + description: The name of the resource that is representing + the device. Exposed by a device plugin and requested + by VMs. Typically of the form vendor.com/product_name + type: string + required: + - pciVendorSelector + - resourceName + type: object + type: array + x-kubernetes-list-type: atomic + usb: + items: + properties: + externalResourceProvider: + description: If true, KubeVirt will leave the allocation + and monitoring to an external device plugin + type: boolean + resourceName: + description: 'Identifies the list of USB host devices. + e.g: kubevirt.io/storage, kubevirt.io/bootable-usb, + etc' + type: string + selectors: + items: + properties: + product: + type: string + vendor: + type: string + required: + - product + - vendor + type: object + type: array + x-kubernetes-list-type: atomic + required: + - resourceName + type: object + type: array + x-kubernetes-list-type: atomic + type: object + seccompConfiguration: + description: SeccompConfiguration holds Seccomp configuration + for KubeVirt components + properties: + virtualMachineInstanceProfile: + description: VirtualMachineInstanceProfile defines what profile + should be used with virt-launcher. Defaults to none + properties: + customProfile: + description: CustomProfile allows to request arbitrary + profile for virt-launcher + properties: + localhostProfile: + type: string + runtimeDefaultProfile: + type: boolean + type: object + type: object + type: object + selinuxLauncherType: + type: string + smbios: + properties: + family: + type: string + manufacturer: + type: string + product: + type: string + sku: + type: string + version: + type: string + type: object + supportContainerResources: + description: SupportContainerResources specifies the resource + requirements for various types of supporting containers such + as container disks/virtiofs/sidecars and hotplug attachment + pods. If omitted a sensible default will be supplied. + items: + description: SupportContainerResources are used to specify the + cpu/memory request and limits for the containers that support + various features of Virtual Machines. These containers are + usually idle and don't require a lot of memory or cpu. + properties: + resources: + description: ResourceRequirements describes the compute + resource requirements. + properties: + claims: + description: "Claims lists the names of resources, defined + in spec.resourceClaims, that are used by this container. + \n This is an alpha field and requires enabling the + DynamicResourceAllocation feature gate. \n This field + is immutable. It can only be set for containers." + items: + description: ResourceClaim references one entry in + PodSpec.ResourceClaims. + properties: + name: + description: Name must match the name of one entry + in pod.spec.resourceClaims of the Pod where + this field is used. It makes that resource available + inside a container. + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes the maximum amount of + compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Requests describes the minimum amount + of compute resources required. If Requests is omitted + for a container, it defaults to Limits if that is + explicitly specified, otherwise to an implementation-defined + value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + type: + type: string + required: + - resources + - type + type: object + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + supportedGuestAgentVersions: + description: deprecated + items: + type: string + type: array + tlsConfiguration: + description: TLSConfiguration holds TLS options + properties: + ciphers: + items: + type: string + type: array + x-kubernetes-list-type: set + minTLSVersion: + description: "MinTLSVersion is a way to specify the minimum + protocol version that is acceptable for TLS connections. + Protocol versions are based on the following most common + TLS configurations: \n https://ssl-config.mozilla.org/ + \n Note that SSLv3.0 is not a supported protocol version + due to well known vulnerabilities such as POODLE: https://en.wikipedia.org/wiki/POODLE" + enum: + - VersionTLS10 + - VersionTLS11 + - VersionTLS12 + - VersionTLS13 + type: string + type: object + virtualMachineInstancesPerNode: + type: integer + virtualMachineOptions: + description: VirtualMachineOptions holds the cluster level information + regarding the virtual machine. + properties: + disableFreePageReporting: + description: DisableFreePageReporting disable the free page + reporting of memory balloon device https://libvirt.org/formatdomain.html#memory-balloon-device. + This will have effect only if AutoattachMemBalloon is not + false and the vmi is not requesting any high performance + feature (dedicatedCPU/realtime/hugePages), in which free + page reporting is always disabled. + type: object + disableSerialConsoleLog: + description: DisableSerialConsoleLog disables logging the + auto-attached default serial console. If not set, serial + console logs will be written to a file and then streamed + from a container named 'guest-console-log'. The value can + be individually overridden for each VM, not relevant if + AutoattachSerialConsole is disabled. + type: object + type: object + vmRolloutStrategy: + description: VMRolloutStrategy defines how changes to a VM object + propagate to its VMI + enum: + - Stage + - LiveUpdate + nullable: true + type: string + vmStateStorageClass: + description: VMStateStorageClass is the name of the storage class + to use for the PVCs created to preserve VM state, like TPM. + The storage class must support RWX in filesystem mode. + type: string + webhookConfiguration: + description: ReloadableComponentConfiguration holds all generic + k8s configuration options which can be reloaded by components + without requiring a restart. + properties: + restClient: + description: RestClient can be used to tune certain aspects + of the k8s client in use. + properties: + rateLimiter: + description: RateLimiter allows selecting and configuring + different rate limiters for the k8s client. + properties: + tokenBucketRateLimiter: + properties: + burst: + description: Maximum burst for throttle. If it's + zero, the component default will be used + type: integer + qps: + description: QPS indicates the maximum QPS to + the apiserver from this client. If it's zero, + the component default will be used + type: number + required: + - burst + - qps + type: object + type: object + type: object + type: object + type: object + customizeComponents: + properties: + flags: + description: Configure the value used for deployment and daemonset + resources + properties: + api: + additionalProperties: + type: string + type: object + controller: + additionalProperties: + type: string + type: object + handler: + additionalProperties: + type: string + type: object + type: object + patches: + items: + properties: + patch: + type: string + resourceName: + minLength: 1 + type: string + resourceType: + minLength: 1 + type: string + type: + type: string + required: + - patch + - resourceName + - resourceType + - type + type: object + type: array + x-kubernetes-list-type: atomic + type: object + imagePullPolicy: + description: The ImagePullPolicy to use. + type: string + imagePullSecrets: + description: The imagePullSecrets to pull the container images from + Defaults to none + items: + description: LocalObjectReference contains enough information to + let you locate the referenced object inside the same namespace. + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + type: object + type: array + x-kubernetes-list-type: atomic + imageRegistry: + description: The image registry to pull the container images from + Defaults to the same registry the operator's container image is + pulled from. + type: string + imageTag: + description: The image tag to use for the continer images installed. + Defaults to the same tag as the operator's container image. + type: string + infra: + description: selectors and tolerations that should apply to KubeVirt + infrastructure components + properties: + nodePlacement: + description: nodePlacement describes scheduling configuration + for specific KubeVirt components + properties: + affinity: + description: affinity enables pod affinity/anti-affinity placement + expanding the types of constraints that can be expressed + with nodeSelector. affinity is going to be applied to the + relevant kind of pods in parallel with nodeSelector See + https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity + properties: + nodeAffinity: + description: Describes node affinity scheduling rules + for the pod. + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule + pods to nodes that satisfy the affinity expressions + specified by this field, but it may choose a node + that violates one or more of the expressions. The + node that is most preferred is the one with the + greatest sum of weights, i.e. for each node that + meets all of the scheduling requirements (resource + request, requiredDuringScheduling affinity expressions, + etc.), compute a sum by iterating through the elements + of this field and adding "weight" to the sum if + the node matches the corresponding matchExpressions; + the node(s) with the highest sum are the most preferred. + items: + description: An empty preferred scheduling term + matches all objects with implicit weight 0 (i.e. + it's a no-op). A null preferred scheduling term + matches no objects (i.e. is also a no-op). + properties: + preference: + description: A node selector term, associated + with the corresponding weight. + properties: + matchExpressions: + description: A list of node selector requirements + by node's labels. + items: + description: A node selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that the + selector applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. + If the operator is Gt or Lt, the + values array must have a single + element, which will be interpreted + as an integer. This array is replaced + during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector requirements + by node's fields. + items: + description: A node selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that the + selector applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. + If the operator is Gt or Lt, the + values array must have a single + element, which will be interpreted + as an integer. This array is replaced + during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + description: Weight associated with matching + the corresponding nodeSelectorTerm, in the + range 1-100. + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified + by this field are not met at scheduling time, the + pod will not be scheduled onto the node. If the + affinity requirements specified by this field cease + to be met at some point during pod execution (e.g. + due to an update), the system may or may not try + to eventually evict the pod from its node. + properties: + nodeSelectorTerms: + description: Required. A list of node selector + terms. The terms are ORed. + items: + description: A null or empty node selector term + matches no objects. The requirements of them + are ANDed. The TopologySelectorTerm type implements + a subset of the NodeSelectorTerm. + properties: + matchExpressions: + description: A list of node selector requirements + by node's labels. + items: + description: A node selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that the + selector applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. + If the operator is Gt or Lt, the + values array must have a single + element, which will be interpreted + as an integer. This array is replaced + during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector requirements + by node's fields. + items: + description: A node selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that the + selector applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. + If the operator is Gt or Lt, the + values array must have a single + element, which will be interpreted + as an integer. This array is replaced + during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + description: Describes pod affinity scheduling rules (e.g. + co-locate this pod in the same node, zone, etc. as some + other pod(s)). + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule + pods to nodes that satisfy the affinity expressions + specified by this field, but it may choose a node + that violates one or more of the expressions. The + node that is most preferred is the one with the + greatest sum of weights, i.e. for each node that + meets all of the scheduling requirements (resource + request, requiredDuringScheduling affinity expressions, + etc.), compute a sum by iterating through the elements + of this field and adding "weight" to the sum if + the node has pods which matches the corresponding + podAffinityTerm; the node(s) with the highest sum + are the most preferred. + items: + description: The weights of all of the matched WeightedPodAffinityTerm + fields are added per-node to find the most preferred + node(s) + properties: + podAffinityTerm: + description: Required. A pod affinity term, + associated with the corresponding weight. + properties: + labelSelector: + description: A label query over a set of + resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The + requirements are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a set + of values. Valid operators are + In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array + of string values. If the operator + is In or NotIn, the values array + must be non-empty. If the operator + is Exists or DoesNotExist, the + values array must be empty. + This array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of + {key,value} pairs. A single {key,value} + in the matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are + ANDed. + type: object + type: object + namespaceSelector: + description: A label query over the set + of namespaces that the term applies to. + The term is applied to the union of the + namespaces selected by this field and + the ones listed in the namespaces field. + null selector and null or empty namespaces + list means "this pod's namespace". An + empty selector ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The + requirements are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a set + of values. Valid operators are + In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array + of string values. If the operator + is In or NotIn, the values array + must be non-empty. If the operator + is Exists or DoesNotExist, the + values array must be empty. + This array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of + {key,value} pairs. A single {key,value} + in the matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are + ANDed. + type: object + type: object + namespaces: + description: namespaces specifies a static + list of namespace names that the term + applies to. The term is applied to the + union of the namespaces listed in this + field and the ones selected by namespaceSelector. + null or empty namespaces list and null + namespaceSelector means "this pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affinity) + with the pods matching the labelSelector + in the specified namespaces, where co-located + is defined as running on a node whose + value of the label with key topologyKey + matches that of any node on which any + of the selected pods is running. Empty + topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + weight: + description: weight associated with matching + the corresponding podAffinityTerm, in the + range 1-100. + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified + by this field are not met at scheduling time, the + pod will not be scheduled onto the node. If the + affinity requirements specified by this field cease + to be met at some point during pod execution (e.g. + due to a pod label update), the system may or may + not try to eventually evict the pod from its node. + When there are multiple elements, the lists of nodes + corresponding to each podAffinityTerm are intersected, + i.e. all terms must be satisfied. + items: + description: Defines a set of pods (namely those + matching the labelSelector relative to the given + namespace(s)) that this pod should be co-located + (affinity) or not co-located (anti-affinity) with, + where co-located is defined as running on a node + whose value of the label with key + matches that of any node on which a pod of the + set of pods is running + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of + string values. If the operator is + In or NotIn, the values array must + be non-empty. If the operator is + Exists or DoesNotExist, the values + array must be empty. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. The term is applied + to the union of the namespaces selected by + this field and the ones listed in the namespaces + field. null selector and null or empty namespaces + list means "this pod's namespace". An empty + selector ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of + string values. If the operator is + In or NotIn, the values array must + be non-empty. If the operator is + Exists or DoesNotExist, the values + array must be empty. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + namespaces: + description: namespaces specifies a static list + of namespace names that the term applies to. + The term is applied to the union of the namespaces + listed in this field and the ones selected + by namespaceSelector. null or empty namespaces + list and null namespaceSelector means "this + pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affinity) with the + pods matching the labelSelector in the specified + namespaces, where co-located is defined as + running on a node whose value of the label + with key topologyKey matches that of any node + on which any of the selected pods is running. + Empty topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + description: Describes pod anti-affinity scheduling rules + (e.g. avoid putting this pod in the same node, zone, + etc. as some other pod(s)). + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule + pods to nodes that satisfy the anti-affinity expressions + specified by this field, but it may choose a node + that violates one or more of the expressions. The + node that is most preferred is the one with the + greatest sum of weights, i.e. for each node that + meets all of the scheduling requirements (resource + request, requiredDuringScheduling anti-affinity + expressions, etc.), compute a sum by iterating through + the elements of this field and adding "weight" to + the sum if the node has pods which matches the corresponding + podAffinityTerm; the node(s) with the highest sum + are the most preferred. + items: + description: The weights of all of the matched WeightedPodAffinityTerm + fields are added per-node to find the most preferred + node(s) + properties: + podAffinityTerm: + description: Required. A pod affinity term, + associated with the corresponding weight. + properties: + labelSelector: + description: A label query over a set of + resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The + requirements are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a set + of values. Valid operators are + In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array + of string values. If the operator + is In or NotIn, the values array + must be non-empty. If the operator + is Exists or DoesNotExist, the + values array must be empty. + This array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of + {key,value} pairs. A single {key,value} + in the matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are + ANDed. + type: object + type: object + namespaceSelector: + description: A label query over the set + of namespaces that the term applies to. + The term is applied to the union of the + namespaces selected by this field and + the ones listed in the namespaces field. + null selector and null or empty namespaces + list means "this pod's namespace". An + empty selector ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The + requirements are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a set + of values. Valid operators are + In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array + of string values. If the operator + is In or NotIn, the values array + must be non-empty. If the operator + is Exists or DoesNotExist, the + values array must be empty. + This array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of + {key,value} pairs. A single {key,value} + in the matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are + ANDed. + type: object + type: object + namespaces: + description: namespaces specifies a static + list of namespace names that the term + applies to. The term is applied to the + union of the namespaces listed in this + field and the ones selected by namespaceSelector. + null or empty namespaces list and null + namespaceSelector means "this pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affinity) + with the pods matching the labelSelector + in the specified namespaces, where co-located + is defined as running on a node whose + value of the label with key topologyKey + matches that of any node on which any + of the selected pods is running. Empty + topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + weight: + description: weight associated with matching + the corresponding podAffinityTerm, in the + range 1-100. + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the anti-affinity requirements specified + by this field are not met at scheduling time, the + pod will not be scheduled onto the node. If the + anti-affinity requirements specified by this field + cease to be met at some point during pod execution + (e.g. due to a pod label update), the system may + or may not try to eventually evict the pod from + its node. When there are multiple elements, the + lists of nodes corresponding to each podAffinityTerm + are intersected, i.e. all terms must be satisfied. + items: + description: Defines a set of pods (namely those + matching the labelSelector relative to the given + namespace(s)) that this pod should be co-located + (affinity) or not co-located (anti-affinity) with, + where co-located is defined as running on a node + whose value of the label with key + matches that of any node on which a pod of the + set of pods is running + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of + string values. If the operator is + In or NotIn, the values array must + be non-empty. If the operator is + Exists or DoesNotExist, the values + array must be empty. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. The term is applied + to the union of the namespaces selected by + this field and the ones listed in the namespaces + field. null selector and null or empty namespaces + list means "this pod's namespace". An empty + selector ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of + string values. If the operator is + In or NotIn, the values array must + be non-empty. If the operator is + Exists or DoesNotExist, the values + array must be empty. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + namespaces: + description: namespaces specifies a static list + of namespace names that the term applies to. + The term is applied to the union of the namespaces + listed in this field and the ones selected + by namespaceSelector. null or empty namespaces + list and null namespaceSelector means "this + pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affinity) with the + pods matching the labelSelector in the specified + namespaces, where co-located is defined as + running on a node whose value of the label + with key topologyKey matches that of any node + on which any of the selected pods is running. + Empty topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + nodeSelector: + additionalProperties: + type: string + description: 'nodeSelector is the node selector applied to + the relevant kind of pods It specifies a map of key-value + pairs: for the pod to be eligible to run on a node, the + node must have each of the indicated key-value pairs as + labels (it can have additional labels as well). See https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector' + type: object + tolerations: + description: tolerations is a list of tolerations applied + to the relevant kind of pods See https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ + for more info. These are additional tolerations other than + default ones. + items: + description: The pod this Toleration is attached to tolerates + any taint that matches the triple using + the matching operator . + properties: + effect: + description: Effect indicates the taint effect to match. + Empty means match all taint effects. When specified, + allowed values are NoSchedule, PreferNoSchedule and + NoExecute. + type: string + key: + description: Key is the taint key that the toleration + applies to. Empty means match all taint keys. If the + key is empty, operator must be Exists; this combination + means to match all values and all keys. + type: string + operator: + description: Operator represents a key's relationship + to the value. Valid operators are Exists and Equal. + Defaults to Equal. Exists is equivalent to wildcard + for value, so that a pod can tolerate all taints of + a particular category. + type: string + tolerationSeconds: + description: TolerationSeconds represents the period + of time the toleration (which must be of effect NoExecute, + otherwise this field is ignored) tolerates the taint. + By default, it is not set, which means tolerate the + taint forever (do not evict). Zero and negative values + will be treated as 0 (evict immediately) by the system. + format: int64 + type: integer + value: + description: Value is the taint value the toleration + matches to. If the operator is Exists, the value should + be empty, otherwise just a regular string. + type: string + type: object + type: array + type: object + replicas: + description: 'replicas indicates how many replicas should be created + for each KubeVirt infrastructure component (like virt-api or + virt-controller). Defaults to 2. WARNING: this is an advanced + feature that prevents auto-scaling for core kubevirt components. + Please use with caution!' + type: integer + type: object + monitorAccount: + description: The name of the Prometheus service account that needs + read-access to KubeVirt endpoints Defaults to prometheus-k8s + type: string + monitorNamespace: + description: The namespace Prometheus is deployed in Defaults to openshift-monitor + type: string + productComponent: + description: Designate the apps.kubevirt.io/component label for KubeVirt + components. Useful if KubeVirt is included as part of a product. + If ProductComponent is not specified, the component label default + value is kubevirt. + type: string + productName: + description: Designate the apps.kubevirt.io/part-of label for KubeVirt + components. Useful if KubeVirt is included as part of a product. + If ProductName is not specified, the part-of label will be omitted. + type: string + productVersion: + description: Designate the apps.kubevirt.io/version label for KubeVirt + components. Useful if KubeVirt is included as part of a product. + If ProductVersion is not specified, KubeVirt's version will be used. + type: string + serviceMonitorNamespace: + description: The namespace the service monitor will be deployed When + ServiceMonitorNamespace is set, then we'll install the service monitor + object in that namespace otherwise we will use the monitoring namespace. + type: string + uninstallStrategy: + description: Specifies if kubevirt can be deleted if workloads are + still present. This is mainly a precaution to avoid accidental data + loss + type: string + workloadUpdateStrategy: + description: WorkloadUpdateStrategy defines at the cluster level how + to handle automated workload updates + properties: + batchEvictionInterval: + description: "BatchEvictionInterval Represents the interval to + wait before issuing the next batch of shutdowns \n Defaults + to 1 minute" + type: string + batchEvictionSize: + description: "BatchEvictionSize Represents the number of VMIs + that can be forced updated per the BatchShutdownInteral interval + \n Defaults to 10" + type: integer + workloadUpdateMethods: + description: "WorkloadUpdateMethods defines the methods that can + be used to disrupt workloads during automated workload updates. + When multiple methods are present, the least disruptive method + takes precedence over more disruptive methods. For example if + both LiveMigrate and Shutdown methods are listed, only VMs which + are not live migratable will be restarted/shutdown \n An empty + list defaults to no automated workload updating" + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + workloads: + description: selectors and tolerations that should apply to KubeVirt + workloads + properties: + nodePlacement: + description: nodePlacement describes scheduling configuration + for specific KubeVirt components + properties: + affinity: + description: affinity enables pod affinity/anti-affinity placement + expanding the types of constraints that can be expressed + with nodeSelector. affinity is going to be applied to the + relevant kind of pods in parallel with nodeSelector See + https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity + properties: + nodeAffinity: + description: Describes node affinity scheduling rules + for the pod. + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule + pods to nodes that satisfy the affinity expressions + specified by this field, but it may choose a node + that violates one or more of the expressions. The + node that is most preferred is the one with the + greatest sum of weights, i.e. for each node that + meets all of the scheduling requirements (resource + request, requiredDuringScheduling affinity expressions, + etc.), compute a sum by iterating through the elements + of this field and adding "weight" to the sum if + the node matches the corresponding matchExpressions; + the node(s) with the highest sum are the most preferred. + items: + description: An empty preferred scheduling term + matches all objects with implicit weight 0 (i.e. + it's a no-op). A null preferred scheduling term + matches no objects (i.e. is also a no-op). + properties: + preference: + description: A node selector term, associated + with the corresponding weight. + properties: + matchExpressions: + description: A list of node selector requirements + by node's labels. + items: + description: A node selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that the + selector applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. + If the operator is Gt or Lt, the + values array must have a single + element, which will be interpreted + as an integer. This array is replaced + during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector requirements + by node's fields. + items: + description: A node selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that the + selector applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. + If the operator is Gt or Lt, the + values array must have a single + element, which will be interpreted + as an integer. This array is replaced + during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + description: Weight associated with matching + the corresponding nodeSelectorTerm, in the + range 1-100. + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified + by this field are not met at scheduling time, the + pod will not be scheduled onto the node. If the + affinity requirements specified by this field cease + to be met at some point during pod execution (e.g. + due to an update), the system may or may not try + to eventually evict the pod from its node. + properties: + nodeSelectorTerms: + description: Required. A list of node selector + terms. The terms are ORed. + items: + description: A null or empty node selector term + matches no objects. The requirements of them + are ANDed. The TopologySelectorTerm type implements + a subset of the NodeSelectorTerm. + properties: + matchExpressions: + description: A list of node selector requirements + by node's labels. + items: + description: A node selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that the + selector applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. + If the operator is Gt or Lt, the + values array must have a single + element, which will be interpreted + as an integer. This array is replaced + during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector requirements + by node's fields. + items: + description: A node selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that the + selector applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. + If the operator is Gt or Lt, the + values array must have a single + element, which will be interpreted + as an integer. This array is replaced + during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + description: Describes pod affinity scheduling rules (e.g. + co-locate this pod in the same node, zone, etc. as some + other pod(s)). + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule + pods to nodes that satisfy the affinity expressions + specified by this field, but it may choose a node + that violates one or more of the expressions. The + node that is most preferred is the one with the + greatest sum of weights, i.e. for each node that + meets all of the scheduling requirements (resource + request, requiredDuringScheduling affinity expressions, + etc.), compute a sum by iterating through the elements + of this field and adding "weight" to the sum if + the node has pods which matches the corresponding + podAffinityTerm; the node(s) with the highest sum + are the most preferred. + items: + description: The weights of all of the matched WeightedPodAffinityTerm + fields are added per-node to find the most preferred + node(s) + properties: + podAffinityTerm: + description: Required. A pod affinity term, + associated with the corresponding weight. + properties: + labelSelector: + description: A label query over a set of + resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The + requirements are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a set + of values. Valid operators are + In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array + of string values. If the operator + is In or NotIn, the values array + must be non-empty. If the operator + is Exists or DoesNotExist, the + values array must be empty. + This array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of + {key,value} pairs. A single {key,value} + in the matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are + ANDed. + type: object + type: object + namespaceSelector: + description: A label query over the set + of namespaces that the term applies to. + The term is applied to the union of the + namespaces selected by this field and + the ones listed in the namespaces field. + null selector and null or empty namespaces + list means "this pod's namespace". An + empty selector ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The + requirements are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a set + of values. Valid operators are + In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array + of string values. If the operator + is In or NotIn, the values array + must be non-empty. If the operator + is Exists or DoesNotExist, the + values array must be empty. + This array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of + {key,value} pairs. A single {key,value} + in the matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are + ANDed. + type: object + type: object + namespaces: + description: namespaces specifies a static + list of namespace names that the term + applies to. The term is applied to the + union of the namespaces listed in this + field and the ones selected by namespaceSelector. + null or empty namespaces list and null + namespaceSelector means "this pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affinity) + with the pods matching the labelSelector + in the specified namespaces, where co-located + is defined as running on a node whose + value of the label with key topologyKey + matches that of any node on which any + of the selected pods is running. Empty + topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + weight: + description: weight associated with matching + the corresponding podAffinityTerm, in the + range 1-100. + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified + by this field are not met at scheduling time, the + pod will not be scheduled onto the node. If the + affinity requirements specified by this field cease + to be met at some point during pod execution (e.g. + due to a pod label update), the system may or may + not try to eventually evict the pod from its node. + When there are multiple elements, the lists of nodes + corresponding to each podAffinityTerm are intersected, + i.e. all terms must be satisfied. + items: + description: Defines a set of pods (namely those + matching the labelSelector relative to the given + namespace(s)) that this pod should be co-located + (affinity) or not co-located (anti-affinity) with, + where co-located is defined as running on a node + whose value of the label with key + matches that of any node on which a pod of the + set of pods is running + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of + string values. If the operator is + In or NotIn, the values array must + be non-empty. If the operator is + Exists or DoesNotExist, the values + array must be empty. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. The term is applied + to the union of the namespaces selected by + this field and the ones listed in the namespaces + field. null selector and null or empty namespaces + list means "this pod's namespace". An empty + selector ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of + string values. If the operator is + In or NotIn, the values array must + be non-empty. If the operator is + Exists or DoesNotExist, the values + array must be empty. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + namespaces: + description: namespaces specifies a static list + of namespace names that the term applies to. + The term is applied to the union of the namespaces + listed in this field and the ones selected + by namespaceSelector. null or empty namespaces + list and null namespaceSelector means "this + pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affinity) with the + pods matching the labelSelector in the specified + namespaces, where co-located is defined as + running on a node whose value of the label + with key topologyKey matches that of any node + on which any of the selected pods is running. + Empty topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + description: Describes pod anti-affinity scheduling rules + (e.g. avoid putting this pod in the same node, zone, + etc. as some other pod(s)). + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule + pods to nodes that satisfy the anti-affinity expressions + specified by this field, but it may choose a node + that violates one or more of the expressions. The + node that is most preferred is the one with the + greatest sum of weights, i.e. for each node that + meets all of the scheduling requirements (resource + request, requiredDuringScheduling anti-affinity + expressions, etc.), compute a sum by iterating through + the elements of this field and adding "weight" to + the sum if the node has pods which matches the corresponding + podAffinityTerm; the node(s) with the highest sum + are the most preferred. + items: + description: The weights of all of the matched WeightedPodAffinityTerm + fields are added per-node to find the most preferred + node(s) + properties: + podAffinityTerm: + description: Required. A pod affinity term, + associated with the corresponding weight. + properties: + labelSelector: + description: A label query over a set of + resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The + requirements are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a set + of values. Valid operators are + In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array + of string values. If the operator + is In or NotIn, the values array + must be non-empty. If the operator + is Exists or DoesNotExist, the + values array must be empty. + This array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of + {key,value} pairs. A single {key,value} + in the matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are + ANDed. + type: object + type: object + namespaceSelector: + description: A label query over the set + of namespaces that the term applies to. + The term is applied to the union of the + namespaces selected by this field and + the ones listed in the namespaces field. + null selector and null or empty namespaces + list means "this pod's namespace". An + empty selector ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The + requirements are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a set + of values. Valid operators are + In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array + of string values. If the operator + is In or NotIn, the values array + must be non-empty. If the operator + is Exists or DoesNotExist, the + values array must be empty. + This array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of + {key,value} pairs. A single {key,value} + in the matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are + ANDed. + type: object + type: object + namespaces: + description: namespaces specifies a static + list of namespace names that the term + applies to. The term is applied to the + union of the namespaces listed in this + field and the ones selected by namespaceSelector. + null or empty namespaces list and null + namespaceSelector means "this pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affinity) + with the pods matching the labelSelector + in the specified namespaces, where co-located + is defined as running on a node whose + value of the label with key topologyKey + matches that of any node on which any + of the selected pods is running. Empty + topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + weight: + description: weight associated with matching + the corresponding podAffinityTerm, in the + range 1-100. + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the anti-affinity requirements specified + by this field are not met at scheduling time, the + pod will not be scheduled onto the node. If the + anti-affinity requirements specified by this field + cease to be met at some point during pod execution + (e.g. due to a pod label update), the system may + or may not try to eventually evict the pod from + its node. When there are multiple elements, the + lists of nodes corresponding to each podAffinityTerm + are intersected, i.e. all terms must be satisfied. + items: + description: Defines a set of pods (namely those + matching the labelSelector relative to the given + namespace(s)) that this pod should be co-located + (affinity) or not co-located (anti-affinity) with, + where co-located is defined as running on a node + whose value of the label with key + matches that of any node on which a pod of the + set of pods is running + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of + string values. If the operator is + In or NotIn, the values array must + be non-empty. If the operator is + Exists or DoesNotExist, the values + array must be empty. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. The term is applied + to the union of the namespaces selected by + this field and the ones listed in the namespaces + field. null selector and null or empty namespaces + list means "this pod's namespace". An empty + selector ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of + string values. If the operator is + In or NotIn, the values array must + be non-empty. If the operator is + Exists or DoesNotExist, the values + array must be empty. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + namespaces: + description: namespaces specifies a static list + of namespace names that the term applies to. + The term is applied to the union of the namespaces + listed in this field and the ones selected + by namespaceSelector. null or empty namespaces + list and null namespaceSelector means "this + pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affinity) with the + pods matching the labelSelector in the specified + namespaces, where co-located is defined as + running on a node whose value of the label + with key topologyKey matches that of any node + on which any of the selected pods is running. + Empty topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + nodeSelector: + additionalProperties: + type: string + description: 'nodeSelector is the node selector applied to + the relevant kind of pods It specifies a map of key-value + pairs: for the pod to be eligible to run on a node, the + node must have each of the indicated key-value pairs as + labels (it can have additional labels as well). See https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector' + type: object + tolerations: + description: tolerations is a list of tolerations applied + to the relevant kind of pods See https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ + for more info. These are additional tolerations other than + default ones. + items: + description: The pod this Toleration is attached to tolerates + any taint that matches the triple using + the matching operator . + properties: + effect: + description: Effect indicates the taint effect to match. + Empty means match all taint effects. When specified, + allowed values are NoSchedule, PreferNoSchedule and + NoExecute. + type: string + key: + description: Key is the taint key that the toleration + applies to. Empty means match all taint keys. If the + key is empty, operator must be Exists; this combination + means to match all values and all keys. + type: string + operator: + description: Operator represents a key's relationship + to the value. Valid operators are Exists and Equal. + Defaults to Equal. Exists is equivalent to wildcard + for value, so that a pod can tolerate all taints of + a particular category. + type: string + tolerationSeconds: + description: TolerationSeconds represents the period + of time the toleration (which must be of effect NoExecute, + otherwise this field is ignored) tolerates the taint. + By default, it is not set, which means tolerate the + taint forever (do not evict). Zero and negative values + will be treated as 0 (evict immediately) by the system. + format: int64 + type: integer + value: + description: Value is the taint value the toleration + matches to. If the operator is Exists, the value should + be empty, otherwise just a regular string. + type: string + type: object + type: array + type: object + replicas: + description: 'replicas indicates how many replicas should be created + for each KubeVirt infrastructure component (like virt-api or + virt-controller). Defaults to 2. WARNING: this is an advanced + feature that prevents auto-scaling for core kubevirt components. + Please use with caution!' + type: integer + type: object + type: object + status: + description: KubeVirtStatus represents information pertaining to a KubeVirt + deployment. + properties: + conditions: + items: + description: KubeVirtCondition represents a condition of a KubeVirt + deployment + properties: + lastProbeTime: + format: date-time + nullable: true + type: string + lastTransitionTime: + format: date-time + nullable: true + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + required: + - status + - type + type: object + type: array + defaultArchitecture: + type: string + generations: + items: + description: GenerationStatus keeps track of the generation for + a given resource so that decisions about forced updates can be + made. + properties: + group: + description: group is the group of the thing you're tracking + type: string + hash: + description: hash is an optional field set for resources without + generation that are content sensitive like secrets and configmaps + type: string + lastGeneration: + description: lastGeneration is the last generation of the workload + controller involved + format: int64 + type: integer + name: + description: name is the name of the thing you're tracking + type: string + namespace: + description: namespace is where the thing you're tracking is + type: string + resource: + description: resource is the resource type of the thing you're + tracking + type: string + required: + - group + - lastGeneration + - name + - resource + type: object + type: array + x-kubernetes-list-type: atomic + observedDeploymentConfig: + type: string + observedDeploymentID: + type: string + observedGeneration: + format: int64 + type: integer + observedKubeVirtRegistry: + type: string + observedKubeVirtVersion: + type: string + operatorVersion: + type: string + outdatedVirtualMachineInstanceWorkloads: + type: integer + phase: + description: KubeVirtPhase is a label for the phase of a KubeVirt + deployment at the current time. + type: string + targetDeploymentConfig: + type: string + targetDeploymentID: + type: string + targetKubeVirtRegistry: + type: string + targetKubeVirtVersion: + type: string + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} + - additionalPrinterColumns: + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + - jsonPath: .status.phase + name: Phase + type: string + deprecated: true + deprecationWarning: kubevirt.io/v1alpha3 is now deprecated and will be removed + in a future release. + name: v1alpha3 + schema: + openAPIV3Schema: + description: KubeVirt represents the object deploying all KubeVirt resources + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + properties: + certificateRotateStrategy: + properties: + selfSigned: + properties: + ca: + description: CA configuration CA certs are kept in the CA + bundle as long as they are valid + properties: + duration: + description: The requested 'duration' (i.e. lifetime) + of the Certificate. + type: string + renewBefore: + description: The amount of time before the currently issued + certificate's "notAfter" time that we will begin to + attempt to renew the certificate. + type: string + type: object + caOverlapInterval: + description: Deprecated. Use CA.Duration and CA.RenewBefore + instead + type: string + caRotateInterval: + description: Deprecated. Use CA.Duration instead + type: string + certRotateInterval: + description: Deprecated. Use Server.Duration instead + type: string + server: + description: Server configuration Certs are rotated and discarded + properties: + duration: + description: The requested 'duration' (i.e. lifetime) + of the Certificate. + type: string + renewBefore: + description: The amount of time before the currently issued + certificate's "notAfter" time that we will begin to + attempt to renew the certificate. + type: string + type: object + type: object + type: object + configuration: + description: holds kubevirt configurations. same as the virt-configMap + properties: + additionalGuestMemoryOverheadRatio: + description: AdditionalGuestMemoryOverheadRatio can be used to + increase the virtualization infrastructure overhead. This is + useful, since the calculation of this overhead is not accurate + and cannot be entirely known in advance. The ratio that is being + set determines by which factor to increase the overhead calculated + by KubeVirt. A higher ratio means that the VMs would be less + compromised by node pressures, but would mean that fewer VMs + could be scheduled to a node. If not set, the default is 1. + type: string + apiConfiguration: + description: ReloadableComponentConfiguration holds all generic + k8s configuration options which can be reloaded by components + without requiring a restart. + properties: + restClient: + description: RestClient can be used to tune certain aspects + of the k8s client in use. + properties: + rateLimiter: + description: RateLimiter allows selecting and configuring + different rate limiters for the k8s client. + properties: + tokenBucketRateLimiter: + properties: + burst: + description: Maximum burst for throttle. If it's + zero, the component default will be used + type: integer + qps: + description: QPS indicates the maximum QPS to + the apiserver from this client. If it's zero, + the component default will be used + type: number + required: + - burst + - qps + type: object + type: object + type: object + type: object + architectureConfiguration: + properties: + amd64: + properties: + emulatedMachines: + items: + type: string + type: array + x-kubernetes-list-type: atomic + machineType: + type: string + ovmfPath: + type: string + type: object + arm64: + properties: + emulatedMachines: + items: + type: string + type: array + x-kubernetes-list-type: atomic + machineType: + type: string + ovmfPath: + type: string + type: object + defaultArchitecture: + type: string + ppc64le: + properties: + emulatedMachines: + items: + type: string + type: array + x-kubernetes-list-type: atomic + machineType: + type: string + ovmfPath: + type: string + type: object + type: object + autoCPULimitNamespaceLabelSelector: + description: When set, AutoCPULimitNamespaceLabelSelector will + set a CPU limit on virt-launcher for VMIs running inside namespaces + that match the label selector. The CPU limit will equal the + number of requested vCPUs. This setting does not apply to VMIs + with dedicated CPUs. + properties: + matchExpressions: + description: matchExpressions is a list of label selector + requirements. The requirements are ANDed. + items: + description: A label selector requirement is a selector + that contains values, a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key that the selector + applies to. + type: string + operator: + description: operator represents a key's relationship + to a set of values. Valid operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. If + the operator is In or NotIn, the values array must + be non-empty. If the operator is Exists or DoesNotExist, + the values array must be empty. This array is replaced + during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} pairs. A + single {key,value} in the matchLabels map is equivalent + to an element of matchExpressions, whose key field is "key", + the operator is "In", and the values array contains only + "value". The requirements are ANDed. + type: object + type: object + controllerConfiguration: + description: ReloadableComponentConfiguration holds all generic + k8s configuration options which can be reloaded by components + without requiring a restart. + properties: + restClient: + description: RestClient can be used to tune certain aspects + of the k8s client in use. + properties: + rateLimiter: + description: RateLimiter allows selecting and configuring + different rate limiters for the k8s client. + properties: + tokenBucketRateLimiter: + properties: + burst: + description: Maximum burst for throttle. If it's + zero, the component default will be used + type: integer + qps: + description: QPS indicates the maximum QPS to + the apiserver from this client. If it's zero, + the component default will be used + type: number + required: + - burst + - qps + type: object + type: object + type: object + type: object + cpuModel: + type: string + cpuRequest: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + defaultRuntimeClass: + type: string + developerConfiguration: + description: DeveloperConfiguration holds developer options + properties: + cpuAllocationRatio: + description: 'For each requested virtual CPU, CPUAllocationRatio + defines how much physical CPU to request per VMI from the + hosting node. The value is in fraction of a CPU thread (or + core on non-hyperthreaded nodes). For example, a value of + 1 means 1 physical CPU thread per VMI CPU thread. A value + of 100 would be 1% of a physical thread allocated for each + requested VMI thread. This option has no effect on VMIs + that request dedicated CPUs. More information at: https://kubevirt.io/user-guide/operations/node_overcommit/#node-cpu-allocation-ratio + Defaults to 10' + type: integer + diskVerification: + description: DiskVerification holds container disks verification + limits + properties: + memoryLimit: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + required: + - memoryLimit + type: object + featureGates: + description: FeatureGates is the list of experimental features + to enable. Defaults to none + items: + type: string + type: array + logVerbosity: + description: LogVerbosity sets log verbosity level of various + components + properties: + nodeVerbosity: + additionalProperties: + type: integer + description: NodeVerbosity represents a map of nodes with + a specific verbosity level + type: object + virtAPI: + type: integer + virtController: + type: integer + virtHandler: + type: integer + virtLauncher: + type: integer + virtOperator: + type: integer + type: object + memoryOvercommit: + description: MemoryOvercommit is the percentage of memory + we want to give VMIs compared to the amount given to its + parent pod (virt-launcher). For example, a value of 102 + means the VMI will "see" 2% more memory than its parent + pod. Values under 100 are effectively "undercommits". Overcommits + can lead to memory exhaustion, which in turn can lead to + crashes. Use carefully. Defaults to 100 + type: integer + minimumClusterTSCFrequency: + description: Allow overriding the automatically determined + minimum TSC frequency of the cluster and fixate the minimum + to this frequency. + format: int64 + type: integer + minimumReservePVCBytes: + description: MinimumReservePVCBytes is the amount of space, + in bytes, to leave unused on disks. Defaults to 131072 (128KiB) + format: int64 + type: integer + nodeSelectors: + additionalProperties: + type: string + description: NodeSelectors allows restricting VMI creation + to nodes that match a set of labels. Defaults to none + type: object + pvcTolerateLessSpaceUpToPercent: + description: LessPVCSpaceToleration determines how much smaller, + in percentage, disk PVCs are allowed to be compared to the + requested size (to account for various overheads). Defaults + to 10 + type: integer + useEmulation: + description: UseEmulation can be set to true to allow fallback + to software emulation in case hardware-assisted emulation + is not available. Defaults to false + type: boolean + type: object + emulatedMachines: + description: Deprecated. Use architectureConfiguration instead. + items: + type: string + type: array + evictionStrategy: + description: EvictionStrategy defines at the cluster level if + the VirtualMachineInstance should be migrated instead of shut-off + in case of a node drain. If the VirtualMachineInstance specific + field is set it overrides the cluster level one. + type: string + handlerConfiguration: + description: ReloadableComponentConfiguration holds all generic + k8s configuration options which can be reloaded by components + without requiring a restart. + properties: + restClient: + description: RestClient can be used to tune certain aspects + of the k8s client in use. + properties: + rateLimiter: + description: RateLimiter allows selecting and configuring + different rate limiters for the k8s client. + properties: + tokenBucketRateLimiter: + properties: + burst: + description: Maximum burst for throttle. If it's + zero, the component default will be used + type: integer + qps: + description: QPS indicates the maximum QPS to + the apiserver from this client. If it's zero, + the component default will be used + type: number + required: + - burst + - qps + type: object + type: object + type: object + type: object + imagePullPolicy: + description: PullPolicy describes a policy for if/when to pull + a container image + type: string + ksmConfiguration: + description: KSMConfiguration holds the information regarding + the enabling the KSM in the nodes (if available). + properties: + nodeLabelSelector: + description: NodeLabelSelector is a selector that filters + in which nodes the KSM will be enabled. Empty NodeLabelSelector + will enable ksm for every node. + properties: + matchExpressions: + description: matchExpressions is a list of label selector + requirements. The requirements are ANDed. + items: + description: A label selector requirement is a selector + that contains values, a key, and an operator that + relates the key and values. + properties: + key: + description: key is the label key that the selector + applies to. + type: string + operator: + description: operator represents a key's relationship + to a set of values. Valid operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. + If the operator is In or NotIn, the values array + must be non-empty. If the operator is Exists or + DoesNotExist, the values array must be empty. + This array is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} pairs. + A single {key,value} in the matchLabels map is equivalent + to an element of matchExpressions, whose key field is + "key", the operator is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + type: object + liveUpdateConfiguration: + description: LiveUpdateConfiguration holds defaults for live update + features + properties: + maxCpuSockets: + description: MaxCpuSockets holds the maximum amount of sockets + that can be hotplugged + format: int32 + type: integer + maxGuest: + anyOf: + - type: integer + - type: string + description: MaxGuest defines the maximum amount memory that + can be allocated to the guest using hotplug. + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + maxHotplugRatio: + description: 'MaxHotplugRatio is the ratio used to define + the max amount of a hotplug resource that can be made available + to a VM when the specific Max* setting is not defined (MaxCpuSockets, + MaxGuest) Example: VM is configured with 512Mi of guest + memory, if MaxGuest is not defined and MaxHotplugRatio is + 2 then MaxGuest = 1Gi defaults to 4' + format: int32 + type: integer + type: object + machineType: + description: Deprecated. Use architectureConfiguration instead. + type: string + mediatedDevicesConfiguration: + description: MediatedDevicesConfiguration holds information about + MDEV types to be defined, if available + properties: + mediatedDeviceTypes: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mediatedDevicesTypes: + description: Deprecated. Use mediatedDeviceTypes instead. + items: + type: string + type: array + x-kubernetes-list-type: atomic + nodeMediatedDeviceTypes: + items: + description: NodeMediatedDeviceTypesConfig holds information + about MDEV types to be defined in a specific node that + matches the NodeSelector field. + properties: + mediatedDeviceTypes: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mediatedDevicesTypes: + description: Deprecated. Use mediatedDeviceTypes instead. + items: + type: string + type: array + x-kubernetes-list-type: atomic + nodeSelector: + additionalProperties: + type: string + description: 'NodeSelector is a selector which must + be true for the vmi to fit on a node. Selector which + must match a node''s labels for the vmi to be scheduled + on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/' + type: object + required: + - nodeSelector + type: object + type: array + x-kubernetes-list-type: atomic + type: object + memBalloonStatsPeriod: + format: int32 + type: integer + migrations: + description: MigrationConfiguration holds migration options. Can + be overridden for specific groups of VMs though migration policies. + Visit https://kubevirt.io/user-guide/operations/migration_policies/ + for more information. + properties: + allowAutoConverge: + description: AllowAutoConverge allows the platform to compromise + performance/availability of VMIs to guarantee successful + VMI live migrations. Defaults to false + type: boolean + allowPostCopy: + description: AllowPostCopy enables post-copy live migrations. + Such migrations allow even the busiest VMIs to successfully + live-migrate. However, events like a network failure can + cause a VMI crash. If set to true, migrations will still + start in pre-copy, but switch to post-copy when CompletionTimeoutPerGiB + triggers. Defaults to false + type: boolean + bandwidthPerMigration: + anyOf: + - type: integer + - type: string + description: BandwidthPerMigration limits the amount of network + bandwidth live migrations are allowed to use. The value + is in quantity per second. Defaults to 0 (no limit) + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + completionTimeoutPerGiB: + description: CompletionTimeoutPerGiB is the maximum number + of seconds per GiB a migration is allowed to take. If a + live-migration takes longer to migrate than this value multiplied + by the size of the VMI, the migration will be cancelled, + unless AllowPostCopy is true. Defaults to 800 + format: int64 + type: integer + disableTLS: + description: When set to true, DisableTLS will disable the + additional layer of live migration encryption provided by + KubeVirt. This is usually a bad idea. Defaults to false + type: boolean + matchSELinuxLevelOnMigration: + description: By default, the SELinux level of target virt-launcher + pods is forced to the level of the source virt-launcher. + When set to true, MatchSELinuxLevelOnMigration lets the + CRI auto-assign a random level to the target. That will + ensure the target virt-launcher doesn't share categories + with another pod on the node. However, migrations will fail + when using RWX volumes that don't automatically deal with + SELinux levels. + type: boolean + network: + description: Network is the name of the CNI network to use + for live migrations. By default, migrations go through the + pod network. + type: string + nodeDrainTaintKey: + description: 'NodeDrainTaintKey defines the taint key that + indicates a node should be drained. Note: this option relies + on the deprecated node taint feature. Default: kubevirt.io/drain' + type: string + parallelMigrationsPerCluster: + description: ParallelMigrationsPerCluster is the total number + of concurrent live migrations allowed cluster-wide. Defaults + to 5 + format: int32 + type: integer + parallelOutboundMigrationsPerNode: + description: ParallelOutboundMigrationsPerNode is the maximum + number of concurrent outgoing live migrations allowed per + node. Defaults to 2 + format: int32 + type: integer + progressTimeout: + description: ProgressTimeout is the maximum number of seconds + a live migration is allowed to make no progress. Hitting + this timeout means a migration transferred 0 data for that + many seconds. The migration is then considered stuck and + therefore cancelled. Defaults to 150 + format: int64 + type: integer + unsafeMigrationOverride: + description: UnsafeMigrationOverride allows live migrations + to occur even if the compatibility check indicates the migration + will be unsafe to the guest. Defaults to false + type: boolean + type: object + minCPUModel: + type: string + network: + description: NetworkConfiguration holds network options + properties: + binding: + additionalProperties: + properties: + domainAttachmentType: + description: 'DomainAttachmentType is a standard domain + network attachment method kubevirt supports. Supported + values: "tap". The standard domain attachment can + be used instead or in addition to the sidecarImage. + version: 1alphav1' + type: string + migration: + description: 'Migration means the VM using the plugin + can be safely migrated version: 1alphav1' + properties: + method: + description: 'Method defines a pre-defined migration + methodology version: 1alphav1' + type: string + type: object + networkAttachmentDefinition: + description: 'NetworkAttachmentDefinition references + to a NetworkAttachmentDefinition CR object. Format: + , /. If namespace is not specified, + VMI namespace is assumed. version: 1alphav1' + type: string + sidecarImage: + description: 'SidecarImage references a container image + that runs in the virt-launcher pod. The sidecar handles + (libvirt) domain configuration and optional services. + version: 1alphav1' + type: string + type: object + type: object + defaultNetworkInterface: + type: string + permitBridgeInterfaceOnPodNetwork: + type: boolean + permitSlirpInterface: + type: boolean + type: object + obsoleteCPUModels: + additionalProperties: + type: boolean + type: object + ovmfPath: + description: Deprecated. Use architectureConfiguration instead. + type: string + permittedHostDevices: + description: PermittedHostDevices holds information about devices + allowed for passthrough + properties: + mediatedDevices: + items: + description: MediatedHostDevice represents a host mediated + device allowed for passthrough + properties: + externalResourceProvider: + type: boolean + mdevNameSelector: + type: string + resourceName: + type: string + required: + - mdevNameSelector + - resourceName + type: object + type: array + x-kubernetes-list-type: atomic + pciHostDevices: + items: + description: PciHostDevice represents a host PCI device + allowed for passthrough + properties: + externalResourceProvider: + description: If true, KubeVirt will leave the allocation + and monitoring to an external device plugin + type: boolean + pciVendorSelector: + description: The vendor_id:product_id tuple of the PCI + device + type: string + resourceName: + description: The name of the resource that is representing + the device. Exposed by a device plugin and requested + by VMs. Typically of the form vendor.com/product_name + type: string + required: + - pciVendorSelector + - resourceName + type: object + type: array + x-kubernetes-list-type: atomic + usb: + items: + properties: + externalResourceProvider: + description: If true, KubeVirt will leave the allocation + and monitoring to an external device plugin + type: boolean + resourceName: + description: 'Identifies the list of USB host devices. + e.g: kubevirt.io/storage, kubevirt.io/bootable-usb, + etc' + type: string + selectors: + items: + properties: + product: + type: string + vendor: + type: string + required: + - product + - vendor + type: object + type: array + x-kubernetes-list-type: atomic + required: + - resourceName + type: object + type: array + x-kubernetes-list-type: atomic + type: object + seccompConfiguration: + description: SeccompConfiguration holds Seccomp configuration + for KubeVirt components + properties: + virtualMachineInstanceProfile: + description: VirtualMachineInstanceProfile defines what profile + should be used with virt-launcher. Defaults to none + properties: + customProfile: + description: CustomProfile allows to request arbitrary + profile for virt-launcher + properties: + localhostProfile: + type: string + runtimeDefaultProfile: + type: boolean + type: object + type: object + type: object + selinuxLauncherType: + type: string + smbios: + properties: + family: + type: string + manufacturer: + type: string + product: + type: string + sku: + type: string + version: + type: string + type: object + supportContainerResources: + description: SupportContainerResources specifies the resource + requirements for various types of supporting containers such + as container disks/virtiofs/sidecars and hotplug attachment + pods. If omitted a sensible default will be supplied. + items: + description: SupportContainerResources are used to specify the + cpu/memory request and limits for the containers that support + various features of Virtual Machines. These containers are + usually idle and don't require a lot of memory or cpu. + properties: + resources: + description: ResourceRequirements describes the compute + resource requirements. + properties: + claims: + description: "Claims lists the names of resources, defined + in spec.resourceClaims, that are used by this container. + \n This is an alpha field and requires enabling the + DynamicResourceAllocation feature gate. \n This field + is immutable. It can only be set for containers." + items: + description: ResourceClaim references one entry in + PodSpec.ResourceClaims. + properties: + name: + description: Name must match the name of one entry + in pod.spec.resourceClaims of the Pod where + this field is used. It makes that resource available + inside a container. + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes the maximum amount of + compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Requests describes the minimum amount + of compute resources required. If Requests is omitted + for a container, it defaults to Limits if that is + explicitly specified, otherwise to an implementation-defined + value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + type: + type: string + required: + - resources + - type + type: object + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + supportedGuestAgentVersions: + description: deprecated + items: + type: string + type: array + tlsConfiguration: + description: TLSConfiguration holds TLS options + properties: + ciphers: + items: + type: string + type: array + x-kubernetes-list-type: set + minTLSVersion: + description: "MinTLSVersion is a way to specify the minimum + protocol version that is acceptable for TLS connections. + Protocol versions are based on the following most common + TLS configurations: \n https://ssl-config.mozilla.org/ + \n Note that SSLv3.0 is not a supported protocol version + due to well known vulnerabilities such as POODLE: https://en.wikipedia.org/wiki/POODLE" + enum: + - VersionTLS10 + - VersionTLS11 + - VersionTLS12 + - VersionTLS13 + type: string + type: object + virtualMachineInstancesPerNode: + type: integer + virtualMachineOptions: + description: VirtualMachineOptions holds the cluster level information + regarding the virtual machine. + properties: + disableFreePageReporting: + description: DisableFreePageReporting disable the free page + reporting of memory balloon device https://libvirt.org/formatdomain.html#memory-balloon-device. + This will have effect only if AutoattachMemBalloon is not + false and the vmi is not requesting any high performance + feature (dedicatedCPU/realtime/hugePages), in which free + page reporting is always disabled. + type: object + disableSerialConsoleLog: + description: DisableSerialConsoleLog disables logging the + auto-attached default serial console. If not set, serial + console logs will be written to a file and then streamed + from a container named 'guest-console-log'. The value can + be individually overridden for each VM, not relevant if + AutoattachSerialConsole is disabled. + type: object + type: object + vmRolloutStrategy: + description: VMRolloutStrategy defines how changes to a VM object + propagate to its VMI + enum: + - Stage + - LiveUpdate + nullable: true + type: string + vmStateStorageClass: + description: VMStateStorageClass is the name of the storage class + to use for the PVCs created to preserve VM state, like TPM. + The storage class must support RWX in filesystem mode. + type: string + webhookConfiguration: + description: ReloadableComponentConfiguration holds all generic + k8s configuration options which can be reloaded by components + without requiring a restart. + properties: + restClient: + description: RestClient can be used to tune certain aspects + of the k8s client in use. + properties: + rateLimiter: + description: RateLimiter allows selecting and configuring + different rate limiters for the k8s client. + properties: + tokenBucketRateLimiter: + properties: + burst: + description: Maximum burst for throttle. If it's + zero, the component default will be used + type: integer + qps: + description: QPS indicates the maximum QPS to + the apiserver from this client. If it's zero, + the component default will be used + type: number + required: + - burst + - qps + type: object + type: object + type: object + type: object + type: object + customizeComponents: + properties: + flags: + description: Configure the value used for deployment and daemonset + resources + properties: + api: + additionalProperties: + type: string + type: object + controller: + additionalProperties: + type: string + type: object + handler: + additionalProperties: + type: string + type: object + type: object + patches: + items: + properties: + patch: + type: string + resourceName: + minLength: 1 + type: string + resourceType: + minLength: 1 + type: string + type: + type: string + required: + - patch + - resourceName + - resourceType + - type + type: object + type: array + x-kubernetes-list-type: atomic + type: object + imagePullPolicy: + description: The ImagePullPolicy to use. + type: string + imagePullSecrets: + description: The imagePullSecrets to pull the container images from + Defaults to none + items: + description: LocalObjectReference contains enough information to + let you locate the referenced object inside the same namespace. + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + type: object + type: array + x-kubernetes-list-type: atomic + imageRegistry: + description: The image registry to pull the container images from + Defaults to the same registry the operator's container image is + pulled from. + type: string + imageTag: + description: The image tag to use for the continer images installed. + Defaults to the same tag as the operator's container image. + type: string + infra: + description: selectors and tolerations that should apply to KubeVirt + infrastructure components + properties: + nodePlacement: + description: nodePlacement describes scheduling configuration + for specific KubeVirt components + properties: + affinity: + description: affinity enables pod affinity/anti-affinity placement + expanding the types of constraints that can be expressed + with nodeSelector. affinity is going to be applied to the + relevant kind of pods in parallel with nodeSelector See + https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity + properties: + nodeAffinity: + description: Describes node affinity scheduling rules + for the pod. + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule + pods to nodes that satisfy the affinity expressions + specified by this field, but it may choose a node + that violates one or more of the expressions. The + node that is most preferred is the one with the + greatest sum of weights, i.e. for each node that + meets all of the scheduling requirements (resource + request, requiredDuringScheduling affinity expressions, + etc.), compute a sum by iterating through the elements + of this field and adding "weight" to the sum if + the node matches the corresponding matchExpressions; + the node(s) with the highest sum are the most preferred. + items: + description: An empty preferred scheduling term + matches all objects with implicit weight 0 (i.e. + it's a no-op). A null preferred scheduling term + matches no objects (i.e. is also a no-op). + properties: + preference: + description: A node selector term, associated + with the corresponding weight. + properties: + matchExpressions: + description: A list of node selector requirements + by node's labels. + items: + description: A node selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that the + selector applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. + If the operator is Gt or Lt, the + values array must have a single + element, which will be interpreted + as an integer. This array is replaced + during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector requirements + by node's fields. + items: + description: A node selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that the + selector applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. + If the operator is Gt or Lt, the + values array must have a single + element, which will be interpreted + as an integer. This array is replaced + during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + description: Weight associated with matching + the corresponding nodeSelectorTerm, in the + range 1-100. + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified + by this field are not met at scheduling time, the + pod will not be scheduled onto the node. If the + affinity requirements specified by this field cease + to be met at some point during pod execution (e.g. + due to an update), the system may or may not try + to eventually evict the pod from its node. + properties: + nodeSelectorTerms: + description: Required. A list of node selector + terms. The terms are ORed. + items: + description: A null or empty node selector term + matches no objects. The requirements of them + are ANDed. The TopologySelectorTerm type implements + a subset of the NodeSelectorTerm. + properties: + matchExpressions: + description: A list of node selector requirements + by node's labels. + items: + description: A node selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that the + selector applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. + If the operator is Gt or Lt, the + values array must have a single + element, which will be interpreted + as an integer. This array is replaced + during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector requirements + by node's fields. + items: + description: A node selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that the + selector applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. + If the operator is Gt or Lt, the + values array must have a single + element, which will be interpreted + as an integer. This array is replaced + during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + description: Describes pod affinity scheduling rules (e.g. + co-locate this pod in the same node, zone, etc. as some + other pod(s)). + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule + pods to nodes that satisfy the affinity expressions + specified by this field, but it may choose a node + that violates one or more of the expressions. The + node that is most preferred is the one with the + greatest sum of weights, i.e. for each node that + meets all of the scheduling requirements (resource + request, requiredDuringScheduling affinity expressions, + etc.), compute a sum by iterating through the elements + of this field and adding "weight" to the sum if + the node has pods which matches the corresponding + podAffinityTerm; the node(s) with the highest sum + are the most preferred. + items: + description: The weights of all of the matched WeightedPodAffinityTerm + fields are added per-node to find the most preferred + node(s) + properties: + podAffinityTerm: + description: Required. A pod affinity term, + associated with the corresponding weight. + properties: + labelSelector: + description: A label query over a set of + resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The + requirements are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a set + of values. Valid operators are + In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array + of string values. If the operator + is In or NotIn, the values array + must be non-empty. If the operator + is Exists or DoesNotExist, the + values array must be empty. + This array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of + {key,value} pairs. A single {key,value} + in the matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are + ANDed. + type: object + type: object + namespaceSelector: + description: A label query over the set + of namespaces that the term applies to. + The term is applied to the union of the + namespaces selected by this field and + the ones listed in the namespaces field. + null selector and null or empty namespaces + list means "this pod's namespace". An + empty selector ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The + requirements are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a set + of values. Valid operators are + In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array + of string values. If the operator + is In or NotIn, the values array + must be non-empty. If the operator + is Exists or DoesNotExist, the + values array must be empty. + This array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of + {key,value} pairs. A single {key,value} + in the matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are + ANDed. + type: object + type: object + namespaces: + description: namespaces specifies a static + list of namespace names that the term + applies to. The term is applied to the + union of the namespaces listed in this + field and the ones selected by namespaceSelector. + null or empty namespaces list and null + namespaceSelector means "this pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affinity) + with the pods matching the labelSelector + in the specified namespaces, where co-located + is defined as running on a node whose + value of the label with key topologyKey + matches that of any node on which any + of the selected pods is running. Empty + topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + weight: + description: weight associated with matching + the corresponding podAffinityTerm, in the + range 1-100. + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified + by this field are not met at scheduling time, the + pod will not be scheduled onto the node. If the + affinity requirements specified by this field cease + to be met at some point during pod execution (e.g. + due to a pod label update), the system may or may + not try to eventually evict the pod from its node. + When there are multiple elements, the lists of nodes + corresponding to each podAffinityTerm are intersected, + i.e. all terms must be satisfied. + items: + description: Defines a set of pods (namely those + matching the labelSelector relative to the given + namespace(s)) that this pod should be co-located + (affinity) or not co-located (anti-affinity) with, + where co-located is defined as running on a node + whose value of the label with key + matches that of any node on which a pod of the + set of pods is running + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of + string values. If the operator is + In or NotIn, the values array must + be non-empty. If the operator is + Exists or DoesNotExist, the values + array must be empty. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. The term is applied + to the union of the namespaces selected by + this field and the ones listed in the namespaces + field. null selector and null or empty namespaces + list means "this pod's namespace". An empty + selector ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of + string values. If the operator is + In or NotIn, the values array must + be non-empty. If the operator is + Exists or DoesNotExist, the values + array must be empty. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + namespaces: + description: namespaces specifies a static list + of namespace names that the term applies to. + The term is applied to the union of the namespaces + listed in this field and the ones selected + by namespaceSelector. null or empty namespaces + list and null namespaceSelector means "this + pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affinity) with the + pods matching the labelSelector in the specified + namespaces, where co-located is defined as + running on a node whose value of the label + with key topologyKey matches that of any node + on which any of the selected pods is running. + Empty topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + description: Describes pod anti-affinity scheduling rules + (e.g. avoid putting this pod in the same node, zone, + etc. as some other pod(s)). + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule + pods to nodes that satisfy the anti-affinity expressions + specified by this field, but it may choose a node + that violates one or more of the expressions. The + node that is most preferred is the one with the + greatest sum of weights, i.e. for each node that + meets all of the scheduling requirements (resource + request, requiredDuringScheduling anti-affinity + expressions, etc.), compute a sum by iterating through + the elements of this field and adding "weight" to + the sum if the node has pods which matches the corresponding + podAffinityTerm; the node(s) with the highest sum + are the most preferred. + items: + description: The weights of all of the matched WeightedPodAffinityTerm + fields are added per-node to find the most preferred + node(s) + properties: + podAffinityTerm: + description: Required. A pod affinity term, + associated with the corresponding weight. + properties: + labelSelector: + description: A label query over a set of + resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The + requirements are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a set + of values. Valid operators are + In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array + of string values. If the operator + is In or NotIn, the values array + must be non-empty. If the operator + is Exists or DoesNotExist, the + values array must be empty. + This array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of + {key,value} pairs. A single {key,value} + in the matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are + ANDed. + type: object + type: object + namespaceSelector: + description: A label query over the set + of namespaces that the term applies to. + The term is applied to the union of the + namespaces selected by this field and + the ones listed in the namespaces field. + null selector and null or empty namespaces + list means "this pod's namespace". An + empty selector ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The + requirements are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a set + of values. Valid operators are + In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array + of string values. If the operator + is In or NotIn, the values array + must be non-empty. If the operator + is Exists or DoesNotExist, the + values array must be empty. + This array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of + {key,value} pairs. A single {key,value} + in the matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are + ANDed. + type: object + type: object + namespaces: + description: namespaces specifies a static + list of namespace names that the term + applies to. The term is applied to the + union of the namespaces listed in this + field and the ones selected by namespaceSelector. + null or empty namespaces list and null + namespaceSelector means "this pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affinity) + with the pods matching the labelSelector + in the specified namespaces, where co-located + is defined as running on a node whose + value of the label with key topologyKey + matches that of any node on which any + of the selected pods is running. Empty + topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + weight: + description: weight associated with matching + the corresponding podAffinityTerm, in the + range 1-100. + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the anti-affinity requirements specified + by this field are not met at scheduling time, the + pod will not be scheduled onto the node. If the + anti-affinity requirements specified by this field + cease to be met at some point during pod execution + (e.g. due to a pod label update), the system may + or may not try to eventually evict the pod from + its node. When there are multiple elements, the + lists of nodes corresponding to each podAffinityTerm + are intersected, i.e. all terms must be satisfied. + items: + description: Defines a set of pods (namely those + matching the labelSelector relative to the given + namespace(s)) that this pod should be co-located + (affinity) or not co-located (anti-affinity) with, + where co-located is defined as running on a node + whose value of the label with key + matches that of any node on which a pod of the + set of pods is running + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of + string values. If the operator is + In or NotIn, the values array must + be non-empty. If the operator is + Exists or DoesNotExist, the values + array must be empty. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. The term is applied + to the union of the namespaces selected by + this field and the ones listed in the namespaces + field. null selector and null or empty namespaces + list means "this pod's namespace". An empty + selector ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of + string values. If the operator is + In or NotIn, the values array must + be non-empty. If the operator is + Exists or DoesNotExist, the values + array must be empty. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + namespaces: + description: namespaces specifies a static list + of namespace names that the term applies to. + The term is applied to the union of the namespaces + listed in this field and the ones selected + by namespaceSelector. null or empty namespaces + list and null namespaceSelector means "this + pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affinity) with the + pods matching the labelSelector in the specified + namespaces, where co-located is defined as + running on a node whose value of the label + with key topologyKey matches that of any node + on which any of the selected pods is running. + Empty topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + nodeSelector: + additionalProperties: + type: string + description: 'nodeSelector is the node selector applied to + the relevant kind of pods It specifies a map of key-value + pairs: for the pod to be eligible to run on a node, the + node must have each of the indicated key-value pairs as + labels (it can have additional labels as well). See https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector' + type: object + tolerations: + description: tolerations is a list of tolerations applied + to the relevant kind of pods See https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ + for more info. These are additional tolerations other than + default ones. + items: + description: The pod this Toleration is attached to tolerates + any taint that matches the triple using + the matching operator . + properties: + effect: + description: Effect indicates the taint effect to match. + Empty means match all taint effects. When specified, + allowed values are NoSchedule, PreferNoSchedule and + NoExecute. + type: string + key: + description: Key is the taint key that the toleration + applies to. Empty means match all taint keys. If the + key is empty, operator must be Exists; this combination + means to match all values and all keys. + type: string + operator: + description: Operator represents a key's relationship + to the value. Valid operators are Exists and Equal. + Defaults to Equal. Exists is equivalent to wildcard + for value, so that a pod can tolerate all taints of + a particular category. + type: string + tolerationSeconds: + description: TolerationSeconds represents the period + of time the toleration (which must be of effect NoExecute, + otherwise this field is ignored) tolerates the taint. + By default, it is not set, which means tolerate the + taint forever (do not evict). Zero and negative values + will be treated as 0 (evict immediately) by the system. + format: int64 + type: integer + value: + description: Value is the taint value the toleration + matches to. If the operator is Exists, the value should + be empty, otherwise just a regular string. + type: string + type: object + type: array + type: object + replicas: + description: 'replicas indicates how many replicas should be created + for each KubeVirt infrastructure component (like virt-api or + virt-controller). Defaults to 2. WARNING: this is an advanced + feature that prevents auto-scaling for core kubevirt components. + Please use with caution!' + type: integer + type: object + monitorAccount: + description: The name of the Prometheus service account that needs + read-access to KubeVirt endpoints Defaults to prometheus-k8s + type: string + monitorNamespace: + description: The namespace Prometheus is deployed in Defaults to openshift-monitor + type: string + productComponent: + description: Designate the apps.kubevirt.io/component label for KubeVirt + components. Useful if KubeVirt is included as part of a product. + If ProductComponent is not specified, the component label default + value is kubevirt. + type: string + productName: + description: Designate the apps.kubevirt.io/part-of label for KubeVirt + components. Useful if KubeVirt is included as part of a product. + If ProductName is not specified, the part-of label will be omitted. + type: string + productVersion: + description: Designate the apps.kubevirt.io/version label for KubeVirt + components. Useful if KubeVirt is included as part of a product. + If ProductVersion is not specified, KubeVirt's version will be used. + type: string + serviceMonitorNamespace: + description: The namespace the service monitor will be deployed When + ServiceMonitorNamespace is set, then we'll install the service monitor + object in that namespace otherwise we will use the monitoring namespace. + type: string + uninstallStrategy: + description: Specifies if kubevirt can be deleted if workloads are + still present. This is mainly a precaution to avoid accidental data + loss + type: string + workloadUpdateStrategy: + description: WorkloadUpdateStrategy defines at the cluster level how + to handle automated workload updates + properties: + batchEvictionInterval: + description: "BatchEvictionInterval Represents the interval to + wait before issuing the next batch of shutdowns \n Defaults + to 1 minute" + type: string + batchEvictionSize: + description: "BatchEvictionSize Represents the number of VMIs + that can be forced updated per the BatchShutdownInteral interval + \n Defaults to 10" + type: integer + workloadUpdateMethods: + description: "WorkloadUpdateMethods defines the methods that can + be used to disrupt workloads during automated workload updates. + When multiple methods are present, the least disruptive method + takes precedence over more disruptive methods. For example if + both LiveMigrate and Shutdown methods are listed, only VMs which + are not live migratable will be restarted/shutdown \n An empty + list defaults to no automated workload updating" + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + workloads: + description: selectors and tolerations that should apply to KubeVirt + workloads + properties: + nodePlacement: + description: nodePlacement describes scheduling configuration + for specific KubeVirt components + properties: + affinity: + description: affinity enables pod affinity/anti-affinity placement + expanding the types of constraints that can be expressed + with nodeSelector. affinity is going to be applied to the + relevant kind of pods in parallel with nodeSelector See + https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity + properties: + nodeAffinity: + description: Describes node affinity scheduling rules + for the pod. + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule + pods to nodes that satisfy the affinity expressions + specified by this field, but it may choose a node + that violates one or more of the expressions. The + node that is most preferred is the one with the + greatest sum of weights, i.e. for each node that + meets all of the scheduling requirements (resource + request, requiredDuringScheduling affinity expressions, + etc.), compute a sum by iterating through the elements + of this field and adding "weight" to the sum if + the node matches the corresponding matchExpressions; + the node(s) with the highest sum are the most preferred. + items: + description: An empty preferred scheduling term + matches all objects with implicit weight 0 (i.e. + it's a no-op). A null preferred scheduling term + matches no objects (i.e. is also a no-op). + properties: + preference: + description: A node selector term, associated + with the corresponding weight. + properties: + matchExpressions: + description: A list of node selector requirements + by node's labels. + items: + description: A node selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that the + selector applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. + If the operator is Gt or Lt, the + values array must have a single + element, which will be interpreted + as an integer. This array is replaced + during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector requirements + by node's fields. + items: + description: A node selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that the + selector applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. + If the operator is Gt or Lt, the + values array must have a single + element, which will be interpreted + as an integer. This array is replaced + during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + description: Weight associated with matching + the corresponding nodeSelectorTerm, in the + range 1-100. + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified + by this field are not met at scheduling time, the + pod will not be scheduled onto the node. If the + affinity requirements specified by this field cease + to be met at some point during pod execution (e.g. + due to an update), the system may or may not try + to eventually evict the pod from its node. + properties: + nodeSelectorTerms: + description: Required. A list of node selector + terms. The terms are ORed. + items: + description: A null or empty node selector term + matches no objects. The requirements of them + are ANDed. The TopologySelectorTerm type implements + a subset of the NodeSelectorTerm. + properties: + matchExpressions: + description: A list of node selector requirements + by node's labels. + items: + description: A node selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that the + selector applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. + If the operator is Gt or Lt, the + values array must have a single + element, which will be interpreted + as an integer. This array is replaced + during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector requirements + by node's fields. + items: + description: A node selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that the + selector applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. + If the operator is Gt or Lt, the + values array must have a single + element, which will be interpreted + as an integer. This array is replaced + during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + description: Describes pod affinity scheduling rules (e.g. + co-locate this pod in the same node, zone, etc. as some + other pod(s)). + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule + pods to nodes that satisfy the affinity expressions + specified by this field, but it may choose a node + that violates one or more of the expressions. The + node that is most preferred is the one with the + greatest sum of weights, i.e. for each node that + meets all of the scheduling requirements (resource + request, requiredDuringScheduling affinity expressions, + etc.), compute a sum by iterating through the elements + of this field and adding "weight" to the sum if + the node has pods which matches the corresponding + podAffinityTerm; the node(s) with the highest sum + are the most preferred. + items: + description: The weights of all of the matched WeightedPodAffinityTerm + fields are added per-node to find the most preferred + node(s) + properties: + podAffinityTerm: + description: Required. A pod affinity term, + associated with the corresponding weight. + properties: + labelSelector: + description: A label query over a set of + resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The + requirements are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a set + of values. Valid operators are + In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array + of string values. If the operator + is In or NotIn, the values array + must be non-empty. If the operator + is Exists or DoesNotExist, the + values array must be empty. + This array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of + {key,value} pairs. A single {key,value} + in the matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are + ANDed. + type: object + type: object + namespaceSelector: + description: A label query over the set + of namespaces that the term applies to. + The term is applied to the union of the + namespaces selected by this field and + the ones listed in the namespaces field. + null selector and null or empty namespaces + list means "this pod's namespace". An + empty selector ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The + requirements are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a set + of values. Valid operators are + In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array + of string values. If the operator + is In or NotIn, the values array + must be non-empty. If the operator + is Exists or DoesNotExist, the + values array must be empty. + This array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of + {key,value} pairs. A single {key,value} + in the matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are + ANDed. + type: object + type: object + namespaces: + description: namespaces specifies a static + list of namespace names that the term + applies to. The term is applied to the + union of the namespaces listed in this + field and the ones selected by namespaceSelector. + null or empty namespaces list and null + namespaceSelector means "this pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affinity) + with the pods matching the labelSelector + in the specified namespaces, where co-located + is defined as running on a node whose + value of the label with key topologyKey + matches that of any node on which any + of the selected pods is running. Empty + topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + weight: + description: weight associated with matching + the corresponding podAffinityTerm, in the + range 1-100. + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified + by this field are not met at scheduling time, the + pod will not be scheduled onto the node. If the + affinity requirements specified by this field cease + to be met at some point during pod execution (e.g. + due to a pod label update), the system may or may + not try to eventually evict the pod from its node. + When there are multiple elements, the lists of nodes + corresponding to each podAffinityTerm are intersected, + i.e. all terms must be satisfied. + items: + description: Defines a set of pods (namely those + matching the labelSelector relative to the given + namespace(s)) that this pod should be co-located + (affinity) or not co-located (anti-affinity) with, + where co-located is defined as running on a node + whose value of the label with key + matches that of any node on which a pod of the + set of pods is running + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of + string values. If the operator is + In or NotIn, the values array must + be non-empty. If the operator is + Exists or DoesNotExist, the values + array must be empty. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. The term is applied + to the union of the namespaces selected by + this field and the ones listed in the namespaces + field. null selector and null or empty namespaces + list means "this pod's namespace". An empty + selector ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of + string values. If the operator is + In or NotIn, the values array must + be non-empty. If the operator is + Exists or DoesNotExist, the values + array must be empty. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + namespaces: + description: namespaces specifies a static list + of namespace names that the term applies to. + The term is applied to the union of the namespaces + listed in this field and the ones selected + by namespaceSelector. null or empty namespaces + list and null namespaceSelector means "this + pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affinity) with the + pods matching the labelSelector in the specified + namespaces, where co-located is defined as + running on a node whose value of the label + with key topologyKey matches that of any node + on which any of the selected pods is running. + Empty topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + description: Describes pod anti-affinity scheduling rules + (e.g. avoid putting this pod in the same node, zone, + etc. as some other pod(s)). + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule + pods to nodes that satisfy the anti-affinity expressions + specified by this field, but it may choose a node + that violates one or more of the expressions. The + node that is most preferred is the one with the + greatest sum of weights, i.e. for each node that + meets all of the scheduling requirements (resource + request, requiredDuringScheduling anti-affinity + expressions, etc.), compute a sum by iterating through + the elements of this field and adding "weight" to + the sum if the node has pods which matches the corresponding + podAffinityTerm; the node(s) with the highest sum + are the most preferred. + items: + description: The weights of all of the matched WeightedPodAffinityTerm + fields are added per-node to find the most preferred + node(s) + properties: + podAffinityTerm: + description: Required. A pod affinity term, + associated with the corresponding weight. + properties: + labelSelector: + description: A label query over a set of + resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The + requirements are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a set + of values. Valid operators are + In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array + of string values. If the operator + is In or NotIn, the values array + must be non-empty. If the operator + is Exists or DoesNotExist, the + values array must be empty. + This array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of + {key,value} pairs. A single {key,value} + in the matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are + ANDed. + type: object + type: object + namespaceSelector: + description: A label query over the set + of namespaces that the term applies to. + The term is applied to the union of the + namespaces selected by this field and + the ones listed in the namespaces field. + null selector and null or empty namespaces + list means "this pod's namespace". An + empty selector ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The + requirements are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a set + of values. Valid operators are + In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array + of string values. If the operator + is In or NotIn, the values array + must be non-empty. If the operator + is Exists or DoesNotExist, the + values array must be empty. + This array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of + {key,value} pairs. A single {key,value} + in the matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are + ANDed. + type: object + type: object + namespaces: + description: namespaces specifies a static + list of namespace names that the term + applies to. The term is applied to the + union of the namespaces listed in this + field and the ones selected by namespaceSelector. + null or empty namespaces list and null + namespaceSelector means "this pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affinity) + with the pods matching the labelSelector + in the specified namespaces, where co-located + is defined as running on a node whose + value of the label with key topologyKey + matches that of any node on which any + of the selected pods is running. Empty + topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + weight: + description: weight associated with matching + the corresponding podAffinityTerm, in the + range 1-100. + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the anti-affinity requirements specified + by this field are not met at scheduling time, the + pod will not be scheduled onto the node. If the + anti-affinity requirements specified by this field + cease to be met at some point during pod execution + (e.g. due to a pod label update), the system may + or may not try to eventually evict the pod from + its node. When there are multiple elements, the + lists of nodes corresponding to each podAffinityTerm + are intersected, i.e. all terms must be satisfied. + items: + description: Defines a set of pods (namely those + matching the labelSelector relative to the given + namespace(s)) that this pod should be co-located + (affinity) or not co-located (anti-affinity) with, + where co-located is defined as running on a node + whose value of the label with key + matches that of any node on which a pod of the + set of pods is running + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of + string values. If the operator is + In or NotIn, the values array must + be non-empty. If the operator is + Exists or DoesNotExist, the values + array must be empty. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. The term is applied + to the union of the namespaces selected by + this field and the ones listed in the namespaces + field. null selector and null or empty namespaces + list means "this pod's namespace". An empty + selector ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of + string values. If the operator is + In or NotIn, the values array must + be non-empty. If the operator is + Exists or DoesNotExist, the values + array must be empty. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + namespaces: + description: namespaces specifies a static list + of namespace names that the term applies to. + The term is applied to the union of the namespaces + listed in this field and the ones selected + by namespaceSelector. null or empty namespaces + list and null namespaceSelector means "this + pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affinity) with the + pods matching the labelSelector in the specified + namespaces, where co-located is defined as + running on a node whose value of the label + with key topologyKey matches that of any node + on which any of the selected pods is running. + Empty topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + nodeSelector: + additionalProperties: + type: string + description: 'nodeSelector is the node selector applied to + the relevant kind of pods It specifies a map of key-value + pairs: for the pod to be eligible to run on a node, the + node must have each of the indicated key-value pairs as + labels (it can have additional labels as well). See https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector' + type: object + tolerations: + description: tolerations is a list of tolerations applied + to the relevant kind of pods See https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ + for more info. These are additional tolerations other than + default ones. + items: + description: The pod this Toleration is attached to tolerates + any taint that matches the triple using + the matching operator . + properties: + effect: + description: Effect indicates the taint effect to match. + Empty means match all taint effects. When specified, + allowed values are NoSchedule, PreferNoSchedule and + NoExecute. + type: string + key: + description: Key is the taint key that the toleration + applies to. Empty means match all taint keys. If the + key is empty, operator must be Exists; this combination + means to match all values and all keys. + type: string + operator: + description: Operator represents a key's relationship + to the value. Valid operators are Exists and Equal. + Defaults to Equal. Exists is equivalent to wildcard + for value, so that a pod can tolerate all taints of + a particular category. + type: string + tolerationSeconds: + description: TolerationSeconds represents the period + of time the toleration (which must be of effect NoExecute, + otherwise this field is ignored) tolerates the taint. + By default, it is not set, which means tolerate the + taint forever (do not evict). Zero and negative values + will be treated as 0 (evict immediately) by the system. + format: int64 + type: integer + value: + description: Value is the taint value the toleration + matches to. If the operator is Exists, the value should + be empty, otherwise just a regular string. + type: string + type: object + type: array + type: object + replicas: + description: 'replicas indicates how many replicas should be created + for each KubeVirt infrastructure component (like virt-api or + virt-controller). Defaults to 2. WARNING: this is an advanced + feature that prevents auto-scaling for core kubevirt components. + Please use with caution!' + type: integer + type: object + type: object + status: + description: KubeVirtStatus represents information pertaining to a KubeVirt + deployment. + properties: + conditions: + items: + description: KubeVirtCondition represents a condition of a KubeVirt + deployment + properties: + lastProbeTime: + format: date-time + nullable: true + type: string + lastTransitionTime: + format: date-time + nullable: true + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + required: + - status + - type + type: object + type: array + defaultArchitecture: + type: string + generations: + items: + description: GenerationStatus keeps track of the generation for + a given resource so that decisions about forced updates can be + made. + properties: + group: + description: group is the group of the thing you're tracking + type: string + hash: + description: hash is an optional field set for resources without + generation that are content sensitive like secrets and configmaps + type: string + lastGeneration: + description: lastGeneration is the last generation of the workload + controller involved + format: int64 + type: integer + name: + description: name is the name of the thing you're tracking + type: string + namespace: + description: namespace is where the thing you're tracking is + type: string + resource: + description: resource is the resource type of the thing you're + tracking + type: string + required: + - group + - lastGeneration + - name + - resource + type: object + type: array + x-kubernetes-list-type: atomic + observedDeploymentConfig: + type: string + observedDeploymentID: + type: string + observedGeneration: + format: int64 + type: integer + observedKubeVirtRegistry: + type: string + observedKubeVirtVersion: + type: string + operatorVersion: + type: string + outdatedVirtualMachineInstanceWorkloads: + type: integer + phase: + description: KubeVirtPhase is a label for the phase of a KubeVirt + deployment at the current time. + type: string + targetDeploymentConfig: + type: string + targetDeploymentID: + type: string + targetKubeVirtRegistry: + type: string + targetKubeVirtVersion: + type: string + type: object + required: + - spec + type: object + served: true + storage: false + subresources: + status: {} + +--- +apiVersion: scheduling.k8s.io/v1 +kind: PriorityClass +metadata: + name: kubevirt-cluster-critical +value: 1000000000 +globalDefault: false +description: "This priority class should be used for core kubevirt components only." +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: kubevirt.io:operator + labels: + operator.kubevirt.io: "" + rbac.authorization.k8s.io/aggregate-to-admin: "true" +rules: + - apiGroups: + - kubevirt.io + resources: + - kubevirts + verbs: + - get + - delete + - create + - update + - patch + - list + - watch + - deletecollection +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + kubevirt.io: "" + name: kubevirt-operator + namespace: kubevirt +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + kubevirt.io: "" + name: kubevirt-operator + namespace: kubevirt +rules: +- apiGroups: + - "" + resourceNames: + - kubevirt-ca + - kubevirt-export-ca + - kubevirt-virt-handler-certs + - kubevirt-virt-handler-server-certs + - kubevirt-operator-certs + - kubevirt-virt-api-certs + - kubevirt-controller-certs + - kubevirt-exportproxy-certs + resources: + - secrets + verbs: + - create + - get + - list + - watch + - patch + - delete +- apiGroups: + - "" + resources: + - configmaps + verbs: + - create + - get + - list + - watch + - patch + - delete +- apiGroups: + - route.openshift.io + resources: + - routes + verbs: + - create + - get + - list + - watch + - patch + - delete +- apiGroups: + - route.openshift.io + resources: + - routes/custom-host + verbs: + - create +- apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - list + - watch + - delete + - update + - create + - patch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + kubevirt.io: "" + name: kubevirt-operator-rolebinding + namespace: kubevirt +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: kubevirt-operator +subjects: +- kind: ServiceAccount + name: kubevirt-operator + namespace: kubevirt +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + kubevirt.io: "" + name: kubevirt-operator +rules: +- apiGroups: + - kubevirt.io + resources: + - kubevirts + verbs: + - get + - list + - watch + - patch + - update + - patch +- apiGroups: + - "" + resources: + - serviceaccounts + - services + - endpoints + - pods/exec + verbs: + - get + - list + - watch + - create + - update + - delete + - patch +- apiGroups: + - "" + resources: + - configmaps + verbs: + - patch + - delete +- apiGroups: + - batch + resources: + - jobs + verbs: + - get + - list + - watch + - create + - delete + - patch +- apiGroups: + - apps + resources: + - controllerrevisions + verbs: + - watch + - list + - create + - delete + - patch +- apiGroups: + - apps + resources: + - deployments + - daemonsets + verbs: + - get + - list + - watch + - create + - delete + - patch +- apiGroups: + - rbac.authorization.k8s.io + resources: + - clusterroles + - clusterrolebindings + - roles + - rolebindings + verbs: + - get + - list + - watch + - create + - delete + - patch + - update +- apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - get + - list + - watch + - create + - delete + - patch +- apiGroups: + - security.openshift.io + resources: + - securitycontextconstraints + verbs: + - create + - get + - list + - watch +- apiGroups: + - security.openshift.io + resourceNames: + - privileged + resources: + - securitycontextconstraints + verbs: + - get + - patch + - update +- apiGroups: + - security.openshift.io + resourceNames: + - kubevirt-handler + - kubevirt-controller + resources: + - securitycontextconstraints + verbs: + - get + - list + - watch + - update + - delete +- apiGroups: + - admissionregistration.k8s.io + resources: + - validatingwebhookconfigurations + - mutatingwebhookconfigurations + verbs: + - get + - list + - watch + - create + - delete + - update + - patch +- apiGroups: + - apiregistration.k8s.io + resources: + - apiservices + verbs: + - get + - list + - watch + - create + - delete + - update + - patch +- apiGroups: + - monitoring.coreos.com + resources: + - servicemonitors + - prometheusrules + verbs: + - get + - list + - watch + - create + - delete + - update + - patch +- apiGroups: + - "" + resources: + - namespaces + verbs: + - get + - list + - watch + - patch +- apiGroups: + - "" + resources: + - pods + verbs: + - get + - list + - delete + - patch +- apiGroups: + - kubevirt.io + resources: + - virtualmachines + - virtualmachineinstances + verbs: + - get + - list + - watch + - patch + - update +- apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - get +- apiGroups: + - kubevirt.io + resources: + - virtualmachines/status + verbs: + - patch +- apiGroups: + - kubevirt.io + resources: + - virtualmachineinstancemigrations + verbs: + - create + - get + - list + - watch + - patch +- apiGroups: + - kubevirt.io + resources: + - virtualmachineinstancepresets + verbs: + - watch + - list +- apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - limitranges + verbs: + - watch + - list +- apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - get + - list + - watch +- apiGroups: + - kubevirt.io + resources: + - kubevirts + verbs: + - get + - list + - watch +- apiGroups: + - snapshot.kubevirt.io + resources: + - virtualmachinesnapshots + - virtualmachinerestores + - virtualmachinesnapshotcontents + verbs: + - get + - list + - watch +- apiGroups: + - cdi.kubevirt.io + resources: + - datasources + - datavolumes + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - namespaces + verbs: + - get + - list + - watch +- apiGroups: + - instancetype.kubevirt.io + resources: + - virtualmachineinstancetypes + - virtualmachineclusterinstancetypes + - virtualmachinepreferences + - virtualmachineclusterpreferences + verbs: + - get + - list + - watch +- apiGroups: + - migrations.kubevirt.io + resources: + - migrationpolicies + verbs: + - get + - list + - watch +- apiGroups: + - apps + resources: + - controllerrevisions + verbs: + - create + - list + - get +- apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - namespaces + verbs: + - get + - list + - watch + - patch +- apiGroups: + - policy + resources: + - poddisruptionbudgets + verbs: + - get + - list + - watch + - delete + - create + - patch +- apiGroups: + - "" + resources: + - pods + - configmaps + - endpoints + - services + verbs: + - get + - list + - watch + - delete + - update + - create + - patch +- apiGroups: + - "" + resources: + - events + verbs: + - update + - create + - patch +- apiGroups: + - "" + resources: + - secrets + verbs: + - create +- apiGroups: + - "" + resources: + - pods/finalizers + verbs: + - update +- apiGroups: + - "" + resources: + - pods/eviction + verbs: + - create +- apiGroups: + - "" + resources: + - pods/status + verbs: + - patch +- apiGroups: + - "" + resources: + - nodes + verbs: + - get + - list + - watch + - update + - patch +- apiGroups: + - apps + resources: + - daemonsets + verbs: + - list +- apiGroups: + - apps + resources: + - controllerrevisions + verbs: + - watch + - list + - create + - delete + - get + - update +- apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - get + - list + - watch + - create + - update + - delete + - patch +- apiGroups: + - snapshot.kubevirt.io + resources: + - '*' + verbs: + - '*' +- apiGroups: + - export.kubevirt.io + resources: + - '*' + verbs: + - '*' +- apiGroups: + - pool.kubevirt.io + resources: + - virtualmachinepools + - virtualmachinepools/finalizers + - virtualmachinepools/status + - virtualmachinepools/scale + verbs: + - watch + - list + - create + - delete + - update + - patch + - get +- apiGroups: + - kubevirt.io + resources: + - '*' + verbs: + - '*' +- apiGroups: + - subresources.kubevirt.io + resources: + - virtualmachineinstances/addvolume + - virtualmachineinstances/removevolume + - virtualmachineinstances/freeze + - virtualmachineinstances/unfreeze + - virtualmachineinstances/softreboot + - virtualmachineinstances/sev/setupsession + - virtualmachineinstances/sev/injectlaunchsecret + verbs: + - update +- apiGroups: + - cdi.kubevirt.io + resources: + - '*' + verbs: + - '*' +- apiGroups: + - k8s.cni.cncf.io + resources: + - network-attachment-definitions + verbs: + - get +- apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - get + - list + - watch +- apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create +- apiGroups: + - snapshot.storage.k8s.io + resources: + - volumesnapshotclasses + verbs: + - get + - list + - watch +- apiGroups: + - snapshot.storage.k8s.io + resources: + - volumesnapshots + verbs: + - get + - list + - watch + - create + - update + - delete +- apiGroups: + - storage.k8s.io + resources: + - storageclasses + verbs: + - get + - list + - watch +- apiGroups: + - instancetype.kubevirt.io + resources: + - virtualmachineinstancetypes + - virtualmachineclusterinstancetypes + - virtualmachinepreferences + - virtualmachineclusterpreferences + verbs: + - get + - list + - watch +- apiGroups: + - migrations.kubevirt.io + resources: + - migrationpolicies + verbs: + - get + - list + - watch +- apiGroups: + - clone.kubevirt.io + resources: + - virtualmachineclones + - virtualmachineclones/status + - virtualmachineclones/finalizers + verbs: + - get + - list + - watch + - update + - patch + - delete +- apiGroups: + - "" + resources: + - namespaces + verbs: + - get +- apiGroups: + - "" + resources: + - resourcequotas + verbs: + - list + - watch +- apiGroups: + - route.openshift.io + resources: + - routes + verbs: + - list + - get + - watch +- apiGroups: + - "" + resources: + - secrets + verbs: + - list + - get + - watch +- apiGroups: + - networking.k8s.io + resources: + - ingresses + verbs: + - list + - get + - watch +- apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - list + - watch + - delete + - update + - create + - patch +- apiGroups: + - kubevirt.io + resources: + - virtualmachineinstances + verbs: + - update + - list + - watch +- apiGroups: + - "" + resources: + - nodes + verbs: + - patch + - list + - watch + - get +- apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - events + verbs: + - create + - patch +- apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - get + - list + - watch +- apiGroups: + - kubevirt.io + resources: + - kubevirts + verbs: + - get + - list + - watch +- apiGroups: + - migrations.kubevirt.io + resources: + - migrationpolicies + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - list + - watch +- apiGroups: + - export.kubevirt.io + resources: + - virtualmachineexports + verbs: + - get + - list + - watch +- apiGroups: + - kubevirt.io + resources: + - kubevirts + verbs: + - list + - watch +- apiGroups: + - "" + resourceNames: + - kubevirt-export-ca + resources: + - configmaps + verbs: + - get + - list + - watch +- apiGroups: + - kubevirt.io + resources: + - kubevirts + verbs: + - get + - list +- apiGroups: + - subresources.kubevirt.io + resources: + - version + - guestfs + verbs: + - get + - list +- apiGroups: + - subresources.kubevirt.io + resources: + - virtualmachineinstances/console + - virtualmachineinstances/vnc + - virtualmachineinstances/vnc/screenshot + - virtualmachineinstances/portforward + - virtualmachineinstances/guestosinfo + - virtualmachineinstances/filesystemlist + - virtualmachineinstances/userlist + - virtualmachineinstances/sev/fetchcertchain + - virtualmachineinstances/sev/querylaunchmeasurement + verbs: + - get +- apiGroups: + - subresources.kubevirt.io + resources: + - virtualmachineinstances/pause + - virtualmachineinstances/unpause + - virtualmachineinstances/addvolume + - virtualmachineinstances/removevolume + - virtualmachineinstances/freeze + - virtualmachineinstances/unfreeze + - virtualmachineinstances/softreboot + - virtualmachineinstances/sev/setupsession + - virtualmachineinstances/sev/injectlaunchsecret + verbs: + - update +- apiGroups: + - subresources.kubevirt.io + resources: + - virtualmachines/expand-spec + - virtualmachines/portforward + verbs: + - get +- apiGroups: + - subresources.kubevirt.io + resources: + - virtualmachines/start + - virtualmachines/stop + - virtualmachines/restart + - virtualmachines/addvolume + - virtualmachines/removevolume + - virtualmachines/migrate + - virtualmachines/memorydump + verbs: + - update +- apiGroups: + - subresources.kubevirt.io + resources: + - expand-vm-spec + verbs: + - update +- apiGroups: + - kubevirt.io + resources: + - virtualmachines + - virtualmachineinstances + - virtualmachineinstancepresets + - virtualmachineinstancereplicasets + - virtualmachineinstancemigrations + verbs: + - get + - delete + - create + - update + - patch + - list + - watch + - deletecollection +- apiGroups: + - snapshot.kubevirt.io + resources: + - virtualmachinesnapshots + - virtualmachinesnapshotcontents + - virtualmachinerestores + verbs: + - get + - delete + - create + - update + - patch + - list + - watch + - deletecollection +- apiGroups: + - export.kubevirt.io + resources: + - virtualmachineexports + verbs: + - get + - delete + - create + - update + - patch + - list + - watch + - deletecollection +- apiGroups: + - clone.kubevirt.io + resources: + - virtualmachineclones + verbs: + - get + - delete + - create + - update + - patch + - list + - watch + - deletecollection +- apiGroups: + - instancetype.kubevirt.io + resources: + - virtualmachineinstancetypes + - virtualmachineclusterinstancetypes + - virtualmachinepreferences + - virtualmachineclusterpreferences + verbs: + - get + - delete + - create + - update + - patch + - list + - watch + - deletecollection +- apiGroups: + - pool.kubevirt.io + resources: + - virtualmachinepools + verbs: + - get + - delete + - create + - update + - patch + - list + - watch + - deletecollection +- apiGroups: + - migrations.kubevirt.io + resources: + - migrationpolicies + verbs: + - get + - list + - watch +- apiGroups: + - subresources.kubevirt.io + resources: + - virtualmachineinstances/console + - virtualmachineinstances/vnc + - virtualmachineinstances/vnc/screenshot + - virtualmachineinstances/portforward + - virtualmachineinstances/guestosinfo + - virtualmachineinstances/filesystemlist + - virtualmachineinstances/userlist + - virtualmachineinstances/sev/fetchcertchain + - virtualmachineinstances/sev/querylaunchmeasurement + verbs: + - get +- apiGroups: + - subresources.kubevirt.io + resources: + - virtualmachineinstances/pause + - virtualmachineinstances/unpause + - virtualmachineinstances/addvolume + - virtualmachineinstances/removevolume + - virtualmachineinstances/freeze + - virtualmachineinstances/unfreeze + - virtualmachineinstances/softreboot + - virtualmachineinstances/sev/setupsession + - virtualmachineinstances/sev/injectlaunchsecret + verbs: + - update +- apiGroups: + - subresources.kubevirt.io + resources: + - virtualmachines/expand-spec + - virtualmachines/portforward + verbs: + - get +- apiGroups: + - subresources.kubevirt.io + resources: + - virtualmachines/start + - virtualmachines/stop + - virtualmachines/restart + - virtualmachines/addvolume + - virtualmachines/removevolume + - virtualmachines/migrate + - virtualmachines/memorydump + verbs: + - update +- apiGroups: + - subresources.kubevirt.io + resources: + - expand-vm-spec + verbs: + - update +- apiGroups: + - kubevirt.io + resources: + - virtualmachines + - virtualmachineinstances + - virtualmachineinstancepresets + - virtualmachineinstancereplicasets + - virtualmachineinstancemigrations + verbs: + - get + - delete + - create + - update + - patch + - list + - watch +- apiGroups: + - snapshot.kubevirt.io + resources: + - virtualmachinesnapshots + - virtualmachinesnapshotcontents + - virtualmachinerestores + verbs: + - get + - delete + - create + - update + - patch + - list + - watch +- apiGroups: + - export.kubevirt.io + resources: + - virtualmachineexports + verbs: + - get + - delete + - create + - update + - patch + - list + - watch +- apiGroups: + - clone.kubevirt.io + resources: + - virtualmachineclones + verbs: + - get + - delete + - create + - update + - patch + - list + - watch +- apiGroups: + - instancetype.kubevirt.io + resources: + - virtualmachineinstancetypes + - virtualmachineclusterinstancetypes + - virtualmachinepreferences + - virtualmachineclusterpreferences + verbs: + - get + - delete + - create + - update + - patch + - list + - watch +- apiGroups: + - pool.kubevirt.io + resources: + - virtualmachinepools + verbs: + - get + - delete + - create + - update + - patch + - list + - watch +- apiGroups: + - kubevirt.io + resources: + - kubevirts + verbs: + - get + - list +- apiGroups: + - migrations.kubevirt.io + resources: + - migrationpolicies + verbs: + - get + - list + - watch +- apiGroups: + - kubevirt.io + resources: + - kubevirts + verbs: + - get + - list +- apiGroups: + - subresources.kubevirt.io + resources: + - virtualmachines/expand-spec + - virtualmachineinstances/guestosinfo + - virtualmachineinstances/filesystemlist + - virtualmachineinstances/userlist + - virtualmachineinstances/sev/fetchcertchain + - virtualmachineinstances/sev/querylaunchmeasurement + verbs: + - get +- apiGroups: + - subresources.kubevirt.io + resources: + - expand-vm-spec + verbs: + - update +- apiGroups: + - kubevirt.io + resources: + - virtualmachines + - virtualmachineinstances + - virtualmachineinstancepresets + - virtualmachineinstancereplicasets + - virtualmachineinstancemigrations + verbs: + - get + - list + - watch +- apiGroups: + - snapshot.kubevirt.io + resources: + - virtualmachinesnapshots + - virtualmachinesnapshotcontents + - virtualmachinerestores + verbs: + - get + - list + - watch +- apiGroups: + - export.kubevirt.io + resources: + - virtualmachineexports + verbs: + - get + - list + - watch +- apiGroups: + - clone.kubevirt.io + resources: + - virtualmachineclones + verbs: + - get + - list + - watch +- apiGroups: + - instancetype.kubevirt.io + resources: + - virtualmachineinstancetypes + - virtualmachineclusterinstancetypes + - virtualmachinepreferences + - virtualmachineclusterpreferences + verbs: + - get + - list + - watch +- apiGroups: + - pool.kubevirt.io + resources: + - virtualmachinepools + verbs: + - get + - list + - watch +- apiGroups: + - migrations.kubevirt.io + resources: + - migrationpolicies + verbs: + - get + - list + - watch +- apiGroups: + - instancetype.kubevirt.io + resources: + - virtualmachineclusterinstancetypes + - virtualmachineclusterpreferences + verbs: + - get + - list + - watch +- apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create +- apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + kubevirt.io: "" + name: kubevirt-operator +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: kubevirt-operator +subjects: +- kind: ServiceAccount + name: kubevirt-operator + namespace: kubevirt + +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + kubevirt.io: virt-operator + name: virt-operator + namespace: kubevirt +spec: + replicas: 2 + selector: + matchLabels: + kubevirt.io: virt-operator + strategy: + type: RollingUpdate + template: + metadata: + labels: + kubevirt.io: virt-operator + name: virt-operator + prometheus.kubevirt.io: "true" + name: virt-operator + spec: + affinity: + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - podAffinityTerm: + labelSelector: + matchExpressions: + - key: kubevirt.io + operator: In + values: + - virt-operator + topologyKey: kubernetes.io/hostname + weight: 1 + containers: + - args: + - --port + - "8443" + - -v + - "2" + command: + - virt-operator + env: + - name: VIRT_OPERATOR_IMAGE + value: quay.io/kubevirt/virt-operator:v1.2.2 + - name: WATCH_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.annotations['olm.targetNamespaces'] + - name: KUBEVIRT_VERSION + value: v1.2.2 + image: quay.io/kubevirt/virt-operator:v1.2.2 + imagePullPolicy: IfNotPresent + name: virt-operator + ports: + - containerPort: 8443 + name: metrics + protocol: TCP + - containerPort: 8444 + name: webhooks + protocol: TCP + readinessProbe: + httpGet: + path: /metrics + port: 8443 + scheme: HTTPS + initialDelaySeconds: 5 + timeoutSeconds: 10 + resources: + requests: + cpu: 10m + memory: 450Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + seccompProfile: + type: RuntimeDefault + volumeMounts: + - mountPath: /etc/virt-operator/certificates + name: kubevirt-operator-certs + readOnly: true + - mountPath: /profile-data + name: profile-data + nodeSelector: + kubernetes.io/os: linux + priorityClassName: kubevirt-cluster-critical + securityContext: + runAsNonRoot: true + seccompProfile: + type: RuntimeDefault + serviceAccountName: kubevirt-operator + tolerations: + - key: CriticalAddonsOnly + operator: Exists + volumes: + - name: kubevirt-operator-certs + secret: + optional: true + secretName: kubevirt-operator-certs + - emptyDir: {} + name: profile-data diff --git a/kubevirt_handler/tests/kind/vm.yaml b/kubevirt_handler/tests/kind/vm.yaml new file mode 100644 index 0000000000000..66c23f2cd1ae9 --- /dev/null +++ b/kubevirt_handler/tests/kind/vm.yaml @@ -0,0 +1,37 @@ +apiVersion: kubevirt.io/v1 +kind: VirtualMachine +metadata: + name: testvm +spec: + running: false + template: + metadata: + labels: + kubevirt.io/size: small + kubevirt.io/domain: testvm + spec: + domain: + devices: + disks: + - name: containerdisk + disk: + bus: virtio + - name: cloudinitdisk + disk: + bus: virtio + interfaces: + - name: default + masquerade: {} + resources: + requests: + memory: 64M + networks: + - name: default + pod: {} + volumes: + - name: containerdisk + containerDisk: + image: quay.io/kubevirt/cirros-container-disk-demo + - name: cloudinitdisk + cloudInitNoCloud: + userDataBase64: SGkuXG4= diff --git a/kubevirt_handler/tests/test_e2e.py b/kubevirt_handler/tests/test_e2e.py new file mode 100644 index 0000000000000..a62a8e23d274f --- /dev/null +++ b/kubevirt_handler/tests/test_e2e.py @@ -0,0 +1,25 @@ +# (C) Datadog, Inc. 2024-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) + +import pytest + +pytestmark = [pytest.mark.e2e] + +healthz_tags = [ + "pod_name:virt-handler-98cf864cc-zkgcd", + "kube_namespace:kubevirt", +] + + +def test_e2e_connect_ok(dd_agent_check): + aggregator = dd_agent_check() + aggregator.assert_metric("kubevirt_handler.can_connect", value=1) + aggregator.assert_metric_has_tags("kubevirt_handler.can_connect", tags=healthz_tags) + + +def test_e2e_check_collects_kubevirt_handler_metrics(dd_agent_check): + aggregator = dd_agent_check() + aggregator.assert_metric("kubevirt_handler.can_connect", value=1) + aggregator.assert_metric_has_tags("kubevirt_handler.can_connect", tags=healthz_tags) + aggregator.assert_metric_has_tags("kubevirt_handler.info", tags=[]) diff --git a/kubevirt_handler/tests/test_unit.py b/kubevirt_handler/tests/test_unit.py new file mode 100644 index 0000000000000..feb3121468339 --- /dev/null +++ b/kubevirt_handler/tests/test_unit.py @@ -0,0 +1,179 @@ +# (C) Datadog, Inc. 2024-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) + + +import pytest + +from datadog_checks.dev.utils import get_metadata_metrics +from datadog_checks.kubevirt_handler import KubeVirtHandlerCheck + +from .conftest import mock_http_responses + +base_tags = [ + "pod_name:virt-handler-some-id", + "kube_namespace:kubevirt", +] + + +def test_check_collects_metrics(dd_run_check, aggregator, instance, mocker): + mocker.patch("requests.get", wraps=mock_http_responses) + check = KubeVirtHandlerCheck("kubevirt_handler", {}, [instance]) + dd_run_check(check) + + aggregator.assert_metric( + "kubevirt_handler.can_connect", + 1, + tags=["endpoint:https://127.0.0.1:8443/healthz", *base_tags], + ) + + metric_tags = [ + "kube_namespace:kubevirt", + "pod_name:virt-handler-some-id", + ] + + # aggregator.assert_metric_has_tags("kubevirt_handler.info", tags=metric_tags) # gauge + + aggregator.assert_metric_has_tags( + "kubevirt_handler.vmi.cpu_system_usage_seconds.count", tags=metric_tags + ) # counter + aggregator.assert_metric_has_tags("kubevirt_handler.vmi.cpu_usage_seconds.count", tags=metric_tags) # counter + aggregator.assert_metric_has_tags("kubevirt_handler.vmi.cpu_user_usage_seconds.count", tags=metric_tags) # counter + + aggregator.assert_metric_has_tags("kubevirt_handler.vmi.memory_actual_balloon_bytes", tags=metric_tags) # gauge + aggregator.assert_metric_has_tags("kubevirt_handler.vmi.memory_available_bytes", tags=metric_tags) # gauge + aggregator.assert_metric_has_tags("kubevirt_handler.vmi.memory_domain_bytes", tags=metric_tags) # gauge + aggregator.assert_metric_has_tags("kubevirt_handler.vmi.memory_pgmajfault.count", tags=metric_tags) # counter + aggregator.assert_metric_has_tags("kubevirt_handler.vmi.memory_pgminfault.count", tags=metric_tags) # counter + aggregator.assert_metric_has_tags("kubevirt_handler.vmi.memory_resident_bytes", tags=metric_tags) # gauge + aggregator.assert_metric_has_tags("kubevirt_handler.vmi.memory_swap_in_traffic_bytes", tags=metric_tags) # gauge + aggregator.assert_metric_has_tags("kubevirt_handler.vmi.memory_swap_out_traffic_bytes", tags=metric_tags) # gauge + aggregator.assert_metric_has_tags("kubevirt_handler.vmi.memory_unused_bytes", tags=metric_tags) # gauge + aggregator.assert_metric_has_tags("kubevirt_handler.vmi.memory_usable_bytes", tags=metric_tags) # gauge + + aggregator.assert_metric_has_tags("kubevirt_handler.vmi.network_receive_bytes.count", tags=metric_tags) # counter + aggregator.assert_metric_has_tags("kubevirt_handler.vmi.network_receive_errors.count", tags=metric_tags) # counter + aggregator.assert_metric_has_tags( + "kubevirt_handler.vmi.network_receive_packets_dropped.count", tags=metric_tags + ) # counter + aggregator.assert_metric_has_tags("kubevirt_handler.vmi.network_receive_packets.count", tags=metric_tags) # counter + aggregator.assert_metric_has_tags("kubevirt_handler.vmi.network_transmit_bytes.count", tags=metric_tags) # counter + aggregator.assert_metric_has_tags("kubevirt_handler.vmi.network_transmit_errors.count", tags=metric_tags) # counter + aggregator.assert_metric_has_tags( + "kubevirt_handler.vmi.network_transmit_packets_dropped.count", tags=metric_tags + ) # counter + aggregator.assert_metric_has_tags( + "kubevirt_handler.vmi.network_transmit_packets.count", tags=metric_tags + ) # counter + + aggregator.assert_metric_has_tags("kubevirt_handler.vmi.node_cpu_affinity", tags=metric_tags) # gauge + + aggregator.assert_metric_has_tags("kubevirt_handler.vmi.storage_flush_requests.count", tags=metric_tags) # counter + aggregator.assert_metric_has_tags( + "kubevirt_handler.vmi.storage_flush_times_seconds.count", tags=metric_tags + ) # counter + aggregator.assert_metric_has_tags("kubevirt_handler.vmi.storage_iops_read.count", tags=metric_tags) # counter + aggregator.assert_metric_has_tags("kubevirt_handler.vmi.storage_iops_write.count", tags=metric_tags) # counter + aggregator.assert_metric_has_tags( + "kubevirt_handler.vmi.storage_read_times_seconds.count", tags=metric_tags + ) # counter + aggregator.assert_metric_has_tags( + "kubevirt_handler.vmi.storage_read_traffic_bytes.count", tags=metric_tags + ) # counter + aggregator.assert_metric_has_tags( + "kubevirt_handler.vmi.storage_write_times_seconds.count", tags=metric_tags + ) # counter + aggregator.assert_metric_has_tags( + "kubevirt_handler.vmi.storage_write_traffic_bytes.count", tags=metric_tags + ) # counter + + aggregator.assert_metric_has_tags("kubevirt_handler.vmi.vcpu_delay_seconds.count", tags=metric_tags) # counter + aggregator.assert_metric_has_tags("kubevirt_handler.vmi.vcpu_seconds.count", tags=metric_tags) # counter + aggregator.assert_metric_has_tags("kubevirt_handler.vmi.vcpu_wait_seconds.count", tags=metric_tags) # counter + + aggregator.assert_metric_has_tags("kubevirt_handler.workqueue.adds.count", tags=metric_tags) # counter + aggregator.assert_metric_has_tags("kubevirt_handler.workqueue.depth", tags=metric_tags) # gauge + aggregator.assert_metric_has_tags( + "kubevirt_handler.workqueue.longest_running_processor_seconds", tags=metric_tags + ) # gauge + aggregator.assert_metric_has_tags( + "kubevirt_handler.workqueue.queue_duration_seconds.bucket", tags=metric_tags + ) # histogram + aggregator.assert_metric_has_tags( + "kubevirt_handler.workqueue.queue_duration_seconds.sum", tags=metric_tags + ) # histogram + aggregator.assert_metric_has_tags( + "kubevirt_handler.workqueue.queue_duration_seconds.count", tags=metric_tags + ) # histogram + aggregator.assert_metric_has_tags("kubevirt_handler.workqueue.retries.count", tags=metric_tags) # counter + aggregator.assert_metric_has_tags("kubevirt_handler.workqueue.unfinished_work_seconds", tags=metric_tags) # gauge + aggregator.assert_metric_has_tags( + "kubevirt_handler.workqueue.work_duration_seconds.bucket", tags=metric_tags + ) # histogram + aggregator.assert_metric_has_tags( + "kubevirt_handler.workqueue.work_duration_seconds.sum", tags=metric_tags + ) # histogram + aggregator.assert_metric_has_tags( + "kubevirt_handler.workqueue.work_duration_seconds.count", tags=metric_tags + ) # histogram + + aggregator.assert_all_metrics_covered() + aggregator.assert_metrics_using_metadata(get_metadata_metrics()) + + +def test_logs_warning_when_healthz_endpoint_is_missing(dd_run_check, aggregator, instance, mocker, caplog): + mocker.patch("requests.get", wraps=mock_http_responses) + del instance["kubevirt_handler_healthz_endpoint"] + check = KubeVirtHandlerCheck("kubevirt_handler", {}, [instance]) + dd_run_check(check) + assert ( + "Skipping health check. Please provide a `kubevirt_handler_healthz_endpoint` to ensure the health of the KubeVirt Handler." # noqa: E501 + in caplog.text + and "WARNING" in caplog.text + ) + + +def test_emits_can_connect_one_when_service_is_up(dd_run_check, aggregator, instance, mocker): + mocker.patch("requests.get", wraps=mock_http_responses) + check = KubeVirtHandlerCheck("kubevirt_handler", {}, [instance]) + dd_run_check(check) + aggregator.assert_metric( + "kubevirt_handler.can_connect", + 1, + tags=["endpoint:https://127.0.0.1:8443/healthz", *base_tags], + ) + + +def test_emits_can_connect_zero_when_service_is_down(dd_run_check, aggregator, instance): + check = KubeVirtHandlerCheck("kubevirt_handler", {}, [instance]) + with pytest.raises(Exception): + dd_run_check(check) + + aggregator.assert_metric( + "kubevirt_handler.can_connect", + 0, + tags=["endpoint:https://127.0.0.1:8443/healthz", *base_tags], + ) + + +def test_version_metadata(instance, dd_run_check, datadog_agent, aggregator, mocker): + mocker.patch("requests.get", wraps=mock_http_responses) + check = KubeVirtHandlerCheck("kubevirt_handler", {}, [instance]) + check.check_id = "test:123" + dd_run_check(check) + + aggregator.assert_metric( + "kubevirt_handler.can_connect", + 1, + tags=["endpoint:https://127.0.0.1:8443/healthz", *base_tags], + ) + + version_metadata = { + "version.scheme": "semver", + "version.major": "1", + "version.minor": "2", + "version.patch": "2", + "version.raw": "v1.2.2", + } + + datadog_agent.assert_metadata("test:123", version_metadata) From 51d16ea6c048f167ab742a15bf96c8b2a63a0f21 Mon Sep 17 00:00:00 2001 From: Kyle Neale Date: Fri, 27 Sep 2024 19:53:14 +0200 Subject: [PATCH 13/56] Bump `lxml` version for py3.12 E2E tests (#18637) * test e2e with docker build of Agent with py 3.12.6 * update lxml * bump lxml * add windows image * revert datadog/agent-dev images * add changelog --- agent_requirements.in | 2 +- ibm_was/changelog.d/18637.added | 1 + ibm_was/pyproject.toml | 2 +- sqlserver/changelog.d/18637.added | 1 + sqlserver/pyproject.toml | 2 +- 5 files changed, 5 insertions(+), 3 deletions(-) create mode 100644 ibm_was/changelog.d/18637.added create mode 100644 sqlserver/changelog.d/18637.added diff --git a/agent_requirements.in b/agent_requirements.in index 173fd9e7eb8dc..b4c724713e294 100644 --- a/agent_requirements.in +++ b/agent_requirements.in @@ -20,7 +20,7 @@ in-toto==2.0.0 jellyfish==1.1.0 kubernetes==30.1.0 ldap3==2.9.1 -lxml==4.9.4 +lxml==5.1.1 lz4==4.3.3 mmh3==4.1.0 oauthlib==3.2.2 diff --git a/ibm_was/changelog.d/18637.added b/ibm_was/changelog.d/18637.added new file mode 100644 index 0000000000000..03c3e7d117eb1 --- /dev/null +++ b/ibm_was/changelog.d/18637.added @@ -0,0 +1 @@ +Bump lxml version for py3.12 E2E tests \ No newline at end of file diff --git a/ibm_was/pyproject.toml b/ibm_was/pyproject.toml index e2d191f7a4ba7..04be76c47565a 100644 --- a/ibm_was/pyproject.toml +++ b/ibm_was/pyproject.toml @@ -36,7 +36,7 @@ license = "BSD-3-Clause" [project.optional-dependencies] deps = [ - "lxml==4.9.4", + "lxml==5.1.1", ] [project.urls] diff --git a/sqlserver/changelog.d/18637.added b/sqlserver/changelog.d/18637.added new file mode 100644 index 0000000000000..03c3e7d117eb1 --- /dev/null +++ b/sqlserver/changelog.d/18637.added @@ -0,0 +1 @@ +Bump lxml version for py3.12 E2E tests \ No newline at end of file diff --git a/sqlserver/pyproject.toml b/sqlserver/pyproject.toml index 33c2eab09f155..84da29d199e66 100644 --- a/sqlserver/pyproject.toml +++ b/sqlserver/pyproject.toml @@ -38,7 +38,7 @@ license = "BSD-3-Clause" [project.optional-dependencies] deps = [ "azure-identity==1.17.1", - "lxml==4.9.4", + "lxml==5.1.1", "pyodbc==5.1.0; (sys_platform != 'darwin' or platform_machine != 'arm64')", "pywin32==306; sys_platform == 'win32'", ] From bc97e9f99213cd17effc0fc8eda24bf8917c3795 Mon Sep 17 00:00:00 2001 From: Zhengda Lu Date: Fri, 27 Sep 2024 14:24:30 -0400 Subject: [PATCH 14/56] update sqlserver test images (#18698) --- sqlserver/hatch.toml | 6 +++--- sqlserver/tests/compose-ha/sql/db-init.sh | 16 +++++++++++++++- .../tests/compose-high-cardinality/setup.sh | 18 ++++++++++++++++-- sqlserver/tests/compose/setup.sh | 18 ++++++++++++++++-- 4 files changed, 50 insertions(+), 8 deletions(-) diff --git a/sqlserver/hatch.toml b/sqlserver/hatch.toml index b996a56b88920..551df01830de2 100644 --- a/sqlserver/hatch.toml +++ b/sqlserver/hatch.toml @@ -54,9 +54,9 @@ matrix.setup.env-vars = [ matrix.version.env-vars = [ { key = "SQLSERVER_MAJOR_VERSION" }, { key = "SQLSERVER_ENGINE_EDITION" }, - { key = "SQLSERVER_IMAGE_TAG", value = "2017-CU24-ubuntu-16.04", if = ["2017"], platform = ["linux"] }, - { key = "SQLSERVER_IMAGE_TAG", value = "2019-CU11-ubuntu-16.04", if = ["2019"], platform = ["linux"] }, - { key = "SQLSERVER_IMAGE_TAG", value = "2022-CU9-ubuntu-20.04", if = ["2022"], platform = ["linux"] }, + { key = "SQLSERVER_IMAGE_TAG", value = "2017-CU31-GDR2-ubuntu-18.04", if = ["2017"], platform = ["linux"] }, + { key = "SQLSERVER_IMAGE_TAG", value = "2019-CU28-GDR1-ubuntu-20.04", if = ["2019"], platform = ["linux"] }, + { key = "SQLSERVER_IMAGE_TAG", value = "2022-CU12-GDR1-ubuntu-20.04", if = ["2022"], platform = ["linux"] }, { key = "SQLSERVER_BASE_IMAGE", value = "datadog/docker-library:sqlserver_{matrix:version}", platform = ["windows"] }, ] matrix.driver.env-vars = [ diff --git a/sqlserver/tests/compose-ha/sql/db-init.sh b/sqlserver/tests/compose-ha/sql/db-init.sh index 7c13414348696..14e579a894949 100644 --- a/sqlserver/tests/compose-ha/sql/db-init.sh +++ b/sqlserver/tests/compose-ha/sql/db-init.sh @@ -15,7 +15,21 @@ then rm /var/opt/mssql/shared/aoag_certificate.cert 2> /dev/null fi +# Define both potential sqlcmd paths +SQLCMD_PATH_18="/opt/mssql-tools18/bin/sqlcmd" +SQLCMD_PATH="/opt/mssql-tools/bin/sqlcmd" + +# Check if sqlcmd exists in the first path +if [ -x "$SQLCMD_PATH_18" ]; then + SQLCMD_EXEC="$SQLCMD_PATH_18" +elif [ -x "$SQLCMD_PATH" ]; then + SQLCMD_EXEC="$SQLCMD_PATH" +else + echo "sqlcmd not found in either path." + exit 1 +fi + #use the SA password from the environment variable -/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P $SA_PASSWORD -d master -i $SQL_SCRIPT +$SQLCMD_EXEC -C -N -S localhost -U sa -P $SA_PASSWORD -d master -i $SQL_SCRIPT echo "####### AOAG script execution completed #######" \ No newline at end of file diff --git a/sqlserver/tests/compose-high-cardinality/setup.sh b/sqlserver/tests/compose-high-cardinality/setup.sh index 93f16a60bdc8a..bc2a7c92cdea5 100644 --- a/sqlserver/tests/compose-high-cardinality/setup.sh +++ b/sqlserver/tests/compose-high-cardinality/setup.sh @@ -1,8 +1,22 @@ +# Define both potential sqlcmd paths +SQLCMD_PATH_18="/opt/mssql-tools18/bin/sqlcmd" +SQLCMD_PATH="/opt/mssql-tools/bin/sqlcmd" + +# Check if sqlcmd exists in the first path +if [ -x "$SQLCMD_PATH_18" ]; then + SQLCMD_EXEC="$SQLCMD_PATH_18" +elif [ -x "$SQLCMD_PATH" ]; then + SQLCMD_EXEC="$SQLCMD_PATH" +else + echo "sqlcmd not found in either path." + exit 1 +fi + # Run the setup script to create the DB. # Do this in a loop because the timing for when the SQL instance is ready is indeterminate. for i in {1..120}; do - /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P $SA_PASSWORD -d master -q "SELECT count(*) from sys.databases" -b + $SQLCMD_EXEC -C -N -S localhost -U sa -P $SA_PASSWORD -d master -q "SELECT count(*) from sys.databases" -b if [ $? -eq 0 ] then echo "INFO: sqlserver is running." @@ -13,7 +27,7 @@ do fi done -/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P $SA_PASSWORD -d master -i setup.sql -b +$SQLCMD_EXEC -C -N -S localhost -U sa -P $SA_PASSWORD -d master -i setup.sql -b if [ $? -eq 0 ] then echo "INFO: setup.sql completed." diff --git a/sqlserver/tests/compose/setup.sh b/sqlserver/tests/compose/setup.sh index 56b7aeb0e95c9..ab77a90f768ee 100644 --- a/sqlserver/tests/compose/setup.sh +++ b/sqlserver/tests/compose/setup.sh @@ -1,8 +1,22 @@ +# Define both potential sqlcmd paths +SQLCMD_PATH_18="/opt/mssql-tools18/bin/sqlcmd" +SQLCMD_PATH="/opt/mssql-tools/bin/sqlcmd" + +# Check if sqlcmd exists in the first path +if [ -x "$SQLCMD_PATH_18" ]; then + SQLCMD_EXEC="$SQLCMD_PATH_18" +elif [ -x "$SQLCMD_PATH" ]; then + SQLCMD_EXEC="$SQLCMD_PATH" +else + echo "sqlcmd not found in either path." + exit 1 +fi + #run the setup script to create the DB #do this in a loop because the timing for when the SQL instance is ready is indeterminate for i in {1..120}; do - /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P $SA_PASSWORD -d master -i is_running.sql -b + $SQLCMD_EXEC -C -N -S localhost -U sa -P $SA_PASSWORD -d master -i is_running.sql -b if [ $? -eq 0 ] then echo "INFO: sqlserver is running." @@ -13,7 +27,7 @@ do fi done -/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P $SA_PASSWORD -d master -i setup.sql -b +$SQLCMD_EXEC -C -N -S localhost -U sa -P $SA_PASSWORD -d master -i setup.sql -b if [ $? -eq 0 ] then echo "INFO: setup.sql completed." From 63d1ef5b99d234e21f1d07c7e0ff8682054eb911 Mon Sep 17 00:00:00 2001 From: Steven Yuen Date: Fri, 27 Sep 2024 23:06:26 +0200 Subject: [PATCH 15/56] istio docs (#18703) --- istio/README.md | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/istio/README.md b/istio/README.md index b4af7baeaff72..865d95ac12a67 100644 --- a/istio/README.md +++ b/istio/README.md @@ -55,24 +55,9 @@ To customize the data plane portion of the integration: instances: - use_openmetrics: true - send_histogram_buckets: true + send_histograms_buckets: false istio_mesh_endpoint: http://%%host%%:15020/stats/prometheus tag_by_endpoint: false - exclude_labels: - - source_version - - destination_version - - source_canonical_revision - - destination_canonical_revision - - source_principal - - destination_principal - - source_cluster - - destination_cluster - - source_canonical_service - - destination_canonical_service - - source_workload_namespace - - destination_workload_namespace - - request_protocol - - connection_security_policy ``` 2. Customize this file with any additional configurations. See the [sample istio.d/conf.yaml][8] for all available configuration options. From 37b381bee4369b5a47c9c672fddfc2d4c403b81f Mon Sep 17 00:00:00 2001 From: Kyle Neale Date: Fri, 27 Sep 2024 23:46:07 +0200 Subject: [PATCH 16/56] Fix KubeVirt E2E environment (#18704) --- kubevirt_handler/hatch.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kubevirt_handler/hatch.toml b/kubevirt_handler/hatch.toml index 001e43ce25414..c85c5f07a7df2 100644 --- a/kubevirt_handler/hatch.toml +++ b/kubevirt_handler/hatch.toml @@ -1,4 +1,4 @@ [env.collectors.datadog-checks] [[envs.default.matrix]] -python = ["3.11"] +python = ["3.12"] From a6f51c00c80567cc4a367059e3a7c327affd6192 Mon Sep 17 00:00:00 2001 From: "agent-platform-auto-pr[bot]" <153269286+agent-platform-auto-pr[bot]@users.noreply.github.com> Date: Fri, 27 Sep 2024 23:47:17 +0200 Subject: [PATCH 17/56] Update dependency resolution (#18701) Co-authored-by: Kyle-Neale --- .deps/metadata.json | 2 +- .deps/resolved/linux-aarch64_3.12.txt | 2 +- .deps/resolved/linux-x86_64_3.12.txt | 2 +- .deps/resolved/macos-x86_64_3.12.txt | 10 +++++----- .deps/resolved/windows-x86_64_3.12.txt | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.deps/metadata.json b/.deps/metadata.json index bbc7d9488c8fe..470d35b87a710 100644 --- a/.deps/metadata.json +++ b/.deps/metadata.json @@ -1,3 +1,3 @@ { - "sha256": "5aae01baa583616f45d5179e564993f81193c37a9a6167e91f273d5db8c94039" + "sha256": "05fd51b6a78ab27c9e34b4be47740485e54a0b1cdc9c5dcefbbad7a53ce23c80" } diff --git a/.deps/resolved/linux-aarch64_3.12.txt b/.deps/resolved/linux-aarch64_3.12.txt index 5c8d35818c87a..adba6014626f1 100644 --- a/.deps/resolved/linux-aarch64_3.12.txt +++ b/.deps/resolved/linux-aarch64_3.12.txt @@ -46,7 +46,7 @@ krb5 @ https://agent-int-packages.datadoghq.com/built/krb5/krb5-0.6.0-2024092712 kubernetes @ https://agent-int-packages.datadoghq.com/external/kubernetes/kubernetes-30.1.0-py2.py3-none-any.whl#sha256=e212e8b7579031dd2e512168b617373bc1e03888d41ac4e04039240a292d478d ldap3 @ https://agent-int-packages.datadoghq.com/external/ldap3/ldap3-2.9.1-py2.py3-none-any.whl#sha256=5869596fc4948797020d3f03b7939da938778a0f9e2009f7a072ccf92b8e8d70 looseversion @ https://agent-int-packages.datadoghq.com/external/looseversion/looseversion-1.3.0-py2.py3-none-any.whl#sha256=781ef477b45946fc03dd4c84ea87734b21137ecda0e1e122bcb3c8d16d2a56e0 -lxml @ https://agent-int-packages.datadoghq.com/built/lxml/lxml-4.9.4-20240927122408-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl#sha256=7640e04af52463ddd9874a760ba5454d41c5876a4dcf1008d281ddc3976bee59 +lxml @ https://agent-int-packages.datadoghq.com/external/lxml/lxml-5.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl#sha256=1d380f183bd03ab827899753ea96dabe27d2025eb0bfd4f2ac0eee4afa0f351d lz4 @ https://agent-int-packages.datadoghq.com/external/lz4/lz4-4.3.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl#sha256=33c9a6fd20767ccaf70649982f8f3eeb0884035c150c0b818ea660152cf3c809 mmh3 @ https://agent-int-packages.datadoghq.com/external/mmh3/mmh3-4.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl#sha256=ba245e94b8d54765e14c2d7b6214e832557e7856d5183bc522e17884cab2f45d msal @ https://agent-int-packages.datadoghq.com/external/msal/msal-1.31.0-py3-none-any.whl#sha256=96bc37cff82ebe4b160d5fc0f1196f6ca8b50e274ecd0ec5bf69c438514086e7 diff --git a/.deps/resolved/linux-x86_64_3.12.txt b/.deps/resolved/linux-x86_64_3.12.txt index 724bb3e357115..d214afae36df4 100644 --- a/.deps/resolved/linux-x86_64_3.12.txt +++ b/.deps/resolved/linux-x86_64_3.12.txt @@ -46,7 +46,7 @@ krb5 @ https://agent-int-packages.datadoghq.com/built/krb5/krb5-0.6.0-2024091715 kubernetes @ https://agent-int-packages.datadoghq.com/external/kubernetes/kubernetes-30.1.0-py2.py3-none-any.whl#sha256=e212e8b7579031dd2e512168b617373bc1e03888d41ac4e04039240a292d478d ldap3 @ https://agent-int-packages.datadoghq.com/external/ldap3/ldap3-2.9.1-py2.py3-none-any.whl#sha256=5869596fc4948797020d3f03b7939da938778a0f9e2009f7a072ccf92b8e8d70 looseversion @ https://agent-int-packages.datadoghq.com/external/looseversion/looseversion-1.3.0-py2.py3-none-any.whl#sha256=781ef477b45946fc03dd4c84ea87734b21137ecda0e1e122bcb3c8d16d2a56e0 -lxml @ https://agent-int-packages.datadoghq.com/built/lxml/lxml-4.9.4-20240917155250-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl#sha256=0c1d96942a08b30d1ae8192b59249d91254eccd4198361eabdcd1ef2e76158dc +lxml @ https://agent-int-packages.datadoghq.com/external/lxml/lxml-5.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=f8682af96b5ad5093aab9eee5e4ff24cb7a9796c78699d914dd456ebfe7484a6 lz4 @ https://agent-int-packages.datadoghq.com/external/lz4/lz4-4.3.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=bca8fccc15e3add173da91be8f34121578dc777711ffd98d399be35487c934bf mmh3 @ https://agent-int-packages.datadoghq.com/external/mmh3/mmh3-4.1.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=3b02268be6e0a8eeb8a924d7db85f28e47344f35c438c1e149878bb1c47b1cd3 msal @ https://agent-int-packages.datadoghq.com/external/msal/msal-1.31.0-py3-none-any.whl#sha256=96bc37cff82ebe4b160d5fc0f1196f6ca8b50e274ecd0ec5bf69c438514086e7 diff --git a/.deps/resolved/macos-x86_64_3.12.txt b/.deps/resolved/macos-x86_64_3.12.txt index 1233562cbb882..e9ba44a921b82 100644 --- a/.deps/resolved/macos-x86_64_3.12.txt +++ b/.deps/resolved/macos-x86_64_3.12.txt @@ -18,7 +18,7 @@ charset-normalizer @ https://agent-int-packages.datadoghq.com/external/charset-n clickhouse-cityhash @ https://agent-int-packages.datadoghq.com/external/clickhouse-cityhash/clickhouse_cityhash-1.0.2.4-cp312-cp312-macosx_10_9_x86_64.whl#sha256=261fc1b0bf349de66b2d9e3d367879a561b516ca8e54e85e0c27b7c1a4f639b4 clickhouse-driver @ https://agent-int-packages.datadoghq.com/external/clickhouse-driver/clickhouse_driver-0.2.9-cp312-cp312-macosx_10_9_x86_64.whl#sha256=fcb2fd00e58650ae206a6d5dbc83117240e622471aa5124733fbf2805eb8bda0 cm-client @ https://agent-int-packages.datadoghq.com/built/cm-client/cm_client-45.0.4-20240402154932-py3-none-macosx_10_12_universal2.whl#sha256=aba3c1683ef1b2099933e030464d29b3ad1c206784ebd15d8a7147ecd6ba24e1 -confluent-kafka @ https://agent-int-packages.datadoghq.com/built/confluent-kafka/confluent_kafka-2.5.0-20240927122353-cp312-cp312-macosx_10_13_universal2.whl#sha256=8dc85c2841a7460e65c687cf5f99fea845e571bd7a5aa4ef0d36a68b473c1bb2 +confluent-kafka @ https://agent-int-packages.datadoghq.com/built/confluent-kafka/confluent_kafka-2.5.0-20240927181333-cp312-cp312-macosx_10_13_universal2.whl#sha256=8f114bb7b6d0bae20a8fce190c8da19f48d9d232be9764e662bdeaced4b140ed cryptography @ https://agent-int-packages.datadoghq.com/external/cryptography/cryptography-43.0.1-cp39-abi3-macosx_10_9_universal2.whl#sha256=ac119bb76b9faa00f48128b7f5679e1d8d437365c5d26f1c2c3f0da4ce1b553d ddsketch @ https://agent-int-packages.datadoghq.com/external/ddsketch/ddsketch-3.0.1-py3-none-any.whl#sha256=6d047b455fe2837c43d366ff1ae6ba0c3166e15499de8688437a75cea914224e ddtrace @ https://agent-int-packages.datadoghq.com/external/ddtrace/ddtrace-2.10.6-cp312-cp312-macosx_12_0_x86_64.whl#sha256=401f77b0564c3f990b58b9f21055331ca9efcdfa06dfa6ccff13cf21f8329ba5 @@ -45,12 +45,12 @@ krb5 @ https://agent-int-packages.datadoghq.com/external/krb5/krb5-0.6.0-cp312-c kubernetes @ https://agent-int-packages.datadoghq.com/external/kubernetes/kubernetes-30.1.0-py2.py3-none-any.whl#sha256=e212e8b7579031dd2e512168b617373bc1e03888d41ac4e04039240a292d478d ldap3 @ https://agent-int-packages.datadoghq.com/external/ldap3/ldap3-2.9.1-py2.py3-none-any.whl#sha256=5869596fc4948797020d3f03b7939da938778a0f9e2009f7a072ccf92b8e8d70 looseversion @ https://agent-int-packages.datadoghq.com/external/looseversion/looseversion-1.3.0-py2.py3-none-any.whl#sha256=781ef477b45946fc03dd4c84ea87734b21137ecda0e1e122bcb3c8d16d2a56e0 -lxml @ https://agent-int-packages.datadoghq.com/external/lxml/lxml-4.9.4-cp312-cp312-macosx_11_0_universal2.whl#sha256=dbcb2dc07308453db428a95a4d03259bd8caea97d7f0776842299f2d00c72fc8 +lxml @ https://agent-int-packages.datadoghq.com/external/lxml/lxml-5.1.1-cp312-cp312-macosx_10_9_x86_64.whl#sha256=adedfb61be862f48907218e3a24bf051fd2ecca53358f3958b0bdb17d7881c20 lz4 @ https://agent-int-packages.datadoghq.com/external/lz4/lz4-4.3.3-cp312-cp312-macosx_10_9_x86_64.whl#sha256=e36cd7b9d4d920d3bfc2369840da506fa68258f7bb176b8743189793c055e43d mmh3 @ https://agent-int-packages.datadoghq.com/external/mmh3/mmh3-4.1.0-cp312-cp312-macosx_10_9_x86_64.whl#sha256=d6af3e2287644b2b08b5924ed3a88c97b87b44ad08e79ca9f93d3470a54a41c5 msal @ https://agent-int-packages.datadoghq.com/external/msal/msal-1.31.0-py3-none-any.whl#sha256=96bc37cff82ebe4b160d5fc0f1196f6ca8b50e274ecd0ec5bf69c438514086e7 msal-extensions @ https://agent-int-packages.datadoghq.com/external/msal-extensions/msal_extensions-1.2.0-py3-none-any.whl#sha256=cf5ba83a2113fa6dc011a254a72f1c223c88d7dfad74cc30617c4679a417704d -netifaces @ https://agent-int-packages.datadoghq.com/built/netifaces/netifaces-0.11.0-20240927122354-cp312-cp312-macosx_10_13_universal2.whl#sha256=9bef8e8a7dd7b7e3da861d2a65d2c88e0e0f8ef10106e69d2c5a6f5a7f274471 +netifaces @ https://agent-int-packages.datadoghq.com/built/netifaces/netifaces-0.11.0-20240927181333-cp312-cp312-macosx_10_13_universal2.whl#sha256=2fc6ba48d168f93f92500975dc6df463faa68b89cfd787cdd1b8cf5dc38b96f1 oauthlib @ https://agent-int-packages.datadoghq.com/external/oauthlib/oauthlib-3.2.2-py3-none-any.whl#sha256=8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca openstacksdk @ https://agent-int-packages.datadoghq.com/external/openstacksdk/openstacksdk-3.3.0-py3-none-any.whl#sha256=e6d4121b87354984caf0e3c032e2ebf4d4440374f86c81c27ec52ca5df359157 opentelemetry-api @ https://agent-int-packages.datadoghq.com/external/opentelemetry-api/opentelemetry_api-1.27.0-py3-none-any.whl#sha256=953d5871815e7c30c81b56d910c707588000fff7a3ca1c73e6531911d53065e7 @@ -76,7 +76,7 @@ pydantic @ https://agent-int-packages.datadoghq.com/external/pydantic/pydantic-2 pydantic-core @ https://agent-int-packages.datadoghq.com/external/pydantic-core/pydantic_core-2.20.1-cp312-cp312-macosx_10_12_x86_64.whl#sha256=595ba5be69b35777474fa07f80fc260ea71255656191adb22a8c53aba4479231 pyjwt @ https://agent-int-packages.datadoghq.com/external/pyjwt/PyJWT-2.9.0-py3-none-any.whl#sha256=3b02fb0f44517787776cf48f2ae25d8e14f300e6d7545a4315cee571a415e850 pymongo @ https://agent-int-packages.datadoghq.com/external/pymongo/pymongo-4.8.0-cp312-cp312-macosx_10_9_x86_64.whl#sha256=e6a720a3d22b54183352dc65f08cd1547204d263e0651b213a0a2e577e838526 -pymqi @ https://agent-int-packages.datadoghq.com/built/pymqi/pymqi-1.12.10-20240927122355-cp312-cp312-macosx_10_13_universal2.whl#sha256=add50e67e505276651ca7134f17938b22808f21235e04229478c9536dc1591c0 +pymqi @ https://agent-int-packages.datadoghq.com/built/pymqi/pymqi-1.12.10-20240927181334-cp312-cp312-macosx_10_13_universal2.whl#sha256=29544803782d7194519b5050e1d8823f83c8be83cd0f46df5cb8b2c00330e022 pymysql @ https://agent-int-packages.datadoghq.com/external/pymysql/PyMySQL-1.1.1-py3-none-any.whl#sha256=4de15da4c61dc132f4fb9ab763063e693d521a80fd0e87943b9a453dd4c19d6c pynacl @ https://agent-int-packages.datadoghq.com/external/pynacl/PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl#sha256=401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1 pyodbc @ https://agent-int-packages.datadoghq.com/external/pyodbc/pyodbc-5.1.0-cp312-cp312-macosx_10_9_x86_64.whl#sha256=d3d9cc4af703c4817b6e604315910b0cf5dcb68056d52b25ca072dd59c52dcbc @@ -120,7 +120,7 @@ tuf @ https://agent-int-packages.datadoghq.com/external/tuf/tuf-4.0.0-py3-none-a typing-extensions @ https://agent-int-packages.datadoghq.com/external/typing-extensions/typing_extensions-4.12.2-py3-none-any.whl#sha256=04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d tzlocal @ https://agent-int-packages.datadoghq.com/external/tzlocal/tzlocal-5.2-py3-none-any.whl#sha256=49816ef2fe65ea8ac19d19aa7a1ae0551c834303d5014c6d5a62e4cbda8047b8 uhashring @ https://agent-int-packages.datadoghq.com/external/uhashring/uhashring-2.3-py3-none-any.whl#sha256=7ee8a25ca495a97effad10bd563c83b4054a6d7606d9530757049a04edab9297 -uptime @ https://agent-int-packages.datadoghq.com/built/uptime/uptime-3.0.1-20240927122356-cp312-cp312-macosx_10_13_universal2.whl#sha256=2e28ae71936be80f7ef4a2eddfd19123e91583e5ac1e557bf23def8f0626e655 +uptime @ https://agent-int-packages.datadoghq.com/built/uptime/uptime-3.0.1-20240927181334-cp312-cp312-macosx_10_13_universal2.whl#sha256=be0d48fe7b30934bdfe61d8b1092e7975ebd72ed2e319ca508bfd77282009e86 urllib3 @ https://agent-int-packages.datadoghq.com/external/urllib3/urllib3-2.2.3-py3-none-any.whl#sha256=ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac vertica-python @ https://agent-int-packages.datadoghq.com/external/vertica-python/vertica_python-1.4.0-py3-none-any.whl#sha256=50fecd7687f4b0b9f6dee6e2b35c195af2a4f702ece01bd12e080b51756e000b websocket-client @ https://agent-int-packages.datadoghq.com/external/websocket-client/websocket_client-1.8.0-py3-none-any.whl#sha256=17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526 diff --git a/.deps/resolved/windows-x86_64_3.12.txt b/.deps/resolved/windows-x86_64_3.12.txt index f14e2807bb4e7..a907712ea4183 100644 --- a/.deps/resolved/windows-x86_64_3.12.txt +++ b/.deps/resolved/windows-x86_64_3.12.txt @@ -43,7 +43,7 @@ keystoneauth1 @ https://agent-int-packages.datadoghq.com/external/keystoneauth1/ kubernetes @ https://agent-int-packages.datadoghq.com/external/kubernetes/kubernetes-30.1.0-py2.py3-none-any.whl#sha256=e212e8b7579031dd2e512168b617373bc1e03888d41ac4e04039240a292d478d ldap3 @ https://agent-int-packages.datadoghq.com/external/ldap3/ldap3-2.9.1-py2.py3-none-any.whl#sha256=5869596fc4948797020d3f03b7939da938778a0f9e2009f7a072ccf92b8e8d70 looseversion @ https://agent-int-packages.datadoghq.com/external/looseversion/looseversion-1.3.0-py2.py3-none-any.whl#sha256=781ef477b45946fc03dd4c84ea87734b21137ecda0e1e122bcb3c8d16d2a56e0 -lxml @ https://agent-int-packages.datadoghq.com/external/lxml/lxml-4.9.4-cp312-cp312-win_amd64.whl#sha256=f1faee2a831fe249e1bae9cbc68d3cd8a30f7e37851deee4d7962b17c410dd56 +lxml @ https://agent-int-packages.datadoghq.com/external/lxml/lxml-5.1.1-cp312-cp312-win_amd64.whl#sha256=0e46181d15fae102c53621bed9356b7a599a1e837b978c934a350dd00842b1d9 lz4 @ https://agent-int-packages.datadoghq.com/external/lz4/lz4-4.3.3-cp312-cp312-win_amd64.whl#sha256=5d35533bf2cee56f38ced91f766cd0038b6abf46f438a80d50c52750088be93f mmh3 @ https://agent-int-packages.datadoghq.com/external/mmh3/mmh3-4.1.0-cp312-cp312-win_amd64.whl#sha256=bebc3ecb6ba18292e3d40c8712482b4477abd6981c2ebf0e60869bd90f8ac3a9 msal @ https://agent-int-packages.datadoghq.com/external/msal/msal-1.31.0-py3-none-any.whl#sha256=96bc37cff82ebe4b160d5fc0f1196f6ca8b50e274ecd0ec5bf69c438514086e7 From 96fc348f2648b7575efb2fd74263a0f1a738e411 Mon Sep 17 00:00:00 2001 From: Sayed Faysal <52342906+Faysal1357@users.noreply.github.com> Date: Sat, 28 Sep 2024 07:51:17 +1000 Subject: [PATCH 18/56] Update vsphere_overview.json (#18684) --- vsphere/assets/dashboards/vsphere_overview.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vsphere/assets/dashboards/vsphere_overview.json b/vsphere/assets/dashboards/vsphere_overview.json index 3b3c833ea5346..5e20201983ad0 100644 --- a/vsphere/assets/dashboards/vsphere_overview.json +++ b/vsphere/assets/dashboards/vsphere_overview.json @@ -15,7 +15,7 @@ "id": 1, "definition": { "type": "event_stream", - "query": "source:vsphere $vcenter_server.value $vcenter_datacenter.value", + "query": "source:vsphere $vcenter_server $vsphere_datacenter", "event_size": "l", "title": "vSphere events", "title_size": "16", From 704e42d8dbc12a00c0c7a10081815d65813f869d Mon Sep 17 00:00:00 2001 From: Steven Yuen Date: Fri, 27 Sep 2024 23:52:25 +0200 Subject: [PATCH 19/56] Align OMv2 labels with kubernetes agent tags (#18654) * align pods and omv2 labels * align pods and omv2 labels test * changelog * lint --- dcgm/changelog.d/18654.added | 1 + dcgm/datadog_checks/dcgm/check.py | 4 +++- dcgm/datadog_checks/dcgm/metrics.py | 17 +++++++++++++++++ dcgm/tests/conftest.py | 14 ++++++++++++++ dcgm/tests/fixtures/label_remap.txt | 3 +++ dcgm/tests/test_unit.py | 13 +++++++++++++ 6 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 dcgm/changelog.d/18654.added create mode 100644 dcgm/tests/fixtures/label_remap.txt diff --git a/dcgm/changelog.d/18654.added b/dcgm/changelog.d/18654.added new file mode 100644 index 0000000000000..9dc642be63322 --- /dev/null +++ b/dcgm/changelog.d/18654.added @@ -0,0 +1 @@ +Align OMv2 labels with kubernetes agent tags diff --git a/dcgm/datadog_checks/dcgm/check.py b/dcgm/datadog_checks/dcgm/check.py index daf6592b212b7..f240715a2936b 100644 --- a/dcgm/datadog_checks/dcgm/check.py +++ b/dcgm/datadog_checks/dcgm/check.py @@ -3,7 +3,7 @@ # Licensed under a 3-clause BSD style license (see LICENSE) from datadog_checks.base import OpenMetricsBaseCheckV2 -from datadog_checks.dcgm.metrics import METRIC_MAP +from datadog_checks.dcgm.metrics import IGNORED_TAGS, METRIC_MAP, RENAME_LABELS_MAP class DcgmCheck(OpenMetricsBaseCheckV2): @@ -13,6 +13,8 @@ class DcgmCheck(OpenMetricsBaseCheckV2): def get_default_config(self): return { "metrics": [METRIC_MAP], + "rename_labels": RENAME_LABELS_MAP, + "ignored_tags": IGNORED_TAGS, } def configure_scrapers(self): diff --git a/dcgm/datadog_checks/dcgm/metrics.py b/dcgm/datadog_checks/dcgm/metrics.py index 9821b68531c1b..0ac8892a1fc31 100644 --- a/dcgm/datadog_checks/dcgm/metrics.py +++ b/dcgm/datadog_checks/dcgm/metrics.py @@ -47,3 +47,20 @@ 'DCGM_FI_PROF_SM_ACTIVE': 'sm_active', 'DCGM_FI_PROF_SM_OCCUPANCY': 'sm_occupancy', } + +RENAME_LABELS_MAP = { + # Assign the label values as these default tags to make it easier to graph and filter. + # Since these are exposed from the dcgm exporter, these tags by default point to the exporter + # instead of the pod that submitted these metrics to the exporter. + 'namespace': 'kube_namespace', + 'pod': 'pod_name', + 'container': 'kube_container_name', +} + +IGNORED_TAGS = [ + # Since were using the map to add these tags, we need to disable these from the autodiscovery + # feature. + "kube_namespace:.*", + "pod_name:.*", + "kube_container_name:.*", +] diff --git a/dcgm/tests/conftest.py b/dcgm/tests/conftest.py index 4ed9dfeb61046..fe3a75dd256b7 100644 --- a/dcgm/tests/conftest.py +++ b/dcgm/tests/conftest.py @@ -51,3 +51,17 @@ def mock_metrics(): ), ): yield + + +@pytest.fixture() +def mock_label_remap(): + f_name = os.path.join(os.path.dirname(__file__), 'fixtures', 'label_remap.txt') + with open(f_name, 'r') as f: + text_data = f.read() + with mock.patch( + 'requests.get', + return_value=mock.MagicMock( + status_code=200, iter_lines=lambda **kwargs: text_data.split("\n"), headers={'Content-Type': "text/plain"} + ), + ): + yield diff --git a/dcgm/tests/fixtures/label_remap.txt b/dcgm/tests/fixtures/label_remap.txt new file mode 100644 index 0000000000000..32dac16aad3f4 --- /dev/null +++ b/dcgm/tests/fixtures/label_remap.txt @@ -0,0 +1,3 @@ +# HELP DCGM_FI_DEV_GPU_UTIL GPU utilization (in %) edited to include namespace, pod and container labels +# TYPE DCGM_FI_DEV_GPU_UTIL gauge +DCGM_FI_DEV_GPU_UTIL{gpu="0",UUID="GPU-20c56d28-0da5-6d26-a36a-e7af1ce2586e",device="nvidia0",modelName="Tesla T4",Hostname="424773df46e0",DCGM_FI_DRIVER_VERSION="460.106.00",DCGM_FI_PROCESS_NAME="/usr/bin/dcgm-exporter",namespace="foo",pod="bar",container="baz"} 0 \ No newline at end of file diff --git a/dcgm/tests/test_unit.py b/dcgm/tests/test_unit.py index f384d36c95bde..911caad2cdd80 100644 --- a/dcgm/tests/test_unit.py +++ b/dcgm/tests/test_unit.py @@ -22,6 +22,19 @@ def test_critical_service_check(dd_run_check, aggregator, mock_http_response, ch aggregator.assert_service_check('dcgm.openmetrics.health', status=check.CRITICAL) +@pytest.mark.usefixtures("mock_label_remap") +def test_label_remap(dd_run_check, aggregator, check): + """ + Test that the labels are remapped correctly. + """ + dd_run_check(check) + aggregator.assert_service_check('dcgm.openmetrics.health', DcgmCheck.OK) + relabeled_tags = ['kube_namespace:foo', 'pod_name:bar', 'kube_container_name:baz'] + aggregator.assert_metric('dcgm.gpu_utilization') + for tag in relabeled_tags: + aggregator.assert_metric_has_tag('dcgm.gpu_utilization', tag) + + @pytest.mark.usefixtures("mock_metrics") def test_successful_run(dd_run_check, aggregator, check): dd_run_check(check) From fcbaaa1cefe2363b2ac22f10a7ebe22cd2107ad3 Mon Sep 17 00:00:00 2001 From: Steven Yuen Date: Sat, 28 Sep 2024 00:03:40 +0200 Subject: [PATCH 20/56] Sy/porting to master2 (#18530) * [Release] Bumped cisco_aci version to 2.12.0 * conflict * Update hazelcast/CHANGELOG.md Co-authored-by: Austin Lai <76412946+alai97@users.noreply.github.com> * Update cisco_aci/CHANGELOG.md Co-authored-by: Austin Lai <76412946+alai97@users.noreply.github.com> --------- Co-authored-by: Austin Lai <76412946+alai97@users.noreply.github.com> --- cisco_aci/CHANGELOG.md | 6 ++++++ cisco_aci/changelog.d/18496.added | 1 - cisco_aci/datadog_checks/cisco_aci/__about__.py | 2 +- hazelcast/CHANGELOG.md | 6 ++++++ hazelcast/changelog.d/18520.added | 1 - hazelcast/datadog_checks/hazelcast/__about__.py | 2 +- requirements-agent-release.txt | 4 ++-- 7 files changed, 16 insertions(+), 6 deletions(-) delete mode 100644 cisco_aci/changelog.d/18496.added delete mode 100644 hazelcast/changelog.d/18520.added diff --git a/cisco_aci/CHANGELOG.md b/cisco_aci/CHANGELOG.md index a50951fbcd3df..8d52e8866dfbb 100644 --- a/cisco_aci/CHANGELOG.md +++ b/cisco_aci/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.12.0 / 2024-09-06 + +***Added***: + +* Add the ability to tag Cisco ACI device and interface metrics with user-defined tags. ([#18496](https://github.com/DataDog/integrations-core/pull/18496)) + ## 2.11.0 / 2024-09-05 ***Added***: diff --git a/cisco_aci/changelog.d/18496.added b/cisco_aci/changelog.d/18496.added deleted file mode 100644 index 936852cb61408..0000000000000 --- a/cisco_aci/changelog.d/18496.added +++ /dev/null @@ -1 +0,0 @@ -Add the ability to tag cisco-aci device and interface metrics with user-defined tags. diff --git a/cisco_aci/datadog_checks/cisco_aci/__about__.py b/cisco_aci/datadog_checks/cisco_aci/__about__.py index 7d5bd5feeaaa1..de7a2146ed77b 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__ = "2.11.0" +__version__ = "2.12.0" diff --git a/hazelcast/CHANGELOG.md b/hazelcast/CHANGELOG.md index 8dd8932141b4e..6e5217c1a96a3 100644 --- a/hazelcast/CHANGELOG.md +++ b/hazelcast/CHANGELOG.md @@ -2,6 +2,12 @@ +## 4.1.0 / 2024-09-06 + +***Added***: + +* Bump hazalcast-python-client version for Python 3.12 support ([#18520](https://github.com/DataDog/integrations-core/pull/18520)) + ## 4.0.0 / 2024-09-05 ***Changed***: diff --git a/hazelcast/changelog.d/18520.added b/hazelcast/changelog.d/18520.added deleted file mode 100644 index d05621892eea3..0000000000000 --- a/hazelcast/changelog.d/18520.added +++ /dev/null @@ -1 +0,0 @@ -Bump hazelcast-python-client version for python 3.12 support diff --git a/hazelcast/datadog_checks/hazelcast/__about__.py b/hazelcast/datadog_checks/hazelcast/__about__.py index bcf02753eab69..3da3f55dcb924 100644 --- a/hazelcast/datadog_checks/hazelcast/__about__.py +++ b/hazelcast/datadog_checks/hazelcast/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2020-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '4.0.0' +__version__ = '4.1.0' diff --git a/requirements-agent-release.txt b/requirements-agent-release.txt index f60ff3f59229e..e8ebbe8ad06f3 100644 --- a/requirements-agent-release.txt +++ b/requirements-agent-release.txt @@ -30,7 +30,7 @@ datadog-checks-base==37.0.0 datadog-checks-dependency-provider==1.4.0 datadog-checks-downloader==4.7.0 datadog-cilium==3.6.0 -datadog-cisco-aci==2.11.0 +datadog-cisco-aci==2.12.0 datadog-cisco-secure-firewall==1.0.0 datadog-citrix-hypervisor==3.2.1 datadog-clickhouse==3.7.0 @@ -71,7 +71,7 @@ datadog-go-expvar==2.5.1 datadog-gunicorn==2.8.0; sys_platform != 'win32' datadog-haproxy==5.2.2 datadog-harbor==3.2.2 -datadog-hazelcast==4.0.0 +datadog-hazelcast==4.1.0 datadog-hdfs-datanode==4.2.1; sys_platform != 'win32' datadog-hdfs-namenode==4.2.1; sys_platform != 'win32' datadog-hive==1.10.0 From 123e0a19fb7628273c97bef8a308dc25fa994c42 Mon Sep 17 00:00:00 2001 From: Sayed Faysal <52342906+Faysal1357@users.noreply.github.com> Date: Mon, 30 Sep 2024 23:23:51 +1000 Subject: [PATCH 21/56] Update vsphere_overview.json (#18712) --- vsphere/assets/dashboards/vsphere_overview.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vsphere/assets/dashboards/vsphere_overview.json b/vsphere/assets/dashboards/vsphere_overview.json index 5e20201983ad0..b72633f7d9717 100644 --- a/vsphere/assets/dashboards/vsphere_overview.json +++ b/vsphere/assets/dashboards/vsphere_overview.json @@ -15,7 +15,7 @@ "id": 1, "definition": { "type": "event_stream", - "query": "source:vsphere $vcenter_server $vsphere_datacenter", + "query": "source:vsphere $vcenter_server $vcenter_datacenter", "event_size": "l", "title": "vSphere events", "title_size": "16", From 3e47cb87ec8e039161df32e9b1398efb8d82beec Mon Sep 17 00:00:00 2001 From: Kirolos Shahat Date: Mon, 30 Sep 2024 09:46:56 -0400 Subject: [PATCH 22/56] Display Palo Alto Cortex XDR docs (#18716) --- palo_alto_cortex_xdr/manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/palo_alto_cortex_xdr/manifest.json b/palo_alto_cortex_xdr/manifest.json index d3f4970a87018..f942a58419cf2 100644 --- a/palo_alto_cortex_xdr/manifest.json +++ b/palo_alto_cortex_xdr/manifest.json @@ -2,7 +2,7 @@ "manifest_version": "2.0.0", "app_uuid": "156afdc8-d8e9-4544-92fd-d8da87278671", "app_id": "palo-alto-cortex-xdr", - "display_on_public_website": false, + "display_on_public_website": true, "tile": { "overview": "README.md#Overview", "configuration": "README.md#Setup", From c1e85309a37c7c508f41c365f3002708f77f8cbf Mon Sep 17 00:00:00 2001 From: Sarah Witt Date: Mon, 30 Sep 2024 11:05:51 -0400 Subject: [PATCH 23/56] Add more unit tests for empty include lists in Discovery (#18556) * add unit test for empty exclude * replace call count with mock_calls --- .../base/utils/discovery/test_discovery.py | 44 ++++++++++++------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/datadog_checks_base/tests/base/utils/discovery/test_discovery.py b/datadog_checks_base/tests/base/utils/discovery/test_discovery.py index 796d833c23522..92b9be3061971 100644 --- a/datadog_checks_base/tests/base/utils/discovery/test_discovery.py +++ b/datadog_checks_base/tests/base/utils/discovery/test_discovery.py @@ -13,7 +13,21 @@ def test_include_empty(): mock_get_items = mock.Mock(return_value=['a', 'b', 'c', 'd', 'e', 'f', 'g']) d = Discovery(mock_get_items) assert list(d.get_items()) == [] - assert mock_get_items.call_count == 1 + assert mock_get_items.mock_calls == [mock.call()] + + +def test_include_empty_exclude_non_empty(): + mock_get_items = mock.Mock(return_value=['a', 'b', 'c', 'd', 'e', 'f', 'g']) + d = Discovery(mock_get_items, exclude=['b.*']) + assert list(d.get_items()) == [] + assert mock_get_items.mock_calls == [mock.call()] + + +def test_include_empty_limit(): + mock_get_items = mock.Mock(return_value=['a', 'b', 'c', 'd', 'e', 'f', 'g']) + d = Discovery(mock_get_items, limit=1) + assert list(d.get_items()) == [] + assert mock_get_items.mock_calls == [mock.call()] @pytest.mark.parametrize( @@ -33,21 +47,21 @@ def test_include_not_empty(pattern): mock_get_items = mock.Mock(return_value=['a', 'b', 'c', 'd', 'e', 'f', 'g']) d = Discovery(mock_get_items, include={pattern: None}) assert list(d.get_items()) == [(pattern, 'a', 'a', None)] - assert mock_get_items.call_count == 1 + assert mock_get_items.mock_calls == [mock.call()] def test_include_processed_in_order(): mock_get_items = mock.Mock(return_value=['a', 'b', 'c', 'd', 'e', 'f', 'g']) d = Discovery(mock_get_items, include={'c.*': {'value': 5}, 'a.*': {'value': 10}}) assert list(d.get_items()) == [('c.*', 'c', 'c', {'value': 5}), ('a.*', 'a', 'a', {'value': 10})] - assert mock_get_items.call_count == 1 + assert mock_get_items.mock_calls == [mock.call()] def test_exclude_and_include_intersection_is_empty(): mock_get_items = mock.Mock(return_value=['a', 'b', 'c', 'd', 'e', 'f', 'g']) d = Discovery(mock_get_items, include={'a.*': None}, exclude=['b.*']) assert list(d.get_items()) == [('a.*', 'a', 'a', None)] - assert mock_get_items.call_count == 1 + assert mock_get_items.mock_calls == [mock.call()] def test_exclude_is_subset_of_include(): @@ -61,21 +75,21 @@ def test_exclude_is_subset_of_include(): ('.*', 'f', 'f', None), ('.*', 'g', 'g', None), ] - assert mock_get_items.call_count == 1 + assert mock_get_items.mock_calls == [mock.call()] def test_exclude_is_equals_to_include(): mock_get_items = mock.Mock(return_value=['a', 'b', 'c', 'd', 'e', 'f', 'g']) d = Discovery(limit=10, include={'b.*': None}, exclude=['b.*'], interval=0, get_items_func=mock_get_items) assert list(d.get_items()) == [] - assert mock_get_items.call_count == 1 + assert mock_get_items.mock_calls == [mock.call()] def test_limit_zero(): mock_get_items = mock.Mock(return_value=['a', 'b', 'c', 'd', 'e', 'f', 'g']) d = Discovery(mock_get_items, limit=0, include={'.*': None}) assert list(d.get_items()) == [] - assert mock_get_items.call_count == 1 + assert mock_get_items.mock_calls == [mock.call()] def test_limit_none(): @@ -90,7 +104,7 @@ def test_limit_none(): ('.*', 'f', 'f', None), ('.*', 'g', 'g', None), ] - assert mock_get_items.call_count == 1 + assert mock_get_items.mock_calls == [mock.call()] def test_limit_greater_than_zero(): @@ -103,7 +117,7 @@ def test_limit_greater_than_zero(): ('.*', 'd', 'd', {'value': 5}), ('.*', 'e', 'e', {'value': 5}), ] - assert mock_get_items.call_count == 1 + assert mock_get_items.mock_calls == [mock.call()] def test_limit_greater_than_items_len(): @@ -118,7 +132,7 @@ def test_limit_greater_than_items_len(): ('.*', 'f', 'f', None), ('.*', 'g', 'g', None), ] - assert mock_get_items.call_count == 1 + assert mock_get_items.mock_calls == [mock.call()] def test_interval_none_two_calls_to_get_items_func(): @@ -131,7 +145,7 @@ def test_interval_none_two_calls_to_get_items_func(): ('.*', 'c', 'c', None), ('.*', 'd', 'd', None), ] - assert mock_get_items.call_count == 2 + assert mock_get_items.mock_calls == [mock.call(), mock.call()] def test_interval_zero_two_calls_to_get_items_func(): @@ -144,7 +158,7 @@ def test_interval_zero_two_calls_to_get_items_func(): ('.*', 'c', 'c', None), ('.*', 'd', 'd', None), ] - assert mock_get_items.call_count == 2 + assert mock_get_items.mock_calls == [mock.call(), mock.call()] def test_interval_not_exceeded(): @@ -153,7 +167,7 @@ def test_interval_not_exceeded(): d = Discovery(mock_get_items, include={'.*': None}, interval=60) assert list(d.get_items()) == [('.*', 'a', 'a', None), ('.*', 'b', 'b', None)] assert list(d.get_items()) == [('.*', 'a', 'a', None), ('.*', 'b', 'b', None)] - assert mock_get_items.call_count == 1 + assert mock_get_items.mock_calls == [mock.call()] def test_interval_exceeded(): @@ -167,11 +181,11 @@ def test_interval_exceeded(): ('.*', 'c', 'c', None), ('.*', 'd', 'd', None), ] - assert mock_get_items.call_count == 2 + assert mock_get_items.mock_calls == [mock.call(), mock.call()] def test_key_in_items(): mock_get_items = mock.Mock(return_value=[{'key': 'a', 'value': 75}, {'key': 'b', 'value': 89}]) d = Discovery(mock_get_items, include={'a.*': {'filter': 'xxxx'}}, key=lambda item: item['key']) assert list(d.get_items()) == [('a.*', 'a', {'key': 'a', 'value': 75}, {'filter': 'xxxx'})] - assert mock_get_items.call_count == 1 + assert mock_get_items.mock_calls == [mock.call()] From 4cc809204ea98e8b9415f5b693f69be67748241c Mon Sep 17 00:00:00 2001 From: Kyle Neale Date: Tue, 1 Oct 2024 05:42:33 -0400 Subject: [PATCH 24/56] Port release of `datadog_checks_base` to `master` (#18732) * port to master * changelog fix * other small fixes --- datadog_checks_base/CHANGELOG.md | 6 ++++++ datadog_checks_base/changelog.d/18656.security | 1 - 2 files changed, 6 insertions(+), 1 deletion(-) delete mode 100644 datadog_checks_base/changelog.d/18656.security diff --git a/datadog_checks_base/CHANGELOG.md b/datadog_checks_base/CHANGELOG.md index 01544ab6ff84c..ed0e8f1fc24a7 100644 --- a/datadog_checks_base/CHANGELOG.md +++ b/datadog_checks_base/CHANGELOG.md @@ -12,6 +12,12 @@ * Bump the python version from 3.11 to 3.12 ([#18207](https://github.com/DataDog/integrations-core/pull/18207)) +## 36.16.0 / 2024-09-30 / Agent 7.58.0 + +***Security***: + +* Bump version of cryptography to 43.0.1 to address vulnerability ([#18656](https://github.com/DataDog/integrations-core/pull/18656)) + ## 36.15.0 / 2024-09-05 ***Added***: diff --git a/datadog_checks_base/changelog.d/18656.security b/datadog_checks_base/changelog.d/18656.security deleted file mode 100644 index ad676917cac26..0000000000000 --- a/datadog_checks_base/changelog.d/18656.security +++ /dev/null @@ -1 +0,0 @@ -Bump version of cryptography to 43.0.1 to address vulnerability \ No newline at end of file From d1279f7c61458b903ced4bfe0cc510cd8386a7bc Mon Sep 17 00:00:00 2001 From: Natasha Dada Date: Tue, 1 Oct 2024 10:05:38 -0400 Subject: [PATCH 25/56] Propagate agent host tags for sqlserver (#18557) --- sqlserver/assets/configuration/spec.yaml | 15 ++++ sqlserver/changelog.d/18557.added | 1 + sqlserver/datadog_checks/sqlserver/config.py | 43 ++++++++++- .../sqlserver/config_models/defaults.py | 8 ++ .../sqlserver/config_models/instance.py | 1 + .../sqlserver/config_models/shared.py | 5 +- .../sqlserver/data/conf.yaml.example | 13 ++++ .../datadog_checks/sqlserver/sqlserver.py | 37 +++++---- sqlserver/tests/test_activity.py | 11 ++- sqlserver/tests/test_database_metrics.py | 6 +- sqlserver/tests/test_integration.py | 77 +++++++++++++++---- sqlserver/tests/test_metrics.py | 20 ++--- sqlserver/tests/test_statements.py | 12 +-- sqlserver/tests/test_stored_procedures.py | 13 ++-- sqlserver/tests/test_unit.py | 4 +- 15 files changed, 203 insertions(+), 63 deletions(-) create mode 100644 sqlserver/changelog.d/18557.added diff --git a/sqlserver/assets/configuration/spec.yaml b/sqlserver/assets/configuration/spec.yaml index a78b914ccbfc4..46ae98846412e 100644 --- a/sqlserver/assets/configuration/spec.yaml +++ b/sqlserver/assets/configuration/spec.yaml @@ -17,6 +17,13 @@ files: example: - name: sqlserver.clr.execution counter_name: CLR Execution + - name: propagate_agent_tags + description: | + Set to `true` to propagate the tags from `datadog.yaml` and the agent host tags to the check. + When set to `true`, the tags from the agent host are added to the check's tags for all instances. + value: + example: false + type: boolean - template: init_config/db - template: init_config/default - template: instances @@ -760,6 +767,14 @@ files: value: type: number example: 10 + - name: propagate_agent_tags + description: | + Set to `true` to propagate the tags from `datadog.yaml` and the agent host tags to the check. + When set to `true`, the tags from the agent host are added to the check's tags for all instances. + This option takes precedence over the `propagate_agent_tags` option in `init_config`. + value: + example: false + type: boolean - name: deadlocks_collection hidden: True description: | diff --git a/sqlserver/changelog.d/18557.added b/sqlserver/changelog.d/18557.added new file mode 100644 index 0000000000000..83bf70581d592 --- /dev/null +++ b/sqlserver/changelog.d/18557.added @@ -0,0 +1 @@ +Add the propagate_agent_tags setting. When set to `true`, the tags from the agent host are added to the check's tag for all instances. diff --git a/sqlserver/datadog_checks/sqlserver/config.py b/sqlserver/datadog_checks/sqlserver/config.py index 166299b3c2bb6..a0f16576b8aa1 100644 --- a/sqlserver/datadog_checks/sqlserver/config.py +++ b/sqlserver/datadog_checks/sqlserver/config.py @@ -5,8 +5,9 @@ import json import re -from datadog_checks.base.config import is_affirmative +from datadog_checks.base import ConfigurationError, is_affirmative from datadog_checks.base.utils.common import to_native_string +from datadog_checks.base.utils.db.utils import get_agent_host_tags from datadog_checks.sqlserver.const import ( DEFAULT_AUTODISCOVERY_INTERVAL, PROC_CHAR_LIMIT, @@ -16,7 +17,10 @@ class SQLServerConfig: def __init__(self, init_config, instance, log): self.log = log - self.tags: list[str] = instance.get("tags", []) + self.tags: list[str] = self._build_tags( + custom_tags=instance.get('tags', []), + propagate_agent_tags=self._should_propagate_agent_tags(instance, init_config), + ) self.reported_hostname: str = instance.get('reported_hostname') self.autodiscovery: bool = is_affirmative(instance.get('database_autodiscovery')) self.autodiscovery_include: list[str] = instance.get('autodiscovery_include', ['.*']) or ['.*'] @@ -128,3 +132,38 @@ def _compile_valid_patterns(self, patterns: list[str]) -> re.Pattern: else: # create unmatchable regex - https://stackoverflow.com/a/1845097/2157429 return re.compile(r'(?!x)x') + + def _build_tags(self, custom_tags, propagate_agent_tags): + # Clean up tags in case there was a None entry in the instance + # e.g. if the yaml contains tags: but no actual tags + if custom_tags is None: + tags = [] + else: + tags = list(set(custom_tags)) + + if propagate_agent_tags: + try: + agent_tags = get_agent_host_tags() + tags.extend(agent_tags) + except Exception as e: + raise ConfigurationError( + 'propagate_agent_tags enabled but there was an error fetching agent tags {}'.format(e) + ) + return tags + + @staticmethod + def _should_propagate_agent_tags(instance, init_config) -> bool: + ''' + return True if the agent tags should be propagated to the check + ''' + instance_propagate_agent_tags = instance.get('propagate_agent_tags') + init_config_propagate_agent_tags = init_config.get('propagate_agent_tags') + + if instance_propagate_agent_tags is not None: + # if the instance has explicitly set the value, return the boolean + return instance_propagate_agent_tags + if init_config_propagate_agent_tags is not None: + # if the init_config has explicitly set the value, return the boolean + return init_config_propagate_agent_tags + # if neither the instance nor the init_config has set the value, return False + return False diff --git a/sqlserver/datadog_checks/sqlserver/config_models/defaults.py b/sqlserver/datadog_checks/sqlserver/config_models/defaults.py index b3a3aced950b0..0c2d8acae56af 100644 --- a/sqlserver/datadog_checks/sqlserver/config_models/defaults.py +++ b/sqlserver/datadog_checks/sqlserver/config_models/defaults.py @@ -8,6 +8,10 @@ # ddev -x validate models -s +def shared_propagate_agent_tags(): + return False + + def instance_adoprovider(): return 'SQLOLEDB' @@ -136,6 +140,10 @@ def instance_proc_only_if_database(): return 'master' +def instance_propagate_agent_tags(): + return False + + def instance_server_version(): return '2014' diff --git a/sqlserver/datadog_checks/sqlserver/config_models/instance.py b/sqlserver/datadog_checks/sqlserver/config_models/instance.py index ef0200cb763a7..100a87ab5020d 100644 --- a/sqlserver/datadog_checks/sqlserver/config_models/instance.py +++ b/sqlserver/datadog_checks/sqlserver/config_models/instance.py @@ -228,6 +228,7 @@ class InstanceConfig(BaseModel): proc_only_if: Optional[str] = None proc_only_if_database: Optional[str] = None procedure_metrics: Optional[ProcedureMetrics] = None + propagate_agent_tags: Optional[bool] = None query_activity: Optional[QueryActivity] = None query_metrics: Optional[QueryMetrics] = None reported_hostname: Optional[str] = None diff --git a/sqlserver/datadog_checks/sqlserver/config_models/shared.py b/sqlserver/datadog_checks/sqlserver/config_models/shared.py index ea7963bad6e26..820d2fbefe25e 100644 --- a/sqlserver/datadog_checks/sqlserver/config_models/shared.py +++ b/sqlserver/datadog_checks/sqlserver/config_models/shared.py @@ -17,7 +17,7 @@ from datadog_checks.base.utils.functions import identity from datadog_checks.base.utils.models import validation -from . import validators +from . import defaults, validators class SharedConfig(BaseModel): @@ -28,6 +28,7 @@ class SharedConfig(BaseModel): ) custom_metrics: Optional[tuple[MappingProxyType[str, Any], ...]] = None global_custom_queries: Optional[tuple[MappingProxyType[str, Any], ...]] = None + propagate_agent_tags: Optional[bool] = None service: Optional[str] = None @model_validator(mode='before') @@ -40,6 +41,8 @@ def _validate(cls, value, info): 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) + else: + value = getattr(defaults, f'shared_{info.field_name}', lambda: value)() return validation.utils.make_immutable(value) diff --git a/sqlserver/datadog_checks/sqlserver/data/conf.yaml.example b/sqlserver/datadog_checks/sqlserver/data/conf.yaml.example index 71683273aba99..ee5316c9a61c7 100644 --- a/sqlserver/datadog_checks/sqlserver/data/conf.yaml.example +++ b/sqlserver/datadog_checks/sqlserver/data/conf.yaml.example @@ -12,6 +12,12 @@ init_config: # - name: sqlserver.clr.execution # counter_name: CLR Execution + ## @param propagate_agent_tags - boolean - optional - default: false + ## Set to `true` to propagate the tags from `datadog.yaml` and the agent host tags to the check. + ## When set to `true`, the tags from the agent host are added to the check's tags for all instances. + # + # propagate_agent_tags: false + ## @param global_custom_queries - list of mappings - optional ## See `custom_queries` defined below. ## @@ -679,6 +685,13 @@ instances: # # ignore_missing_database: false + ## @param propagate_agent_tags - boolean - optional - default: false + ## Set to `true` to propagate the tags from `datadog.yaml` and the agent host tags to the check. + ## When set to `true`, the tags from the agent host are added to the check's tags for all instances. + ## This option takes precedence over the `propagate_agent_tags` option in `init_config`. + # + # propagate_agent_tags: false + ## @param tags - list of strings - optional ## A list of tags to attach to every metric and service check emitted by this instance. ## diff --git a/sqlserver/datadog_checks/sqlserver/sqlserver.py b/sqlserver/datadog_checks/sqlserver/sqlserver.py index 427aab153a4e5..a254f987fa651 100644 --- a/sqlserver/datadog_checks/sqlserver/sqlserver.py +++ b/sqlserver/datadog_checks/sqlserver/sqlserver.py @@ -383,7 +383,6 @@ def make_metric_list_to_collect(self): self.log.exception("Initialization exception %s", e) def handle_service_check(self, status, connection_host, database, message=None, is_default=True): - custom_tags = self.instance.get("tags", []) disable_generic_tags = self.instance.get("disable_generic_tags", False) service_check_tags = [ "sqlserver_host:{}".format(self.resolved_hostname), @@ -392,8 +391,8 @@ def handle_service_check(self, status, connection_host, database, message=None, ] if not disable_generic_tags: service_check_tags.append("host:{}".format(self.resolved_hostname)) - if custom_tags is not None: - service_check_tags.extend(custom_tags) + if self.tags is not None: + service_check_tags.extend(self.tags) service_check_tags = list(set(service_check_tags)) if status is AgentCheck.OK: @@ -461,7 +460,6 @@ def _make_metric_list_to_collect(self, custom_metrics): major_version = self.static_info_cache.get(STATIC_INFO_MAJOR_VERSION) metrics_to_collect = [] - tags = self.instance.get("tags", []) # Load instance-level (previously Performance metrics) # If several check instances are querying the same server host, it can be wise to turn these off @@ -476,7 +474,7 @@ def _make_metric_list_to_collect(self, custom_metrics): # if autodiscovery is enabled, we report metrics from the # INSTANCE_METRICS_DATABASE struct below, so do not double report here common_metrics.extend(INSTANCE_METRICS_DATABASE) - self._add_performance_counters(common_metrics, metrics_to_collect, tags, db=None) + self._add_performance_counters(common_metrics, metrics_to_collect, self.tags, db=None) # populated through autodiscovery if self.databases: @@ -484,7 +482,7 @@ def _make_metric_list_to_collect(self, custom_metrics): self._add_performance_counters( INSTANCE_METRICS_DATABASE, metrics_to_collect, - tags, + self.tags, db=db.name, physical_database_name=db.physical_db_name, ) @@ -499,7 +497,13 @@ def _make_metric_list_to_collect(self, custom_metrics): self.instance.get("database", self.connection.DEFAULT_DATABASE) ] for db_name in db_names: - cfg = {"name": name, "table": table, "column": column, "instance_name": db_name, "tags": tags} + cfg = { + "name": name, + "table": table, + "column": column, + "instance_name": db_name, + "tags": self.tags, + } metrics_to_collect.append(self.typed_metric(cfg_inst=cfg, table=table, column=column)) # Load AlwaysOn metrics @@ -511,7 +515,7 @@ def _make_metric_list_to_collect(self, custom_metrics): "table": table, "column": column, "instance_name": db_name, - "tags": tags, + "tags": self.tags, "ao_database": self.instance.get("ao_database", None), "availability_group": self.instance.get("availability_group", None), "only_emit_local": is_affirmative(self.instance.get("only_emit_local", False)), @@ -521,13 +525,13 @@ def _make_metric_list_to_collect(self, custom_metrics): # Load metrics from scheduler and task tables, if enabled if is_affirmative(self.instance.get("include_task_scheduler_metrics", False)): for name, table, column in TASK_SCHEDULER_METRICS: - cfg = {"name": name, "table": table, "column": column, "tags": tags} + cfg = {"name": name, "table": table, "column": column, "tags": self.tags} metrics_to_collect.append(self.typed_metric(cfg_inst=cfg, table=table, column=column)) # Load sys.master_files metrics if is_affirmative(self.instance.get("include_master_files_metrics", False)): for name, table, column in DATABASE_MASTER_FILES: - cfg = {"name": name, "table": table, "column": column, "tags": tags} + cfg = {"name": name, "table": table, "column": column, "tags": self.tags} metrics_to_collect.append(self.typed_metric(cfg_inst=cfg, table=table, column=column)) # Load DB File Space Usage metrics @@ -535,7 +539,13 @@ def _make_metric_list_to_collect(self, custom_metrics): self.instance.get("include_tempdb_file_space_usage_metrics", True) ) and not is_azure_sql_database(engine_edition): for name, table, column in TEMPDB_FILE_SPACE_USAGE_METRICS: - cfg = {"name": name, "table": table, "column": column, "instance_name": "tempdb", "tags": tags} + cfg = { + "name": name, + "table": table, + "column": column, + "instance_name": "tempdb", + "tags": self.tags, + } metrics_to_collect.append(self.typed_metric(cfg_inst=cfg, table=table, column=column)) # Load any custom metrics from conf.d/sqlserver.yaml @@ -543,7 +553,7 @@ def _make_metric_list_to_collect(self, custom_metrics): sql_counter_type = None base_name = None - custom_tags = tags + cfg.get("tags", []) + custom_tags = self.tags + cfg.get("tags", []) cfg["tags"] = custom_tags db_table = cfg.get("table", DEFAULT_PERFORMANCE_TABLE) @@ -994,7 +1004,6 @@ def do_stored_procedure_check(self): proc = self._config.proc guardSql = self.instance.get("proc_only_if") - custom_tags = self.instance.get("tags", []) if (guardSql and self.proc_check_guard(guardSql)) or not guardSql: self.connection.open_db_connections(self.connection.DEFAULT_DB_KEY) @@ -1015,7 +1024,7 @@ def do_stored_procedure_check(self): for row in rows: tags = [] if row.tags is None or row.tags == "" else row.tags.split(",") - tags.extend(custom_tags) + tags.extend(self.tags) if row.type.lower() in self.proc_type_mapping: self.proc_type_mapping[row.type](row.metric, row.value, tags, raw=True) diff --git a/sqlserver/tests/test_activity.py b/sqlserver/tests/test_activity.py index 7e8d73375afde..8e8084771c7c1 100644 --- a/sqlserver/tests/test_activity.py +++ b/sqlserver/tests/test_activity.py @@ -203,8 +203,7 @@ def run_test_query(c, q): # internal debug metrics aggregator.assert_metric( OPERATION_TIME_METRIC_NAME, - tags=['agent_hostname:stubbed.hostname', 'operation:collect_activity'] - + _expected_dbm_instance_tags(dbm_instance), + tags=['agent_hostname:stubbed.hostname', 'operation:collect_activity'] + _expected_dbm_instance_tags(check), ) @@ -755,8 +754,8 @@ def _get_conn_for_user(instance_docker, user, _autocommit=False): return conn -def _expected_dbm_instance_tags(dbm_instance): - return dbm_instance['tags'] +def _expected_dbm_instance_tags(check): + return check._config.tags @pytest.mark.parametrize("activity_enabled", [True, False]) @@ -794,7 +793,7 @@ def test_async_job_inactive_stop(aggregator, dd_run_check, dbm_instance): check.activity._job_loop_future.result() aggregator.assert_metric( "dd.sqlserver.async_job.inactive_stop", - tags=['job:query-activity'] + _expected_dbm_instance_tags(dbm_instance), + tags=['job:query-activity'] + _expected_dbm_instance_tags(check), hostname='', ) @@ -813,7 +812,7 @@ def test_async_job_cancel_cancel(aggregator, dd_run_check, dbm_instance): # be created in the first place aggregator.assert_metric( "dd.sqlserver.async_job.cancel", - tags=_expected_dbm_instance_tags(dbm_instance) + ['job:query-activity'], + tags=_expected_dbm_instance_tags(check) + ['job:query-activity'], ) diff --git a/sqlserver/tests/test_database_metrics.py b/sqlserver/tests/test_database_metrics.py index 7ab389e50c594..ece9a87aa16e8 100644 --- a/sqlserver/tests/test_database_metrics.py +++ b/sqlserver/tests/test_database_metrics.py @@ -95,7 +95,7 @@ def test_sqlserver_index_usage_metrics( if not include_index_usage_metrics: assert index_usage_metrics.enabled is False else: - tags = instance_docker_metrics.get('tags', []) + tags = sqlserver_check._config.tags for result in mocked_results: for row in result: db, index_name, table, *metric_values = row @@ -203,7 +203,7 @@ def test_sqlserver_db_fragmentation_metrics( if not include_db_fragmentation_metrics: assert db_fragmentation_metrics.enabled is False else: - tags = instance_docker_metrics.get('tags', []) + tags = sqlserver_check._config.tags for result in mocked_results: for row in result: database_name, object_name, index_id, index_name, *metric_values = row @@ -273,7 +273,7 @@ def execute_query_handler_mocked(query, db=None): sqlserver_check._database_metrics = [database_backup_metrics] dd_run_check(sqlserver_check) - tags = instance_docker_metrics.get('tags', []) + tags = sqlserver_check._config.tags for result in mocked_results: db, database, *metric_values = result metrics = zip(database_backup_metrics.metric_names()[0], metric_values) diff --git a/sqlserver/tests/test_integration.py b/sqlserver/tests/test_integration.py index 152344a5dd997..2ad9129c52b02 100644 --- a/sqlserver/tests/test_integration.py +++ b/sqlserver/tests/test_integration.py @@ -4,6 +4,7 @@ import logging from copy import copy, deepcopy +import mock import pytest from datadog_checks.sqlserver import SQLServer @@ -42,7 +43,6 @@ def test_check_invalid_password(aggregator, dd_run_check, init_config, instance_docker): instance_docker['password'] = 'FOO' sqlserver_check = SQLServer(CHECK_NAME, init_config, [instance_docker]) - instance_tags = instance_docker.get('tags', []) with pytest.raises(SQLConnectionError) as excinfo: sqlserver_check.initialize_connection() @@ -55,7 +55,7 @@ def test_check_invalid_password(aggregator, dd_run_check, init_config, instance_ 'db:master', 'connection_host:{}'.format(instance_docker.get('host')), ] - + instance_tags, + + sqlserver_check._config.tags, message=str(excinfo.value), ) @@ -92,7 +92,7 @@ def test_check_docker(aggregator, dd_run_check, init_config, instance_docker, da instance_docker['autodiscovery_include'] = autodiscovery_dbs sqlserver_check = SQLServer(CHECK_NAME, init_config, [instance_docker]) dd_run_check(sqlserver_check) - expected_tags = instance_docker.get('tags', []) + [ + expected_tags = sqlserver_check._config.tags + [ 'connection_host:{}'.format(instance_docker.get('host')), 'sqlserver_host:{}'.format(sqlserver_check.resolved_hostname), 'db:master', @@ -100,7 +100,7 @@ def test_check_docker(aggregator, dd_run_check, init_config, instance_docker, da assert_metrics( instance_docker, aggregator, - check_tags=instance_docker.get('tags', []), + check_tags=sqlserver_check._config.tags, service_tags=expected_tags, dbm_enabled=dbm_enabled, hostname=sqlserver_check.resolved_hostname, @@ -119,7 +119,7 @@ def test_check_stored_procedure(aggregator, dd_run_check, init_config, instance_ sqlserver_check = SQLServer(CHECK_NAME, init_config, [instance_docker]) dd_run_check(sqlserver_check) - expected_tags = instance_docker.get('tags', []) + sp_tags.split(',') + expected_tags = sqlserver_check._config.tags + sp_tags.split(',') aggregator.assert_metric('sql.sp.testa', value=100, tags=expected_tags, count=1) aggregator.assert_metric('sql.sp.testb', tags=expected_tags, count=2) @@ -145,7 +145,7 @@ def test_check_stored_procedure_proc_if(aggregator, dd_run_check, init_config, i def test_custom_metrics_object_name(aggregator, dd_run_check, init_config_object_name, instance_docker): sqlserver_check = SQLServer(CHECK_NAME, init_config_object_name, [instance_docker]) dd_run_check(sqlserver_check) - instance_tags = instance_docker.get('tags', []) + ['optional_tag:tag1'] + instance_tags = sqlserver_check._config.tags + ['optional_tag:tag1'] aggregator.assert_metric('sqlserver.cache.hit_ratio', tags=instance_tags, count=1) aggregator.assert_metric('sqlserver.broker_activation.tasks_running', tags=instance_tags, count=1) @@ -158,7 +158,7 @@ def test_custom_metrics_alt_tables(aggregator, dd_run_check, init_config_alt_tab sqlserver_check = SQLServer(CHECK_NAME, init_config_alt_tables, [instance_docker]) dd_run_check(sqlserver_check) - instance_tags = instance_docker.get('tags', []) + instance_tags = sqlserver_check._config.tags aggregator.assert_metric('sqlserver.LCK_M_S.max_wait_time_ms', tags=instance_tags, count=1) aggregator.assert_metric('sqlserver.LCK_M_S.signal_wait_time_ms', tags=instance_tags, count=1) @@ -187,7 +187,7 @@ def test_autodiscovery_database_metrics(aggregator, dd_run_check, instance_autod instance_autodiscovery['autodiscovery_include'] = ['master', 'msdb'] check = SQLServer(CHECK_NAME, {}, [instance_autodiscovery]) dd_run_check(check) - instance_tags = instance_autodiscovery.get('tags', []) + instance_tags = check._config.tags master_tags = [ 'database:master', @@ -228,7 +228,7 @@ def test_autodiscovery_db_service_checks( instance_autodiscovery['autodiscovery_db_service_check'] = service_check_enabled check = SQLServer(CHECK_NAME, {}, [instance_autodiscovery]) dd_run_check(check) - instance_tags = instance_autodiscovery.get('tags', []) + instance_tags = check._config.tags # verify that the old status check returns OK aggregator.assert_service_check( @@ -279,7 +279,7 @@ def test_autodiscovery_exclude_db_service_checks(aggregator, dd_run_check, insta instance_autodiscovery['autodiscovery_include'] = ['master'] instance_autodiscovery['autodiscovery_exclude'] = ['msdb'] check = SQLServer(CHECK_NAME, {}, [instance_autodiscovery]) - instance_tags = instance_autodiscovery.get('tags', []) + instance_tags = check._config.tags dd_run_check(check) @@ -323,7 +323,7 @@ def test_autodiscovery_perf_counters(aggregator, dd_run_check, instance_autodisc instance_autodiscovery['autodiscovery_include'] = ['master', 'msdb'] check = SQLServer(CHECK_NAME, {}, [instance_autodiscovery]) dd_run_check(check) - instance_tags = instance_autodiscovery.get('tags', []) + instance_tags = check._config.tags expected_metrics = [m[0] for m in INSTANCE_METRICS_DATABASE_SINGLE] master_tags = ['database:master'] + instance_tags @@ -340,7 +340,7 @@ def test_autodiscovery_perf_counters_ao(aggregator, dd_run_check, instance_autod instance_autodiscovery['autodiscovery_include'] = ['datadog_test-1'] check = SQLServer(CHECK_NAME, {}, [instance_autodiscovery]) dd_run_check(check) - instance_tags = instance_autodiscovery.get('tags', []) + instance_tags = check._config.tags expected_metrics = [m[0] for m in INSTANCE_METRICS_DATABASE] tags = ['database:datadog_test-1'] + instance_tags @@ -428,7 +428,7 @@ def test_custom_queries(aggregator, dd_run_check, instance_docker, custom_query, for metric_name, kwargs in assert_metrics: kwargs = copy(kwargs) - kwargs['tags'] = instance['tags'] + kwargs.get('tags', []) + kwargs['tags'] = check._config.tags + kwargs.get('tags', []) aggregator.assert_metric(metric_name, **kwargs) @@ -804,10 +804,59 @@ def execute_query(query, params): check = SQLServer(CHECK_NAME, {}, [instance_docker]) dd_run_check(check) - expected_tags = instance_docker.get('tags', []) + [ + expected_tags = check._config.tags + [ 'db:datadog_test-1', 'table:ϑings', 'index_name:thingsindex', ] for m in DATABASE_INDEX_METRICS: aggregator.assert_metric(m, tags=expected_tags, count=1) + + +@pytest.mark.parametrize( + 'instance_propagate_agent_tags,init_config_propagate_agent_tags,should_propagate_agent_tags', + [ + pytest.param(True, True, True, id="both true"), + pytest.param(True, False, True, id="instance config true prevails"), + pytest.param(False, True, False, id="instance config false prevails"), + pytest.param(False, False, False, id="both false"), + pytest.param(None, True, True, id="init_config true applies to all instances"), + pytest.param(None, False, False, id="init_config false applies to all instances"), + pytest.param(None, None, False, id="default to false"), + pytest.param(True, None, True, id="instance config true prevails, init_config is None"), + pytest.param(False, None, False, id="instance config false prevails, init_config is None"), + ], +) +@pytest.mark.integration +def test_propagate_agent_tags( + aggregator, + dd_run_check, + instance_docker, + instance_propagate_agent_tags, + init_config_propagate_agent_tags, + should_propagate_agent_tags, +): + init_config = {} + if instance_propagate_agent_tags is not None: + instance_docker['propagate_agent_tags'] = instance_propagate_agent_tags + if init_config_propagate_agent_tags is not None: + init_config['propagate_agent_tags'] = init_config_propagate_agent_tags + + agent_tags = ['my-env:test-env', 'random:tag', 'bar:foo'] + + with mock.patch('datadog_checks.sqlserver.config.get_agent_host_tags', return_value=agent_tags): + check = SQLServer(CHECK_NAME, init_config, [instance_docker]) + assert check._config._should_propagate_agent_tags(instance_docker, init_config) == should_propagate_agent_tags + if should_propagate_agent_tags: + assert all(tag in check.tags for tag in agent_tags) + dd_run_check(check) + expected_tags = check._config.tags + [ + 'connection_host:{}'.format(instance_docker.get('host')), + 'sqlserver_host:{}'.format(check.resolved_hostname), + 'db:master', + ] + aggregator.assert_service_check( + 'sqlserver.can_connect', + status=SQLServer.OK, + tags=expected_tags, + ) diff --git a/sqlserver/tests/test_metrics.py b/sqlserver/tests/test_metrics.py index 9cd60b1aa92bf..c6e655eff51e8 100644 --- a/sqlserver/tests/test_metrics.py +++ b/sqlserver/tests/test_metrics.py @@ -57,7 +57,7 @@ def test_check_server_metrics( sqlserver_check = SQLServer(CHECK_NAME, init_config, [instance_docker_metrics]) dd_run_check(sqlserver_check) - tags = instance_docker_metrics.get('tags', []) + tags = sqlserver_check._config.tags check_sqlserver_can_connect(aggregator, instance_docker_metrics['host'], sqlserver_check.resolved_hostname, tags) @@ -83,7 +83,7 @@ def test_check_instance_metrics( sqlserver_check = SQLServer(CHECK_NAME, init_config, [instance_docker_metrics]) dd_run_check(sqlserver_check) - tags = instance_docker_metrics.get('tags', []) + tags = sqlserver_check._config.tags check_sqlserver_can_connect( aggregator, instance_docker_metrics['host'], sqlserver_check.resolved_hostname, tags, False @@ -119,7 +119,7 @@ def test_check_instance_metrics_autodiscovery( sqlserver_check = SQLServer(CHECK_NAME, init_config, [instance_docker_metrics]) dd_run_check(sqlserver_check) - tags = instance_docker_metrics.get('tags', []) + tags = sqlserver_check._config.tags check_sqlserver_can_connect( aggregator, instance_docker_metrics['host'], sqlserver_check.resolved_hostname, tags, True @@ -167,7 +167,7 @@ def test_check_database_metrics( sqlserver_check = SQLServer(CHECK_NAME, init_config, [instance_docker_metrics]) dd_run_check(sqlserver_check) - tags = instance_docker_metrics.get('tags', []) + tags = sqlserver_check._config.tags check_sqlserver_can_connect( aggregator, instance_docker_metrics['host'], sqlserver_check.resolved_hostname, tags, database_autodiscovery @@ -246,7 +246,7 @@ def test_check_index_usage_metrics( sqlserver_check = SQLServer(CHECK_NAME, init_config, [instance_docker_metrics]) dd_run_check(sqlserver_check) - tags = instance_docker_metrics.get('tags', []) + tags = sqlserver_check._config.tags check_sqlserver_can_connect(aggregator, instance_docker_metrics['host'], sqlserver_check.resolved_hostname, tags) @@ -272,7 +272,7 @@ def test_check_task_scheduler_metrics( sqlserver_check = SQLServer(CHECK_NAME, init_config, [instance_docker_metrics]) dd_run_check(sqlserver_check) - tags = instance_docker_metrics.get('tags', []) + tags = sqlserver_check._config.tags check_sqlserver_can_connect(aggregator, instance_docker_metrics['host'], sqlserver_check.resolved_hostname, tags) @@ -300,7 +300,7 @@ def test_check_master_files_metrics( sqlserver_check = SQLServer(CHECK_NAME, init_config, [instance_docker_metrics]) dd_run_check(sqlserver_check) - tags = instance_docker_metrics.get('tags', []) + tags = sqlserver_check._config.tags check_sqlserver_can_connect(aggregator, instance_docker_metrics['host'], sqlserver_check.resolved_hostname, tags) @@ -339,7 +339,7 @@ def test_check_db_fragmentation_metrics( sqlserver_check = SQLServer(CHECK_NAME, init_config, [instance_docker_metrics]) dd_run_check(sqlserver_check) - tags = instance_docker_metrics.get('tags', []) + tags = sqlserver_check._config.tags check_sqlserver_can_connect( aggregator, instance_docker_metrics['host'], sqlserver_check.resolved_hostname, tags, database_autodiscovery @@ -369,7 +369,7 @@ def test_check_tempdb_file_space_usage_metrics( sqlserver_check = SQLServer(CHECK_NAME, init_config, [instance_docker_metrics]) dd_run_check(sqlserver_check) - tags = instance_docker_metrics.get('tags', []) + tags = sqlserver_check._config.tags check_sqlserver_can_connect(aggregator, instance_docker_metrics['host'], sqlserver_check.resolved_hostname, tags) @@ -423,7 +423,7 @@ def test_check_incr_fraction_metrics( sqlserver_check.run() cursor.close() - tags = instance_docker_metrics.get('tags', []) + tags = sqlserver_check._config.tags check_sqlserver_can_connect(aggregator, instance_docker_metrics['host'], sqlserver_check.resolved_hostname, tags) diff --git a/sqlserver/tests/test_statements.py b/sqlserver/tests/test_statements.py index ee8f3a7599b2f..f2d41ab1aae61 100644 --- a/sqlserver/tests/test_statements.py +++ b/sqlserver/tests/test_statements.py @@ -439,7 +439,7 @@ def test_statement_metrics_and_plans( aggregator.assert_metric( OPERATION_TIME_METRIC_NAME, tags=['agent_hostname:stubbed.hostname', 'operation:collect_statement_metrics_and_plans'] - + _expected_dbm_instance_tags(dbm_instance), + + _expected_dbm_instance_tags(check), ) @@ -768,7 +768,7 @@ def _mock_slow_load_plan(*_): mock_obj.side_effect = _mock_slow_load_plan dd_run_check(check) - expected_debug_tags = ['agent_hostname:stubbed.hostname'] + _expected_dbm_instance_tags(dbm_instance) + expected_debug_tags = ['agent_hostname:stubbed.hostname'] + _expected_dbm_instance_tags(check) if slow_plans: aggregator.assert_metric("dd.sqlserver.statements.deadline_exceeded", tags=expected_debug_tags) @@ -817,8 +817,8 @@ def test_obfuscate_xml_plan(test_file, obfuscated_file, datadog_agent): PORT = 1432 -def _expected_dbm_instance_tags(dbm_instance): - return dbm_instance['tags'] +def _expected_dbm_instance_tags(check): + return check._config.tags @pytest.mark.parametrize("statement_metrics_enabled", [True, False]) @@ -843,7 +843,7 @@ def test_async_job_inactive_stop(aggregator, dd_run_check, dbm_instance): check.statement_metrics._job_loop_future.result() aggregator.assert_metric( "dd.sqlserver.async_job.inactive_stop", - tags=['job:query-metrics'] + _expected_dbm_instance_tags(dbm_instance), + tags=['job:query-metrics'] + _expected_dbm_instance_tags(check), hostname='', ) @@ -862,7 +862,7 @@ def test_async_job_cancel_cancel(aggregator, dd_run_check, dbm_instance): # be created in the first place aggregator.assert_metric( "dd.sqlserver.async_job.cancel", - tags=_expected_dbm_instance_tags(dbm_instance) + ['job:query-metrics'], + tags=_expected_dbm_instance_tags(check) + ['job:query-metrics'], ) diff --git a/sqlserver/tests/test_stored_procedures.py b/sqlserver/tests/test_stored_procedures.py index ebc1588e8c3e7..ce310e8c52030 100644 --- a/sqlserver/tests/test_stored_procedures.py +++ b/sqlserver/tests/test_stored_procedures.py @@ -38,8 +38,8 @@ logger = logging.getLogger(__name__) -def _expected_dbm_instance_tags(dbm_instance): - return dbm_instance['tags'] +def _expected_dbm_instance_tags(check): + return check._config.tags @pytest.fixture(autouse=True) @@ -285,7 +285,7 @@ def test_procedure_metrics( aggregator.assert_metric( OPERATION_TIME_METRIC_NAME, tags=['agent_hostname:stubbed.hostname', 'operation:collect_procedure_metrics'] - + _expected_dbm_instance_tags(dbm_instance), + + _expected_dbm_instance_tags(check), ) @@ -344,9 +344,12 @@ def test_async_job_inactive_stop(aggregator, dd_run_check, dbm_instance): check = SQLServer(CHECK_NAME, {}, [dbm_instance]) dd_run_check(check) check.procedure_metrics._job_loop_future.result() + print("natasha heree") + print(['job:procedure-metrics'] + _expected_dbm_instance_tags(check)) + print(['job:procedure-metrics'] + check._config.tags) aggregator.assert_metric( "dd.sqlserver.async_job.inactive_stop", - tags=['job:procedure-metrics'] + _expected_dbm_instance_tags(dbm_instance), + tags=['job:procedure-metrics'] + check._config.tags, hostname='', ) @@ -365,5 +368,5 @@ def test_async_job_cancel_cancel(aggregator, dd_run_check, dbm_instance): # be created in the first place aggregator.assert_metric( "dd.sqlserver.async_job.cancel", - tags=_expected_dbm_instance_tags(dbm_instance) + ['job:procedure-metrics'], + tags=_expected_dbm_instance_tags(check) + ['job:procedure-metrics'], ) diff --git a/sqlserver/tests/test_unit.py b/sqlserver/tests/test_unit.py index 4aadfa462af2f..071c59c9db504 100644 --- a/sqlserver/tests/test_unit.py +++ b/sqlserver/tests/test_unit.py @@ -479,7 +479,7 @@ def test_set_default_driver_conf_linux(): def test_check_local(aggregator, dd_run_check, init_config, instance_docker): sqlserver_check = SQLServer(CHECK_NAME, init_config, [instance_docker]) dd_run_check(sqlserver_check) - check_tags = instance_docker.get('tags', []) + check_tags = sqlserver_check._config.tags expected_tags = check_tags + [ 'sqlserver_host:{}'.format(sqlserver_check.resolved_hostname), 'connection_host:{}'.format(DOCKER_SERVER), @@ -528,7 +528,7 @@ def test_database_state(aggregator, dd_run_check, init_config, instance_docker): instance_docker['database'] = 'mAsTeR' sqlserver_check = SQLServer(CHECK_NAME, init_config, [instance_docker]) dd_run_check(sqlserver_check) - expected_tags = instance_docker.get('tags', []) + [ + expected_tags = sqlserver_check._config.tags + [ 'database_recovery_model_desc:SIMPLE', 'database_state_desc:ONLINE', 'database:{}'.format(instance_docker['database']), From 0302e781c0c0199bdc402555785b1c9ca6810b25 Mon Sep 17 00:00:00 2001 From: Kyle Neale Date: Tue, 1 Oct 2024 10:19:58 -0400 Subject: [PATCH 26/56] Port vSphere release to `master` (#18741) * Port vSphere release to master * remove extra spacing --- vsphere/CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/vsphere/CHANGELOG.md b/vsphere/CHANGELOG.md index 501e081afdb32..0bbaab575c36d 100644 --- a/vsphere/CHANGELOG.md +++ b/vsphere/CHANGELOG.md @@ -18,6 +18,12 @@ * Fixed excluded host tags for property metrics ([#18601](https://github.com/DataDog/integrations-core/pull/18601)) * Bump the version of datadog-checks-base to 37.0.0 ([#18617](https://github.com/DataDog/integrations-core/pull/18617)) +## 7.7.0 / 2024-10-01 / 7.58.0 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 7.6.0 / 2024-07-05 / Agent 7.56.0 ***Added***: From 38db91c972ae9049462a54293337d817f9d0d446 Mon Sep 17 00:00:00 2001 From: Kyle Neale Date: Tue, 1 Oct 2024 14:35:22 -0400 Subject: [PATCH 27/56] [Release] Release integrations with base check bump `v7.58` (#18742) (#18746) * [Release] Bumped active_directory version to 3.0.0 * [Release] Bumped activemq version to 4.0.0 * [Release] Bumped activemq_xml version to 4.0.0 * [Release] Bumped aerospike version to 3.0.0 * [Release] Bumped airflow version to 6.0.0 * [Release] Bumped amazon_msk version to 5.0.0 * [Release] Bumped ambari version to 5.0.0 * [Release] Bumped apache version to 5.0.0 * [Release] Bumped arangodb version to 3.0.0 * [Release] Bumped argo_rollouts version to 2.0.0 * [Release] Bumped argo_workflows version to 2.0.0 * [Release] Bumped argocd version to 3.0.0 * [Release] Bumped aspdotnet version to 3.0.0 * [Release] Bumped avi_vantage version to 5.0.0 * [Release] Bumped aws_neuron version to 2.0.0 * [Release] Bumped azure_iot_edge version to 5.0.0 * [Release] Bumped boundary version to 3.0.0 * [Release] Bumped btrfs version to 3.0.0 * [Release] Bumped cacti version to 3.0.0 * [Release] Bumped calico version to 3.0.0 * [Release] Bumped cassandra version to 2.0.0 * [Release] Bumped cassandra_nodetool version to 2.0.0 * [Release] Bumped ceph version to 3.0.0 * [Release] Bumped cert_manager version to 5.0.0 * [Release] Bumped cilium version to 4.0.0 * [Release] Bumped cisco_aci version to 3.0.0 * [Release] Bumped citrix_hypervisor version to 4.0.0 * [Release] Bumped clickhouse version to 4.0.0 * [Release] Bumped cloud_foundry_api version to 4.0.0 * [Release] Bumped cloudera version to 3.0.0 * [Release] Bumped cockroachdb version to 4.0.0 * [Release] Bumped confluent_platform version to 2.0.0 * [Release] Bumped consul version to 3.0.0 * [Release] Bumped coredns version to 4.0.0 * [Release] Bumped couch version to 7.0.0 * [Release] Bumped couchbase version to 4.0.0 * [Release] Bumped crio version to 3.0.0 * [Release] Bumped datadog_checks_base version to 37.0.0 * [Release] Bumped datadog_checks_dependency_provider version to 2.0.0 * [Release] Bumped datadog_checks_downloader version to 5.0.0 * [Release] Bumped datadog_cluster_agent version to 4.0.0 * [Release] Bumped dcgm version to 3.0.0 * [Release] Bumped directory version to 3.0.0 * [Release] Bumped disk version to 6.0.0 * [Release] Bumped dns_check version to 4.0.0 * [Release] Bumped dotnetclr version to 3.0.0 * [Release] Bumped druid version to 3.0.0 * [Release] Bumped ecs_fargate version to 5.0.0 * [Release] Bumped eks_fargate version to 5.0.0 * [Release] Bumped elastic version to 7.0.0 * [Release] Bumped envoy version to 4.0.0 * [Release] Bumped esxi version to 2.0.0 * [Release] Bumped etcd version to 7.0.0 * [Release] Bumped exchange_server version to 3.0.0 * [Release] Bumped external_dns version to 4.0.0 * [Release] Bumped flink version to 2.0.0 * [Release] Bumped fluentd version to 4.0.0 * [Release] Bumped fluxcd version to 2.0.0 * [Release] Bumped fly_io version to 2.0.0 * [Release] Bumped foundationdb version to 2.0.0 * [Release] Bumped gearmand version to 4.0.0 * [Release] Bumped gitlab version to 8.0.0 * [Release] Bumped gitlab_runner version to 5.0.0 * [Release] Bumped glusterfs version to 2.0.0 * [Release] Bumped go_expvar version to 3.0.0 * [Release] Bumped gunicorn version to 3.0.0 * [Release] Bumped haproxy version to 6.0.0 * [Release] Bumped harbor version to 4.0.0 * [Release] Bumped hazelcast version to 5.0.0 * [Release] Bumped hdfs_datanode version to 5.0.0 * [Release] Bumped hdfs_namenode version to 5.0.0 * [Release] Bumped hive version to 2.0.0 * [Release] Bumped hivemq version to 2.0.0 * [Release] Bumped http_check version to 10.0.0 * [Release] Bumped hudi version to 3.0.0 * [Release] Bumped hyperv version to 2.0.0 * [Release] Bumped ibm_ace version to 3.0.0 * [Release] Bumped ibm_db2 version to 3.0.0 * [Release] Bumped ibm_i version to 3.0.0 * [Release] Bumped ibm_mq version to 7.0.0 * [Release] Bumped ibm_was version to 4.0.0 * [Release] Bumped ignite version to 3.0.0 * [Release] Bumped iis version to 4.0.0 * [Release] Bumped impala version to 3.0.0 * [Release] Bumped istio version to 7.0.0 * [Release] Bumped jboss_wildfly version to 3.0.0 * [Release] Bumped journald version to 2.0.0 * [Release] Bumped kafka version to 3.0.0 * [Release] Bumped kafka_consumer version to 5.0.0 * [Release] Bumped karpenter version to 2.0.0 * [Release] Bumped kong version to 4.0.0 * [Release] Bumped kube_apiserver_metrics version to 5.0.0 * [Release] Bumped kube_controller_manager version to 6.0.0 * [Release] Bumped kube_dns version to 5.0.0 * [Release] Bumped kube_metrics_server version to 4.0.0 * [Release] Bumped kube_proxy version to 7.0.0 * [Release] Bumped kube_scheduler version to 5.0.0 * [Release] Bumped kubelet version to 8.0.0 * [Release] Bumped kubernetes_cluster_autoscaler version to 2.0.0 * [Release] Bumped kubernetes_state version to 9.0.0 * [Release] Bumped kyototycoon version to 3.0.0 * [Release] Bumped kyverno version to 2.0.0 * [Release] Bumped lighttpd version to 4.0.0 * [Release] Bumped linkerd version to 5.0.0 * [Release] Bumped linux_proc_extras version to 3.0.0 * [Release] Bumped mapr version to 2.0.0 * [Release] Bumped mapreduce version to 5.0.0 * [Release] Bumped marathon version to 3.0.0 * [Release] Bumped marklogic version to 5.0.0 * [Release] Bumped mcache version to 5.0.0 * [Release] Bumped mesos_master version to 4.0.0 * [Release] Bumped mesos_slave version to 4.0.0 * [Release] Bumped mongo version to 7.0.0 * [Release] Bumped mysql version to 13.0.0 * [Release] Bumped nagios version to 2.0.0 * [Release] Bumped network version to 4.0.0 * [Release] Bumped nfsstat version to 2.0.0 * [Release] Bumped nginx version to 7.0.0 * [Release] Bumped nginx_ingress_controller version to 3.0.0 * [Release] Bumped nvidia_triton version to 2.0.0 * [Release] Bumped openldap version to 2.0.0 * [Release] Bumped openmetrics version to 5.0.0 * [Release] Bumped openstack version to 3.0.0 * [Release] Bumped openstack_controller version to 7.0.0 * [Release] Bumped oracle version to 6.0.0 * [Release] Bumped ossec_security version to 2.0.0 * [Release] Bumped pan_firewall version to 2.0.0 * [Release] Bumped pdh_check version to 3.0.0 * [Release] Bumped pgbouncer version to 7.0.0 * [Release] Bumped php_fpm version to 4.0.0 * [Release] Bumped ping_federate version to 2.0.0 * [Release] Bumped postfix version to 2.0.0 * [Release] Bumped postgres version to 21.0.0 * [Release] Bumped powerdns_recursor version to 3.0.0 * [Release] Bumped presto version to 3.0.0 * [Release] Bumped process version to 4.0.0 * [Release] Bumped prometheus version to 4.0.0 * [Release] Bumped proxysql version to 6.0.0 * [Release] Bumped pulsar version to 3.0.0 * [Release] Bumped rabbitmq version to 6.0.0 * [Release] Bumped ray version to 2.0.0 * [Release] Bumped redisdb version to 6.0.0 * [Release] Bumped rethinkdb version to 4.0.0 * [Release] Bumped riak version to 4.0.0 * [Release] Bumped riakcs version to 3.0.0 * [Release] Bumped sap_hana version to 4.0.0 * [Release] Bumped scylla version to 3.0.0 * [Release] Bumped sidekiq version to 2.0.0 * [Release] Bumped silk version to 3.0.0 * [Release] Bumped singlestore version to 3.0.0 * [Release] Bumped snmp version to 8.0.0 * [Release] Bumped snowflake version to 6.0.0 * [Release] Bumped solr version to 2.0.0 * [Release] Bumped sonarqube version to 4.0.0 * [Release] Bumped spark version to 5.0.0 * [Release] Bumped sqlserver version to 18.0.0 * [Release] Bumped squid version to 3.0.0 * [Release] Bumped ssh_check version to 3.0.0 * [Release] Bumped statsd version to 2.0.0 * [Release] Bumped strimzi version to 3.0.0 * [Release] Bumped supervisord version to 3.0.0 * [Release] Bumped suricata version to 2.0.0 * [Release] Bumped system_core version to 3.0.0 * [Release] Bumped system_swap version to 2.0.0 * [Release] Bumped tcp_check version to 5.0.0 * [Release] Bumped teamcity version to 5.0.0 * [Release] Bumped tekton version to 2.0.0 * [Release] Bumped teleport version to 2.0.0 * [Release] Bumped temporal version to 3.0.0 * [Release] Bumped tenable version to 2.0.0 * [Release] Bumped teradata version to 3.0.0 * [Release] Bumped tibco_ems version to 2.0.0 * [Release] Bumped tls version to 3.0.0 * [Release] Bumped tomcat version to 3.0.0 * [Release] Bumped torchserve version to 3.0.0 * [Release] Bumped traefik_mesh version to 2.0.0 * [Release] Bumped traffic_server version to 3.0.0 * [Release] Bumped twemproxy version to 2.0.0 * [Release] Bumped twistlock version to 4.0.0 * [Release] Bumped varnish version to 3.0.0 * [Release] Bumped vault version to 5.0.0 * [Release] Bumped vertica version to 5.0.0 * [Release] Bumped vllm version to 2.0.0 * [Release] Bumped voltdb version to 4.0.0 * [Release] Bumped weaviate version to 3.0.0 * [Release] Bumped weblogic version to 2.0.0 * [Release] Bumped win32_event_log version to 4.0.0 * [Release] Bumped windows_performance_counters version to 3.0.0 * [Release] Bumped windows_service version to 5.0.0 * [Release] Bumped wmi_check version to 2.0.0 * [Release] Bumped yarn version to 6.0.0 * [Release] Bumped zk version to 5.0.0 * [Release] Update metadata --- active_directory/CHANGELOG.md | 6 + .../active_directory/__about__.py | 2 +- activemq/CHANGELOG.md | 6 + activemq/datadog_checks/activemq/__about__.py | 2 +- activemq_xml/CHANGELOG.md | 6 + .../datadog_checks/activemq_xml/__about__.py | 2 +- aerospike/CHANGELOG.md | 6 + .../datadog_checks/aerospike/__about__.py | 2 +- airflow/CHANGELOG.md | 6 + airflow/datadog_checks/airflow/__about__.py | 2 +- amazon_msk/CHANGELOG.md | 6 + .../datadog_checks/amazon_msk/__about__.py | 2 +- ambari/CHANGELOG.md | 6 + ambari/datadog_checks/ambari/__about__.py | 2 +- apache/CHANGELOG.md | 6 + apache/datadog_checks/apache/__about__.py | 2 +- arangodb/CHANGELOG.md | 6 + arangodb/datadog_checks/arangodb/__about__.py | 2 +- argo_rollouts/CHANGELOG.md | 6 + .../datadog_checks/argo_rollouts/__about__.py | 2 +- argo_workflows/CHANGELOG.md | 6 + .../argo_workflows/__about__.py | 2 +- argocd/CHANGELOG.md | 6 + argocd/datadog_checks/argocd/__about__.py | 2 +- aspdotnet/CHANGELOG.md | 6 + .../datadog_checks/aspdotnet/__about__.py | 2 +- avi_vantage/CHANGELOG.md | 6 + .../datadog_checks/avi_vantage/__about__.py | 2 +- aws_neuron/CHANGELOG.md | 6 + .../datadog_checks/aws_neuron/__about__.py | 2 +- azure_iot_edge/CHANGELOG.md | 6 + .../azure_iot_edge/__about__.py | 2 +- boundary/CHANGELOG.md | 6 + boundary/datadog_checks/boundary/__about__.py | 2 +- btrfs/CHANGELOG.md | 10 + btrfs/changelog.d/18688.added | 1 - btrfs/datadog_checks/btrfs/__about__.py | 2 +- cacti/CHANGELOG.md | 6 + cacti/datadog_checks/cacti/__about__.py | 2 +- calico/CHANGELOG.md | 6 + calico/datadog_checks/calico/__about__.py | 2 +- cassandra/CHANGELOG.md | 6 + .../datadog_checks/cassandra/__about__.py | 2 +- cassandra_nodetool/CHANGELOG.md | 6 + .../cassandra_nodetool/__about__.py | 2 +- ceph/CHANGELOG.md | 6 + ceph/datadog_checks/ceph/__about__.py | 2 +- cert_manager/CHANGELOG.md | 6 + .../datadog_checks/cert_manager/__about__.py | 2 +- cilium/CHANGELOG.md | 6 + cilium/datadog_checks/cilium/__about__.py | 2 +- cisco_aci/CHANGELOG.md | 10 + cisco_aci/changelog.d/18656.security | 1 - .../datadog_checks/cisco_aci/__about__.py | 2 +- citrix_hypervisor/CHANGELOG.md | 6 + .../citrix_hypervisor/__about__.py | 2 +- clickhouse/CHANGELOG.md | 6 + .../datadog_checks/clickhouse/__about__.py | 2 +- cloud_foundry_api/CHANGELOG.md | 6 + .../cloud_foundry_api/__about__.py | 2 +- cloudera/CHANGELOG.md | 6 + cloudera/datadog_checks/cloudera/__about__.py | 2 +- cockroachdb/CHANGELOG.md | 6 + .../datadog_checks/cockroachdb/__about__.py | 2 +- confluent_platform/CHANGELOG.md | 6 + .../confluent_platform/__about__.py | 2 +- consul/CHANGELOG.md | 6 + consul/datadog_checks/consul/__about__.py | 2 +- coredns/CHANGELOG.md | 6 + coredns/datadog_checks/coredns/__about__.py | 2 +- couch/CHANGELOG.md | 6 + couch/datadog_checks/couch/__about__.py | 2 +- couchbase/CHANGELOG.md | 6 + .../datadog_checks/couchbase/__about__.py | 2 +- crio/CHANGELOG.md | 6 + crio/datadog_checks/crio/__about__.py | 2 +- .../CHANGELOG.md | 6 + .../__about__.py | 2 +- datadog_checks_downloader/CHANGELOG.md | 6 + .../datadog_checks/downloader/__about__.py | 2 +- datadog_cluster_agent/CHANGELOG.md | 6 + .../datadog_cluster_agent/__about__.py | 2 +- dcgm/CHANGELOG.md | 6 + dcgm/datadog_checks/dcgm/__about__.py | 2 +- directory/CHANGELOG.md | 6 + .../datadog_checks/directory/__about__.py | 2 +- disk/CHANGELOG.md | 10 + disk/changelog.d/18688.added | 1 - disk/datadog_checks/disk/__about__.py | 2 +- dns_check/CHANGELOG.md | 6 + .../datadog_checks/dns_check/__about__.py | 2 +- dotnetclr/CHANGELOG.md | 6 + .../datadog_checks/dotnetclr/__about__.py | 2 +- druid/CHANGELOG.md | 6 + druid/datadog_checks/druid/__about__.py | 2 +- ecs_fargate/CHANGELOG.md | 6 + .../datadog_checks/ecs_fargate/__about__.py | 2 +- eks_fargate/CHANGELOG.md | 6 + .../datadog_checks/eks_fargate/__about__.py | 2 +- elastic/CHANGELOG.md | 6 + elastic/datadog_checks/elastic/__about__.py | 2 +- envoy/CHANGELOG.md | 6 + envoy/datadog_checks/envoy/__about__.py | 2 +- esxi/CHANGELOG.md | 6 + esxi/datadog_checks/esxi/__about__.py | 2 +- etcd/CHANGELOG.md | 6 + etcd/datadog_checks/etcd/__about__.py | 2 +- exchange_server/CHANGELOG.md | 6 + .../exchange_server/__about__.py | 2 +- external_dns/CHANGELOG.md | 6 + .../datadog_checks/external_dns/__about__.py | 2 +- flink/CHANGELOG.md | 6 + flink/datadog_checks/flink/__about__.py | 2 +- fluentd/CHANGELOG.md | 6 + fluentd/datadog_checks/fluentd/__about__.py | 2 +- fluxcd/CHANGELOG.md | 6 + fluxcd/datadog_checks/fluxcd/__about__.py | 2 +- fly_io/CHANGELOG.md | 6 + fly_io/datadog_checks/fly_io/__about__.py | 2 +- foundationdb/CHANGELOG.md | 6 + .../datadog_checks/foundationdb/__about__.py | 2 +- gearmand/CHANGELOG.md | 6 + gearmand/datadog_checks/gearmand/__about__.py | 2 +- gitlab/CHANGELOG.md | 6 + gitlab/datadog_checks/gitlab/__about__.py | 2 +- gitlab_runner/CHANGELOG.md | 6 + .../datadog_checks/gitlab_runner/__about__.py | 2 +- glusterfs/CHANGELOG.md | 6 + .../datadog_checks/glusterfs/__about__.py | 2 +- go_expvar/CHANGELOG.md | 6 + .../datadog_checks/go_expvar/__about__.py | 2 +- gunicorn/CHANGELOG.md | 10 + gunicorn/changelog.d/18688.added | 1 - gunicorn/datadog_checks/gunicorn/__about__.py | 2 +- haproxy/CHANGELOG.md | 6 + haproxy/datadog_checks/haproxy/__about__.py | 2 +- harbor/CHANGELOG.md | 6 + harbor/datadog_checks/harbor/__about__.py | 2 +- hazelcast/CHANGELOG.md | 6 + .../datadog_checks/hazelcast/__about__.py | 2 +- hdfs_datanode/CHANGELOG.md | 6 + .../datadog_checks/hdfs_datanode/__about__.py | 2 +- hdfs_namenode/CHANGELOG.md | 6 + .../datadog_checks/hdfs_namenode/__about__.py | 2 +- hive/CHANGELOG.md | 6 + hive/datadog_checks/hive/__about__.py | 2 +- hivemq/CHANGELOG.md | 6 + hivemq/datadog_checks/hivemq/__about__.py | 2 +- http_check/CHANGELOG.md | 10 + http_check/changelog.d/18656.security | 1 - .../datadog_checks/http_check/__about__.py | 2 +- hudi/CHANGELOG.md | 6 + hudi/datadog_checks/hudi/__about__.py | 2 +- hyperv/CHANGELOG.md | 6 + hyperv/datadog_checks/hyperv/__about__.py | 2 +- ibm_ace/CHANGELOG.md | 6 + ibm_ace/datadog_checks/ibm_ace/__about__.py | 2 +- ibm_db2/CHANGELOG.md | 6 + ibm_db2/datadog_checks/ibm_db2/__about__.py | 2 +- ibm_i/CHANGELOG.md | 6 + ibm_i/datadog_checks/ibm_i/__about__.py | 2 +- ibm_mq/CHANGELOG.md | 10 + ibm_mq/changelog.d/18688.added | 1 - ibm_mq/datadog_checks/ibm_mq/__about__.py | 2 +- ibm_was/CHANGELOG.md | 10 + ibm_was/changelog.d/18637.added | 1 - ibm_was/datadog_checks/ibm_was/__about__.py | 2 +- ignite/CHANGELOG.md | 6 + ignite/datadog_checks/ignite/__about__.py | 2 +- iis/CHANGELOG.md | 6 + iis/datadog_checks/iis/__about__.py | 2 +- impala/CHANGELOG.md | 6 + impala/datadog_checks/impala/__about__.py | 2 +- istio/CHANGELOG.md | 6 + istio/datadog_checks/istio/__about__.py | 2 +- jboss_wildfly/CHANGELOG.md | 6 + .../datadog_checks/jboss_wildfly/__about__.py | 2 +- journald/CHANGELOG.md | 6 + journald/datadog_checks/journald/__about__.py | 2 +- kafka/CHANGELOG.md | 6 + kafka/datadog_checks/kafka/__about__.py | 2 +- kafka_consumer/CHANGELOG.md | 6 + .../kafka_consumer/__about__.py | 2 +- karpenter/CHANGELOG.md | 6 + .../datadog_checks/karpenter/__about__.py | 2 +- kong/CHANGELOG.md | 6 + kong/datadog_checks/kong/__about__.py | 2 +- kube_apiserver_metrics/CHANGELOG.md | 6 + .../kube_apiserver_metrics/__about__.py | 2 +- kube_controller_manager/CHANGELOG.md | 6 + .../kube_controller_manager/__about__.py | 2 +- kube_dns/CHANGELOG.md | 6 + kube_dns/datadog_checks/kube_dns/__about__.py | 2 +- kube_metrics_server/CHANGELOG.md | 6 + .../kube_metrics_server/__about__.py | 2 +- kube_proxy/CHANGELOG.md | 6 + .../datadog_checks/kube_proxy/__about__.py | 2 +- kube_scheduler/CHANGELOG.md | 6 + .../kube_scheduler/__about__.py | 2 +- kubelet/CHANGELOG.md | 6 + kubelet/datadog_checks/kubelet/__about__.py | 2 +- kubernetes_cluster_autoscaler/CHANGELOG.md | 6 + .../__about__.py | 2 +- kubernetes_state/CHANGELOG.md | 6 + .../kubernetes_state/__about__.py | 2 +- kyototycoon/CHANGELOG.md | 6 + .../datadog_checks/kyototycoon/__about__.py | 2 +- kyverno/CHANGELOG.md | 6 + kyverno/datadog_checks/kyverno/__about__.py | 2 +- lighttpd/CHANGELOG.md | 6 + lighttpd/datadog_checks/lighttpd/__about__.py | 2 +- linkerd/CHANGELOG.md | 6 + linkerd/datadog_checks/linkerd/__about__.py | 2 +- linux_proc_extras/CHANGELOG.md | 6 + .../linux_proc_extras/__about__.py | 2 +- mapr/CHANGELOG.md | 6 + mapr/datadog_checks/mapr/__about__.py | 2 +- mapreduce/CHANGELOG.md | 6 + .../datadog_checks/mapreduce/__about__.py | 2 +- marathon/CHANGELOG.md | 6 + marathon/datadog_checks/marathon/__about__.py | 2 +- marklogic/CHANGELOG.md | 6 + .../datadog_checks/marklogic/__about__.py | 2 +- mcache/CHANGELOG.md | 6 + mcache/datadog_checks/mcache/__about__.py | 2 +- mesos_master/CHANGELOG.md | 6 + .../datadog_checks/mesos_master/__about__.py | 2 +- mesos_slave/CHANGELOG.md | 6 + .../datadog_checks/mesos_slave/__about__.py | 2 +- mongo/CHANGELOG.md | 10 + mongo/changelog.d/18688.added | 1 - mongo/datadog_checks/mongo/__about__.py | 2 +- mysql/CHANGELOG.md | 10 + mysql/changelog.d/18656.security | 1 - mysql/datadog_checks/mysql/__about__.py | 2 +- nagios/CHANGELOG.md | 6 + nagios/datadog_checks/nagios/__about__.py | 2 +- network/CHANGELOG.md | 10 + network/changelog.d/18688.added | 1 - network/datadog_checks/network/__about__.py | 2 +- nfsstat/CHANGELOG.md | 6 + nfsstat/datadog_checks/nfsstat/__about__.py | 2 +- nginx/CHANGELOG.md | 6 + nginx/datadog_checks/nginx/__about__.py | 2 +- nginx_ingress_controller/CHANGELOG.md | 6 + .../nginx_ingress_controller/__about__.py | 2 +- nvidia_triton/CHANGELOG.md | 6 + .../datadog_checks/nvidia_triton/__about__.py | 2 +- openldap/CHANGELOG.md | 6 + openldap/datadog_checks/openldap/__about__.py | 2 +- openmetrics/CHANGELOG.md | 6 + .../datadog_checks/openmetrics/__about__.py | 2 +- openstack/CHANGELOG.md | 6 + .../datadog_checks/openstack/__about__.py | 2 +- openstack_controller/CHANGELOG.md | 6 + .../openstack_controller/__about__.py | 2 +- oracle/CHANGELOG.md | 6 + oracle/datadog_checks/oracle/__about__.py | 2 +- ossec_security/CHANGELOG.md | 6 + .../ossec_security/__about__.py | 2 +- pan_firewall/CHANGELOG.md | 6 + .../datadog_checks/pan_firewall/__about__.py | 2 +- pdh_check/CHANGELOG.md | 6 + .../datadog_checks/pdh_check/__about__.py | 2 +- pgbouncer/CHANGELOG.md | 6 + .../datadog_checks/pgbouncer/__about__.py | 2 +- php_fpm/CHANGELOG.md | 6 + php_fpm/datadog_checks/php_fpm/__about__.py | 2 +- ping_federate/CHANGELOG.md | 6 + .../datadog_checks/ping_federate/__about__.py | 2 +- postfix/CHANGELOG.md | 6 + postfix/datadog_checks/postfix/__about__.py | 2 +- postgres/CHANGELOG.md | 6 + postgres/datadog_checks/postgres/__about__.py | 2 +- powerdns_recursor/CHANGELOG.md | 6 + .../powerdns_recursor/__about__.py | 2 +- presto/CHANGELOG.md | 6 + presto/datadog_checks/presto/__about__.py | 2 +- process/CHANGELOG.md | 10 + process/changelog.d/18688.added | 1 - process/datadog_checks/process/__about__.py | 2 +- prometheus/CHANGELOG.md | 6 + .../datadog_checks/prometheus/__about__.py | 2 +- proxysql/CHANGELOG.md | 6 + proxysql/datadog_checks/proxysql/__about__.py | 2 +- pulsar/CHANGELOG.md | 6 + pulsar/datadog_checks/pulsar/__about__.py | 2 +- rabbitmq/CHANGELOG.md | 6 + rabbitmq/datadog_checks/rabbitmq/__about__.py | 2 +- ray/CHANGELOG.md | 6 + ray/datadog_checks/ray/__about__.py | 2 +- redisdb/CHANGELOG.md | 6 + redisdb/datadog_checks/redisdb/__about__.py | 2 +- requirements-agent-release.txt | 381 +++++++++--------- rethinkdb/CHANGELOG.md | 10 + rethinkdb/changelog.d/18636.added | 1 - .../datadog_checks/rethinkdb/__about__.py | 2 +- riak/CHANGELOG.md | 6 + riak/datadog_checks/riak/__about__.py | 2 +- riakcs/CHANGELOG.md | 6 + riakcs/datadog_checks/riakcs/__about__.py | 2 +- sap_hana/CHANGELOG.md | 6 + sap_hana/datadog_checks/sap_hana/__about__.py | 2 +- scylla/CHANGELOG.md | 6 + scylla/datadog_checks/scylla/__about__.py | 2 +- sidekiq/CHANGELOG.md | 6 + sidekiq/datadog_checks/sidekiq/__about__.py | 2 +- silk/CHANGELOG.md | 6 + silk/datadog_checks/silk/__about__.py | 2 +- singlestore/CHANGELOG.md | 6 + .../datadog_checks/singlestore/__about__.py | 2 +- snmp/CHANGELOG.md | 6 + snmp/datadog_checks/snmp/__about__.py | 2 +- snowflake/CHANGELOG.md | 6 + .../datadog_checks/snowflake/__about__.py | 2 +- solr/CHANGELOG.md | 6 + solr/datadog_checks/solr/__about__.py | 2 +- sonarqube/CHANGELOG.md | 6 + .../datadog_checks/sonarqube/__about__.py | 2 +- spark/CHANGELOG.md | 6 + spark/datadog_checks/spark/__about__.py | 2 +- sqlserver/CHANGELOG.md | 14 + sqlserver/changelog.d/18637.added | 1 - .../datadog_checks/sqlserver/__about__.py | 2 +- squid/CHANGELOG.md | 6 + squid/datadog_checks/squid/__about__.py | 2 +- ssh_check/CHANGELOG.md | 6 + .../datadog_checks/ssh_check/__about__.py | 2 +- statsd/CHANGELOG.md | 6 + statsd/datadog_checks/statsd/__about__.py | 2 +- strimzi/CHANGELOG.md | 6 + strimzi/datadog_checks/strimzi/__about__.py | 2 +- supervisord/CHANGELOG.md | 6 + .../datadog_checks/supervisord/__about__.py | 2 +- suricata/CHANGELOG.md | 6 + suricata/datadog_checks/suricata/__about__.py | 2 +- system_core/CHANGELOG.md | 10 + system_core/changelog.d/18688.added | 1 - .../datadog_checks/system_core/__about__.py | 2 +- system_swap/CHANGELOG.md | 10 + system_swap/changelog.d/18688.added | 1 - .../datadog_checks/system_swap/__about__.py | 2 +- tcp_check/CHANGELOG.md | 6 + .../datadog_checks/tcp_check/__about__.py | 2 +- teamcity/CHANGELOG.md | 6 + teamcity/datadog_checks/teamcity/__about__.py | 2 +- tekton/CHANGELOG.md | 6 + tekton/datadog_checks/tekton/__about__.py | 2 +- teleport/CHANGELOG.md | 6 + teleport/datadog_checks/teleport/__about__.py | 2 +- temporal/CHANGELOG.md | 6 + temporal/datadog_checks/temporal/__about__.py | 2 +- tenable/CHANGELOG.md | 6 + tenable/datadog_checks/tenable/__about__.py | 2 +- teradata/CHANGELOG.md | 6 + teradata/datadog_checks/teradata/__about__.py | 2 +- tibco_ems/CHANGELOG.md | 6 + .../datadog_checks/tibco_ems/__about__.py | 2 +- tls/CHANGELOG.md | 10 + tls/changelog.d/18656.security | 1 - tls/datadog_checks/tls/__about__.py | 2 +- tomcat/CHANGELOG.md | 6 + tomcat/datadog_checks/tomcat/__about__.py | 2 +- torchserve/CHANGELOG.md | 6 + .../datadog_checks/torchserve/__about__.py | 2 +- traefik_mesh/CHANGELOG.md | 6 + .../datadog_checks/traefik_mesh/__about__.py | 2 +- traffic_server/CHANGELOG.md | 6 + .../traffic_server/__about__.py | 2 +- twemproxy/CHANGELOG.md | 6 + .../datadog_checks/twemproxy/__about__.py | 2 +- twistlock/CHANGELOG.md | 6 + .../datadog_checks/twistlock/__about__.py | 2 +- varnish/CHANGELOG.md | 6 + varnish/datadog_checks/varnish/__about__.py | 2 +- vault/CHANGELOG.md | 6 + vault/datadog_checks/vault/__about__.py | 2 +- vertica/CHANGELOG.md | 6 + vertica/datadog_checks/vertica/__about__.py | 2 +- vllm/CHANGELOG.md | 6 + vllm/datadog_checks/vllm/__about__.py | 2 +- voltdb/CHANGELOG.md | 6 + voltdb/datadog_checks/voltdb/__about__.py | 2 +- weaviate/CHANGELOG.md | 6 + weaviate/datadog_checks/weaviate/__about__.py | 2 +- weblogic/CHANGELOG.md | 6 + weblogic/datadog_checks/weblogic/__about__.py | 2 +- win32_event_log/CHANGELOG.md | 6 + .../win32_event_log/__about__.py | 2 +- windows_performance_counters/CHANGELOG.md | 6 + .../windows_performance_counters/__about__.py | 2 +- windows_service/CHANGELOG.md | 6 + .../windows_service/__about__.py | 2 +- wmi_check/CHANGELOG.md | 6 + .../datadog_checks/wmi_check/__about__.py | 2 +- yarn/CHANGELOG.md | 6 + yarn/datadog_checks/yarn/__about__.py | 2 +- zk/CHANGELOG.md | 6 + zk/datadog_checks/zk/__about__.py | 2 +- 399 files changed, 1599 insertions(+), 394 deletions(-) delete mode 100644 btrfs/changelog.d/18688.added delete mode 100644 cisco_aci/changelog.d/18656.security delete mode 100644 disk/changelog.d/18688.added delete mode 100644 gunicorn/changelog.d/18688.added delete mode 100644 http_check/changelog.d/18656.security delete mode 100644 ibm_mq/changelog.d/18688.added delete mode 100644 ibm_was/changelog.d/18637.added delete mode 100644 mongo/changelog.d/18688.added delete mode 100644 mysql/changelog.d/18656.security delete mode 100644 network/changelog.d/18688.added delete mode 100644 process/changelog.d/18688.added delete mode 100644 rethinkdb/changelog.d/18636.added delete mode 100644 sqlserver/changelog.d/18637.added delete mode 100644 system_core/changelog.d/18688.added delete mode 100644 system_swap/changelog.d/18688.added delete mode 100644 tls/changelog.d/18656.security diff --git a/active_directory/CHANGELOG.md b/active_directory/CHANGELOG.md index d7463bff0312f..334b239132447 100644 --- a/active_directory/CHANGELOG.md +++ b/active_directory/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.1.1 / 2024-07-05 / Agent 7.55.0 ***Fixed***: diff --git a/active_directory/datadog_checks/active_directory/__about__.py b/active_directory/datadog_checks/active_directory/__about__.py index 287bbeba260f7..09adcddf171c4 100644 --- a/active_directory/datadog_checks/active_directory/__about__.py +++ b/active_directory/datadog_checks/active_directory/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '2.1.1' +__version__ = '3.0.0' diff --git a/activemq/CHANGELOG.md b/activemq/CHANGELOG.md index ea2402ccad815..7246bca491cc0 100644 --- a/activemq/CHANGELOG.md +++ b/activemq/CHANGELOG.md @@ -2,6 +2,12 @@ +## 4.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 3.1.0 / 2024-01-05 / Agent 7.51.0 ***Added***: diff --git a/activemq/datadog_checks/activemq/__about__.py b/activemq/datadog_checks/activemq/__about__.py index 6ff863c1fc552..c25988b9e6d8b 100644 --- a/activemq/datadog_checks/activemq/__about__.py +++ b/activemq/datadog_checks/activemq/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '3.1.0' +__version__ = '4.0.0' diff --git a/activemq_xml/CHANGELOG.md b/activemq_xml/CHANGELOG.md index 7c74e8eb0d1f0..54a96f6d00a3f 100644 --- a/activemq_xml/CHANGELOG.md +++ b/activemq_xml/CHANGELOG.md @@ -2,6 +2,12 @@ +## 4.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 3.2.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/activemq_xml/datadog_checks/activemq_xml/__about__.py b/activemq_xml/datadog_checks/activemq_xml/__about__.py index e41ae1cd12567..f81a9a356ff96 100644 --- a/activemq_xml/datadog_checks/activemq_xml/__about__.py +++ b/activemq_xml/datadog_checks/activemq_xml/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = "3.2.1" +__version__ = "4.0.0" diff --git a/aerospike/CHANGELOG.md b/aerospike/CHANGELOG.md index 4b0b3ec18adf0..78886f2978e51 100644 --- a/aerospike/CHANGELOG.md +++ b/aerospike/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.2.2 / 2024-07-05 / Agent 7.55.0 ***Fixed***: diff --git a/aerospike/datadog_checks/aerospike/__about__.py b/aerospike/datadog_checks/aerospike/__about__.py index 9313b336284cd..f046338059ddf 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__ = '2.2.2' +__version__ = '3.0.0' diff --git a/airflow/CHANGELOG.md b/airflow/CHANGELOG.md index ada89623eaa16..a14355acded4c 100644 --- a/airflow/CHANGELOG.md +++ b/airflow/CHANGELOG.md @@ -2,6 +2,12 @@ +## 6.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 5.0.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/airflow/datadog_checks/airflow/__about__.py b/airflow/datadog_checks/airflow/__about__.py index 4595b491a0a0b..90ac9024197fd 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__ = '5.0.1' +__version__ = '6.0.0' diff --git a/amazon_msk/CHANGELOG.md b/amazon_msk/CHANGELOG.md index 821c45f359efe..04fd78f43d1b4 100644 --- a/amazon_msk/CHANGELOG.md +++ b/amazon_msk/CHANGELOG.md @@ -2,6 +2,12 @@ +## 5.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 4.11.0 / 2024-09-05 ***Added***: diff --git a/amazon_msk/datadog_checks/amazon_msk/__about__.py b/amazon_msk/datadog_checks/amazon_msk/__about__.py index b23ee2fd9ff10..59ccab2a77ff8 100644 --- a/amazon_msk/datadog_checks/amazon_msk/__about__.py +++ b/amazon_msk/datadog_checks/amazon_msk/__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.11.0' +__version__ = '5.0.0' diff --git a/ambari/CHANGELOG.md b/ambari/CHANGELOG.md index cb56c1f85f6c4..b93483cf4b3be 100644 --- a/ambari/CHANGELOG.md +++ b/ambari/CHANGELOG.md @@ -2,6 +2,12 @@ +## 5.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 4.2.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/ambari/datadog_checks/ambari/__about__.py b/ambari/datadog_checks/ambari/__about__.py index ececa50abe372..59ccab2a77ff8 100644 --- a/ambari/datadog_checks/ambari/__about__.py +++ b/ambari/datadog_checks/ambari/__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.2.1' +__version__ = '5.0.0' diff --git a/apache/CHANGELOG.md b/apache/CHANGELOG.md index 52dcc9dd075b0..67baf622191b5 100644 --- a/apache/CHANGELOG.md +++ b/apache/CHANGELOG.md @@ -2,6 +2,12 @@ +## 5.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 4.5.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/apache/datadog_checks/apache/__about__.py b/apache/datadog_checks/apache/__about__.py index f2f3e5b89da36..b033d7b5bb770 100644 --- a/apache/datadog_checks/apache/__about__.py +++ b/apache/datadog_checks/apache/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = "4.5.1" +__version__ = "5.0.0" diff --git a/arangodb/CHANGELOG.md b/arangodb/CHANGELOG.md index 1499f6af9c8b6..0f9298d831a19 100644 --- a/arangodb/CHANGELOG.md +++ b/arangodb/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.2.2 / 2024-07-05 / Agent 7.55.0 ***Fixed***: diff --git a/arangodb/datadog_checks/arangodb/__about__.py b/arangodb/datadog_checks/arangodb/__about__.py index faa7c19604967..c1405a3ef0291 100644 --- a/arangodb/datadog_checks/arangodb/__about__.py +++ b/arangodb/datadog_checks/arangodb/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2022-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '2.2.2' +__version__ = '3.0.0' diff --git a/argo_rollouts/CHANGELOG.md b/argo_rollouts/CHANGELOG.md index 810238652e243..d70d50091a691 100644 --- a/argo_rollouts/CHANGELOG.md +++ b/argo_rollouts/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.0.2 / 2024-07-05 / Agent 7.55.0 ***Fixed***: diff --git a/argo_rollouts/datadog_checks/argo_rollouts/__about__.py b/argo_rollouts/datadog_checks/argo_rollouts/__about__.py index 1436e0ab91c45..cc393c1dad9ce 100644 --- a/argo_rollouts/datadog_checks/argo_rollouts/__about__.py +++ b/argo_rollouts/datadog_checks/argo_rollouts/__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__ = '1.0.2' +__version__ = '2.0.0' diff --git a/argo_workflows/CHANGELOG.md b/argo_workflows/CHANGELOG.md index 724a50bd24b4b..c04c6e80edf39 100644 --- a/argo_workflows/CHANGELOG.md +++ b/argo_workflows/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.0.2 / 2024-07-05 / Agent 7.55.0 ***Fixed***: diff --git a/argo_workflows/datadog_checks/argo_workflows/__about__.py b/argo_workflows/datadog_checks/argo_workflows/__about__.py index 1436e0ab91c45..cc393c1dad9ce 100644 --- a/argo_workflows/datadog_checks/argo_workflows/__about__.py +++ b/argo_workflows/datadog_checks/argo_workflows/__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__ = '1.0.2' +__version__ = '2.0.0' diff --git a/argocd/CHANGELOG.md b/argocd/CHANGELOG.md index 3cf19076ba061..9cdb8eb7e46cc 100644 --- a/argocd/CHANGELOG.md +++ b/argocd/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.4.3 / 2024-08-09 / Agent 7.57.0 ***Fixed***: diff --git a/argocd/datadog_checks/argocd/__about__.py b/argocd/datadog_checks/argocd/__about__.py index 87543db2ff6a8..c1405a3ef0291 100644 --- a/argocd/datadog_checks/argocd/__about__.py +++ b/argocd/datadog_checks/argocd/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2022-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '2.4.3' +__version__ = '3.0.0' diff --git a/aspdotnet/CHANGELOG.md b/aspdotnet/CHANGELOG.md index 7e6c0a8304bda..dce96d08b138a 100644 --- a/aspdotnet/CHANGELOG.md +++ b/aspdotnet/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.1.1 / 2024-07-05 / Agent 7.55.0 ***Fixed***: diff --git a/aspdotnet/datadog_checks/aspdotnet/__about__.py b/aspdotnet/datadog_checks/aspdotnet/__about__.py index 287bbeba260f7..09adcddf171c4 100644 --- a/aspdotnet/datadog_checks/aspdotnet/__about__.py +++ b/aspdotnet/datadog_checks/aspdotnet/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '2.1.1' +__version__ = '3.0.0' diff --git a/avi_vantage/CHANGELOG.md b/avi_vantage/CHANGELOG.md index 70191135600bc..03c45db6bb0e1 100644 --- a/avi_vantage/CHANGELOG.md +++ b/avi_vantage/CHANGELOG.md @@ -2,6 +2,12 @@ +## 5.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 4.2.2 / 2024-07-05 / Agent 7.55.0 ***Fixed***: diff --git a/avi_vantage/datadog_checks/avi_vantage/__about__.py b/avi_vantage/datadog_checks/avi_vantage/__about__.py index 6b0871e8b251e..6a50d99c582b0 100644 --- a/avi_vantage/datadog_checks/avi_vantage/__about__.py +++ b/avi_vantage/datadog_checks/avi_vantage/__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__ = '4.2.2' +__version__ = '5.0.0' diff --git a/aws_neuron/CHANGELOG.md b/aws_neuron/CHANGELOG.md index 0a7d99b8e806a..3aecb0f3ca4d9 100644 --- a/aws_neuron/CHANGELOG.md +++ b/aws_neuron/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.0.0 / 2024-08-09 / Agent 7.57.0 ***Added***: diff --git a/aws_neuron/datadog_checks/aws_neuron/__about__.py b/aws_neuron/datadog_checks/aws_neuron/__about__.py index acbfd1c866b84..cc393c1dad9ce 100644 --- a/aws_neuron/datadog_checks/aws_neuron/__about__.py +++ b/aws_neuron/datadog_checks/aws_neuron/__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__ = '1.0.0' +__version__ = '2.0.0' diff --git a/azure_iot_edge/CHANGELOG.md b/azure_iot_edge/CHANGELOG.md index b241df6656380..add7d1ab0b7d0 100644 --- a/azure_iot_edge/CHANGELOG.md +++ b/azure_iot_edge/CHANGELOG.md @@ -2,6 +2,12 @@ +## 5.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 4.2.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/azure_iot_edge/datadog_checks/azure_iot_edge/__about__.py b/azure_iot_edge/datadog_checks/azure_iot_edge/__about__.py index 1a18420519953..1fda5ed1ca206 100644 --- a/azure_iot_edge/datadog_checks/azure_iot_edge/__about__.py +++ b/azure_iot_edge/datadog_checks/azure_iot_edge/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2020-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '4.2.1' +__version__ = '5.0.0' diff --git a/boundary/CHANGELOG.md b/boundary/CHANGELOG.md index 1a7b4dadb7cc3..338416db0fef0 100644 --- a/boundary/CHANGELOG.md +++ b/boundary/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.2.3 / 2024-07-05 / Agent 7.55.0 ***Fixed***: diff --git a/boundary/datadog_checks/boundary/__about__.py b/boundary/datadog_checks/boundary/__about__.py index d5eaec6126497..c1405a3ef0291 100644 --- a/boundary/datadog_checks/boundary/__about__.py +++ b/boundary/datadog_checks/boundary/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2022-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '2.2.3' +__version__ = '3.0.0' diff --git a/btrfs/CHANGELOG.md b/btrfs/CHANGELOG.md index affcb3d841f0b..ec534c9dd361c 100644 --- a/btrfs/CHANGELOG.md +++ b/btrfs/CHANGELOG.md @@ -2,6 +2,16 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + +***Added***: + +* Upgrade psutil to 6.0.0 to fix performance issues addressed ([#18688](https://github.com/DataDog/integrations-core/pull/18688)) + ## 2.4.0 / 2024-09-05 ***Added***: diff --git a/btrfs/changelog.d/18688.added b/btrfs/changelog.d/18688.added deleted file mode 100644 index 30f2555bc26eb..0000000000000 --- a/btrfs/changelog.d/18688.added +++ /dev/null @@ -1 +0,0 @@ -Upgrade psutil to 6.0.0 to fix performance issues addressed \ No newline at end of file diff --git a/btrfs/datadog_checks/btrfs/__about__.py b/btrfs/datadog_checks/btrfs/__about__.py index 00268c12248fe..09adcddf171c4 100644 --- a/btrfs/datadog_checks/btrfs/__about__.py +++ b/btrfs/datadog_checks/btrfs/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '2.4.0' +__version__ = '3.0.0' diff --git a/cacti/CHANGELOG.md b/cacti/CHANGELOG.md index 8a14f5dc6539b..26701b2c60292 100644 --- a/cacti/CHANGELOG.md +++ b/cacti/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.1.1 / 2024-06-11 / Agent 7.54.1 ***Fixed***: diff --git a/cacti/datadog_checks/cacti/__about__.py b/cacti/datadog_checks/cacti/__about__.py index 287bbeba260f7..09adcddf171c4 100644 --- a/cacti/datadog_checks/cacti/__about__.py +++ b/cacti/datadog_checks/cacti/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '2.1.1' +__version__ = '3.0.0' diff --git a/calico/CHANGELOG.md b/calico/CHANGELOG.md index 9d33959669968..9e5e0fd42c828 100644 --- a/calico/CHANGELOG.md +++ b/calico/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.2.2 / 2024-07-05 / Agent 7.55.0 ***Fixed***: diff --git a/calico/datadog_checks/calico/__about__.py b/calico/datadog_checks/calico/__about__.py index 6e0db56600f4f..d037f86865212 100644 --- a/calico/datadog_checks/calico/__about__.py +++ b/calico/datadog_checks/calico/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '2.2.2' +__version__ = '3.0.0' diff --git a/cassandra/CHANGELOG.md b/cassandra/CHANGELOG.md index 3063b715b1ba9..58229e6b2a3cf 100644 --- a/cassandra/CHANGELOG.md +++ b/cassandra/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.18.0 / 2024-01-05 / Agent 7.51.0 ***Added***: diff --git a/cassandra/datadog_checks/cassandra/__about__.py b/cassandra/datadog_checks/cassandra/__about__.py index ce07658c6ffd9..0e2ebd5e4631b 100644 --- a/cassandra/datadog_checks/cassandra/__about__.py +++ b/cassandra/datadog_checks/cassandra/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '1.18.0' +__version__ = '2.0.0' diff --git a/cassandra_nodetool/CHANGELOG.md b/cassandra_nodetool/CHANGELOG.md index 166a163fc80b7..ad5023dd8a58a 100644 --- a/cassandra_nodetool/CHANGELOG.md +++ b/cassandra_nodetool/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.13.0 / 2024-01-05 / Agent 7.51.0 ***Added***: diff --git a/cassandra_nodetool/datadog_checks/cassandra_nodetool/__about__.py b/cassandra_nodetool/datadog_checks/cassandra_nodetool/__about__.py index 9277530c51434..0e2ebd5e4631b 100644 --- a/cassandra_nodetool/datadog_checks/cassandra_nodetool/__about__.py +++ b/cassandra_nodetool/datadog_checks/cassandra_nodetool/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '1.13.0' +__version__ = '2.0.0' diff --git a/ceph/CHANGELOG.md b/ceph/CHANGELOG.md index d4427c0a916d8..d1af99eadd50b 100644 --- a/ceph/CHANGELOG.md +++ b/ceph/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.10.0 / 2024-01-05 / Agent 7.51.0 ***Added***: diff --git a/ceph/datadog_checks/ceph/__about__.py b/ceph/datadog_checks/ceph/__about__.py index 75924909e08e9..5778c5423a6b0 100644 --- a/ceph/datadog_checks/ceph/__about__.py +++ b/ceph/datadog_checks/ceph/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = "2.10.0" +__version__ = "3.0.0" diff --git a/cert_manager/CHANGELOG.md b/cert_manager/CHANGELOG.md index 04d8d92eb4415..15bcfea3b45ba 100644 --- a/cert_manager/CHANGELOG.md +++ b/cert_manager/CHANGELOG.md @@ -2,6 +2,12 @@ +## 5.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 4.1.2 / 2024-07-05 / Agent 7.55.0 ***Fixed***: diff --git a/cert_manager/datadog_checks/cert_manager/__about__.py b/cert_manager/datadog_checks/cert_manager/__about__.py index 81e293349b2dd..59ccab2a77ff8 100644 --- a/cert_manager/datadog_checks/cert_manager/__about__.py +++ b/cert_manager/datadog_checks/cert_manager/__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.1.2' +__version__ = '5.0.0' diff --git a/cilium/CHANGELOG.md b/cilium/CHANGELOG.md index 36ea24e0f85b7..771e67428de6d 100644 --- a/cilium/CHANGELOG.md +++ b/cilium/CHANGELOG.md @@ -2,6 +2,12 @@ +## 4.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 3.6.0 / 2024-09-05 ***Added***: diff --git a/cilium/datadog_checks/cilium/__about__.py b/cilium/datadog_checks/cilium/__about__.py index 6cea03bf6a176..78967d676d1af 100644 --- a/cilium/datadog_checks/cilium/__about__.py +++ b/cilium/datadog_checks/cilium/__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__ = '3.6.0' +__version__ = '4.0.0' diff --git a/cisco_aci/CHANGELOG.md b/cisco_aci/CHANGELOG.md index 8d52e8866dfbb..f9b7d1ea94ee8 100644 --- a/cisco_aci/CHANGELOG.md +++ b/cisco_aci/CHANGELOG.md @@ -2,6 +2,16 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + +***Security***: + +* Bump version of cryptography to 43.0.1 to address vulnerability ([#18656](https://github.com/DataDog/integrations-core/pull/18656)) + ## 2.12.0 / 2024-09-06 ***Added***: diff --git a/cisco_aci/changelog.d/18656.security b/cisco_aci/changelog.d/18656.security deleted file mode 100644 index ad676917cac26..0000000000000 --- a/cisco_aci/changelog.d/18656.security +++ /dev/null @@ -1 +0,0 @@ -Bump version of cryptography to 43.0.1 to address vulnerability \ No newline at end of file diff --git a/cisco_aci/datadog_checks/cisco_aci/__about__.py b/cisco_aci/datadog_checks/cisco_aci/__about__.py index de7a2146ed77b..5778c5423a6b0 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__ = "2.12.0" +__version__ = "3.0.0" diff --git a/citrix_hypervisor/CHANGELOG.md b/citrix_hypervisor/CHANGELOG.md index afcca29c1a323..97222b85988f4 100644 --- a/citrix_hypervisor/CHANGELOG.md +++ b/citrix_hypervisor/CHANGELOG.md @@ -2,6 +2,12 @@ +## 4.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 3.2.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/citrix_hypervisor/datadog_checks/citrix_hypervisor/__about__.py b/citrix_hypervisor/datadog_checks/citrix_hypervisor/__about__.py index 097c1de81f01c..57773e0f36fbd 100644 --- a/citrix_hypervisor/datadog_checks/citrix_hypervisor/__about__.py +++ b/citrix_hypervisor/datadog_checks/citrix_hypervisor/__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__ = '3.2.1' +__version__ = '4.0.0' diff --git a/clickhouse/CHANGELOG.md b/clickhouse/CHANGELOG.md index ae9681662656b..14d3e15401b56 100644 --- a/clickhouse/CHANGELOG.md +++ b/clickhouse/CHANGELOG.md @@ -2,6 +2,12 @@ +## 4.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 3.7.0 / 2024-09-05 ***Added***: diff --git a/clickhouse/datadog_checks/clickhouse/__about__.py b/clickhouse/datadog_checks/clickhouse/__about__.py index 7f3ed79b0f515..78967d676d1af 100644 --- a/clickhouse/datadog_checks/clickhouse/__about__.py +++ b/clickhouse/datadog_checks/clickhouse/__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__ = '3.7.0' +__version__ = '4.0.0' diff --git a/cloud_foundry_api/CHANGELOG.md b/cloud_foundry_api/CHANGELOG.md index 514c21b3cb51b..a7034a7c79ba5 100644 --- a/cloud_foundry_api/CHANGELOG.md +++ b/cloud_foundry_api/CHANGELOG.md @@ -2,6 +2,12 @@ +## 4.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 3.3.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/cloud_foundry_api/datadog_checks/cloud_foundry_api/__about__.py b/cloud_foundry_api/datadog_checks/cloud_foundry_api/__about__.py index ed007ea9d72eb..bcf02753eab69 100644 --- a/cloud_foundry_api/datadog_checks/cloud_foundry_api/__about__.py +++ b/cloud_foundry_api/datadog_checks/cloud_foundry_api/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2020-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '3.3.1' +__version__ = '4.0.0' diff --git a/cloudera/CHANGELOG.md b/cloudera/CHANGELOG.md index 7111874e5dd7e..6f30ce9935aa8 100644 --- a/cloudera/CHANGELOG.md +++ b/cloudera/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.2.0 / 2024-06-12 / Agent 7.56.0 ***Added***: diff --git a/cloudera/datadog_checks/cloudera/__about__.py b/cloudera/datadog_checks/cloudera/__about__.py index 48229b28def62..c1405a3ef0291 100644 --- a/cloudera/datadog_checks/cloudera/__about__.py +++ b/cloudera/datadog_checks/cloudera/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2022-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '2.2.0' +__version__ = '3.0.0' diff --git a/cockroachdb/CHANGELOG.md b/cockroachdb/CHANGELOG.md index 004c4172e6fd6..2b47d6839c1d3 100644 --- a/cockroachdb/CHANGELOG.md +++ b/cockroachdb/CHANGELOG.md @@ -2,6 +2,12 @@ +## 4.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 3.3.2 / 2024-07-05 / Agent 7.55.0 ***Fixed***: diff --git a/cockroachdb/datadog_checks/cockroachdb/__about__.py b/cockroachdb/datadog_checks/cockroachdb/__about__.py index 18b1f968f9fa2..741960d95510d 100644 --- a/cockroachdb/datadog_checks/cockroachdb/__about__.py +++ b/cockroachdb/datadog_checks/cockroachdb/__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__ = '3.3.2' +__version__ = '4.0.0' diff --git a/confluent_platform/CHANGELOG.md b/confluent_platform/CHANGELOG.md index 57f21e6b58b0d..8b47c3f9f3ad5 100644 --- a/confluent_platform/CHANGELOG.md +++ b/confluent_platform/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.10.2 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/confluent_platform/datadog_checks/confluent_platform/__about__.py b/confluent_platform/datadog_checks/confluent_platform/__about__.py index 506d97ff52fa5..9c6b2fb79e5ac 100644 --- a/confluent_platform/datadog_checks/confluent_platform/__about__.py +++ b/confluent_platform/datadog_checks/confluent_platform/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2020-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '1.10.2' +__version__ = '2.0.0' diff --git a/consul/CHANGELOG.md b/consul/CHANGELOG.md index f45d7a796d9cc..ec65843c15117 100644 --- a/consul/CHANGELOG.md +++ b/consul/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.6.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/consul/datadog_checks/consul/__about__.py b/consul/datadog_checks/consul/__about__.py index 4b554abe35835..5778c5423a6b0 100644 --- a/consul/datadog_checks/consul/__about__.py +++ b/consul/datadog_checks/consul/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = "2.6.1" +__version__ = "3.0.0" diff --git a/coredns/CHANGELOG.md b/coredns/CHANGELOG.md index 3cd9fbdbb6d8b..bfe5a8e205d0d 100644 --- a/coredns/CHANGELOG.md +++ b/coredns/CHANGELOG.md @@ -2,6 +2,12 @@ +## 4.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 3.2.3 / 2024-07-05 / Agent 7.55.0 ***Fixed***: diff --git a/coredns/datadog_checks/coredns/__about__.py b/coredns/datadog_checks/coredns/__about__.py index 3200ed866fecd..c25988b9e6d8b 100644 --- a/coredns/datadog_checks/coredns/__about__.py +++ b/coredns/datadog_checks/coredns/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '3.2.3' +__version__ = '4.0.0' diff --git a/couch/CHANGELOG.md b/couch/CHANGELOG.md index 3c0e6afeed988..6dadd95ae90dd 100644 --- a/couch/CHANGELOG.md +++ b/couch/CHANGELOG.md @@ -2,6 +2,12 @@ +## 7.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 6.2.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/couch/datadog_checks/couch/__about__.py b/couch/datadog_checks/couch/__about__.py index 464f2865446dd..18882fdf3298a 100644 --- a/couch/datadog_checks/couch/__about__.py +++ b/couch/datadog_checks/couch/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = "6.2.1" +__version__ = "7.0.0" diff --git a/couchbase/CHANGELOG.md b/couchbase/CHANGELOG.md index 42bf59e5d5ec9..83f4ca5ee8d03 100644 --- a/couchbase/CHANGELOG.md +++ b/couchbase/CHANGELOG.md @@ -2,6 +2,12 @@ +## 4.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 3.2.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/couchbase/datadog_checks/couchbase/__about__.py b/couchbase/datadog_checks/couchbase/__about__.py index e41ae1cd12567..f81a9a356ff96 100644 --- a/couchbase/datadog_checks/couchbase/__about__.py +++ b/couchbase/datadog_checks/couchbase/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = "3.2.1" +__version__ = "4.0.0" diff --git a/crio/CHANGELOG.md b/crio/CHANGELOG.md index e9582ca684094..492dd519c9e5e 100644 --- a/crio/CHANGELOG.md +++ b/crio/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.6.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/crio/datadog_checks/crio/__about__.py b/crio/datadog_checks/crio/__about__.py index 1999eb9d470ba..09adcddf171c4 100644 --- a/crio/datadog_checks/crio/__about__.py +++ b/crio/datadog_checks/crio/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '2.6.1' +__version__ = '3.0.0' diff --git a/datadog_checks_dependency_provider/CHANGELOG.md b/datadog_checks_dependency_provider/CHANGELOG.md index a01b505185dc7..61709646cbe3f 100644 --- a/datadog_checks_dependency_provider/CHANGELOG.md +++ b/datadog_checks_dependency_provider/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.4.0 / 2024-01-05 / Agent 7.51.0 ***Added***: diff --git a/datadog_checks_dependency_provider/datadog_checks/datadog_checks_dependency_provider/__about__.py b/datadog_checks_dependency_provider/datadog_checks/datadog_checks_dependency_provider/__about__.py index 294552374efbb..a16255352ee20 100644 --- a/datadog_checks_dependency_provider/datadog_checks/datadog_checks_dependency_provider/__about__.py +++ b/datadog_checks_dependency_provider/datadog_checks/datadog_checks_dependency_provider/__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__ = '1.4.0' +__version__ = '2.0.0' diff --git a/datadog_checks_downloader/CHANGELOG.md b/datadog_checks_downloader/CHANGELOG.md index a35f35b258b6a..588cd5bc74fa6 100644 --- a/datadog_checks_downloader/CHANGELOG.md +++ b/datadog_checks_downloader/CHANGELOG.md @@ -2,6 +2,12 @@ +## 5.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 4.7.0 / 2024-07-05 / Agent 7.55.0 ***Security***: diff --git a/datadog_checks_downloader/datadog_checks/downloader/__about__.py b/datadog_checks_downloader/datadog_checks/downloader/__about__.py index ba8c98a598596..e682df53d5857 100644 --- a/datadog_checks_downloader/datadog_checks/downloader/__about__.py +++ b/datadog_checks_downloader/datadog_checks/downloader/__about__.py @@ -4,4 +4,4 @@ # NOTE: tie datadog-checks-downloader to v2 of our software supply chain: # https://github.com/DataDog/integrations-core/blob/6388602b6deb3b65b62cf7cda69dc20d99dede29/datadog_checks_downloader/datadog_checks/downloader/download.py#L51 -__version__ = "4.7.0" +__version__ = "5.0.0" diff --git a/datadog_cluster_agent/CHANGELOG.md b/datadog_cluster_agent/CHANGELOG.md index 67fe1cbea6f07..d8250e92ff356 100644 --- a/datadog_cluster_agent/CHANGELOG.md +++ b/datadog_cluster_agent/CHANGELOG.md @@ -2,6 +2,12 @@ +## 4.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 3.2.0 / 2024-08-09 / Agent 7.57.0 ***Added***: 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 5700e88915255..57773e0f36fbd 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__ = '3.2.0' +__version__ = '4.0.0' diff --git a/dcgm/CHANGELOG.md b/dcgm/CHANGELOG.md index de6e465bbac36..814e957135e69 100644 --- a/dcgm/CHANGELOG.md +++ b/dcgm/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.3.2 / 2024-07-05 / Agent 7.55.0 ***Fixed***: diff --git a/dcgm/datadog_checks/dcgm/__about__.py b/dcgm/datadog_checks/dcgm/__about__.py index 3a4912c5dcc6a..9d7317788718b 100644 --- a/dcgm/datadog_checks/dcgm/__about__.py +++ b/dcgm/datadog_checks/dcgm/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2023-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '2.3.2' +__version__ = '3.0.0' diff --git a/directory/CHANGELOG.md b/directory/CHANGELOG.md index 7f65d8281295e..0340af23dfbfc 100644 --- a/directory/CHANGELOG.md +++ b/directory/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.1.1 / 2024-02-16 / Agent 7.52.0 ***Fixed***: diff --git a/directory/datadog_checks/directory/__about__.py b/directory/datadog_checks/directory/__about__.py index 287bbeba260f7..09adcddf171c4 100644 --- a/directory/datadog_checks/directory/__about__.py +++ b/directory/datadog_checks/directory/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '2.1.1' +__version__ = '3.0.0' diff --git a/disk/CHANGELOG.md b/disk/CHANGELOG.md index 58cc330b90c0b..ddab856c8fabc 100644 --- a/disk/CHANGELOG.md +++ b/disk/CHANGELOG.md @@ -2,6 +2,16 @@ +## 6.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + +***Added***: + +* Upgrade psutil to 6.0.0 to fix performance issues addressed ([#18688](https://github.com/DataDog/integrations-core/pull/18688)) + ## 5.4.0 / 2024-09-05 ***Added***: diff --git a/disk/changelog.d/18688.added b/disk/changelog.d/18688.added deleted file mode 100644 index 30f2555bc26eb..0000000000000 --- a/disk/changelog.d/18688.added +++ /dev/null @@ -1 +0,0 @@ -Upgrade psutil to 6.0.0 to fix performance issues addressed \ No newline at end of file diff --git a/disk/datadog_checks/disk/__about__.py b/disk/datadog_checks/disk/__about__.py index 37bb880e2a7b2..91262416e46c9 100644 --- a/disk/datadog_checks/disk/__about__.py +++ b/disk/datadog_checks/disk/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = "5.4.0" +__version__ = "6.0.0" diff --git a/dns_check/CHANGELOG.md b/dns_check/CHANGELOG.md index 94a2f8db7897e..cf8f4513f8560 100644 --- a/dns_check/CHANGELOG.md +++ b/dns_check/CHANGELOG.md @@ -2,6 +2,12 @@ +## 4.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 3.3.0 / 2024-03-22 / Agent 7.53.0 ***Added***: diff --git a/dns_check/datadog_checks/dns_check/__about__.py b/dns_check/datadog_checks/dns_check/__about__.py index ccf4c4835eb69..c25988b9e6d8b 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__ = '3.3.0' +__version__ = '4.0.0' diff --git a/dotnetclr/CHANGELOG.md b/dotnetclr/CHANGELOG.md index a59c0bb6f7bda..891663c37b57f 100644 --- a/dotnetclr/CHANGELOG.md +++ b/dotnetclr/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.1.1 / 2024-07-05 / Agent 7.55.0 ***Fixed***: diff --git a/dotnetclr/datadog_checks/dotnetclr/__about__.py b/dotnetclr/datadog_checks/dotnetclr/__about__.py index 287bbeba260f7..09adcddf171c4 100644 --- a/dotnetclr/datadog_checks/dotnetclr/__about__.py +++ b/dotnetclr/datadog_checks/dotnetclr/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '2.1.1' +__version__ = '3.0.0' diff --git a/druid/CHANGELOG.md b/druid/CHANGELOG.md index a91e913c30a40..2a738431c1257 100644 --- a/druid/CHANGELOG.md +++ b/druid/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.5.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/druid/datadog_checks/druid/__about__.py b/druid/datadog_checks/druid/__about__.py index 7cb02e2db8123..f046338059ddf 100644 --- a/druid/datadog_checks/druid/__about__.py +++ b/druid/datadog_checks/druid/__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__ = '2.5.1' +__version__ = '3.0.0' diff --git a/ecs_fargate/CHANGELOG.md b/ecs_fargate/CHANGELOG.md index 91dd419f87730..6f59a9fd1cac1 100644 --- a/ecs_fargate/CHANGELOG.md +++ b/ecs_fargate/CHANGELOG.md @@ -2,6 +2,12 @@ +## 5.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 4.3.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/ecs_fargate/datadog_checks/ecs_fargate/__about__.py b/ecs_fargate/datadog_checks/ecs_fargate/__about__.py index 47897f7ba8b0a..d2601db5d5cc0 100644 --- a/ecs_fargate/datadog_checks/ecs_fargate/__about__.py +++ b/ecs_fargate/datadog_checks/ecs_fargate/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '4.3.1' +__version__ = '5.0.0' diff --git a/eks_fargate/CHANGELOG.md b/eks_fargate/CHANGELOG.md index f1fc030324648..da3925cbf143b 100644 --- a/eks_fargate/CHANGELOG.md +++ b/eks_fargate/CHANGELOG.md @@ -2,6 +2,12 @@ +## 5.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 4.2.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/eks_fargate/datadog_checks/eks_fargate/__about__.py b/eks_fargate/datadog_checks/eks_fargate/__about__.py index dcbdcf09b9b28..cffe407448d66 100644 --- a/eks_fargate/datadog_checks/eks_fargate/__about__.py +++ b/eks_fargate/datadog_checks/eks_fargate/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2020 # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '4.2.1' +__version__ = '5.0.0' diff --git a/elastic/CHANGELOG.md b/elastic/CHANGELOG.md index 258cfec54dcea..d09166d756847 100644 --- a/elastic/CHANGELOG.md +++ b/elastic/CHANGELOG.md @@ -2,6 +2,12 @@ +## 7.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 6.3.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/elastic/datadog_checks/elastic/__about__.py b/elastic/datadog_checks/elastic/__about__.py index 4c5167d350045..18882fdf3298a 100644 --- a/elastic/datadog_checks/elastic/__about__.py +++ b/elastic/datadog_checks/elastic/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = "6.3.1" +__version__ = "7.0.0" diff --git a/envoy/CHANGELOG.md b/envoy/CHANGELOG.md index 2175b1a92ceb6..b4e2fd9fd78ed 100644 --- a/envoy/CHANGELOG.md +++ b/envoy/CHANGELOG.md @@ -2,6 +2,12 @@ +## 4.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 3.6.0 / 2024-09-10 ***Added***: diff --git a/envoy/datadog_checks/envoy/__about__.py b/envoy/datadog_checks/envoy/__about__.py index e4c96eacd5850..c25988b9e6d8b 100644 --- a/envoy/datadog_checks/envoy/__about__.py +++ b/envoy/datadog_checks/envoy/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '3.6.0' +__version__ = '4.0.0' diff --git a/esxi/CHANGELOG.md b/esxi/CHANGELOG.md index 609bba020aea2..a489b2c6d77b5 100644 --- a/esxi/CHANGELOG.md +++ b/esxi/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.2.0 / 2024-07-05 / Agent 7.56.0 ***Added***: diff --git a/esxi/datadog_checks/esxi/__about__.py b/esxi/datadog_checks/esxi/__about__.py index 7addefff57a28..cc393c1dad9ce 100644 --- a/esxi/datadog_checks/esxi/__about__.py +++ b/esxi/datadog_checks/esxi/__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__ = '1.2.0' +__version__ = '2.0.0' diff --git a/etcd/CHANGELOG.md b/etcd/CHANGELOG.md index e19939e950a74..aaa1b6d563fc3 100644 --- a/etcd/CHANGELOG.md +++ b/etcd/CHANGELOG.md @@ -2,6 +2,12 @@ +## 7.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 6.2.2 / 2024-07-05 / Agent 7.56.0 ***Fixed***: diff --git a/etcd/datadog_checks/etcd/__about__.py b/etcd/datadog_checks/etcd/__about__.py index 89de12a9bb8c0..7b8b844cb208e 100644 --- a/etcd/datadog_checks/etcd/__about__.py +++ b/etcd/datadog_checks/etcd/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '6.2.2' +__version__ = '7.0.0' diff --git a/exchange_server/CHANGELOG.md b/exchange_server/CHANGELOG.md index c6f9ca2ce6bdc..c4b24c443dcee 100644 --- a/exchange_server/CHANGELOG.md +++ b/exchange_server/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.1.1 / 2024-07-05 / Agent 7.55.0 ***Fixed***: diff --git a/exchange_server/datadog_checks/exchange_server/__about__.py b/exchange_server/datadog_checks/exchange_server/__about__.py index 287bbeba260f7..09adcddf171c4 100644 --- a/exchange_server/datadog_checks/exchange_server/__about__.py +++ b/exchange_server/datadog_checks/exchange_server/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '2.1.1' +__version__ = '3.0.0' diff --git a/external_dns/CHANGELOG.md b/external_dns/CHANGELOG.md index 3733697fb3f00..243d00c292495 100644 --- a/external_dns/CHANGELOG.md +++ b/external_dns/CHANGELOG.md @@ -2,6 +2,12 @@ +## 4.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 3.2.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/external_dns/datadog_checks/external_dns/__about__.py b/external_dns/datadog_checks/external_dns/__about__.py index 282493d353550..f7e8e61ae8d84 100644 --- a/external_dns/datadog_checks/external_dns/__about__.py +++ b/external_dns/datadog_checks/external_dns/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '3.2.1' +__version__ = '4.0.0' diff --git a/flink/CHANGELOG.md b/flink/CHANGELOG.md index 211f3e468c99b..4740dcf4b1b9f 100644 --- a/flink/CHANGELOG.md +++ b/flink/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.5.0 / 2024-01-05 / Agent 7.51.0 ***Added***: diff --git a/flink/datadog_checks/flink/__about__.py b/flink/datadog_checks/flink/__about__.py index c91765ea0dd55..9c6b2fb79e5ac 100644 --- a/flink/datadog_checks/flink/__about__.py +++ b/flink/datadog_checks/flink/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2020-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '1.5.0' +__version__ = '2.0.0' diff --git a/fluentd/CHANGELOG.md b/fluentd/CHANGELOG.md index f31faf80eb304..a191e9867f4a1 100644 --- a/fluentd/CHANGELOG.md +++ b/fluentd/CHANGELOG.md @@ -2,6 +2,12 @@ +## 4.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 3.2.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/fluentd/datadog_checks/fluentd/__about__.py b/fluentd/datadog_checks/fluentd/__about__.py index 2ff0643692b9e..c25988b9e6d8b 100644 --- a/fluentd/datadog_checks/fluentd/__about__.py +++ b/fluentd/datadog_checks/fluentd/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '3.2.1' +__version__ = '4.0.0' diff --git a/fluxcd/CHANGELOG.md b/fluxcd/CHANGELOG.md index 81ae3c594cf1a..45988724dd12e 100644 --- a/fluxcd/CHANGELOG.md +++ b/fluxcd/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.2.2 / 2024-07-05 / Agent 7.55.0 ***Fixed***: diff --git a/fluxcd/datadog_checks/fluxcd/__about__.py b/fluxcd/datadog_checks/fluxcd/__about__.py index db97e440a2426..eeece9d233f4c 100644 --- a/fluxcd/datadog_checks/fluxcd/__about__.py +++ b/fluxcd/datadog_checks/fluxcd/__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__ = "1.2.2" +__version__ = "2.0.0" diff --git a/fly_io/CHANGELOG.md b/fly_io/CHANGELOG.md index f0f49603316a2..f8d7ccae517e6 100644 --- a/fly_io/CHANGELOG.md +++ b/fly_io/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.0.1 / 2024-09-05 ***Fixed***: diff --git a/fly_io/datadog_checks/fly_io/__about__.py b/fly_io/datadog_checks/fly_io/__about__.py index e0db4e56d553f..cc393c1dad9ce 100644 --- a/fly_io/datadog_checks/fly_io/__about__.py +++ b/fly_io/datadog_checks/fly_io/__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__ = '1.0.1' +__version__ = '2.0.0' diff --git a/foundationdb/CHANGELOG.md b/foundationdb/CHANGELOG.md index b4407fd202ec5..708598ebce609 100644 --- a/foundationdb/CHANGELOG.md +++ b/foundationdb/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.4.0 / 2024-01-05 / Agent 7.51.0 ***Added***: diff --git a/foundationdb/datadog_checks/foundationdb/__about__.py b/foundationdb/datadog_checks/foundationdb/__about__.py index 5f433e383a2fc..151d46d81e6db 100644 --- a/foundationdb/datadog_checks/foundationdb/__about__.py +++ b/foundationdb/datadog_checks/foundationdb/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '1.4.0' +__version__ = '2.0.0' diff --git a/gearmand/CHANGELOG.md b/gearmand/CHANGELOG.md index 1bb217dc1993e..8eab9a456f10d 100644 --- a/gearmand/CHANGELOG.md +++ b/gearmand/CHANGELOG.md @@ -2,6 +2,12 @@ +## 4.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 3.1.0 / 2024-01-05 / Agent 7.51.0 ***Added***: diff --git a/gearmand/datadog_checks/gearmand/__about__.py b/gearmand/datadog_checks/gearmand/__about__.py index 6ff863c1fc552..c25988b9e6d8b 100644 --- a/gearmand/datadog_checks/gearmand/__about__.py +++ b/gearmand/datadog_checks/gearmand/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '3.1.0' +__version__ = '4.0.0' diff --git a/gitlab/CHANGELOG.md b/gitlab/CHANGELOG.md index d06f529797674..3423ea1a7155a 100644 --- a/gitlab/CHANGELOG.md +++ b/gitlab/CHANGELOG.md @@ -2,6 +2,12 @@ +## 8.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 7.3.2 / 2024-07-05 / Agent 7.55.0 ***Fixed***: diff --git a/gitlab/datadog_checks/gitlab/__about__.py b/gitlab/datadog_checks/gitlab/__about__.py index e9b59d1d59c2d..9025559f4a9cf 100644 --- a/gitlab/datadog_checks/gitlab/__about__.py +++ b/gitlab/datadog_checks/gitlab/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '7.3.2' +__version__ = '8.0.0' diff --git a/gitlab_runner/CHANGELOG.md b/gitlab_runner/CHANGELOG.md index e5a69412ff9bb..bf0fe5bb0d6cc 100644 --- a/gitlab_runner/CHANGELOG.md +++ b/gitlab_runner/CHANGELOG.md @@ -2,6 +2,12 @@ +## 5.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 4.2.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/gitlab_runner/datadog_checks/gitlab_runner/__about__.py b/gitlab_runner/datadog_checks/gitlab_runner/__about__.py index 40fe88961bf3c..d2601db5d5cc0 100644 --- a/gitlab_runner/datadog_checks/gitlab_runner/__about__.py +++ b/gitlab_runner/datadog_checks/gitlab_runner/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '4.2.1' +__version__ = '5.0.0' diff --git a/glusterfs/CHANGELOG.md b/glusterfs/CHANGELOG.md index 58fb5f4546fcb..80758b89b65a7 100644 --- a/glusterfs/CHANGELOG.md +++ b/glusterfs/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.8.0 / 2024-09-05 ***Added***: diff --git a/glusterfs/datadog_checks/glusterfs/__about__.py b/glusterfs/datadog_checks/glusterfs/__about__.py index 5ce49ba9276dc..9c6b2fb79e5ac 100644 --- a/glusterfs/datadog_checks/glusterfs/__about__.py +++ b/glusterfs/datadog_checks/glusterfs/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2020-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '1.8.0' +__version__ = '2.0.0' diff --git a/go_expvar/CHANGELOG.md b/go_expvar/CHANGELOG.md index 51ae775a7ffab..76dd74ec8096f 100644 --- a/go_expvar/CHANGELOG.md +++ b/go_expvar/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.5.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/go_expvar/datadog_checks/go_expvar/__about__.py b/go_expvar/datadog_checks/go_expvar/__about__.py index c671054d218e9..09adcddf171c4 100644 --- a/go_expvar/datadog_checks/go_expvar/__about__.py +++ b/go_expvar/datadog_checks/go_expvar/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '2.5.1' +__version__ = '3.0.0' diff --git a/gunicorn/CHANGELOG.md b/gunicorn/CHANGELOG.md index e5f1ebd40f791..185fdedbbeae8 100644 --- a/gunicorn/CHANGELOG.md +++ b/gunicorn/CHANGELOG.md @@ -2,6 +2,16 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + +***Added***: + +* Upgrade psutil to 6.0.0 to fix performance issues addressed ([#18688](https://github.com/DataDog/integrations-core/pull/18688)) + ## 2.8.0 / 2024-09-05 ***Added***: diff --git a/gunicorn/changelog.d/18688.added b/gunicorn/changelog.d/18688.added deleted file mode 100644 index 30f2555bc26eb..0000000000000 --- a/gunicorn/changelog.d/18688.added +++ /dev/null @@ -1 +0,0 @@ -Upgrade psutil to 6.0.0 to fix performance issues addressed \ No newline at end of file diff --git a/gunicorn/datadog_checks/gunicorn/__about__.py b/gunicorn/datadog_checks/gunicorn/__about__.py index bdeea16a69e4c..09adcddf171c4 100644 --- a/gunicorn/datadog_checks/gunicorn/__about__.py +++ b/gunicorn/datadog_checks/gunicorn/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '2.8.0' +__version__ = '3.0.0' diff --git a/haproxy/CHANGELOG.md b/haproxy/CHANGELOG.md index e25ad134435f7..1a4fe82dd7246 100644 --- a/haproxy/CHANGELOG.md +++ b/haproxy/CHANGELOG.md @@ -2,6 +2,12 @@ +## 6.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 5.2.2 / 2024-07-05 / Agent 7.55.0 ***Fixed***: diff --git a/haproxy/datadog_checks/haproxy/__about__.py b/haproxy/datadog_checks/haproxy/__about__.py index 83ff1f1dd4e11..91262416e46c9 100644 --- a/haproxy/datadog_checks/haproxy/__about__.py +++ b/haproxy/datadog_checks/haproxy/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = "5.2.2" +__version__ = "6.0.0" diff --git a/harbor/CHANGELOG.md b/harbor/CHANGELOG.md index 6d2266292312b..be90f6a3b4001 100644 --- a/harbor/CHANGELOG.md +++ b/harbor/CHANGELOG.md @@ -2,6 +2,12 @@ +## 4.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 3.2.2 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/harbor/datadog_checks/harbor/__about__.py b/harbor/datadog_checks/harbor/__about__.py index b514fc8e57cf8..78967d676d1af 100644 --- a/harbor/datadog_checks/harbor/__about__.py +++ b/harbor/datadog_checks/harbor/__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__ = '3.2.2' +__version__ = '4.0.0' diff --git a/hazelcast/CHANGELOG.md b/hazelcast/CHANGELOG.md index 6e5217c1a96a3..c9561c348a10f 100644 --- a/hazelcast/CHANGELOG.md +++ b/hazelcast/CHANGELOG.md @@ -2,6 +2,12 @@ +## 5.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 4.1.0 / 2024-09-06 ***Added***: diff --git a/hazelcast/datadog_checks/hazelcast/__about__.py b/hazelcast/datadog_checks/hazelcast/__about__.py index 3da3f55dcb924..1fda5ed1ca206 100644 --- a/hazelcast/datadog_checks/hazelcast/__about__.py +++ b/hazelcast/datadog_checks/hazelcast/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2020-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '4.1.0' +__version__ = '5.0.0' diff --git a/hdfs_datanode/CHANGELOG.md b/hdfs_datanode/CHANGELOG.md index ecff9b07d0a6c..cf42a86ac479c 100644 --- a/hdfs_datanode/CHANGELOG.md +++ b/hdfs_datanode/CHANGELOG.md @@ -2,6 +2,12 @@ +## 5.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 4.2.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/hdfs_datanode/datadog_checks/hdfs_datanode/__about__.py b/hdfs_datanode/datadog_checks/hdfs_datanode/__about__.py index 8bbfa16dda76d..be76f78423b5e 100644 --- a/hdfs_datanode/datadog_checks/hdfs_datanode/__about__.py +++ b/hdfs_datanode/datadog_checks/hdfs_datanode/__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__ = "4.2.1" +__version__ = "5.0.0" diff --git a/hdfs_namenode/CHANGELOG.md b/hdfs_namenode/CHANGELOG.md index 2fe2bc6a923d1..03824a7ee204e 100644 --- a/hdfs_namenode/CHANGELOG.md +++ b/hdfs_namenode/CHANGELOG.md @@ -2,6 +2,12 @@ +## 5.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 4.2.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/hdfs_namenode/datadog_checks/hdfs_namenode/__about__.py b/hdfs_namenode/datadog_checks/hdfs_namenode/__about__.py index 8bbfa16dda76d..be76f78423b5e 100644 --- a/hdfs_namenode/datadog_checks/hdfs_namenode/__about__.py +++ b/hdfs_namenode/datadog_checks/hdfs_namenode/__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__ = "4.2.1" +__version__ = "5.0.0" diff --git a/hive/CHANGELOG.md b/hive/CHANGELOG.md index c2c5b2a763f47..ea353012f8299 100644 --- a/hive/CHANGELOG.md +++ b/hive/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.10.0 / 2024-01-05 / Agent 7.51.0 ***Added***: diff --git a/hive/datadog_checks/hive/__about__.py b/hive/datadog_checks/hive/__about__.py index 917440c386c75..b33fa8cee4d9d 100644 --- a/hive/datadog_checks/hive/__about__.py +++ b/hive/datadog_checks/hive/__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__ = '1.10.0' +__version__ = '2.0.0' diff --git a/hivemq/CHANGELOG.md b/hivemq/CHANGELOG.md index c9e651659ea0f..ce96c49652938 100644 --- a/hivemq/CHANGELOG.md +++ b/hivemq/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.8.0 / 2024-01-05 / Agent 7.51.0 ***Added***: diff --git a/hivemq/datadog_checks/hivemq/__about__.py b/hivemq/datadog_checks/hivemq/__about__.py index 5ce49ba9276dc..9c6b2fb79e5ac 100644 --- a/hivemq/datadog_checks/hivemq/__about__.py +++ b/hivemq/datadog_checks/hivemq/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2020-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '1.8.0' +__version__ = '2.0.0' diff --git a/http_check/CHANGELOG.md b/http_check/CHANGELOG.md index b363d19ab18b8..03cc92a52b062 100644 --- a/http_check/CHANGELOG.md +++ b/http_check/CHANGELOG.md @@ -2,6 +2,16 @@ +## 10.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + +***Security***: + +* Bump version of cryptography to 43.0.1 to address vulnerability ([#18656](https://github.com/DataDog/integrations-core/pull/18656)) + ## 9.9.0 / 2024-09-05 ***Added***: diff --git a/http_check/changelog.d/18656.security b/http_check/changelog.d/18656.security deleted file mode 100644 index ad676917cac26..0000000000000 --- a/http_check/changelog.d/18656.security +++ /dev/null @@ -1 +0,0 @@ -Bump version of cryptography to 43.0.1 to address vulnerability \ No newline at end of file diff --git a/http_check/datadog_checks/http_check/__about__.py b/http_check/datadog_checks/http_check/__about__.py index 2596e8a50fbd6..b29ff41307630 100644 --- a/http_check/datadog_checks/http_check/__about__.py +++ b/http_check/datadog_checks/http_check/__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__ = "9.9.0" +__version__ = "10.0.0" diff --git a/hudi/CHANGELOG.md b/hudi/CHANGELOG.md index 552ac94cf1b61..b7d11cac69c84 100644 --- a/hudi/CHANGELOG.md +++ b/hudi/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.3.0 / 2024-01-05 / Agent 7.51.0 ***Added***: diff --git a/hudi/datadog_checks/hudi/__about__.py b/hudi/datadog_checks/hudi/__about__.py index cc380ae1d72ca..0791a0b0a54f2 100644 --- a/hudi/datadog_checks/hudi/__about__.py +++ b/hudi/datadog_checks/hudi/__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__ = '2.3.0' +__version__ = '3.0.0' diff --git a/hyperv/CHANGELOG.md b/hyperv/CHANGELOG.md index 1f6d22d131043..67ced6c2cd7bb 100644 --- a/hyperv/CHANGELOG.md +++ b/hyperv/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.11.1 / 2024-07-05 / Agent 7.55.0 ***Fixed***: diff --git a/hyperv/datadog_checks/hyperv/__about__.py b/hyperv/datadog_checks/hyperv/__about__.py index d0b98712e9abc..5d1f81de59f43 100644 --- a/hyperv/datadog_checks/hyperv/__about__.py +++ b/hyperv/datadog_checks/hyperv/__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__ = '1.11.1' +__version__ = '2.0.0' diff --git a/ibm_ace/CHANGELOG.md b/ibm_ace/CHANGELOG.md index 1e42cf10bea61..1485d7fc5b29e 100644 --- a/ibm_ace/CHANGELOG.md +++ b/ibm_ace/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.2.2 / 2024-04-26 / Agent 7.54.0 ***Fixed***: diff --git a/ibm_ace/datadog_checks/ibm_ace/__about__.py b/ibm_ace/datadog_checks/ibm_ace/__about__.py index faa7c19604967..c1405a3ef0291 100644 --- a/ibm_ace/datadog_checks/ibm_ace/__about__.py +++ b/ibm_ace/datadog_checks/ibm_ace/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2022-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '2.2.2' +__version__ = '3.0.0' diff --git a/ibm_db2/CHANGELOG.md b/ibm_db2/CHANGELOG.md index ef68fb9e33122..22d474c39e148 100644 --- a/ibm_db2/CHANGELOG.md +++ b/ibm_db2/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.2.0 / 2024-01-05 / Agent 7.51.0 ***Added***: diff --git a/ibm_db2/datadog_checks/ibm_db2/__about__.py b/ibm_db2/datadog_checks/ibm_db2/__about__.py index 629c671eb148b..f046338059ddf 100644 --- a/ibm_db2/datadog_checks/ibm_db2/__about__.py +++ b/ibm_db2/datadog_checks/ibm_db2/__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__ = '2.2.0' +__version__ = '3.0.0' diff --git a/ibm_i/CHANGELOG.md b/ibm_i/CHANGELOG.md index cf6935d2cf5a7..ec90a694317c2 100644 --- a/ibm_i/CHANGELOG.md +++ b/ibm_i/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.2.0 / 2024-02-16 / Agent 7.52.0 ***Added***: diff --git a/ibm_i/datadog_checks/ibm_i/__about__.py b/ibm_i/datadog_checks/ibm_i/__about__.py index c38d1e1cd06af..0791a0b0a54f2 100644 --- a/ibm_i/datadog_checks/ibm_i/__about__.py +++ b/ibm_i/datadog_checks/ibm_i/__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__ = '2.2.0' +__version__ = '3.0.0' diff --git a/ibm_mq/CHANGELOG.md b/ibm_mq/CHANGELOG.md index 9ea47bb7a2dd9..4ff12fcea8653 100644 --- a/ibm_mq/CHANGELOG.md +++ b/ibm_mq/CHANGELOG.md @@ -2,6 +2,16 @@ +## 7.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + +***Added***: + +* Upgrade psutil to 6.0.0 to fix performance issues addressed ([#18688](https://github.com/DataDog/integrations-core/pull/18688)) + ## 6.4.0 / 2024-09-05 ***Added***: diff --git a/ibm_mq/changelog.d/18688.added b/ibm_mq/changelog.d/18688.added deleted file mode 100644 index 30f2555bc26eb..0000000000000 --- a/ibm_mq/changelog.d/18688.added +++ /dev/null @@ -1 +0,0 @@ -Upgrade psutil to 6.0.0 to fix performance issues addressed \ No newline at end of file diff --git a/ibm_mq/datadog_checks/ibm_mq/__about__.py b/ibm_mq/datadog_checks/ibm_mq/__about__.py index 069a9a9b8d8fd..3134ece129a2d 100644 --- a/ibm_mq/datadog_checks/ibm_mq/__about__.py +++ b/ibm_mq/datadog_checks/ibm_mq/__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__ = '6.4.0' +__version__ = '7.0.0' diff --git a/ibm_was/CHANGELOG.md b/ibm_was/CHANGELOG.md index e2047d37846d2..64a4f1dea5260 100644 --- a/ibm_was/CHANGELOG.md +++ b/ibm_was/CHANGELOG.md @@ -2,6 +2,16 @@ +## 4.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + +***Added***: + +* Bump lxml version for py3.12 E2E tests ([#18637](https://github.com/DataDog/integrations-core/pull/18637)) + ## 3.3.2 / 2024-08-28 / Agent 7.57.0 ***Fixed***: diff --git a/ibm_was/changelog.d/18637.added b/ibm_was/changelog.d/18637.added deleted file mode 100644 index 03c3e7d117eb1..0000000000000 --- a/ibm_was/changelog.d/18637.added +++ /dev/null @@ -1 +0,0 @@ -Bump lxml version for py3.12 E2E tests \ No newline at end of file diff --git a/ibm_was/datadog_checks/ibm_was/__about__.py b/ibm_was/datadog_checks/ibm_was/__about__.py index 18b1f968f9fa2..741960d95510d 100644 --- a/ibm_was/datadog_checks/ibm_was/__about__.py +++ b/ibm_was/datadog_checks/ibm_was/__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__ = '3.3.2' +__version__ = '4.0.0' diff --git a/ignite/CHANGELOG.md b/ignite/CHANGELOG.md index cdd7527a86fae..922182763d44b 100644 --- a/ignite/CHANGELOG.md +++ b/ignite/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.4.0 / 2024-01-05 / Agent 7.51.0 ***Added***: diff --git a/ignite/datadog_checks/ignite/__about__.py b/ignite/datadog_checks/ignite/__about__.py index ca9a25e7919e5..32b388c31505f 100644 --- a/ignite/datadog_checks/ignite/__about__.py +++ b/ignite/datadog_checks/ignite/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2020-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '2.4.0' +__version__ = '3.0.0' diff --git a/iis/CHANGELOG.md b/iis/CHANGELOG.md index fb503d4f6ff1a..1b1cb60f30a4a 100644 --- a/iis/CHANGELOG.md +++ b/iis/CHANGELOG.md @@ -2,6 +2,12 @@ +## 4.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 3.1.1 / 2024-07-05 / Agent 7.55.0 ***Fixed***: diff --git a/iis/datadog_checks/iis/__about__.py b/iis/datadog_checks/iis/__about__.py index ddb3387b0e4db..c25988b9e6d8b 100644 --- a/iis/datadog_checks/iis/__about__.py +++ b/iis/datadog_checks/iis/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '3.1.1' +__version__ = '4.0.0' diff --git a/impala/CHANGELOG.md b/impala/CHANGELOG.md index a8f19fde8151f..e1ef71e3b21f6 100644 --- a/impala/CHANGELOG.md +++ b/impala/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.2.2 / 2024-07-05 / Agent 7.55.0 ***Fixed***: diff --git a/impala/datadog_checks/impala/__about__.py b/impala/datadog_checks/impala/__about__.py index faa7c19604967..c1405a3ef0291 100644 --- a/impala/datadog_checks/impala/__about__.py +++ b/impala/datadog_checks/impala/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2022-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '2.2.2' +__version__ = '3.0.0' diff --git a/istio/CHANGELOG.md b/istio/CHANGELOG.md index 6793e03925a0c..f39d516083ab8 100644 --- a/istio/CHANGELOG.md +++ b/istio/CHANGELOG.md @@ -2,6 +2,12 @@ +## 7.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 6.1.2 / 2024-07-05 / Agent 7.55.0 ***Fixed***: diff --git a/istio/datadog_checks/istio/__about__.py b/istio/datadog_checks/istio/__about__.py index 16db6bfd0b240..18882fdf3298a 100644 --- a/istio/datadog_checks/istio/__about__.py +++ b/istio/datadog_checks/istio/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = "6.1.2" +__version__ = "7.0.0" diff --git a/jboss_wildfly/CHANGELOG.md b/jboss_wildfly/CHANGELOG.md index 021fe5e623f0d..abb36b8baa261 100644 --- a/jboss_wildfly/CHANGELOG.md +++ b/jboss_wildfly/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.2.0 / 2024-01-05 / Agent 7.51.0 ***Added***: diff --git a/jboss_wildfly/datadog_checks/jboss_wildfly/__about__.py b/jboss_wildfly/datadog_checks/jboss_wildfly/__about__.py index 629c671eb148b..f046338059ddf 100644 --- a/jboss_wildfly/datadog_checks/jboss_wildfly/__about__.py +++ b/jboss_wildfly/datadog_checks/jboss_wildfly/__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__ = '2.2.0' +__version__ = '3.0.0' diff --git a/journald/CHANGELOG.md b/journald/CHANGELOG.md index 0f2214fe25425..bbe8a46255c03 100644 --- a/journald/CHANGELOG.md +++ b/journald/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.2.0 / 2024-01-05 / Agent 7.51.0 ***Added***: diff --git a/journald/datadog_checks/journald/__about__.py b/journald/datadog_checks/journald/__about__.py index e83b5b53c9f82..a16255352ee20 100644 --- a/journald/datadog_checks/journald/__about__.py +++ b/journald/datadog_checks/journald/__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__ = '1.2.0' +__version__ = '2.0.0' diff --git a/kafka/CHANGELOG.md b/kafka/CHANGELOG.md index d4f83c373be41..ce09650e385a3 100644 --- a/kafka/CHANGELOG.md +++ b/kafka/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.16.0 / 2024-05-31 / Agent 7.55.0 ***Added***: diff --git a/kafka/datadog_checks/kafka/__about__.py b/kafka/datadog_checks/kafka/__about__.py index 032bc0f0fc3c9..09adcddf171c4 100644 --- a/kafka/datadog_checks/kafka/__about__.py +++ b/kafka/datadog_checks/kafka/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '2.16.0' +__version__ = '3.0.0' diff --git a/kafka_consumer/CHANGELOG.md b/kafka_consumer/CHANGELOG.md index fa7ff66835014..5d6a0c962039f 100644 --- a/kafka_consumer/CHANGELOG.md +++ b/kafka_consumer/CHANGELOG.md @@ -2,6 +2,12 @@ +## 5.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 4.6.1 / 2024-09-05 ***Fixed***: diff --git a/kafka_consumer/datadog_checks/kafka_consumer/__about__.py b/kafka_consumer/datadog_checks/kafka_consumer/__about__.py index 8b9ad60a758fa..b033d7b5bb770 100644 --- a/kafka_consumer/datadog_checks/kafka_consumer/__about__.py +++ b/kafka_consumer/datadog_checks/kafka_consumer/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = "4.6.1" +__version__ = "5.0.0" diff --git a/karpenter/CHANGELOG.md b/karpenter/CHANGELOG.md index 1e9bb35171829..eb64c39fa17ca 100644 --- a/karpenter/CHANGELOG.md +++ b/karpenter/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.6.0 / 2024-09-23 ***Added***: diff --git a/karpenter/datadog_checks/karpenter/__about__.py b/karpenter/datadog_checks/karpenter/__about__.py index 33cc8c84a2eab..2ce3bcb822978 100644 --- a/karpenter/datadog_checks/karpenter/__about__.py +++ b/karpenter/datadog_checks/karpenter/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2023-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '1.6.0' +__version__ = '2.0.0' diff --git a/kong/CHANGELOG.md b/kong/CHANGELOG.md index cfdfea80162ac..3ca927e03efe1 100644 --- a/kong/CHANGELOG.md +++ b/kong/CHANGELOG.md @@ -2,6 +2,12 @@ +## 4.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 3.2.2 / 2024-07-05 / Agent 7.55.0 ***Fixed***: diff --git a/kong/datadog_checks/kong/__about__.py b/kong/datadog_checks/kong/__about__.py index e5456b9ec95ef..c25988b9e6d8b 100644 --- a/kong/datadog_checks/kong/__about__.py +++ b/kong/datadog_checks/kong/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '3.2.2' +__version__ = '4.0.0' diff --git a/kube_apiserver_metrics/CHANGELOG.md b/kube_apiserver_metrics/CHANGELOG.md index 9083470245e69..7e7402f301f6a 100644 --- a/kube_apiserver_metrics/CHANGELOG.md +++ b/kube_apiserver_metrics/CHANGELOG.md @@ -2,6 +2,12 @@ +## 5.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 4.3.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/kube_apiserver_metrics/datadog_checks/kube_apiserver_metrics/__about__.py b/kube_apiserver_metrics/datadog_checks/kube_apiserver_metrics/__about__.py index 37b77a6c5b5a2..59ccab2a77ff8 100644 --- a/kube_apiserver_metrics/datadog_checks/kube_apiserver_metrics/__about__.py +++ b/kube_apiserver_metrics/datadog_checks/kube_apiserver_metrics/__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.3.1' +__version__ = '5.0.0' diff --git a/kube_controller_manager/CHANGELOG.md b/kube_controller_manager/CHANGELOG.md index b9acc63878e8e..3f217bbae6391 100644 --- a/kube_controller_manager/CHANGELOG.md +++ b/kube_controller_manager/CHANGELOG.md @@ -2,6 +2,12 @@ +## 6.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 5.1.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/kube_controller_manager/datadog_checks/kube_controller_manager/__about__.py b/kube_controller_manager/datadog_checks/kube_controller_manager/__about__.py index 160dc03d2240a..83ebcac59b965 100644 --- a/kube_controller_manager/datadog_checks/kube_controller_manager/__about__.py +++ b/kube_controller_manager/datadog_checks/kube_controller_manager/__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__ = '5.1.1' +__version__ = '6.0.0' diff --git a/kube_dns/CHANGELOG.md b/kube_dns/CHANGELOG.md index 487c9dd26defe..9012bbef87562 100644 --- a/kube_dns/CHANGELOG.md +++ b/kube_dns/CHANGELOG.md @@ -2,6 +2,12 @@ +## 5.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 4.4.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/kube_dns/datadog_checks/kube_dns/__about__.py b/kube_dns/datadog_checks/kube_dns/__about__.py index 174bd1265f67c..d2601db5d5cc0 100644 --- a/kube_dns/datadog_checks/kube_dns/__about__.py +++ b/kube_dns/datadog_checks/kube_dns/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '4.4.1' +__version__ = '5.0.0' diff --git a/kube_metrics_server/CHANGELOG.md b/kube_metrics_server/CHANGELOG.md index 0f82574aea7f7..fd9c0091ffe10 100644 --- a/kube_metrics_server/CHANGELOG.md +++ b/kube_metrics_server/CHANGELOG.md @@ -2,6 +2,12 @@ +## 4.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 3.3.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/kube_metrics_server/datadog_checks/kube_metrics_server/__about__.py b/kube_metrics_server/datadog_checks/kube_metrics_server/__about__.py index 539f63b827f2c..78967d676d1af 100644 --- a/kube_metrics_server/datadog_checks/kube_metrics_server/__about__.py +++ b/kube_metrics_server/datadog_checks/kube_metrics_server/__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__ = '3.3.1' +__version__ = '4.0.0' diff --git a/kube_proxy/CHANGELOG.md b/kube_proxy/CHANGELOG.md index e5081094ea5d1..0346624a4b205 100644 --- a/kube_proxy/CHANGELOG.md +++ b/kube_proxy/CHANGELOG.md @@ -2,6 +2,12 @@ +## 7.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 6.3.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/kube_proxy/datadog_checks/kube_proxy/__about__.py b/kube_proxy/datadog_checks/kube_proxy/__about__.py index 4c5167d350045..18882fdf3298a 100644 --- a/kube_proxy/datadog_checks/kube_proxy/__about__.py +++ b/kube_proxy/datadog_checks/kube_proxy/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = "6.3.1" +__version__ = "7.0.0" diff --git a/kube_scheduler/CHANGELOG.md b/kube_scheduler/CHANGELOG.md index 126ff587da4de..ad5240c54dfdc 100644 --- a/kube_scheduler/CHANGELOG.md +++ b/kube_scheduler/CHANGELOG.md @@ -2,6 +2,12 @@ +## 5.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 4.10.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/kube_scheduler/datadog_checks/kube_scheduler/__about__.py b/kube_scheduler/datadog_checks/kube_scheduler/__about__.py index 382cadc2a1f39..59ccab2a77ff8 100644 --- a/kube_scheduler/datadog_checks/kube_scheduler/__about__.py +++ b/kube_scheduler/datadog_checks/kube_scheduler/__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.10.1' +__version__ = '5.0.0' diff --git a/kubelet/CHANGELOG.md b/kubelet/CHANGELOG.md index 2162539234a4d..775d3f73eb902 100644 --- a/kubelet/CHANGELOG.md +++ b/kubelet/CHANGELOG.md @@ -2,6 +2,12 @@ +## 8.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 7.13.2 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/kubelet/datadog_checks/kubelet/__about__.py b/kubelet/datadog_checks/kubelet/__about__.py index 8d12bdbe95ebe..90c94f7125939 100644 --- a/kubelet/datadog_checks/kubelet/__about__.py +++ b/kubelet/datadog_checks/kubelet/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = "7.13.2" +__version__ = "8.0.0" diff --git a/kubernetes_cluster_autoscaler/CHANGELOG.md b/kubernetes_cluster_autoscaler/CHANGELOG.md index 4abc40d848cd8..70c9f5eae6789 100644 --- a/kubernetes_cluster_autoscaler/CHANGELOG.md +++ b/kubernetes_cluster_autoscaler/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.0.1 / 2024-07-05 / Agent 7.55.0 ***Fixed***: diff --git a/kubernetes_cluster_autoscaler/datadog_checks/kubernetes_cluster_autoscaler/__about__.py b/kubernetes_cluster_autoscaler/datadog_checks/kubernetes_cluster_autoscaler/__about__.py index e0db4e56d553f..cc393c1dad9ce 100644 --- a/kubernetes_cluster_autoscaler/datadog_checks/kubernetes_cluster_autoscaler/__about__.py +++ b/kubernetes_cluster_autoscaler/datadog_checks/kubernetes_cluster_autoscaler/__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__ = '1.0.1' +__version__ = '2.0.0' diff --git a/kubernetes_state/CHANGELOG.md b/kubernetes_state/CHANGELOG.md index d0f2b1240e8be..8fa6d0c66bd1b 100644 --- a/kubernetes_state/CHANGELOG.md +++ b/kubernetes_state/CHANGELOG.md @@ -2,6 +2,12 @@ +## 9.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 8.1.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/kubernetes_state/datadog_checks/kubernetes_state/__about__.py b/kubernetes_state/datadog_checks/kubernetes_state/__about__.py index 8e6c48eb5b19d..d028d71da95d0 100644 --- a/kubernetes_state/datadog_checks/kubernetes_state/__about__.py +++ b/kubernetes_state/datadog_checks/kubernetes_state/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '8.1.1' +__version__ = '9.0.0' diff --git a/kyototycoon/CHANGELOG.md b/kyototycoon/CHANGELOG.md index 62d2b5030a242..ec97b4e7e1a8b 100644 --- a/kyototycoon/CHANGELOG.md +++ b/kyototycoon/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.5.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/kyototycoon/datadog_checks/kyototycoon/__about__.py b/kyototycoon/datadog_checks/kyototycoon/__about__.py index 1c0e297048fe0..742f0fd7b8754 100644 --- a/kyototycoon/datadog_checks/kyototycoon/__about__.py +++ b/kyototycoon/datadog_checks/kyototycoon/__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__ = "2.5.1" +__version__ = "3.0.0" diff --git a/kyverno/CHANGELOG.md b/kyverno/CHANGELOG.md index 768d614a63266..b9af61afdf3d6 100644 --- a/kyverno/CHANGELOG.md +++ b/kyverno/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.0.2 / 2024-07-31 / Agent 7.56.0 ***Fixed***: diff --git a/kyverno/datadog_checks/kyverno/__about__.py b/kyverno/datadog_checks/kyverno/__about__.py index 1436e0ab91c45..cc393c1dad9ce 100644 --- a/kyverno/datadog_checks/kyverno/__about__.py +++ b/kyverno/datadog_checks/kyverno/__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__ = '1.0.2' +__version__ = '2.0.0' diff --git a/lighttpd/CHANGELOG.md b/lighttpd/CHANGELOG.md index 8e67921106b01..1a678d760afb7 100644 --- a/lighttpd/CHANGELOG.md +++ b/lighttpd/CHANGELOG.md @@ -2,6 +2,12 @@ +## 4.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 3.5.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/lighttpd/datadog_checks/lighttpd/__about__.py b/lighttpd/datadog_checks/lighttpd/__about__.py index 5502f359afa10..f81a9a356ff96 100644 --- a/lighttpd/datadog_checks/lighttpd/__about__.py +++ b/lighttpd/datadog_checks/lighttpd/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = "3.5.1" +__version__ = "4.0.0" diff --git a/linkerd/CHANGELOG.md b/linkerd/CHANGELOG.md index 27ac1f842880f..624d434b5488d 100644 --- a/linkerd/CHANGELOG.md +++ b/linkerd/CHANGELOG.md @@ -2,6 +2,12 @@ +## 5.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 4.2.2 / 2024-07-05 / Agent 7.55.0 ***Fixed***: diff --git a/linkerd/datadog_checks/linkerd/__about__.py b/linkerd/datadog_checks/linkerd/__about__.py index 131ae880ddf5a..be76f78423b5e 100644 --- a/linkerd/datadog_checks/linkerd/__about__.py +++ b/linkerd/datadog_checks/linkerd/__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__ = "4.2.2" +__version__ = "5.0.0" diff --git a/linux_proc_extras/CHANGELOG.md b/linux_proc_extras/CHANGELOG.md index 237e5a15e42ad..7bd5d084e6f15 100644 --- a/linux_proc_extras/CHANGELOG.md +++ b/linux_proc_extras/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.5.0 / 2024-01-05 / Agent 7.51.0 ***Added***: diff --git a/linux_proc_extras/datadog_checks/linux_proc_extras/__about__.py b/linux_proc_extras/datadog_checks/linux_proc_extras/__about__.py index 72639401021d6..09adcddf171c4 100644 --- a/linux_proc_extras/datadog_checks/linux_proc_extras/__about__.py +++ b/linux_proc_extras/datadog_checks/linux_proc_extras/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '2.5.0' +__version__ = '3.0.0' diff --git a/mapr/CHANGELOG.md b/mapr/CHANGELOG.md index 5775c5bc1e0ea..397fe4a1fe502 100644 --- a/mapr/CHANGELOG.md +++ b/mapr/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.11.0 / 2024-01-05 / Agent 7.51.0 ***Added***: diff --git a/mapr/datadog_checks/mapr/__about__.py b/mapr/datadog_checks/mapr/__about__.py index 7d0a0d83e667a..b33fa8cee4d9d 100644 --- a/mapr/datadog_checks/mapr/__about__.py +++ b/mapr/datadog_checks/mapr/__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__ = '1.11.0' +__version__ = '2.0.0' diff --git a/mapreduce/CHANGELOG.md b/mapreduce/CHANGELOG.md index d507546a62623..946de5cc8d3ff 100644 --- a/mapreduce/CHANGELOG.md +++ b/mapreduce/CHANGELOG.md @@ -2,6 +2,12 @@ +## 5.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 4.2.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/mapreduce/datadog_checks/mapreduce/__about__.py b/mapreduce/datadog_checks/mapreduce/__about__.py index 8bbfa16dda76d..be76f78423b5e 100644 --- a/mapreduce/datadog_checks/mapreduce/__about__.py +++ b/mapreduce/datadog_checks/mapreduce/__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__ = "4.2.1" +__version__ = "5.0.0" diff --git a/marathon/CHANGELOG.md b/marathon/CHANGELOG.md index 8847d6692d41e..41da5cdc76671 100644 --- a/marathon/CHANGELOG.md +++ b/marathon/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.3.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/marathon/datadog_checks/marathon/__about__.py b/marathon/datadog_checks/marathon/__about__.py index ca8c2b36aa50f..742f0fd7b8754 100644 --- a/marathon/datadog_checks/marathon/__about__.py +++ b/marathon/datadog_checks/marathon/__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__ = "2.3.1" +__version__ = "3.0.0" diff --git a/marklogic/CHANGELOG.md b/marklogic/CHANGELOG.md index ad29d9a97f4fc..7bf8d3753f3b2 100644 --- a/marklogic/CHANGELOG.md +++ b/marklogic/CHANGELOG.md @@ -2,6 +2,12 @@ +## 5.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 4.2.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/marklogic/datadog_checks/marklogic/__about__.py b/marklogic/datadog_checks/marklogic/__about__.py index 1a18420519953..1fda5ed1ca206 100644 --- a/marklogic/datadog_checks/marklogic/__about__.py +++ b/marklogic/datadog_checks/marklogic/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2020-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '4.2.1' +__version__ = '5.0.0' diff --git a/mcache/CHANGELOG.md b/mcache/CHANGELOG.md index 287701c5b367b..8cc89df2597fc 100644 --- a/mcache/CHANGELOG.md +++ b/mcache/CHANGELOG.md @@ -2,6 +2,12 @@ +## 5.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 4.1.0 / 2024-01-05 / Agent 7.51.0 ***Added***: diff --git a/mcache/datadog_checks/mcache/__about__.py b/mcache/datadog_checks/mcache/__about__.py index ccf6bd22bcecb..b033d7b5bb770 100644 --- a/mcache/datadog_checks/mcache/__about__.py +++ b/mcache/datadog_checks/mcache/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = "4.1.0" +__version__ = "5.0.0" diff --git a/mesos_master/CHANGELOG.md b/mesos_master/CHANGELOG.md index e59d8523299d7..7580647e883c5 100644 --- a/mesos_master/CHANGELOG.md +++ b/mesos_master/CHANGELOG.md @@ -2,6 +2,12 @@ +## 4.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 3.3.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/mesos_master/datadog_checks/mesos_master/__about__.py b/mesos_master/datadog_checks/mesos_master/__about__.py index a3b938c41252f..c25988b9e6d8b 100644 --- a/mesos_master/datadog_checks/mesos_master/__about__.py +++ b/mesos_master/datadog_checks/mesos_master/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '3.3.1' +__version__ = '4.0.0' diff --git a/mesos_slave/CHANGELOG.md b/mesos_slave/CHANGELOG.md index 176782ed6b405..474e1c7e53302 100644 --- a/mesos_slave/CHANGELOG.md +++ b/mesos_slave/CHANGELOG.md @@ -2,6 +2,12 @@ +## 4.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 3.3.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/mesos_slave/datadog_checks/mesos_slave/__about__.py b/mesos_slave/datadog_checks/mesos_slave/__about__.py index a3b938c41252f..c25988b9e6d8b 100644 --- a/mesos_slave/datadog_checks/mesos_slave/__about__.py +++ b/mesos_slave/datadog_checks/mesos_slave/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '3.3.1' +__version__ = '4.0.0' diff --git a/mongo/CHANGELOG.md b/mongo/CHANGELOG.md index 1994c19a6da17..07208f8bbd2be 100644 --- a/mongo/CHANGELOG.md +++ b/mongo/CHANGELOG.md @@ -2,6 +2,16 @@ +## 7.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + +***Added***: + +* Upgrade psutil to 6.0.0 to fix performance issues addressed ([#18688](https://github.com/DataDog/integrations-core/pull/18688)) + ## 6.11.0 / 2024-09-10 ***Added***: diff --git a/mongo/changelog.d/18688.added b/mongo/changelog.d/18688.added deleted file mode 100644 index 30f2555bc26eb..0000000000000 --- a/mongo/changelog.d/18688.added +++ /dev/null @@ -1 +0,0 @@ -Upgrade psutil to 6.0.0 to fix performance issues addressed \ No newline at end of file diff --git a/mongo/datadog_checks/mongo/__about__.py b/mongo/datadog_checks/mongo/__about__.py index 0e13d4a6062ef..7b8b844cb208e 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__ = '6.11.0' +__version__ = '7.0.0' diff --git a/mysql/CHANGELOG.md b/mysql/CHANGELOG.md index 3cfa2f2c8dd57..94408ac6cce20 100644 --- a/mysql/CHANGELOG.md +++ b/mysql/CHANGELOG.md @@ -2,6 +2,16 @@ +## 13.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + +***Security***: + +* Bump version of cryptography to 43.0.1 to address vulnerability ([#18656](https://github.com/DataDog/integrations-core/pull/18656)) + ## 12.8.0 / 2024-09-05 ***Added***: diff --git a/mysql/changelog.d/18656.security b/mysql/changelog.d/18656.security deleted file mode 100644 index ad676917cac26..0000000000000 --- a/mysql/changelog.d/18656.security +++ /dev/null @@ -1 +0,0 @@ -Bump version of cryptography to 43.0.1 to address vulnerability \ No newline at end of file diff --git a/mysql/datadog_checks/mysql/__about__.py b/mysql/datadog_checks/mysql/__about__.py index 88f0af1968d87..ccf684876c143 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__ = "12.8.0" +__version__ = "13.0.0" diff --git a/nagios/CHANGELOG.md b/nagios/CHANGELOG.md index ef49ae0722a02..6086ec60aa313 100644 --- a/nagios/CHANGELOG.md +++ b/nagios/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.13.0 / 2024-01-05 / Agent 7.51.0 ***Added***: diff --git a/nagios/datadog_checks/nagios/__about__.py b/nagios/datadog_checks/nagios/__about__.py index 9277530c51434..0e2ebd5e4631b 100644 --- a/nagios/datadog_checks/nagios/__about__.py +++ b/nagios/datadog_checks/nagios/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '1.13.0' +__version__ = '2.0.0' diff --git a/network/CHANGELOG.md b/network/CHANGELOG.md index 72662048b82be..28d9395b39152 100644 --- a/network/CHANGELOG.md +++ b/network/CHANGELOG.md @@ -2,6 +2,16 @@ +## 4.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + +***Added***: + +* Upgrade psutil to 6.0.0 to fix performance issues addressed ([#18688](https://github.com/DataDog/integrations-core/pull/18688)) + ## 3.4.0 / 2024-09-05 ***Added***: diff --git a/network/changelog.d/18688.added b/network/changelog.d/18688.added deleted file mode 100644 index 30f2555bc26eb..0000000000000 --- a/network/changelog.d/18688.added +++ /dev/null @@ -1 +0,0 @@ -Upgrade psutil to 6.0.0 to fix performance issues addressed \ No newline at end of file diff --git a/network/datadog_checks/network/__about__.py b/network/datadog_checks/network/__about__.py index 378e8c4ee6a6b..c25988b9e6d8b 100644 --- a/network/datadog_checks/network/__about__.py +++ b/network/datadog_checks/network/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '3.4.0' +__version__ = '4.0.0' diff --git a/nfsstat/CHANGELOG.md b/nfsstat/CHANGELOG.md index e192cf4396a2e..06bdab23623be 100644 --- a/nfsstat/CHANGELOG.md +++ b/nfsstat/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.13.0 / 2024-01-05 / Agent 7.51.0 ***Added***: diff --git a/nfsstat/datadog_checks/nfsstat/__about__.py b/nfsstat/datadog_checks/nfsstat/__about__.py index 9277530c51434..0e2ebd5e4631b 100644 --- a/nfsstat/datadog_checks/nfsstat/__about__.py +++ b/nfsstat/datadog_checks/nfsstat/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '1.13.0' +__version__ = '2.0.0' diff --git a/nginx/CHANGELOG.md b/nginx/CHANGELOG.md index ae0a14f71c0b3..609c9dedbb18b 100644 --- a/nginx/CHANGELOG.md +++ b/nginx/CHANGELOG.md @@ -2,6 +2,12 @@ +## 7.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 6.3.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/nginx/datadog_checks/nginx/__about__.py b/nginx/datadog_checks/nginx/__about__.py index 2207a8889bf5e..3134ece129a2d 100644 --- a/nginx/datadog_checks/nginx/__about__.py +++ b/nginx/datadog_checks/nginx/__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__ = '6.3.1' +__version__ = '7.0.0' diff --git a/nginx_ingress_controller/CHANGELOG.md b/nginx_ingress_controller/CHANGELOG.md index 0714ec7197410..56e5f05c1245b 100644 --- a/nginx_ingress_controller/CHANGELOG.md +++ b/nginx_ingress_controller/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.6.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/nginx_ingress_controller/datadog_checks/nginx_ingress_controller/__about__.py b/nginx_ingress_controller/datadog_checks/nginx_ingress_controller/__about__.py index 247c628faaa09..beaee23baf7e1 100644 --- a/nginx_ingress_controller/datadog_checks/nginx_ingress_controller/__about__.py +++ b/nginx_ingress_controller/datadog_checks/nginx_ingress_controller/__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__ = '2.6.1' +__version__ = '3.0.0' diff --git a/nvidia_triton/CHANGELOG.md b/nvidia_triton/CHANGELOG.md index 6ae9bc7552b2a..1a56bd0e2b7f4 100644 --- a/nvidia_triton/CHANGELOG.md +++ b/nvidia_triton/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.2.2 / 2024-07-05 / Agent 7.55.0 ***Fixed***: diff --git a/nvidia_triton/datadog_checks/nvidia_triton/__about__.py b/nvidia_triton/datadog_checks/nvidia_triton/__about__.py index cbacb6e2d1ad9..2ce3bcb822978 100644 --- a/nvidia_triton/datadog_checks/nvidia_triton/__about__.py +++ b/nvidia_triton/datadog_checks/nvidia_triton/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2023-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '1.2.2' +__version__ = '2.0.0' diff --git a/openldap/CHANGELOG.md b/openldap/CHANGELOG.md index 7f7e6306cd501..256f676af882e 100644 --- a/openldap/CHANGELOG.md +++ b/openldap/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.12.0 / 2024-01-05 / Agent 7.51.0 ***Added***: diff --git a/openldap/datadog_checks/openldap/__about__.py b/openldap/datadog_checks/openldap/__about__.py index 0bcccfd8cfe20..0e2ebd5e4631b 100644 --- a/openldap/datadog_checks/openldap/__about__.py +++ b/openldap/datadog_checks/openldap/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '1.12.0' +__version__ = '2.0.0' diff --git a/openmetrics/CHANGELOG.md b/openmetrics/CHANGELOG.md index 94b1a240f057d..3d2016891f6de 100644 --- a/openmetrics/CHANGELOG.md +++ b/openmetrics/CHANGELOG.md @@ -2,6 +2,12 @@ +## 5.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 4.2.2 / 2024-07-05 / Agent 7.55.0 ***Fixed***: diff --git a/openmetrics/datadog_checks/openmetrics/__about__.py b/openmetrics/datadog_checks/openmetrics/__about__.py index b0555c6ea864f..b033d7b5bb770 100644 --- a/openmetrics/datadog_checks/openmetrics/__about__.py +++ b/openmetrics/datadog_checks/openmetrics/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = "4.2.2" +__version__ = "5.0.0" diff --git a/openstack/CHANGELOG.md b/openstack/CHANGELOG.md index 086f89df9fb8b..c8171421c6f80 100644 --- a/openstack/CHANGELOG.md +++ b/openstack/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.0.0 / 2024-01-05 / Agent 7.51.0 ***Changed***: diff --git a/openstack/datadog_checks/openstack/__about__.py b/openstack/datadog_checks/openstack/__about__.py index e24c45e124d83..5778c5423a6b0 100644 --- a/openstack/datadog_checks/openstack/__about__.py +++ b/openstack/datadog_checks/openstack/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = "2.0.0" +__version__ = "3.0.0" diff --git a/openstack_controller/CHANGELOG.md b/openstack_controller/CHANGELOG.md index ca682790cc3b3..5260a2c84b565 100644 --- a/openstack_controller/CHANGELOG.md +++ b/openstack_controller/CHANGELOG.md @@ -2,6 +2,12 @@ +## 7.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 6.9.0 / 2024-08-09 / Agent 7.57.0 ***Added***: diff --git a/openstack_controller/datadog_checks/openstack_controller/__about__.py b/openstack_controller/datadog_checks/openstack_controller/__about__.py index b11c97a1a64af..3134ece129a2d 100644 --- a/openstack_controller/datadog_checks/openstack_controller/__about__.py +++ b/openstack_controller/datadog_checks/openstack_controller/__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__ = '6.9.0' +__version__ = '7.0.0' diff --git a/oracle/CHANGELOG.md b/oracle/CHANGELOG.md index 62b38c5d3650e..c0fd3e6838748 100644 --- a/oracle/CHANGELOG.md +++ b/oracle/CHANGELOG.md @@ -2,6 +2,12 @@ +## 6.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 5.2.0 / 2024-03-22 / Agent 7.53.0 ***Deprecated***: diff --git a/oracle/datadog_checks/oracle/__about__.py b/oracle/datadog_checks/oracle/__about__.py index 22e20d167d7e2..91262416e46c9 100644 --- a/oracle/datadog_checks/oracle/__about__.py +++ b/oracle/datadog_checks/oracle/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = "5.2.0" +__version__ = "6.0.0" diff --git a/ossec_security/CHANGELOG.md b/ossec_security/CHANGELOG.md index ac1c6e6d5718a..e57e089ded5c3 100644 --- a/ossec_security/CHANGELOG.md +++ b/ossec_security/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.0.0 / 2024-08-09 / Agent 7.57.0 ***Added***: diff --git a/ossec_security/datadog_checks/ossec_security/__about__.py b/ossec_security/datadog_checks/ossec_security/__about__.py index acbfd1c866b84..cc393c1dad9ce 100644 --- a/ossec_security/datadog_checks/ossec_security/__about__.py +++ b/ossec_security/datadog_checks/ossec_security/__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__ = '1.0.0' +__version__ = '2.0.0' diff --git a/pan_firewall/CHANGELOG.md b/pan_firewall/CHANGELOG.md index c22852d727c66..e77473fde7c3e 100644 --- a/pan_firewall/CHANGELOG.md +++ b/pan_firewall/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.2.0 / 2024-01-05 / Agent 7.51.0 ***Added***: diff --git a/pan_firewall/datadog_checks/pan_firewall/__about__.py b/pan_firewall/datadog_checks/pan_firewall/__about__.py index e08d88c887da5..9c6b2fb79e5ac 100644 --- a/pan_firewall/datadog_checks/pan_firewall/__about__.py +++ b/pan_firewall/datadog_checks/pan_firewall/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2020-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '1.2.0' +__version__ = '2.0.0' diff --git a/pdh_check/CHANGELOG.md b/pdh_check/CHANGELOG.md index 0c42717f1aafd..153077c6e45c1 100644 --- a/pdh_check/CHANGELOG.md +++ b/pdh_check/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.1.0 / 2024-01-05 / Agent 7.51.0 ***Added***: diff --git a/pdh_check/datadog_checks/pdh_check/__about__.py b/pdh_check/datadog_checks/pdh_check/__about__.py index 17d27698b7b85..09adcddf171c4 100644 --- a/pdh_check/datadog_checks/pdh_check/__about__.py +++ b/pdh_check/datadog_checks/pdh_check/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '2.1.0' +__version__ = '3.0.0' diff --git a/pgbouncer/CHANGELOG.md b/pgbouncer/CHANGELOG.md index c0fe253250731..761cba029a047 100644 --- a/pgbouncer/CHANGELOG.md +++ b/pgbouncer/CHANGELOG.md @@ -2,6 +2,12 @@ +## 7.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 6.2.0 / 2024-01-05 / Agent 7.51.0 ***Added***: diff --git a/pgbouncer/datadog_checks/pgbouncer/__about__.py b/pgbouncer/datadog_checks/pgbouncer/__about__.py index e87bde4a20b6d..fa5134955f61c 100644 --- a/pgbouncer/datadog_checks/pgbouncer/__about__.py +++ b/pgbouncer/datadog_checks/pgbouncer/__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__ = "6.2.0" +__version__ = "7.0.0" diff --git a/php_fpm/CHANGELOG.md b/php_fpm/CHANGELOG.md index 8439b00c7f9ca..104c51762e147 100644 --- a/php_fpm/CHANGELOG.md +++ b/php_fpm/CHANGELOG.md @@ -2,6 +2,12 @@ +## 4.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 3.3.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/php_fpm/datadog_checks/php_fpm/__about__.py b/php_fpm/datadog_checks/php_fpm/__about__.py index a3b938c41252f..c25988b9e6d8b 100644 --- a/php_fpm/datadog_checks/php_fpm/__about__.py +++ b/php_fpm/datadog_checks/php_fpm/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '3.3.1' +__version__ = '4.0.0' diff --git a/ping_federate/CHANGELOG.md b/ping_federate/CHANGELOG.md index 39de991edf2ed..7a04adfd22b1b 100644 --- a/ping_federate/CHANGELOG.md +++ b/ping_federate/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.0.0 / 2024-08-09 / Agent 7.57.0 ***Added***: diff --git a/ping_federate/datadog_checks/ping_federate/__about__.py b/ping_federate/datadog_checks/ping_federate/__about__.py index acbfd1c866b84..cc393c1dad9ce 100644 --- a/ping_federate/datadog_checks/ping_federate/__about__.py +++ b/ping_federate/datadog_checks/ping_federate/__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__ = '1.0.0' +__version__ = '2.0.0' diff --git a/postfix/CHANGELOG.md b/postfix/CHANGELOG.md index 6594cc1a1a68e..fe8ff8c87829a 100644 --- a/postfix/CHANGELOG.md +++ b/postfix/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.14.0 / 2024-01-05 / Agent 7.51.0 ***Added***: diff --git a/postfix/datadog_checks/postfix/__about__.py b/postfix/datadog_checks/postfix/__about__.py index 00fd7647e3e9d..0e2ebd5e4631b 100644 --- a/postfix/datadog_checks/postfix/__about__.py +++ b/postfix/datadog_checks/postfix/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '1.14.0' +__version__ = '2.0.0' diff --git a/postgres/CHANGELOG.md b/postgres/CHANGELOG.md index 28095ae9012cc..49ffd073386c3 100644 --- a/postgres/CHANGELOG.md +++ b/postgres/CHANGELOG.md @@ -2,6 +2,12 @@ +## 21.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 20.0.0 / 2024-09-05 ***Changed***: diff --git a/postgres/datadog_checks/postgres/__about__.py b/postgres/datadog_checks/postgres/__about__.py index 60a7edca29985..3e3a2aea9c149 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__ = "20.0.0" +__version__ = "21.0.0" diff --git a/powerdns_recursor/CHANGELOG.md b/powerdns_recursor/CHANGELOG.md index 480424bc9ffd5..d18214510d8cb 100644 --- a/powerdns_recursor/CHANGELOG.md +++ b/powerdns_recursor/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.5.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/powerdns_recursor/datadog_checks/powerdns_recursor/__about__.py b/powerdns_recursor/datadog_checks/powerdns_recursor/__about__.py index 35536e04fb1a9..5778c5423a6b0 100644 --- a/powerdns_recursor/datadog_checks/powerdns_recursor/__about__.py +++ b/powerdns_recursor/datadog_checks/powerdns_recursor/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = "2.5.1" +__version__ = "3.0.0" diff --git a/presto/CHANGELOG.md b/presto/CHANGELOG.md index 496192331f4ea..4e705df3608b8 100644 --- a/presto/CHANGELOG.md +++ b/presto/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.8.0 / 2024-01-05 / Agent 7.51.0 ***Added***: diff --git a/presto/datadog_checks/presto/__about__.py b/presto/datadog_checks/presto/__about__.py index 3ad7cca18a0ee..f046338059ddf 100644 --- a/presto/datadog_checks/presto/__about__.py +++ b/presto/datadog_checks/presto/__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__ = '2.8.0' +__version__ = '3.0.0' diff --git a/process/CHANGELOG.md b/process/CHANGELOG.md index 82c3ba01e0cbb..a4ae9cd77465d 100644 --- a/process/CHANGELOG.md +++ b/process/CHANGELOG.md @@ -2,6 +2,16 @@ +## 4.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + +***Added***: + +* Upgrade psutil to 6.0.0 to fix performance issues addressed ([#18688](https://github.com/DataDog/integrations-core/pull/18688)) + ## 3.5.0 / 2024-09-05 ***Added***: diff --git a/process/changelog.d/18688.added b/process/changelog.d/18688.added deleted file mode 100644 index 30f2555bc26eb..0000000000000 --- a/process/changelog.d/18688.added +++ /dev/null @@ -1 +0,0 @@ -Upgrade psutil to 6.0.0 to fix performance issues addressed \ No newline at end of file diff --git a/process/datadog_checks/process/__about__.py b/process/datadog_checks/process/__about__.py index 9408b91db984c..c25988b9e6d8b 100644 --- a/process/datadog_checks/process/__about__.py +++ b/process/datadog_checks/process/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '3.5.0' +__version__ = '4.0.0' diff --git a/prometheus/CHANGELOG.md b/prometheus/CHANGELOG.md index 078ee30f5d3ef..d819e189ce1ae 100644 --- a/prometheus/CHANGELOG.md +++ b/prometheus/CHANGELOG.md @@ -2,6 +2,12 @@ +## 4.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 3.6.0 / 2024-01-05 / Agent 7.51.0 ***Added***: diff --git a/prometheus/datadog_checks/prometheus/__about__.py b/prometheus/datadog_checks/prometheus/__about__.py index c5e67972722c8..f81a9a356ff96 100644 --- a/prometheus/datadog_checks/prometheus/__about__.py +++ b/prometheus/datadog_checks/prometheus/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = "3.6.0" +__version__ = "4.0.0" diff --git a/proxysql/CHANGELOG.md b/proxysql/CHANGELOG.md index 78aa91647ea05..f5a61072e6cd9 100644 --- a/proxysql/CHANGELOG.md +++ b/proxysql/CHANGELOG.md @@ -2,6 +2,12 @@ +## 6.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 5.1.1 / 2024-06-11 / Agent 7.54.1 ***Fixed***: diff --git a/proxysql/datadog_checks/proxysql/__about__.py b/proxysql/datadog_checks/proxysql/__about__.py index 906f7c0560a28..ebf0b902cce6b 100644 --- a/proxysql/datadog_checks/proxysql/__about__.py +++ b/proxysql/datadog_checks/proxysql/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2020-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '5.1.1' +__version__ = '6.0.0' diff --git a/pulsar/CHANGELOG.md b/pulsar/CHANGELOG.md index 66948396dd25a..38a0979561e25 100644 --- a/pulsar/CHANGELOG.md +++ b/pulsar/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.2.2 / 2024-07-05 / Agent 7.55.0 ***Fixed***: diff --git a/pulsar/datadog_checks/pulsar/__about__.py b/pulsar/datadog_checks/pulsar/__about__.py index faa7c19604967..c1405a3ef0291 100644 --- a/pulsar/datadog_checks/pulsar/__about__.py +++ b/pulsar/datadog_checks/pulsar/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2022-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '2.2.2' +__version__ = '3.0.0' diff --git a/rabbitmq/CHANGELOG.md b/rabbitmq/CHANGELOG.md index 9fbaa8646e4ed..7c79e8b896e43 100644 --- a/rabbitmq/CHANGELOG.md +++ b/rabbitmq/CHANGELOG.md @@ -2,6 +2,12 @@ +## 6.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 5.3.2 / 2024-07-05 / Agent 7.55.0 ***Fixed***: diff --git a/rabbitmq/datadog_checks/rabbitmq/__about__.py b/rabbitmq/datadog_checks/rabbitmq/__about__.py index 27d82e6ca6554..cd0a90de5b070 100644 --- a/rabbitmq/datadog_checks/rabbitmq/__about__.py +++ b/rabbitmq/datadog_checks/rabbitmq/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '5.3.2' +__version__ = '6.0.0' diff --git a/ray/CHANGELOG.md b/ray/CHANGELOG.md index 4b650b6d1d0f5..af8ea9f09f2e1 100644 --- a/ray/CHANGELOG.md +++ b/ray/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.2.2 / 2024-07-05 / Agent 7.55.0 ***Fixed***: diff --git a/ray/datadog_checks/ray/__about__.py b/ray/datadog_checks/ray/__about__.py index cbacb6e2d1ad9..2ce3bcb822978 100644 --- a/ray/datadog_checks/ray/__about__.py +++ b/ray/datadog_checks/ray/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2023-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '1.2.2' +__version__ = '2.0.0' diff --git a/redisdb/CHANGELOG.md b/redisdb/CHANGELOG.md index f2c1c589c6d79..79a4d84bde092 100644 --- a/redisdb/CHANGELOG.md +++ b/redisdb/CHANGELOG.md @@ -2,6 +2,12 @@ +## 6.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 5.7.0 / 2024-08-09 / Agent 7.57.0 ***Added***: diff --git a/redisdb/datadog_checks/redisdb/__about__.py b/redisdb/datadog_checks/redisdb/__about__.py index 48a2f25b54ca0..91262416e46c9 100644 --- a/redisdb/datadog_checks/redisdb/__about__.py +++ b/redisdb/datadog_checks/redisdb/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = "5.7.0" +__version__ = "6.0.0" diff --git a/requirements-agent-release.txt b/requirements-agent-release.txt index e8ebbe8ad06f3..68b6a25e6f5c3 100644 --- a/requirements-agent-release.txt +++ b/requirements-agent-release.txt @@ -1,201 +1,208 @@ # DO NOT PASS THIS TO PIP DIRECTLY # THIS FILE IS AUTO-GENERATED, DO NOT EDIT BY HAND --no-index -datadog-active-directory==2.1.1; sys_platform == 'win32' -datadog-activemq-xml==3.2.1 -datadog-activemq==3.1.0 -datadog-aerospike==2.2.2; sys_platform == 'linux2' -datadog-airflow==5.0.1 -datadog-amazon-msk==4.11.0 -datadog-ambari==4.2.1; sys_platform != 'win32' -datadog-apache==4.5.1 -datadog-arangodb==2.2.2 -datadog-argo-rollouts==1.0.2 -datadog-argo-workflows==1.0.2 -datadog-argocd==2.4.3 -datadog-aspdotnet==2.1.1; sys_platform == 'win32' -datadog-avi-vantage==4.2.2 -datadog-aws-neuron==1.0.0 -datadog-azure-iot-edge==4.2.1 -datadog-boundary==2.2.3 -datadog-btrfs==2.4.0; sys_platform != 'win32' -datadog-cacti==2.1.1; sys_platform == 'linux2' -datadog-calico==2.2.2 -datadog-cassandra-nodetool==1.13.0 -datadog-cassandra==1.18.0 -datadog-ceph==2.10.0; sys_platform != 'win32' -datadog-cert-manager==4.1.2 +datadog-active-directory==3.0.0; sys_platform == 'win32' +datadog-activemq-xml==4.0.0 +datadog-activemq==4.0.0 +datadog-aerospike==3.0.0; sys_platform == 'linux2' +datadog-airflow==6.0.0 +datadog-amazon-msk==5.0.0 +datadog-ambari==5.0.0; sys_platform != 'win32' +datadog-apache==5.0.0 +datadog-arangodb==3.0.0 +datadog-argo-rollouts==2.0.0 +datadog-argo-workflows==2.0.0 +datadog-argocd==3.0.0 +datadog-aspdotnet==3.0.0; sys_platform == 'win32' +datadog-avi-vantage==5.0.0 +datadog-aws-neuron==2.0.0 +datadog-azure-iot-edge==5.0.0 +datadog-boundary==3.0.0 +datadog-btrfs==3.0.0; sys_platform != 'win32' +datadog-cacti==3.0.0; sys_platform == 'linux2' +datadog-calico==3.0.0 +datadog-cassandra-nodetool==2.0.0 +datadog-cassandra==2.0.0 +datadog-ceph==3.0.0; sys_platform != 'win32' +datadog-cert-manager==5.0.0 datadog-checkpoint-quantum-firewall==1.0.0 datadog-checks-base==37.0.0 +<<<<<<< HEAD datadog-checks-dependency-provider==1.4.0 datadog-checks-downloader==4.7.0 datadog-cilium==3.6.0 datadog-cisco-aci==2.12.0 +======= +datadog-checks-dependency-provider==2.0.0 +datadog-checks-downloader==5.0.0 +datadog-cilium==4.0.0 +datadog-cisco-aci==3.0.0 +>>>>>>> 28237f7b86 ([Release] Release integrations with base check bump `v7.58` (#18742)) datadog-cisco-secure-firewall==1.0.0 -datadog-citrix-hypervisor==3.2.1 -datadog-clickhouse==3.7.0 -datadog-cloud-foundry-api==3.3.1 -datadog-cloudera==2.2.0 -datadog-cockroachdb==3.3.2 -datadog-confluent-platform==1.10.2 -datadog-consul==2.6.1 -datadog-coredns==3.2.3; sys_platform == 'linux2' -datadog-couch==6.2.1 -datadog-couchbase==3.2.1 -datadog-crio==2.6.1 -datadog-datadog-cluster-agent==3.2.0 -datadog-dcgm==2.3.2 -datadog-directory==2.1.1 -datadog-disk==5.4.0 -datadog-dns-check==3.3.0 -datadog-dotnetclr==2.1.1; sys_platform == 'win32' -datadog-druid==2.5.1 -datadog-ecs-fargate==4.3.1 -datadog-eks-fargate==4.2.1 -datadog-elastic==6.3.1 -datadog-envoy==3.6.0 -datadog-esxi==1.2.0 -datadog-etcd==6.2.2 -datadog-exchange-server==2.1.1; sys_platform == 'win32' -datadog-external-dns==3.2.1 -datadog-flink==1.5.0 -datadog-fluentd==3.2.1 -datadog-fluxcd==1.2.2 -datadog-fly-io==1.0.1 -datadog-foundationdb==1.4.0 -datadog-gearmand==3.1.0; sys_platform != 'win32' -datadog-gitlab-runner==4.2.1 -datadog-gitlab==7.3.2 -datadog-glusterfs==1.8.0; sys_platform == 'linux2' -datadog-go-expvar==2.5.1 -datadog-gunicorn==2.8.0; sys_platform != 'win32' -datadog-haproxy==5.2.2 -datadog-harbor==3.2.2 -datadog-hazelcast==4.1.0 -datadog-hdfs-datanode==4.2.1; sys_platform != 'win32' -datadog-hdfs-namenode==4.2.1; sys_platform != 'win32' -datadog-hive==1.10.0 -datadog-hivemq==1.8.0 -datadog-http-check==9.9.0 -datadog-hudi==2.3.0 -datadog-hyperv==1.11.1; sys_platform == 'win32' -datadog-ibm-ace==2.2.2 -datadog-ibm-db2==2.2.0 -datadog-ibm-i==2.2.0; sys_platform != 'win32' -datadog-ibm-mq==6.4.0 -datadog-ibm-was==3.3.2 -datadog-ignite==2.4.0 -datadog-iis==3.1.1; sys_platform == 'win32' -datadog-impala==2.2.2 -datadog-istio==6.1.2 -datadog-jboss-wildfly==2.2.0 -datadog-journald==1.2.0 -datadog-kafka-consumer==4.6.1 -datadog-kafka==2.16.0 -datadog-karpenter==1.6.0 -datadog-kong==3.2.2 -datadog-kube-apiserver-metrics==4.3.1 -datadog-kube-controller-manager==5.1.1 -datadog-kube-dns==4.4.1 -datadog-kube-metrics-server==3.3.1 -datadog-kube-proxy==6.3.1 -datadog-kube-scheduler==4.10.1 -datadog-kubelet==7.13.2 -datadog-kubernetes-cluster-autoscaler==1.0.1 -datadog-kubernetes-state==8.1.1 -datadog-kyototycoon==2.5.1 -datadog-kyverno==1.0.2 -datadog-lighttpd==3.5.1 -datadog-linkerd==4.2.2 -datadog-linux-proc-extras==2.5.0; sys_platform == 'linux2' -datadog-mapr==1.11.0; sys_platform == 'linux2' -datadog-mapreduce==4.2.1 -datadog-marathon==2.3.1; sys_platform != 'win32' -datadog-marklogic==4.2.1 -datadog-mcache==4.1.0; sys_platform != 'win32' -datadog-mesos-master==3.3.1; sys_platform != 'win32' -datadog-mesos-slave==3.3.1; sys_platform != 'win32' -datadog-mongo==6.11.0 -datadog-mysql==12.8.0 -datadog-nagios==1.13.0 -datadog-network==3.4.0 -datadog-nfsstat==1.13.0; sys_platform == 'linux2' -datadog-nginx-ingress-controller==2.6.1 -datadog-nginx==6.3.1 -datadog-nvidia-triton==1.2.2 -datadog-openldap==1.12.0 -datadog-openmetrics==4.2.2 -datadog-openstack-controller==6.9.0 -datadog-openstack==2.0.0 -datadog-oracle==5.2.0 -datadog-ossec-security==1.0.0 +datadog-citrix-hypervisor==4.0.0 +datadog-clickhouse==4.0.0 +datadog-cloud-foundry-api==4.0.0 +datadog-cloudera==3.0.0 +datadog-cockroachdb==4.0.0 +datadog-confluent-platform==2.0.0 +datadog-consul==3.0.0 +datadog-coredns==4.0.0; sys_platform == 'linux2' +datadog-couch==7.0.0 +datadog-couchbase==4.0.0 +datadog-crio==3.0.0 +datadog-datadog-cluster-agent==4.0.0 +datadog-dcgm==3.0.0 +datadog-directory==3.0.0 +datadog-disk==6.0.0 +datadog-dns-check==4.0.0 +datadog-dotnetclr==3.0.0; sys_platform == 'win32' +datadog-druid==3.0.0 +datadog-ecs-fargate==5.0.0 +datadog-eks-fargate==5.0.0 +datadog-elastic==7.0.0 +datadog-envoy==4.0.0 +datadog-esxi==2.0.0 +datadog-etcd==7.0.0 +datadog-exchange-server==3.0.0; sys_platform == 'win32' +datadog-external-dns==4.0.0 +datadog-flink==2.0.0 +datadog-fluentd==4.0.0 +datadog-fluxcd==2.0.0 +datadog-fly-io==2.0.0 +datadog-foundationdb==2.0.0 +datadog-gearmand==4.0.0; sys_platform != 'win32' +datadog-gitlab-runner==5.0.0 +datadog-gitlab==8.0.0 +datadog-glusterfs==2.0.0; sys_platform == 'linux2' +datadog-go-expvar==3.0.0 +datadog-gunicorn==3.0.0; sys_platform != 'win32' +datadog-haproxy==6.0.0 +datadog-harbor==4.0.0 +datadog-hazelcast==5.0.0 +datadog-hdfs-datanode==5.0.0; sys_platform != 'win32' +datadog-hdfs-namenode==5.0.0; sys_platform != 'win32' +datadog-hive==2.0.0 +datadog-hivemq==2.0.0 +datadog-http-check==10.0.0 +datadog-hudi==3.0.0 +datadog-hyperv==2.0.0; sys_platform == 'win32' +datadog-ibm-ace==3.0.0 +datadog-ibm-db2==3.0.0 +datadog-ibm-i==3.0.0; sys_platform != 'win32' +datadog-ibm-mq==7.0.0 +datadog-ibm-was==4.0.0 +datadog-ignite==3.0.0 +datadog-iis==4.0.0; sys_platform == 'win32' +datadog-impala==3.0.0 +datadog-istio==7.0.0 +datadog-jboss-wildfly==3.0.0 +datadog-journald==2.0.0 +datadog-kafka-consumer==5.0.0 +datadog-kafka==3.0.0 +datadog-karpenter==2.0.0 +datadog-kong==4.0.0 +datadog-kube-apiserver-metrics==5.0.0 +datadog-kube-controller-manager==6.0.0 +datadog-kube-dns==5.0.0 +datadog-kube-metrics-server==4.0.0 +datadog-kube-proxy==7.0.0 +datadog-kube-scheduler==5.0.0 +datadog-kubelet==8.0.0 +datadog-kubernetes-cluster-autoscaler==2.0.0 +datadog-kubernetes-state==9.0.0 +datadog-kyototycoon==3.0.0 +datadog-kyverno==2.0.0 +datadog-lighttpd==4.0.0 +datadog-linkerd==5.0.0 +datadog-linux-proc-extras==3.0.0; sys_platform == 'linux2' +datadog-mapr==2.0.0; sys_platform == 'linux2' +datadog-mapreduce==5.0.0 +datadog-marathon==3.0.0; sys_platform != 'win32' +datadog-marklogic==5.0.0 +datadog-mcache==5.0.0; sys_platform != 'win32' +datadog-mesos-master==4.0.0; sys_platform != 'win32' +datadog-mesos-slave==4.0.0; sys_platform != 'win32' +datadog-mongo==7.0.0 +datadog-mysql==13.0.0 +datadog-nagios==2.0.0 +datadog-network==4.0.0 +datadog-nfsstat==2.0.0; sys_platform == 'linux2' +datadog-nginx-ingress-controller==3.0.0 +datadog-nginx==7.0.0 +datadog-nvidia-triton==2.0.0 +datadog-openldap==2.0.0 +datadog-openmetrics==5.0.0 +datadog-openstack-controller==7.0.0 +datadog-openstack==3.0.0 +datadog-oracle==6.0.0 +datadog-ossec-security==2.0.0 datadog-palo-alto-panorama==1.0.0 -datadog-pan-firewall==1.2.0 -datadog-pdh-check==2.1.0; sys_platform == 'win32' -datadog-pgbouncer==6.2.0; sys_platform != 'win32' -datadog-php-fpm==3.3.1 -datadog-ping-federate==1.0.0 -datadog-postfix==1.14.0; sys_platform != 'win32' -datadog-postgres==20.0.0 -datadog-powerdns-recursor==2.5.1 -datadog-presto==2.8.0 -datadog-process==3.5.0 -datadog-prometheus==3.6.0 -datadog-proxysql==5.1.1 -datadog-pulsar==2.2.2 -datadog-rabbitmq==5.3.2 -datadog-ray==1.2.2 -datadog-redisdb==5.7.0 -datadog-rethinkdb==3.1.0 -datadog-riak==3.5.1 -datadog-riakcs==2.12.0 -datadog-sap-hana==3.3.0 -datadog-scylla==2.7.2 -datadog-sidekiq==1.4.0 -datadog-silk==2.2.1 -datadog-singlestore==2.2.1 -datadog-snmp==7.5.0 -datadog-snowflake==5.9.0 -datadog-solr==1.13.0 -datadog-sonarqube==3.2.2 -datadog-spark==4.3.1 -datadog-sqlserver==17.5.3 -datadog-squid==2.5.1 -datadog-ssh-check==2.10.0 -datadog-statsd==1.12.0 -datadog-strimzi==2.2.2 -datadog-supervisord==2.6.0 -datadog-suricata==1.0.0 -datadog-system-core==2.5.0 -datadog-system-swap==1.19.0 -datadog-tcp-check==4.9.0 -datadog-teamcity==4.3.1 -datadog-tekton==1.0.2 -datadog-teleport==1.1.0 -datadog-temporal==2.3.0 -datadog-tenable==1.5.0 -datadog-teradata==2.2.1; sys_platform != 'darwin' -datadog-tibco-ems==1.0.0 -datadog-tls==2.20.0 +datadog-pan-firewall==2.0.0 +datadog-pdh-check==3.0.0; sys_platform == 'win32' +datadog-pgbouncer==7.0.0; sys_platform != 'win32' +datadog-php-fpm==4.0.0 +datadog-ping-federate==2.0.0 +datadog-postfix==2.0.0; sys_platform != 'win32' +datadog-postgres==21.0.0 +datadog-powerdns-recursor==3.0.0 +datadog-presto==3.0.0 +datadog-process==4.0.0 +datadog-prometheus==4.0.0 +datadog-proxysql==6.0.0 +datadog-pulsar==3.0.0 +datadog-rabbitmq==6.0.0 +datadog-ray==2.0.0 +datadog-redisdb==6.0.0 +datadog-rethinkdb==4.0.0 +datadog-riak==4.0.0 +datadog-riakcs==3.0.0 +datadog-sap-hana==4.0.0 +datadog-scylla==3.0.0 +datadog-sidekiq==2.0.0 +datadog-silk==3.0.0 +datadog-singlestore==3.0.0 +datadog-snmp==8.0.0 +datadog-snowflake==6.0.0 +datadog-solr==2.0.0 +datadog-sonarqube==4.0.0 +datadog-spark==5.0.0 +datadog-sqlserver==18.0.0 +datadog-squid==3.0.0 +datadog-ssh-check==3.0.0 +datadog-statsd==2.0.0 +datadog-strimzi==3.0.0 +datadog-supervisord==3.0.0 +datadog-suricata==2.0.0 +datadog-system-core==3.0.0 +datadog-system-swap==2.0.0 +datadog-tcp-check==5.0.0 +datadog-teamcity==5.0.0 +datadog-tekton==2.0.0 +datadog-teleport==2.0.0 +datadog-temporal==3.0.0 +datadog-tenable==2.0.0 +datadog-teradata==3.0.0; sys_platform != 'darwin' +datadog-tibco-ems==2.0.0 +datadog-tls==3.0.0 datadog-tokumx==3.2.0 -datadog-tomcat==2.0.0 -datadog-torchserve==2.2.2 -datadog-traefik-mesh==1.0.1 -datadog-traffic-server==2.2.1 -datadog-twemproxy==1.15.0 -datadog-twistlock==3.6.1 -datadog-varnish==2.1.0 -datadog-vault==4.2.1 -datadog-vertica==4.6.0 -datadog-vllm==1.0.0 -datadog-voltdb==3.2.1 +datadog-tomcat==3.0.0 +datadog-torchserve==3.0.0 +datadog-traefik-mesh==2.0.0 +datadog-traffic-server==3.0.0 +datadog-twemproxy==2.0.0 +datadog-twistlock==4.0.0 +datadog-varnish==3.0.0 +datadog-vault==5.0.0 +datadog-vertica==5.0.0 +datadog-vllm==2.0.0 +datadog-voltdb==4.0.0 datadog-vsphere==8.0.0 -datadog-weaviate==2.3.3 -datadog-weblogic==1.3.0 -datadog-win32-event-log==3.3.0; sys_platform == 'win32' -datadog-windows-performance-counters==2.1.1; sys_platform == 'win32' -datadog-windows-service==4.9.1; sys_platform == 'win32' -datadog-wmi-check==1.18.0; sys_platform == 'win32' -datadog-yarn==5.3.1 +datadog-weaviate==3.0.0 +datadog-weblogic==2.0.0 +datadog-win32-event-log==4.0.0; sys_platform == 'win32' +datadog-windows-performance-counters==3.0.0; sys_platform == 'win32' +datadog-windows-service==5.0.0; sys_platform == 'win32' +datadog-wmi-check==2.0.0; sys_platform == 'win32' +datadog-yarn==6.0.0 datadog-zeek==1.0.0; sys_platform != 'win32' -datadog-zk==4.5.0; sys_platform != 'win32' +datadog-zk==5.0.0; sys_platform != 'win32' diff --git a/rethinkdb/CHANGELOG.md b/rethinkdb/CHANGELOG.md index 2aa54e46a10b6..cef9e6a1f3525 100644 --- a/rethinkdb/CHANGELOG.md +++ b/rethinkdb/CHANGELOG.md @@ -2,6 +2,16 @@ +## 4.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + +***Added***: + +* Bump RethinkDB version for py3.12 E2E tests ([#18636](https://github.com/DataDog/integrations-core/pull/18636)) + ## 3.1.0 / 2024-01-05 / Agent 7.51.0 ***Added***: diff --git a/rethinkdb/changelog.d/18636.added b/rethinkdb/changelog.d/18636.added deleted file mode 100644 index 3499902d53938..0000000000000 --- a/rethinkdb/changelog.d/18636.added +++ /dev/null @@ -1 +0,0 @@ -Bump RethinkDB version for py3.12 E2E tests \ No newline at end of file diff --git a/rethinkdb/datadog_checks/rethinkdb/__about__.py b/rethinkdb/datadog_checks/rethinkdb/__about__.py index 083108faeecf1..bcf02753eab69 100644 --- a/rethinkdb/datadog_checks/rethinkdb/__about__.py +++ b/rethinkdb/datadog_checks/rethinkdb/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2020-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '3.1.0' +__version__ = '4.0.0' diff --git a/riak/CHANGELOG.md b/riak/CHANGELOG.md index fd386528723f1..d764208c5bc24 100644 --- a/riak/CHANGELOG.md +++ b/riak/CHANGELOG.md @@ -2,6 +2,12 @@ +## 4.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 3.5.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/riak/datadog_checks/riak/__about__.py b/riak/datadog_checks/riak/__about__.py index 5502f359afa10..f81a9a356ff96 100644 --- a/riak/datadog_checks/riak/__about__.py +++ b/riak/datadog_checks/riak/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = "3.5.1" +__version__ = "4.0.0" diff --git a/riakcs/CHANGELOG.md b/riakcs/CHANGELOG.md index 300abfd44baf6..22fc2429d134d 100644 --- a/riakcs/CHANGELOG.md +++ b/riakcs/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.12.0 / 2024-09-05 ***Added***: diff --git a/riakcs/datadog_checks/riakcs/__about__.py b/riakcs/datadog_checks/riakcs/__about__.py index d212bc6c961db..09adcddf171c4 100644 --- a/riakcs/datadog_checks/riakcs/__about__.py +++ b/riakcs/datadog_checks/riakcs/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '2.12.0' +__version__ = '3.0.0' diff --git a/sap_hana/CHANGELOG.md b/sap_hana/CHANGELOG.md index 1c2851f610339..551587c8027c8 100644 --- a/sap_hana/CHANGELOG.md +++ b/sap_hana/CHANGELOG.md @@ -2,6 +2,12 @@ +## 4.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 3.3.0 / 2024-08-09 / Agent 7.57.0 ***Added***: diff --git a/sap_hana/datadog_checks/sap_hana/__about__.py b/sap_hana/datadog_checks/sap_hana/__about__.py index bfa215d238feb..78967d676d1af 100644 --- a/sap_hana/datadog_checks/sap_hana/__about__.py +++ b/sap_hana/datadog_checks/sap_hana/__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__ = '3.3.0' +__version__ = '4.0.0' diff --git a/scylla/CHANGELOG.md b/scylla/CHANGELOG.md index 8dd77f2ac4b39..4812215dbe90a 100644 --- a/scylla/CHANGELOG.md +++ b/scylla/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.7.2 / 2024-07-05 / Agent 7.55.0 ***Fixed***: diff --git a/scylla/datadog_checks/scylla/__about__.py b/scylla/datadog_checks/scylla/__about__.py index 21cf55e8337bb..32b388c31505f 100644 --- a/scylla/datadog_checks/scylla/__about__.py +++ b/scylla/datadog_checks/scylla/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2020-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '2.7.2' +__version__ = '3.0.0' diff --git a/sidekiq/CHANGELOG.md b/sidekiq/CHANGELOG.md index 89fe792f55bc3..4e51bf27d94cb 100644 --- a/sidekiq/CHANGELOG.md +++ b/sidekiq/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.4.0 / 2024-01-05 / Agent 7.51.0 ***Added***: diff --git a/sidekiq/datadog_checks/sidekiq/__about__.py b/sidekiq/datadog_checks/sidekiq/__about__.py index c0bf4eb0af9da..9c6b2fb79e5ac 100644 --- a/sidekiq/datadog_checks/sidekiq/__about__.py +++ b/sidekiq/datadog_checks/sidekiq/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2020-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '1.4.0' +__version__ = '2.0.0' diff --git a/silk/CHANGELOG.md b/silk/CHANGELOG.md index 4a87d743b5103..9e5962769225c 100644 --- a/silk/CHANGELOG.md +++ b/silk/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.2.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/silk/datadog_checks/silk/__about__.py b/silk/datadog_checks/silk/__about__.py index 8a1662f86cd77..0791a0b0a54f2 100644 --- a/silk/datadog_checks/silk/__about__.py +++ b/silk/datadog_checks/silk/__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__ = '2.2.1' +__version__ = '3.0.0' diff --git a/singlestore/CHANGELOG.md b/singlestore/CHANGELOG.md index f15532c21d3aa..25e5198b2f99e 100644 --- a/singlestore/CHANGELOG.md +++ b/singlestore/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.2.1 / 2024-06-11 / Agent 7.54.1 ***Fixed***: diff --git a/singlestore/datadog_checks/singlestore/__about__.py b/singlestore/datadog_checks/singlestore/__about__.py index 8a1662f86cd77..0791a0b0a54f2 100644 --- a/singlestore/datadog_checks/singlestore/__about__.py +++ b/singlestore/datadog_checks/singlestore/__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__ = '2.2.1' +__version__ = '3.0.0' diff --git a/snmp/CHANGELOG.md b/snmp/CHANGELOG.md index fbf19417e6824..68ceaf2c3bbf5 100644 --- a/snmp/CHANGELOG.md +++ b/snmp/CHANGELOG.md @@ -2,6 +2,12 @@ +## 8.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 7.5.0 / 2024-09-05 ***Added***: diff --git a/snmp/datadog_checks/snmp/__about__.py b/snmp/datadog_checks/snmp/__about__.py index b2fc24b1d9d33..9025559f4a9cf 100644 --- a/snmp/datadog_checks/snmp/__about__.py +++ b/snmp/datadog_checks/snmp/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '7.5.0' +__version__ = '8.0.0' diff --git a/snowflake/CHANGELOG.md b/snowflake/CHANGELOG.md index 71aa06f978e6e..c9ab549691f28 100644 --- a/snowflake/CHANGELOG.md +++ b/snowflake/CHANGELOG.md @@ -2,6 +2,12 @@ +## 6.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 5.9.0 / 2024-09-05 ***Added***: diff --git a/snowflake/datadog_checks/snowflake/__about__.py b/snowflake/datadog_checks/snowflake/__about__.py index 2bae8e50158e7..ebf0b902cce6b 100644 --- a/snowflake/datadog_checks/snowflake/__about__.py +++ b/snowflake/datadog_checks/snowflake/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2020-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '5.9.0' +__version__ = '6.0.0' diff --git a/solr/CHANGELOG.md b/solr/CHANGELOG.md index 057a63f25512d..0a0b2616eb764 100644 --- a/solr/CHANGELOG.md +++ b/solr/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.13.0 / 2024-01-05 / Agent 7.51.0 ***Added***: diff --git a/solr/datadog_checks/solr/__about__.py b/solr/datadog_checks/solr/__about__.py index 9277530c51434..0e2ebd5e4631b 100644 --- a/solr/datadog_checks/solr/__about__.py +++ b/solr/datadog_checks/solr/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '1.13.0' +__version__ = '2.0.0' diff --git a/sonarqube/CHANGELOG.md b/sonarqube/CHANGELOG.md index 2fc91bf9d2da2..449131b08fdbc 100644 --- a/sonarqube/CHANGELOG.md +++ b/sonarqube/CHANGELOG.md @@ -2,6 +2,12 @@ +## 4.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 3.2.2 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/sonarqube/datadog_checks/sonarqube/__about__.py b/sonarqube/datadog_checks/sonarqube/__about__.py index 1716c81d4fcba..bcf02753eab69 100644 --- a/sonarqube/datadog_checks/sonarqube/__about__.py +++ b/sonarqube/datadog_checks/sonarqube/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2020-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '3.2.2' +__version__ = '4.0.0' diff --git a/spark/CHANGELOG.md b/spark/CHANGELOG.md index 21b72babd766e..3d16287a547fc 100644 --- a/spark/CHANGELOG.md +++ b/spark/CHANGELOG.md @@ -2,6 +2,12 @@ +## 5.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 4.3.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/spark/datadog_checks/spark/__about__.py b/spark/datadog_checks/spark/__about__.py index 47897f7ba8b0a..d2601db5d5cc0 100644 --- a/spark/datadog_checks/spark/__about__.py +++ b/spark/datadog_checks/spark/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '4.3.1' +__version__ = '5.0.0' diff --git a/sqlserver/CHANGELOG.md b/sqlserver/CHANGELOG.md index f47c2f59107a9..d7f4963d6d1e7 100644 --- a/sqlserver/CHANGELOG.md +++ b/sqlserver/CHANGELOG.md @@ -2,6 +2,20 @@ +## 18.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + +***Added***: + +* Bump lxml version for py3.12 E2E tests ([#18637](https://github.com/DataDog/integrations-core/pull/18637)) + +***Fixed***: + +* Fix ODBC config handling for Linux ([#18586](https://github.com/DataDog/integrations-core/pull/18586)) + ## 17.5.3 / 2024-09-17 ***Fixed***: diff --git a/sqlserver/changelog.d/18637.added b/sqlserver/changelog.d/18637.added deleted file mode 100644 index 03c3e7d117eb1..0000000000000 --- a/sqlserver/changelog.d/18637.added +++ /dev/null @@ -1 +0,0 @@ -Bump lxml version for py3.12 E2E tests \ No newline at end of file diff --git a/sqlserver/datadog_checks/sqlserver/__about__.py b/sqlserver/datadog_checks/sqlserver/__about__.py index 76ae2e29005a6..9d0e9dd3780f5 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__ = '17.5.3' +__version__ = '18.0.0' diff --git a/squid/CHANGELOG.md b/squid/CHANGELOG.md index 58787027a933b..bb5c5e0f7be38 100644 --- a/squid/CHANGELOG.md +++ b/squid/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.5.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/squid/datadog_checks/squid/__about__.py b/squid/datadog_checks/squid/__about__.py index 35536e04fb1a9..5778c5423a6b0 100644 --- a/squid/datadog_checks/squid/__about__.py +++ b/squid/datadog_checks/squid/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = "2.5.1" +__version__ = "3.0.0" diff --git a/ssh_check/CHANGELOG.md b/ssh_check/CHANGELOG.md index de46becb38377..c8cb2f35b21c5 100644 --- a/ssh_check/CHANGELOG.md +++ b/ssh_check/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.10.0 / 2024-09-05 ***Added***: diff --git a/ssh_check/datadog_checks/ssh_check/__about__.py b/ssh_check/datadog_checks/ssh_check/__about__.py index ea704491b659b..09adcddf171c4 100644 --- a/ssh_check/datadog_checks/ssh_check/__about__.py +++ b/ssh_check/datadog_checks/ssh_check/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '2.10.0' +__version__ = '3.0.0' diff --git a/statsd/CHANGELOG.md b/statsd/CHANGELOG.md index 7d84bf5256f72..4954489342b85 100644 --- a/statsd/CHANGELOG.md +++ b/statsd/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.12.0 / 2024-01-05 / Agent 7.51.0 ***Added***: diff --git a/statsd/datadog_checks/statsd/__about__.py b/statsd/datadog_checks/statsd/__about__.py index 0bcccfd8cfe20..0e2ebd5e4631b 100644 --- a/statsd/datadog_checks/statsd/__about__.py +++ b/statsd/datadog_checks/statsd/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '1.12.0' +__version__ = '2.0.0' diff --git a/strimzi/CHANGELOG.md b/strimzi/CHANGELOG.md index b59c5e81623fc..e13de5a62174e 100644 --- a/strimzi/CHANGELOG.md +++ b/strimzi/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.2.2 / 2024-07-05 / Agent 7.55.0 ***Fixed***: diff --git a/strimzi/datadog_checks/strimzi/__about__.py b/strimzi/datadog_checks/strimzi/__about__.py index d952686b44b52..9d7317788718b 100644 --- a/strimzi/datadog_checks/strimzi/__about__.py +++ b/strimzi/datadog_checks/strimzi/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2023-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '2.2.2' +__version__ = '3.0.0' diff --git a/supervisord/CHANGELOG.md b/supervisord/CHANGELOG.md index e660d59ec4629..630815c3b0b0c 100644 --- a/supervisord/CHANGELOG.md +++ b/supervisord/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.6.0 / 2024-01-05 / Agent 7.51.0 ***Added***: diff --git a/supervisord/datadog_checks/supervisord/__about__.py b/supervisord/datadog_checks/supervisord/__about__.py index c67fa5db0dff4..09adcddf171c4 100644 --- a/supervisord/datadog_checks/supervisord/__about__.py +++ b/supervisord/datadog_checks/supervisord/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '2.6.0' +__version__ = '3.0.0' diff --git a/suricata/CHANGELOG.md b/suricata/CHANGELOG.md index 90e1f8cd7e3bf..f0d97588867bd 100644 --- a/suricata/CHANGELOG.md +++ b/suricata/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.0.0 / 2024-08-09 / Agent 7.57.0 ***Added***: diff --git a/suricata/datadog_checks/suricata/__about__.py b/suricata/datadog_checks/suricata/__about__.py index acbfd1c866b84..cc393c1dad9ce 100644 --- a/suricata/datadog_checks/suricata/__about__.py +++ b/suricata/datadog_checks/suricata/__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__ = '1.0.0' +__version__ = '2.0.0' diff --git a/system_core/CHANGELOG.md b/system_core/CHANGELOG.md index e89b094a4c550..62f33e7b67049 100644 --- a/system_core/CHANGELOG.md +++ b/system_core/CHANGELOG.md @@ -2,6 +2,16 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + +***Added***: + +* Upgrade psutil to 6.0.0 to fix performance issues addressed ([#18688](https://github.com/DataDog/integrations-core/pull/18688)) + ## 2.5.0 / 2024-09-05 ***Added***: diff --git a/system_core/changelog.d/18688.added b/system_core/changelog.d/18688.added deleted file mode 100644 index 30f2555bc26eb..0000000000000 --- a/system_core/changelog.d/18688.added +++ /dev/null @@ -1 +0,0 @@ -Upgrade psutil to 6.0.0 to fix performance issues addressed \ No newline at end of file diff --git a/system_core/datadog_checks/system_core/__about__.py b/system_core/datadog_checks/system_core/__about__.py index 72639401021d6..09adcddf171c4 100644 --- a/system_core/datadog_checks/system_core/__about__.py +++ b/system_core/datadog_checks/system_core/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '2.5.0' +__version__ = '3.0.0' diff --git a/system_swap/CHANGELOG.md b/system_swap/CHANGELOG.md index aa1cbda62acad..9a5b7417436e0 100644 --- a/system_swap/CHANGELOG.md +++ b/system_swap/CHANGELOG.md @@ -2,6 +2,16 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + +***Added***: + +* Upgrade psutil to 6.0.0 to fix performance issues addressed ([#18688](https://github.com/DataDog/integrations-core/pull/18688)) + ## 1.19.0 / 2024-09-05 ***Added***: diff --git a/system_swap/changelog.d/18688.added b/system_swap/changelog.d/18688.added deleted file mode 100644 index 30f2555bc26eb..0000000000000 --- a/system_swap/changelog.d/18688.added +++ /dev/null @@ -1 +0,0 @@ -Upgrade psutil to 6.0.0 to fix performance issues addressed \ No newline at end of file diff --git a/system_swap/datadog_checks/system_swap/__about__.py b/system_swap/datadog_checks/system_swap/__about__.py index 020465cf74402..0e2ebd5e4631b 100644 --- a/system_swap/datadog_checks/system_swap/__about__.py +++ b/system_swap/datadog_checks/system_swap/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '1.19.0' +__version__ = '2.0.0' diff --git a/tcp_check/CHANGELOG.md b/tcp_check/CHANGELOG.md index cc48bc655f151..743ce2fdc010a 100644 --- a/tcp_check/CHANGELOG.md +++ b/tcp_check/CHANGELOG.md @@ -2,6 +2,12 @@ +## 5.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 4.9.0 / 2024-07-05 / Agent 7.56.0 ***Added***: diff --git a/tcp_check/datadog_checks/tcp_check/__about__.py b/tcp_check/datadog_checks/tcp_check/__about__.py index f829dc1b86763..d2601db5d5cc0 100644 --- a/tcp_check/datadog_checks/tcp_check/__about__.py +++ b/tcp_check/datadog_checks/tcp_check/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '4.9.0' +__version__ = '5.0.0' diff --git a/teamcity/CHANGELOG.md b/teamcity/CHANGELOG.md index d3ea52bf356e1..c0db9039959d1 100644 --- a/teamcity/CHANGELOG.md +++ b/teamcity/CHANGELOG.md @@ -2,6 +2,12 @@ +## 5.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 4.3.1 / 2024-08-09 / Agent 7.57.0 ***Fixed***: diff --git a/teamcity/datadog_checks/teamcity/__about__.py b/teamcity/datadog_checks/teamcity/__about__.py index 7439f0ab6e555..b033d7b5bb770 100644 --- a/teamcity/datadog_checks/teamcity/__about__.py +++ b/teamcity/datadog_checks/teamcity/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = "4.3.1" +__version__ = "5.0.0" diff --git a/tekton/CHANGELOG.md b/tekton/CHANGELOG.md index 0a4bf7722a6b3..05753438b226a 100644 --- a/tekton/CHANGELOG.md +++ b/tekton/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.0.2 / 2024-07-05 / Agent 7.55.0 ***Fixed***: diff --git a/tekton/datadog_checks/tekton/__about__.py b/tekton/datadog_checks/tekton/__about__.py index 1436e0ab91c45..cc393c1dad9ce 100644 --- a/tekton/datadog_checks/tekton/__about__.py +++ b/tekton/datadog_checks/tekton/__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__ = '1.0.2' +__version__ = '2.0.0' diff --git a/teleport/CHANGELOG.md b/teleport/CHANGELOG.md index 7147435656fd8..b1545140369a3 100644 --- a/teleport/CHANGELOG.md +++ b/teleport/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.1.0 / 2024-09-05 ***Added***: diff --git a/teleport/datadog_checks/teleport/__about__.py b/teleport/datadog_checks/teleport/__about__.py index 3107e4c7e8bc8..cc393c1dad9ce 100644 --- a/teleport/datadog_checks/teleport/__about__.py +++ b/teleport/datadog_checks/teleport/__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__ = '1.1.0' +__version__ = '2.0.0' diff --git a/temporal/CHANGELOG.md b/temporal/CHANGELOG.md index a6c513067e1ca..be46bf6ad22fb 100644 --- a/temporal/CHANGELOG.md +++ b/temporal/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.3.0 / 2024-08-09 / Agent 7.57.0 ***Added***: diff --git a/temporal/datadog_checks/temporal/__about__.py b/temporal/datadog_checks/temporal/__about__.py index 9d6d3767f6982..9d7317788718b 100644 --- a/temporal/datadog_checks/temporal/__about__.py +++ b/temporal/datadog_checks/temporal/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2023-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '2.3.0' +__version__ = '3.0.0' diff --git a/tenable/CHANGELOG.md b/tenable/CHANGELOG.md index 17e0b690f48b8..bbaeb12bdbef8 100644 --- a/tenable/CHANGELOG.md +++ b/tenable/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.5.0 / 2024-01-05 / Agent 7.51.0 ***Added***: diff --git a/tenable/datadog_checks/tenable/__about__.py b/tenable/datadog_checks/tenable/__about__.py index c91765ea0dd55..9c6b2fb79e5ac 100644 --- a/tenable/datadog_checks/tenable/__about__.py +++ b/tenable/datadog_checks/tenable/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2020-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '1.5.0' +__version__ = '2.0.0' diff --git a/teradata/CHANGELOG.md b/teradata/CHANGELOG.md index de8c8fa9c2dc6..c8dfa0195ce94 100644 --- a/teradata/CHANGELOG.md +++ b/teradata/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.2.1 / 2024-07-05 / Agent 7.55.0 ***Fixed***: diff --git a/teradata/datadog_checks/teradata/__about__.py b/teradata/datadog_checks/teradata/__about__.py index ba014f7154f24..c1405a3ef0291 100644 --- a/teradata/datadog_checks/teradata/__about__.py +++ b/teradata/datadog_checks/teradata/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2022-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '2.2.1' +__version__ = '3.0.0' diff --git a/tibco_ems/CHANGELOG.md b/tibco_ems/CHANGELOG.md index ceb88502d3d17..7fe45fbb57425 100644 --- a/tibco_ems/CHANGELOG.md +++ b/tibco_ems/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.0.0 / 2024-08-09 / Agent 7.57.0 ***Added***: diff --git a/tibco_ems/datadog_checks/tibco_ems/__about__.py b/tibco_ems/datadog_checks/tibco_ems/__about__.py index acbfd1c866b84..cc393c1dad9ce 100644 --- a/tibco_ems/datadog_checks/tibco_ems/__about__.py +++ b/tibco_ems/datadog_checks/tibco_ems/__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__ = '1.0.0' +__version__ = '2.0.0' diff --git a/tls/CHANGELOG.md b/tls/CHANGELOG.md index e793d9fa2efe1..3c79348d30b7e 100644 --- a/tls/CHANGELOG.md +++ b/tls/CHANGELOG.md @@ -2,6 +2,16 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + +***Security***: + +* Bump version of cryptography to 43.0.1 to address vulnerability ([#18656](https://github.com/DataDog/integrations-core/pull/18656)) + ## 2.20.0 / 2024-09-05 ***Added***: diff --git a/tls/changelog.d/18656.security b/tls/changelog.d/18656.security deleted file mode 100644 index ad676917cac26..0000000000000 --- a/tls/changelog.d/18656.security +++ /dev/null @@ -1 +0,0 @@ -Bump version of cryptography to 43.0.1 to address vulnerability \ No newline at end of file diff --git a/tls/datadog_checks/tls/__about__.py b/tls/datadog_checks/tls/__about__.py index ace0ed01166ed..f046338059ddf 100644 --- a/tls/datadog_checks/tls/__about__.py +++ b/tls/datadog_checks/tls/__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__ = '2.20.0' +__version__ = '3.0.0' diff --git a/tomcat/CHANGELOG.md b/tomcat/CHANGELOG.md index ed7fa3d458a0e..0460b6f48c539 100644 --- a/tomcat/CHANGELOG.md +++ b/tomcat/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.0.0 / 2024-02-16 / Agent 7.52.0 ***Removed***: diff --git a/tomcat/datadog_checks/tomcat/__about__.py b/tomcat/datadog_checks/tomcat/__about__.py index 0e2ebd5e4631b..09adcddf171c4 100644 --- a/tomcat/datadog_checks/tomcat/__about__.py +++ b/tomcat/datadog_checks/tomcat/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '2.0.0' +__version__ = '3.0.0' diff --git a/torchserve/CHANGELOG.md b/torchserve/CHANGELOG.md index f474da5017093..9740cab40950f 100644 --- a/torchserve/CHANGELOG.md +++ b/torchserve/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.2.2 / 2024-07-05 / Agent 7.55.0 ***Fixed***: diff --git a/torchserve/datadog_checks/torchserve/__about__.py b/torchserve/datadog_checks/torchserve/__about__.py index d952686b44b52..9d7317788718b 100644 --- a/torchserve/datadog_checks/torchserve/__about__.py +++ b/torchserve/datadog_checks/torchserve/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2023-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '2.2.2' +__version__ = '3.0.0' diff --git a/traefik_mesh/CHANGELOG.md b/traefik_mesh/CHANGELOG.md index 89f9e1e5118b7..3d7149505cf56 100644 --- a/traefik_mesh/CHANGELOG.md +++ b/traefik_mesh/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.0.1 / 2024-07-05 / Agent 7.55.0 ***Fixed***: diff --git a/traefik_mesh/datadog_checks/traefik_mesh/__about__.py b/traefik_mesh/datadog_checks/traefik_mesh/__about__.py index e0db4e56d553f..cc393c1dad9ce 100644 --- a/traefik_mesh/datadog_checks/traefik_mesh/__about__.py +++ b/traefik_mesh/datadog_checks/traefik_mesh/__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__ = '1.0.1' +__version__ = '2.0.0' diff --git a/traffic_server/CHANGELOG.md b/traffic_server/CHANGELOG.md index 06e8f188cf62e..e1e4f370caced 100644 --- a/traffic_server/CHANGELOG.md +++ b/traffic_server/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.2.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/traffic_server/datadog_checks/traffic_server/__about__.py b/traffic_server/datadog_checks/traffic_server/__about__.py index ba014f7154f24..c1405a3ef0291 100644 --- a/traffic_server/datadog_checks/traffic_server/__about__.py +++ b/traffic_server/datadog_checks/traffic_server/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2022-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '2.2.1' +__version__ = '3.0.0' diff --git a/twemproxy/CHANGELOG.md b/twemproxy/CHANGELOG.md index 6b7aa824c74e0..179918687fd63 100644 --- a/twemproxy/CHANGELOG.md +++ b/twemproxy/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.15.0 / 2024-01-05 / Agent 7.51.0 ***Added***: diff --git a/twemproxy/datadog_checks/twemproxy/__about__.py b/twemproxy/datadog_checks/twemproxy/__about__.py index 0e2bc200de9ce..0e2ebd5e4631b 100644 --- a/twemproxy/datadog_checks/twemproxy/__about__.py +++ b/twemproxy/datadog_checks/twemproxy/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '1.15.0' +__version__ = '2.0.0' diff --git a/twistlock/CHANGELOG.md b/twistlock/CHANGELOG.md index 74a8dcfc00523..1d6da2d747709 100644 --- a/twistlock/CHANGELOG.md +++ b/twistlock/CHANGELOG.md @@ -2,6 +2,12 @@ +## 4.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 3.6.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/twistlock/datadog_checks/twistlock/__about__.py b/twistlock/datadog_checks/twistlock/__about__.py index b5219bf68380c..78967d676d1af 100644 --- a/twistlock/datadog_checks/twistlock/__about__.py +++ b/twistlock/datadog_checks/twistlock/__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__ = '3.6.1' +__version__ = '4.0.0' diff --git a/varnish/CHANGELOG.md b/varnish/CHANGELOG.md index 19110722af534..9a93bc5ed8ecf 100644 --- a/varnish/CHANGELOG.md +++ b/varnish/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.1.0 / 2024-01-05 / Agent 7.51.0 ***Added***: diff --git a/varnish/datadog_checks/varnish/__about__.py b/varnish/datadog_checks/varnish/__about__.py index e32e4bc3b0a3a..5778c5423a6b0 100644 --- a/varnish/datadog_checks/varnish/__about__.py +++ b/varnish/datadog_checks/varnish/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = "2.1.0" +__version__ = "3.0.0" diff --git a/vault/CHANGELOG.md b/vault/CHANGELOG.md index b1cfe64c077f3..227b4101eea6f 100644 --- a/vault/CHANGELOG.md +++ b/vault/CHANGELOG.md @@ -2,6 +2,12 @@ +## 5.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 4.2.1 / 2024-07-05 / Agent 7.55.0 ***Fixed***: diff --git a/vault/datadog_checks/vault/__about__.py b/vault/datadog_checks/vault/__about__.py index 40fe88961bf3c..d2601db5d5cc0 100644 --- a/vault/datadog_checks/vault/__about__.py +++ b/vault/datadog_checks/vault/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '4.2.1' +__version__ = '5.0.0' diff --git a/vertica/CHANGELOG.md b/vertica/CHANGELOG.md index d679d48eb238e..e7ea09620e005 100644 --- a/vertica/CHANGELOG.md +++ b/vertica/CHANGELOG.md @@ -2,6 +2,12 @@ +## 5.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 4.6.0 / 2024-08-09 / Agent 7.57.0 ***Added***: diff --git a/vertica/datadog_checks/vertica/__about__.py b/vertica/datadog_checks/vertica/__about__.py index 639bc6d324a1c..59ccab2a77ff8 100644 --- a/vertica/datadog_checks/vertica/__about__.py +++ b/vertica/datadog_checks/vertica/__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.6.0' +__version__ = '5.0.0' diff --git a/vllm/CHANGELOG.md b/vllm/CHANGELOG.md index f8ae7bbb4da19..489b9f782b024 100644 --- a/vllm/CHANGELOG.md +++ b/vllm/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.0.0 / 2024-07-05 / Agent 7.56.0 ***Added***: diff --git a/vllm/datadog_checks/vllm/__about__.py b/vllm/datadog_checks/vllm/__about__.py index acbfd1c866b84..cc393c1dad9ce 100644 --- a/vllm/datadog_checks/vllm/__about__.py +++ b/vllm/datadog_checks/vllm/__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__ = '1.0.0' +__version__ = '2.0.0' diff --git a/voltdb/CHANGELOG.md b/voltdb/CHANGELOG.md index e167815ca6a0d..13547b5401255 100644 --- a/voltdb/CHANGELOG.md +++ b/voltdb/CHANGELOG.md @@ -2,6 +2,12 @@ +## 4.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 3.2.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/voltdb/datadog_checks/voltdb/__about__.py b/voltdb/datadog_checks/voltdb/__about__.py index 67f71490f3537..bcf02753eab69 100644 --- a/voltdb/datadog_checks/voltdb/__about__.py +++ b/voltdb/datadog_checks/voltdb/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2020-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '3.2.1' +__version__ = '4.0.0' diff --git a/weaviate/CHANGELOG.md b/weaviate/CHANGELOG.md index 688a9efc2a317..bed545d56b99e 100644 --- a/weaviate/CHANGELOG.md +++ b/weaviate/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.3.3 / 2024-07-05 / Agent 7.55.0 ***Fixed***: diff --git a/weaviate/datadog_checks/weaviate/__about__.py b/weaviate/datadog_checks/weaviate/__about__.py index 88193fe79eeab..9d7317788718b 100644 --- a/weaviate/datadog_checks/weaviate/__about__.py +++ b/weaviate/datadog_checks/weaviate/__about__.py @@ -1,4 +1,4 @@ # (C) Datadog, Inc. 2023-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '2.3.3' +__version__ = '3.0.0' diff --git a/weblogic/CHANGELOG.md b/weblogic/CHANGELOG.md index dcd410562e9b5..496ca633dcb51 100644 --- a/weblogic/CHANGELOG.md +++ b/weblogic/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.3.0 / 2024-01-05 / Agent 7.51.0 ***Added***: diff --git a/weblogic/datadog_checks/weblogic/__about__.py b/weblogic/datadog_checks/weblogic/__about__.py index 49b9c719cebde..a16255352ee20 100644 --- a/weblogic/datadog_checks/weblogic/__about__.py +++ b/weblogic/datadog_checks/weblogic/__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__ = '1.3.0' +__version__ = '2.0.0' diff --git a/win32_event_log/CHANGELOG.md b/win32_event_log/CHANGELOG.md index 37781d53e636c..8d7ea29763cd3 100644 --- a/win32_event_log/CHANGELOG.md +++ b/win32_event_log/CHANGELOG.md @@ -2,6 +2,12 @@ +## 4.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 3.3.0 / 2024-01-05 / Agent 7.51.0 ***Added***: diff --git a/win32_event_log/datadog_checks/win32_event_log/__about__.py b/win32_event_log/datadog_checks/win32_event_log/__about__.py index ccf4c4835eb69..c25988b9e6d8b 100644 --- a/win32_event_log/datadog_checks/win32_event_log/__about__.py +++ b/win32_event_log/datadog_checks/win32_event_log/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '3.3.0' +__version__ = '4.0.0' diff --git a/windows_performance_counters/CHANGELOG.md b/windows_performance_counters/CHANGELOG.md index 6f24ad891555c..dd522b8c4fa73 100644 --- a/windows_performance_counters/CHANGELOG.md +++ b/windows_performance_counters/CHANGELOG.md @@ -2,6 +2,12 @@ +## 3.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 2.1.1 / 2024-07-05 / Agent 7.55.0 ***Fixed***: diff --git a/windows_performance_counters/datadog_checks/windows_performance_counters/__about__.py b/windows_performance_counters/datadog_checks/windows_performance_counters/__about__.py index 5dd52425bd40b..0791a0b0a54f2 100644 --- a/windows_performance_counters/datadog_checks/windows_performance_counters/__about__.py +++ b/windows_performance_counters/datadog_checks/windows_performance_counters/__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__ = '2.1.1' +__version__ = '3.0.0' diff --git a/windows_service/CHANGELOG.md b/windows_service/CHANGELOG.md index a8c466016af62..58ad9d7b884d5 100644 --- a/windows_service/CHANGELOG.md +++ b/windows_service/CHANGELOG.md @@ -2,6 +2,12 @@ +## 5.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 4.9.1 / 2024-07-05 / Agent 7.56.0 ***Fixed***: diff --git a/windows_service/datadog_checks/windows_service/__about__.py b/windows_service/datadog_checks/windows_service/__about__.py index c8f067d197b6b..d2601db5d5cc0 100644 --- a/windows_service/datadog_checks/windows_service/__about__.py +++ b/windows_service/datadog_checks/windows_service/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '4.9.1' +__version__ = '5.0.0' diff --git a/wmi_check/CHANGELOG.md b/wmi_check/CHANGELOG.md index dfd0c6ce1e851..cf9b2fc2af67f 100644 --- a/wmi_check/CHANGELOG.md +++ b/wmi_check/CHANGELOG.md @@ -2,6 +2,12 @@ +## 2.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 1.18.0 / 2024-01-05 / Agent 7.51.0 ***Added***: diff --git a/wmi_check/datadog_checks/wmi_check/__about__.py b/wmi_check/datadog_checks/wmi_check/__about__.py index ce07658c6ffd9..0e2ebd5e4631b 100644 --- a/wmi_check/datadog_checks/wmi_check/__about__.py +++ b/wmi_check/datadog_checks/wmi_check/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '1.18.0' +__version__ = '2.0.0' diff --git a/yarn/CHANGELOG.md b/yarn/CHANGELOG.md index 0a14da229694c..df985aff4b383 100644 --- a/yarn/CHANGELOG.md +++ b/yarn/CHANGELOG.md @@ -2,6 +2,12 @@ +## 6.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 5.3.1 / 2024-05-31 / Agent 7.55.0 ***Fixed***: diff --git a/yarn/datadog_checks/yarn/__about__.py b/yarn/datadog_checks/yarn/__about__.py index 3cb45a781c7ec..226921537e53d 100644 --- a/yarn/datadog_checks/yarn/__about__.py +++ b/yarn/datadog_checks/yarn/__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__ = "5.3.1" +__version__ = "6.0.0" diff --git a/zk/CHANGELOG.md b/zk/CHANGELOG.md index 4cfb8bc509120..5aa6b85d2a03f 100644 --- a/zk/CHANGELOG.md +++ b/zk/CHANGELOG.md @@ -2,6 +2,12 @@ +## 5.0.0 / 2024-10-01 + +***Changed***: + +* Bump minimum version of base check ([#18733](https://github.com/DataDog/integrations-core/pull/18733)) + ## 4.5.0 / 2024-01-05 / Agent 7.51.0 ***Added***: diff --git a/zk/datadog_checks/zk/__about__.py b/zk/datadog_checks/zk/__about__.py index 201e8c7c80fd8..d2601db5d5cc0 100644 --- a/zk/datadog_checks/zk/__about__.py +++ b/zk/datadog_checks/zk/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '4.5.0' +__version__ = '5.0.0' From c67d18e014df19a57b3a80c9893b3316a442cd71 Mon Sep 17 00:00:00 2001 From: Kyle Neale Date: Tue, 1 Oct 2024 16:30:42 -0400 Subject: [PATCH 28/56] Fix requirements-agent-release.txt (#18749) --- requirements-agent-release.txt | 7 ------- 1 file changed, 7 deletions(-) diff --git a/requirements-agent-release.txt b/requirements-agent-release.txt index 68b6a25e6f5c3..d8574097f1e6d 100644 --- a/requirements-agent-release.txt +++ b/requirements-agent-release.txt @@ -27,17 +27,10 @@ datadog-ceph==3.0.0; sys_platform != 'win32' datadog-cert-manager==5.0.0 datadog-checkpoint-quantum-firewall==1.0.0 datadog-checks-base==37.0.0 -<<<<<<< HEAD -datadog-checks-dependency-provider==1.4.0 -datadog-checks-downloader==4.7.0 -datadog-cilium==3.6.0 -datadog-cisco-aci==2.12.0 -======= datadog-checks-dependency-provider==2.0.0 datadog-checks-downloader==5.0.0 datadog-cilium==4.0.0 datadog-cisco-aci==3.0.0 ->>>>>>> 28237f7b86 ([Release] Release integrations with base check bump `v7.58` (#18742)) datadog-cisco-secure-firewall==1.0.0 datadog-citrix-hypervisor==4.0.0 datadog-clickhouse==4.0.0 From af47a3dcfb4600e67e2638cfcbf291b1d758c635 Mon Sep 17 00:00:00 2001 From: Zhengda Lu Date: Tue, 1 Oct 2024 16:36:23 -0400 Subject: [PATCH 29/56] [mongo] always emit database_instance (#18750) * always emit database_instance * add changelog --- mongo/changelog.d/18750.added | 1 + mongo/datadog_checks/mongo/mongo.py | 2 +- mongo/tests/test_integration.py | 4 ---- mongo/tests/test_unit.py | 3 +++ 4 files changed, 5 insertions(+), 5 deletions(-) create mode 100644 mongo/changelog.d/18750.added diff --git a/mongo/changelog.d/18750.added b/mongo/changelog.d/18750.added new file mode 100644 index 0000000000000..2e389bd538453 --- /dev/null +++ b/mongo/changelog.d/18750.added @@ -0,0 +1 @@ +Always emit `database_instance` metadata regardless of DBM status; previously emitted only when DBM was enabled. diff --git a/mongo/datadog_checks/mongo/mongo.py b/mongo/datadog_checks/mongo/mongo.py index df448ea0fea22..c96fbf18af3ea 100644 --- a/mongo/datadog_checks/mongo/mongo.py +++ b/mongo/datadog_checks/mongo/mongo.py @@ -264,10 +264,10 @@ def check(self, _): self._refresh_metadata() self._refresh_deployment() self._collect_metrics() + self._send_database_instance_metadata() # DBM if self._config.dbm_enabled: - self._send_database_instance_metadata() self._operation_samples.run_job_loop(tags=self._get_tags(include_internal_resource_tags=True)) self._slow_operations.run_job_loop(tags=self._get_tags(include_internal_resource_tags=True)) self._schemas.run_job_loop(tags=self._get_tags(include_internal_resource_tags=True)) diff --git a/mongo/tests/test_integration.py b/mongo/tests/test_integration.py index 9941eb940c849..88d253cfc7eb8 100644 --- a/mongo/tests/test_integration.py +++ b/mongo/tests/test_integration.py @@ -38,10 +38,6 @@ def _assert_mongodb_instance_event( modules, ): mongodb_instance_event = _get_mongodb_instance_event(aggregator) - if not dbm: - assert mongodb_instance_event is None - return - assert mongodb_instance_event is not None assert mongodb_instance_event['host'] == check._resolved_hostname assert mongodb_instance_event['host'] == check._resolved_hostname diff --git a/mongo/tests/test_unit.py b/mongo/tests/test_unit.py index 4ac766a5ba0cd..a3ae29a2d66ca 100644 --- a/mongo/tests/test_unit.py +++ b/mongo/tests/test_unit.py @@ -612,6 +612,7 @@ def test_when_collections_indexes_stats_to_true_then_index_stats_metrics_reporte def test_when_version_lower_than_3_2_then_no_index_stats_metrics_reported(aggregator, check, instance, dd_run_check): # Given + instance["reported_database_hostname"] = "test-hostname:27017" instance["collections_indexes_stats"] = True instance["collections"] = ['bar', 'foo'] check = check(instance) @@ -625,6 +626,7 @@ def test_when_version_lower_than_3_2_then_no_index_stats_metrics_reported(aggreg def test_when_version_lower_than_3_6_then_no_session_metrics_reported(aggregator, check, instance, dd_run_check): # Given + instance["reported_database_hostname"] = "test-hostname:27017" check = check(instance) # When mocked_client = mock.MagicMock() @@ -738,6 +740,7 @@ def test_refresh_role(instance_shard, aggregator, check, dd_run_check): Ideally we should be asserting that we emit an event for a change of role. That's the behavior users care about. It requires more mocking work though. """ + instance_shard["reported_database_hostname"] = "test-hostname:27018" mongo_check = check(instance_shard) mc = seed_mock_client() mc.replset_get_status.return_value = load_json_fixture('replSetGetStatus-replica-primary-in-shard') From 734d84923437bddbfe49aa183024b77845299af8 Mon Sep 17 00:00:00 2001 From: JacksonDavenport Date: Tue, 1 Oct 2024 13:39:40 -0700 Subject: [PATCH 30/56] Move to ADv2 and update log configs (#18679) * Move to ADv2 and update log configs * Apply suggestions from code review Co-authored-by: Steven Yuen --------- Co-authored-by: Steven Yuen --- istio/README.md | 106 +++++++++++++++++++++++++----------------------- 1 file changed, 55 insertions(+), 51 deletions(-) diff --git a/istio/README.md b/istio/README.md index 865d95ac12a67..8908bd73d8bc5 100644 --- a/istio/README.md +++ b/istio/README.md @@ -31,7 +31,7 @@ If you want to monitor the Envoy proxies in Istio, configure the [Envoy integrat ### Configuration #### Metric collection -To monitor `istio-proxy` and `istiod` in Istio v1.5+, there are two key components involved in collecting the Prometheus-formatted metrics: +To monitor Istio v1.5+ there are two key components matching the [Istio architecture][23] for the Prometheus-formatted metrics: - **Data plane**: The `istio-proxy` sidecar containers - **Control plane**: The `istiod` service managing the proxies @@ -42,48 +42,46 @@ These are both run as `istio` Agent checks, but they have different responsibili The default [`istio.d/auto_conf.yaml`][9] file automatically sets up monitoring for each of the `istio-proxy` sidecar containers. The Agent initializes this check for each sidecar container that it detects automatically. This configuration enables the reporting of `istio.mesh.*` metrics for the data exposed by each of these sidecar containers. -To customize the data plane portion of the integration: +To customize the data plane portion of the integration, create a custom Istio configuration file `istio.yaml`. See [Configure integrations on Kubernetes][4] or [Configure integrations with Autodiscovery on Docker][26] for options in creating this file. -1. Create a `conf.d/istio.d/conf.yaml` file on your host. This file must contain: +This file must contain: - ```yaml - ad_identifiers: - - proxyv2 - - proxyv2-rhel8 - - init_config: - - instances: - - use_openmetrics: true - send_histograms_buckets: false - istio_mesh_endpoint: http://%%host%%:15020/stats/prometheus - tag_by_endpoint: false - ``` +```yaml +ad_identifiers: + - proxyv2 + - proxyv2-rhel8 -2. Customize this file with any additional configurations. See the [sample istio.d/conf.yaml][8] for all available configuration options. +init_config: -3. Mount your host `conf.d/` folder to the containerized Agent's `conf/d` folder. +instances: + - use_openmetrics: true + send_histograms_buckets: false + istio_mesh_endpoint: http://%%host%%:15020/stats/prometheus + tag_by_endpoint: false +``` -See [Configure integrations with Autodiscovery on Kubernetes][4] or [Configure integrations with Autodiscovery on Docker][26] for alternative configuration methods. +Customize this file with any additional configurations. See the [sample istio.d/conf.yaml][8] for all available configuration options. ##### Control plane configuration To monitor the Istio control plane and report the `mixer`, `galley`, `pilot`, and `citadel` metrics, you must configure the Agent to monitor the `istiod` deployment. In Istio v1.5 or later, apply the following pod annotations for the deployment `istiod` in the `istio-system` namespace: ```yaml -ad.datadoghq.com/.check_names: '["istio"]' -ad.datadoghq.com/.init_configs: '[{}]' -ad.datadoghq.com/.instances: | - [ - { - "istiod_endpoint": "http://%%host%%:15014/metrics", - "use_openmetrics": "true" - } - ] +ad.datadoghq.com/discovery.checks: | + { + "istio": { + "instances": [ + { + "istiod_endpoint": "http://%%host%%:15014/metrics", + "use_openmetrics": "true" + } + ] + } + } ``` -Replace `` with the name (`.spec.containers[i].name`) of your container. For example, `discovery`. +This annotation specifies the container `discovery` to match the default container name of the Istio container in this pod. Replace this annotation `ad.datadoghq.com/.checks` with the name (`.spec.containers[i].name`) of your Istio container if yours differs. -The method for applying these annotations varies depending on the [Istio deployment strategy (Istioctl, Helm, Operator)][22] used. Consult the [Istio documentation][23] for the proper method to apply these pod annotations. See the [sample istio.d/conf.yaml][8] for all available configuration options. +The method for applying these annotations varies depending on the [Istio deployment strategy (Istioctl, Helm, Operator)][22] used. Consult the Istio documentation for the proper method to apply these pod annotations. See the [sample istio.d/conf.yaml][8] for all available configuration options. #### Disable sidecar injection for Datadog Agent pods @@ -137,37 +135,42 @@ First, enable the Datadog Agent to perform log collection in Kubernetes. See [Ku #### Istio logs -To collect [Istio logs][12], apply the following annotation to the pod where Istio containers are running: +To collect Istio logs from your control plane (`istiod`), apply the following pod annotations for the deployment `istiod` in the `istio-system` namespace: ```yaml -ad.datadoghq.com/.logs: | - [ - { - "source": "istio", - "service": "" - } - ] +ad.datadoghq.com/discovery.logs: | + [ + { + "source": "istio", + "service": "" + } + ] ``` -Replace `` with the name (`.spec.containers[i].name`) of your container. Replace `` with the name of your Istio service. +This annotation specifies the container `discovery` to match the default container name of the Istio container in this pod. Replace this annotation `ad.datadoghq.com/.logs` with the name (`.spec.containers[i].name`) of your Istio container if yours differs. + +Replace `` with your desired Istio service name. #### Envoy access logs -To collect Envoy access logs: -1. Ensure the [Envoy integration][11] is installed. -2. Apply the following annotation to the pod where Envoy is running: +To collect Envoy access logs from your data plane (`istio-proxy`): + +1. Enable [Envoy access logging within Istio][27] +2. Apply the following annotation to the pod where the `istio-proxy` container was injected ```yaml -ad.datadoghq.com/.logs: | - [ - { - "type": "file", - "path": "/var/log/envoy.log", - "source": "envoy" - } - ] +ad.datadoghq.com/istio-proxy.logs: | + [ + { + "source": "envoy", + "service": "" + } + ] ``` -Replace `` with the name (`.spec.containers[i].name`) of your container. + +This annotation specifies the container `istio-proxy` to match the default container name of the injected Istio sidecar container. Replace this annotation `ad.datadoghq.com/.logs` with the name (`.spec.containers[i].name`) of your Istio sidecar container if yours differs. + +Replace `` with your desired Istio proxy service name. ### Validation @@ -277,3 +280,4 @@ Additional helpful documentation, links, and articles: [24]: https://docs.datadoghq.com/agent/kubernetes/integrations/?tab=file#configuration [25]: https://docs.datadoghq.com/integrations/guide/versions-for-openmetrics-based-integrations [26]: https://docs.datadoghq.com/containers/docker/integrations/ +[27]: https://istio.io/latest/docs/tasks/observability/logs/access-log/ From 07cdb4e6ebe47669e7454a02852bcfb7a40aa242 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?zoe=C2=A0=E2=9C=A8?= <9274242+zoedt@users.noreply.github.com> Date: Wed, 2 Oct 2024 09:35:22 -0400 Subject: [PATCH 31/56] [NDM] [Cisco ACI] Add check metrics (#18748) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add some check metrics for ACI to start * Changelog * Isolate the freezegun? * Bump freezegun * Pivot the unit test 😭 --- cisco_aci/changelog.d/18748.added | 1 + cisco_aci/datadog_checks/cisco_aci/cisco.py | 11 +++++++ cisco_aci/hatch.toml | 2 +- cisco_aci/tests/test_cisco.py | 32 ++++++++++++++++++++- cisco_aci/tests/test_fabric.py | 4 +++ cisco_aci/tests/test_tenant.py | 5 ++++ 6 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 cisco_aci/changelog.d/18748.added diff --git a/cisco_aci/changelog.d/18748.added b/cisco_aci/changelog.d/18748.added new file mode 100644 index 0000000000000..2c3891fb1f639 --- /dev/null +++ b/cisco_aci/changelog.d/18748.added @@ -0,0 +1 @@ +[NDM] [Cisco ACI] Add check metrics diff --git a/cisco_aci/datadog_checks/cisco_aci/cisco.py b/cisco_aci/datadog_checks/cisco_aci/cisco.py index ee17248e34f11..857b2a69e289a 100644 --- a/cisco_aci/datadog_checks/cisco_aci/cisco.py +++ b/cisco_aci/datadog_checks/cisco_aci/cisco.py @@ -1,6 +1,8 @@ # (C) Datadog, Inc. 2018-present # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) +import time + from datadog_checks.base import AgentCheck, ConfigurationError from datadog_checks.base.config import _is_affirmative from datadog_checks.base.utils.containers import hash_mutable @@ -30,6 +32,7 @@ def __init__(self, name, init_config, instances): self.tagger = CiscoTags(log=self.log) def check(self, _): + start_time = time.time() aci_url = self.instance.get('aci_url') aci_urls = self.instance.get('aci_urls', []) if aci_url: @@ -137,6 +140,8 @@ def check(self, _): self.set_external_tags(self.get_external_host_tags()) + self.submit_telemetry_metrics(start_time, tags=self.check_tags) + api.close() def submit_metrics(self, metrics, tags, instance=None, obj_type="gauge", hostname=None): @@ -158,6 +163,12 @@ def submit_metrics(self, metrics, tags, instance=None, obj_type="gauge", hostnam log_line = "Trying to submit metric: %s with unknown type: %s" self.log.debug(log_line, mname, obj_type) + def submit_telemetry_metrics(self, start_time, tags): + current_time = time.time() + check_duration = current_time - start_time + self.monotonic_count('datadog.cisco_aci.check_interval', current_time, tags=tags) + self.gauge('datadog.cisco_aci.check_duration', check_duration, tags=tags) + def get_external_host_tags(self): external_host_tags = [] for hostname, tags in self.external_host_tags.items(): diff --git a/cisco_aci/hatch.toml b/cisco_aci/hatch.toml index 0169207d8cffb..8253d4a4dc5a9 100644 --- a/cisco_aci/hatch.toml +++ b/cisco_aci/hatch.toml @@ -5,5 +5,5 @@ python = ["3.12"] [envs.default] dependencies = [ - "freezegun==0.3.15", + "freezegun==1.2.2", ] \ No newline at end of file diff --git a/cisco_aci/tests/test_cisco.py b/cisco_aci/tests/test_cisco.py index 795a71555e363..9e0a475a5d656 100644 --- a/cisco_aci/tests/test_cisco.py +++ b/cisco_aci/tests/test_cisco.py @@ -5,6 +5,7 @@ from copy import deepcopy import pytest +from freezegun import freeze_time from mock import MagicMock from datadog_checks.base import AgentCheck @@ -20,9 +21,38 @@ def test_cisco(aggregator): api = Api(common.ACI_URLS, cisco_aci_check.http, common.USERNAME, password=common.PASSWORD, log=cisco_aci_check.log) api.wrapper_factory = common.FakeSessionWrapper cisco_aci_check._api_cache[hash_mutable(common.CONFIG)] = api - cisco_aci_check.check({}) + check_tags = ['cisco'] + aggregator.assert_metric( + 'datadog.cisco_aci.check_interval', + metric_type=aggregator.MONOTONIC_COUNT, + count=1, + tags=check_tags, + ) + aggregator.assert_metric('datadog.cisco_aci.check_duration', metric_type=aggregator.GAUGE, count=1, tags=check_tags) + + +def test_submit_telemetry_metrics(aggregator): + cisco_aci_check = CiscoACICheck(common.CHECK_NAME, {}, [common.CONFIG]) + check_tags = ['cisco'] + + start_time = 1326511294 # Saturday, January 14, 2012 3:21:34 AM GMT + end_time = 1326511295 # Saturday, January 14, 2012 3:21:35 AM GMT + + with freeze_time("2012-01-14 03:21:35"): + cisco_aci_check.submit_telemetry_metrics(start_time, check_tags) + aggregator.assert_metric( + 'datadog.cisco_aci.check_interval', + value=end_time, + metric_type=aggregator.MONOTONIC_COUNT, + count=1, + tags=check_tags, + ) + aggregator.assert_metric( + 'datadog.cisco_aci.check_duration', value=1, metric_type=aggregator.GAUGE, count=1, tags=check_tags + ) + @pytest.mark.parametrize( ' api_kwargs', diff --git a/cisco_aci/tests/test_fabric.py b/cisco_aci/tests/test_fabric.py index 2b9c97d7a2a0b..9212901f4a8d5 100644 --- a/cisco_aci/tests/test_fabric.py +++ b/cisco_aci/tests/test_fabric.py @@ -17753,5 +17753,9 @@ def test_fabric_mocked(aggregator): hostname=hn201, ) + aggregator.assert_metric( + 'datadog.cisco_aci.check_interval', metric_type=aggregator.MONOTONIC_COUNT, count=1, tags=['cisco'] + ) + aggregator.assert_metric('datadog.cisco_aci.check_duration', metric_type=aggregator.GAUGE, count=1, tags=['cisco']) # Assert coverage for this check on this instance aggregator.assert_all_metrics_covered() diff --git a/cisco_aci/tests/test_tenant.py b/cisco_aci/tests/test_tenant.py index 5fc6706e96a49..7aa10770a0ccc 100644 --- a/cisco_aci/tests/test_tenant.py +++ b/cisco_aci/tests/test_tenant.py @@ -1028,5 +1028,10 @@ def test_tenant_mocked(aggregator): metric_name, value=0.0, tags=['endpoint_group:Test-EPG', 'application:DtDg-test-AP'] + tags, hostname='' ) + aggregator.assert_metric( + 'datadog.cisco_aci.check_interval', metric_type=aggregator.MONOTONIC_COUNT, count=1, tags=['cisco'] + ) + aggregator.assert_metric('datadog.cisco_aci.check_duration', metric_type=aggregator.GAUGE, count=1, tags=['cisco']) + # Assert coverage for this check on this instance aggregator.assert_all_metrics_covered() From 97eecca01c80607019a4b6c4d1ce7e73d5f4f408 Mon Sep 17 00:00:00 2001 From: Zhengda Lu Date: Wed, 2 Oct 2024 11:24:08 -0400 Subject: [PATCH 32/56] [dbm] add keep_json_path to obfuscator_options (#18726) * add keep_json_path to obfuscator_options * add changelog * fix lint --- postgres/assets/configuration/spec.yaml | 7 +++++++ postgres/changelog.d/18726.added | 1 + postgres/datadog_checks/postgres/config.py | 1 + postgres/datadog_checks/postgres/config_models/instance.py | 1 + postgres/datadog_checks/postgres/data/conf.yaml.example | 5 +++++ 5 files changed, 15 insertions(+) create mode 100644 postgres/changelog.d/18726.added diff --git a/postgres/assets/configuration/spec.yaml b/postgres/assets/configuration/spec.yaml index 2d87d9ff9e4a6..da9d986499e43 100644 --- a/postgres/assets/configuration/spec.yaml +++ b/postgres/assets/configuration/spec.yaml @@ -945,6 +945,13 @@ files: type: boolean example: false display_default: false + - name: keep_json_path + description: | + Set to `true` to keep JSON path expressions (e.g. `data->'key'`) in your normalized SQL statements. + value: + type: boolean + example: false + display_default: false - name: log_unobfuscated_queries hidden: true description: | diff --git a/postgres/changelog.d/18726.added b/postgres/changelog.d/18726.added new file mode 100644 index 0000000000000..b6638865f2c9f --- /dev/null +++ b/postgres/changelog.d/18726.added @@ -0,0 +1 @@ +Add `keep_json_path` to obfuscator_options to allow users to control whether JSON paths following JSON operators in SQL statements should be obfuscated. By default, these paths are treated as literals and are obfuscated to ?. diff --git a/postgres/datadog_checks/postgres/config.py b/postgres/datadog_checks/postgres/config.py index 77a9849fcb123..effc8ecce3b2a 100644 --- a/postgres/datadog_checks/postgres/config.py +++ b/postgres/datadog_checks/postgres/config.py @@ -157,6 +157,7 @@ def __init__(self, instance, init_config, check): 'keep_identifier_quotation': is_affirmative( obfuscator_options_config.get('keep_identifier_quotation', False) ), + 'keep_json_path': is_affirmative(obfuscator_options_config.get('keep_json_path', False)), } self.log_unobfuscated_queries = is_affirmative(instance.get('log_unobfuscated_queries', False)) self.log_unobfuscated_plans = is_affirmative(instance.get('log_unobfuscated_plans', False)) diff --git a/postgres/datadog_checks/postgres/config_models/instance.py b/postgres/datadog_checks/postgres/config_models/instance.py index d2c9858ceb1a5..f78d9d0ae3a23 100644 --- a/postgres/datadog_checks/postgres/config_models/instance.py +++ b/postgres/datadog_checks/postgres/config_models/instance.py @@ -150,6 +150,7 @@ class ObfuscatorOptions(BaseModel): keep_boolean: Optional[bool] = None keep_dollar_quoted_func: Optional[bool] = None keep_identifier_quotation: Optional[bool] = None + keep_json_path: Optional[bool] = None keep_null: Optional[bool] = None keep_positional_parameter: Optional[bool] = None keep_sql_alias: Optional[bool] = None diff --git a/postgres/datadog_checks/postgres/data/conf.yaml.example b/postgres/datadog_checks/postgres/data/conf.yaml.example index c2c4f863f3a5f..dd8462f836bd1 100644 --- a/postgres/datadog_checks/postgres/data/conf.yaml.example +++ b/postgres/datadog_checks/postgres/data/conf.yaml.example @@ -822,6 +822,11 @@ instances: # # keep_identifier_quotation: false + ## @param keep_json_path - boolean - optional - default: false + ## Set to `true` to keep JSON path expressions (e.g. `data->'key'`) in your normalized SQL statements. + # + # keep_json_path: false + ## @param propagate_agent_tags - boolean - optional - default: false ## Set to `true` to propagate the tags from `datadog.yaml` and the agent host tags to the check. ## When set to `true`, the tags from the agent host are added to the check's tags for all instances. From 58f8d18c108e4e8644639e4275d34382ef228ab3 Mon Sep 17 00:00:00 2001 From: Nenad Noveljic <18366081+nenadnoveljic@users.noreply.github.com> Date: Wed, 2 Oct 2024 17:29:09 +0200 Subject: [PATCH 33/56] Workaround for SQL Server deadlock monitoring problem with ADODB (#18737) * copied files * fixed tests * fixed test cases * fix query for adodb * linter * spool query on error * get connector after making a connection * linter --- .../datadog_checks/sqlserver/deadlocks.py | 17 ++- sqlserver/datadog_checks/sqlserver/queries.py | 39 ++++-- sqlserver/tests/test_deadlocks.py | 132 ++++++++++-------- 3 files changed, 112 insertions(+), 76 deletions(-) diff --git a/sqlserver/datadog_checks/sqlserver/deadlocks.py b/sqlserver/datadog_checks/sqlserver/deadlocks.py index b623760188330..f8405bd3b9996 100644 --- a/sqlserver/datadog_checks/sqlserver/deadlocks.py +++ b/sqlserver/datadog_checks/sqlserver/deadlocks.py @@ -11,7 +11,7 @@ from datadog_checks.base.utils.tracking import tracked_method from datadog_checks.sqlserver.config import SQLServerConfig from datadog_checks.sqlserver.const import STATIC_INFO_ENGINE_EDITION, STATIC_INFO_VERSION -from datadog_checks.sqlserver.queries import DEADLOCK_QUERY, DEADLOCK_TIMESTAMP_ALIAS, DEADLOCK_XML_ALIAS +from datadog_checks.sqlserver.queries import DEADLOCK_TIMESTAMP_ALIAS, DEADLOCK_XML_ALIAS, get_deadlocks_query try: import datadog_agent @@ -41,6 +41,7 @@ def __init__(self, check, config: SQLServerConfig): self._max_deadlocks = config.deadlocks_config.get("max_deadlocks", MAX_DEADLOCKS) self._deadlock_payload_max_bytes = MAX_PAYLOAD_BYTES self.collection_interval = config.deadlocks_config.get("collection_interval", DEFAULT_COLLECTION_INTERVAL) + self._force_convert_xml_to_str = False super(Deadlocks, self).__init__( check, run_sync=True, @@ -100,21 +101,27 @@ def _obfuscate_xml(self, root): def _get_lookback_seconds(self): return min(-60, self._last_deadlock_timestamp - time()) + def _get_connector(self): + return self._check.connection.connector + def _query_deadlocks(self): with self._check.connection.open_managed_default_connection(key_prefix=self._conn_key_prefix): with self._check.connection.get_managed_cursor(key_prefix=self._conn_key_prefix) as cursor: - self._log.debug("collecting sql server deadlocks") + convert_xml_to_str = False + if self._force_convert_xml_to_str or self._get_connector() == "adodbapi": + convert_xml_to_str = True + query = get_deadlocks_query(convert_xml_to_str) self._log.debug( "Running query [%s] with max deadlocks %s and timestamp %s", - DEADLOCK_QUERY, + query, self._max_deadlocks, self._last_deadlock_timestamp, ) try: - cursor.execute(DEADLOCK_QUERY, (self._max_deadlocks, self._get_lookback_seconds())) + cursor.execute(query, (self._max_deadlocks, self._get_lookback_seconds())) except Exception as e: if "Data column of Unknown ADO type" in str(e): - raise Exception(f"{str(e)} | cursor.description: {cursor.description}") + raise Exception(f"{str(e)} | cursor.description: {cursor.description} | query: {query}") raise e columns = [column[0] for column in cursor.description] diff --git a/sqlserver/datadog_checks/sqlserver/queries.py b/sqlserver/datadog_checks/sqlserver/queries.py index 48b27d812e87f..ab6cf12a49af6 100644 --- a/sqlserver/datadog_checks/sqlserver/queries.py +++ b/sqlserver/datadog_checks/sqlserver/queries.py @@ -216,20 +216,31 @@ DEADLOCK_TIMESTAMP_ALIAS = "timestamp" DEADLOCK_XML_ALIAS = "event_xml" -DEADLOCK_QUERY = """ -SELECT TOP(?) xdr.value('@timestamp', 'datetime') AS [{timestamp}], - xdr.query('.') AS [{xml}] -FROM (SELECT CAST([target_data] AS XML) AS Target_Data - FROM sys.dm_xe_session_targets AS xt - INNER JOIN sys.dm_xe_sessions AS xs ON xs.address = xt.event_session_address - WHERE xs.name = N'system_health' - AND xt.target_name = N'ring_buffer' - ) AS XML_Data -CROSS APPLY Target_Data.nodes('RingBufferTarget/event[@name="xml_deadlock_report"]') AS XEventData(xdr) -WHERE xdr.value('@timestamp', 'datetime') >= DATEADD(SECOND, ?, GETDATE()) -;""".format( - **{"timestamp": DEADLOCK_TIMESTAMP_ALIAS, "xml": DEADLOCK_XML_ALIAS} -) + + +def get_deadlocks_query(convert_xml_to_str=False): + """ + Construct the query to fetch deadlocks from the system_health extended event session + :param convert_xml_to_str: Whether to convert the XML to a string. This option is for MSOLEDB drivers + that can't convert XML to str + :return: The query to fetch deadlocks + """ + xml_expression = "xdr.query('.')" + if convert_xml_to_str: + xml_expression = "CAST(xdr.query('.') AS NVARCHAR(MAX))" + + return f""" + SELECT TOP(?) xdr.value('@timestamp', 'datetime') AS [{DEADLOCK_TIMESTAMP_ALIAS}], + {xml_expression} AS [{DEADLOCK_XML_ALIAS}] + FROM (SELECT CAST([target_data] AS XML) AS Target_Data + FROM sys.dm_xe_session_targets AS xt + INNER JOIN sys.dm_xe_sessions AS xs ON xs.address = xt.event_session_address + WHERE xs.name = N'system_health' + AND xt.target_name = N'ring_buffer' + ) AS XML_Data + CROSS APPLY Target_Data.nodes('RingBufferTarget/event[@name="xml_deadlock_report"]') AS XEventData(xdr) + WHERE xdr.value('@timestamp', 'datetime') >= DATEADD(SECOND, ?, GETDATE()) + ;""" def get_query_ao_availability_groups(sqlserver_major_version): diff --git a/sqlserver/tests/test_deadlocks.py b/sqlserver/tests/test_deadlocks.py index 1099a0dfcd1f6..34f2e76d1575c 100644 --- a/sqlserver/tests/test_deadlocks.py +++ b/sqlserver/tests/test_deadlocks.py @@ -24,7 +24,6 @@ from datadog_checks.sqlserver.queries import DEADLOCK_TIMESTAMP_ALIAS, DEADLOCK_XML_ALIAS from .common import CHECK_NAME -from .utils import not_windows_ado try: import pyodbc @@ -32,8 +31,9 @@ pyodbc = None -@pytest.fixture -def dbm_instance(instance_docker): +@pytest.fixture(scope="session") +def dbm_instance(instance_session_default): + instance_docker = deepcopy(instance_session_default) instance_docker['dbm'] = True # set a very small collection interval so the tests go fast instance_docker['query_activity'] = { @@ -44,12 +44,21 @@ def dbm_instance(instance_docker): instance_docker['procedure_metrics'] = {'enabled': False} instance_docker['collect_settings'] = {'enabled': False} instance_docker['deadlocks_collection'] = {'enabled': True, 'collection_interval': 0.1} - return copy(instance_docker) + return instance_docker + +def _run_check_and_get_deadlock_payloads(dd_run_check, check, aggregator): + dbm_activity = _run_check_and_get_activity_samples(dd_run_check, check, aggregator) + return _get_deadlocks_payload(dbm_activity) -def run_check_and_return_deadlock_payloads(dd_run_check, check, aggregator): + +def _run_check_and_get_activity_samples(dd_run_check, check, aggregator): dd_run_check(check) dbm_activity = aggregator.get_event_platform_events("dbm-activity") + return dbm_activity + + +def _get_deadlocks_payload(dbm_activity): matched = [] for event in dbm_activity: if "sqlserver_deadlocks" in event: @@ -57,13 +66,16 @@ def run_check_and_return_deadlock_payloads(dd_run_check, check, aggregator): return matched -def _get_conn_for_user(instance_docker, user, timeout=1, _autocommit=False): - # Make DB connection - conn_str = 'DRIVER={};Server={};Database=master;UID={};PWD={};TrustServerCertificate=yes;'.format( - instance_docker['driver'], instance_docker['host'], user, "Password12!" +def _get_conn_for_user(instance_docker, user): + conn_str = ( + f"DRIVER={instance_docker['driver']};" + f"Server={instance_docker['host']};" + "Database=master;" + f"UID={user};" + "PWD=Password12!;" + "TrustServerCertificate=yes;" ) - conn = pyodbc.connect(conn_str, timeout=timeout, autocommit=_autocommit) - conn.timeout = timeout + conn = pyodbc.connect(conn_str, autocommit=False) return conn @@ -99,56 +111,41 @@ def _run_second_deadlock_query(conn, event1, event2): return exception_text -def _create_deadlock(bob_conn, fred_conn): +@pytest.fixture(scope="session") +def _create_deadlock(dd_environment, dbm_instance): + bob_conn = _get_conn_for_user(dbm_instance, 'bob') + fred_conn = _get_conn_for_user(dbm_instance, 'fred') executor = concurrent.futures.thread.ThreadPoolExecutor(2) event1 = Event() event2 = Event() - futures_first_query = executor.submit(_run_first_deadlock_query, bob_conn, event1, event2) futures_second_query = executor.submit(_run_second_deadlock_query, fred_conn, event1, event2) exception_1_text = futures_first_query.result() exception_2_text = futures_second_query.result() executor.shutdown() - return "deadlock" in exception_1_text or "deadlock" in exception_2_text + bob_conn.close() + fred_conn.close() + if "deadlock" in exception_1_text or "deadlock" in exception_2_text: + return + raise Exception( + f"Couldn't create a deadlock | batch output 1: {exception_1_text} | batch output 2: {exception_2_text}" + ) -# TODO: remove @not_windows_ado when the functionality is supported for MSOLEDBSQL -@not_windows_ado @pytest.mark.integration @pytest.mark.usefixtures('dd_environment') -def test_deadlocks(aggregator, dd_run_check, init_config, dbm_instance): - sqlserver_check = SQLServer(CHECK_NAME, {}, [dbm_instance]) - - deadlock_payloads = run_check_and_return_deadlock_payloads(dd_run_check, sqlserver_check, aggregator) - assert not deadlock_payloads, "shouldn't have sent an empty payload" - - created_deadlock = False - # Rarely instead of creating a deadlock one of the transactions time outs - for _ in range(0, 3): - bob_conn = _get_conn_for_user(dbm_instance, 'bob', 3) - fred_conn = _get_conn_for_user(dbm_instance, 'fred', 3) - created_deadlock = _create_deadlock(bob_conn, fred_conn) - bob_conn.close() - fred_conn.close() - if created_deadlock: - break - try: - assert created_deadlock, "Couldn't create a deadlock, exiting" - except AssertionError as e: - raise e - - dbm_instance_no_dbm = deepcopy(dbm_instance) - dbm_instance_no_dbm['dbm'] = False - sqlserver_check_no_dbm = SQLServer(CHECK_NAME, init_config, [dbm_instance_no_dbm]) - deadlock_payloads = run_check_and_return_deadlock_payloads(dd_run_check, sqlserver_check_no_dbm, aggregator) - assert len(deadlock_payloads) == 0, "deadlock should be behind dbm" +@pytest.mark.usefixtures('_create_deadlock') +@pytest.mark.parametrize("convert_xml_to_str", [False, True]) +def test_deadlocks(aggregator, dd_run_check, dbm_instance, convert_xml_to_str): + check = SQLServer(CHECK_NAME, {}, [dbm_instance]) + check.deadlocks._force_convert_xml_to_str = convert_xml_to_str dbm_instance['dbm_enabled'] = True - deadlock_payloads = run_check_and_return_deadlock_payloads(dd_run_check, sqlserver_check, aggregator) + deadlock_payloads = _run_check_and_get_deadlock_payloads(dd_run_check, check, aggregator) try: - assert len(deadlock_payloads) == 1, "Should have collected one deadlock payload, but collected: {}.".format( - len(deadlock_payloads) - ) + assert ( + len(deadlock_payloads) == 1 + ), f"Should have collected one deadlock payload, but collected: {len(deadlock_payloads)}" except AssertionError as e: raise e deadlocks = deadlock_payloads[0]['sqlserver_deadlocks'] @@ -174,6 +171,34 @@ def test_deadlocks(aggregator, dd_run_check, init_config, dbm_instance): raise e +@pytest.mark.usefixtures('dd_environment') +def test_no_empty_deadlocks_payloads(dd_run_check, init_config, dbm_instance, aggregator): + check = SQLServer(CHECK_NAME, init_config, [dbm_instance]) + with patch.object( + Deadlocks, + '_query_deadlocks', + return_value=[], + ): + assert not _run_check_and_get_deadlock_payloads( + dd_run_check, check, aggregator + ), "shouldn't have sent an empty payload" + + +@pytest.mark.usefixtures('dd_environment') +def test_deadlocks_behind_dbm(dd_run_check, init_config, dbm_instance): + dbm_instance_no_dbm = deepcopy(dbm_instance) + dbm_instance_no_dbm['dbm'] = False + check = SQLServer(CHECK_NAME, init_config, [dbm_instance_no_dbm]) + xml = _load_test_deadlocks_xml("sqlserver_deadlock_event.xml") + with patch.object( + Deadlocks, + '_query_deadlocks', + return_value=[{DEADLOCK_TIMESTAMP_ALIAS: "2024-09-20T12:07:16.647000", DEADLOCK_XML_ALIAS: xml}], + ) as mocked_function: + dd_run_check(check) + mocked_function.assert_not_called() + + DEADLOCKS_PLAN_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), "deadlocks") @@ -198,13 +223,13 @@ def deadlocks_collection_instance(instance_docker): return copy(instance_docker) -def get_deadlock_obj(deadlocks_collection_instance): +def _get_deadlock_obj(deadlocks_collection_instance): check = SQLServer(CHECK_NAME, {}, [deadlocks_collection_instance]) return check.deadlocks def test__create_deadlock_rows(deadlocks_collection_instance): - deadlocks_obj = get_deadlock_obj(deadlocks_collection_instance) + deadlocks_obj = _get_deadlock_obj(deadlocks_collection_instance) xml = _load_test_deadlocks_xml("sqlserver_deadlock_event.xml") with patch.object( Deadlocks, @@ -237,7 +262,7 @@ def test_deadlock_xml_bad_format(deadlocks_collection_instance): """ - deadlocks_obj = get_deadlock_obj(deadlocks_collection_instance) + deadlocks_obj = _get_deadlock_obj(deadlocks_collection_instance) root = ET.fromstring(test_xml) try: deadlocks_obj._obfuscate_xml(root) @@ -312,17 +337,10 @@ def test_deadlock_calls_obfuscator(deadlocks_collection_instance): ) with patch('datadog_checks.sqlserver.deadlocks.Deadlocks.obfuscate_no_except_wrapper', return_value="obfuscated"): - deadlocks_obj = get_deadlock_obj(deadlocks_collection_instance) + deadlocks_obj = _get_deadlock_obj(deadlocks_collection_instance) root = ET.fromstring(test_xml) deadlocks_obj._obfuscate_xml(root) result_string = ET.tostring(root, encoding='unicode') result_string = result_string.replace('\t', '').replace('\n', '') result_string = re.sub(r'\s{2,}', ' ', result_string) assert expected_xml_string == result_string - - -def test__get_lookback_seconds(deadlocks_collection_instance): - deadlocks_obj = get_deadlock_obj(deadlocks_collection_instance) - deadlocks_obj._last_deadlock_timestamp = 100 - lookback_seconds = deadlocks_obj._get_lookback_seconds() - assert isinstance(lookback_seconds, float), "Should return a float" From e5edfdc457222d099d4f6cfbe22dab3d92d333ae Mon Sep 17 00:00:00 2001 From: Bhavik Parmar <84003960+bparmar-crest@users.noreply.github.com> Date: Wed, 2 Oct 2024 21:13:18 +0530 Subject: [PATCH 34/56] [SIEMINT-79] DDSaaS: LastPass: Crawler Integration v1.0.0 (#18225) * Lastpass Crawler integration without Assets * README file modified * Lastpass Crawler integration with assets * Resolved assets error by adding results * Images resolution corrected * Dummy commit to re-run checks * Pipeline re-formatted and dashboard links removed. * Updated pipeline results to resolve logs * Pipeline test comments removed & SVG file added * Review feedbacks incorporated * Typo corrected * Added grok parser for vault item activity logs and related tests * Resolved pipeline tests check failures * Corrected a grok parser query * title and source_type_name changed to natural case * Updated dashboard images * display on public website set to false --------- Co-authored-by: Thibault Krebs <150821137+thibaultkrebs@users.noreply.github.com> Co-authored-by: Mauneel Sorathia --- .github/CODEOWNERS | 16 +- lastpass/CHANGELOG.md | 2 +- lastpass/README.md | 51 +- .../dashboards/lastpass_reporting_events.json | 2528 +++++++++++++++++ lastpass/assets/lastpass.svg | 1623 +++++++++++ lastpass/assets/logs/lastpass.yaml | 225 ++ lastpass/assets/logs/lastpass_tests.yaml | 529 ++++ .../images/lastpass_reporting_events_1.png | Bin 0 -> 207534 bytes .../images/lastpass_reporting_events_2.png | Bin 0 -> 220657 bytes .../images/lastpass_reporting_events_3.png | Bin 0 -> 155414 bytes lastpass/manifest.json | 21 +- 11 files changed, 4980 insertions(+), 15 deletions(-) create mode 100644 lastpass/assets/dashboards/lastpass_reporting_events.json create mode 100644 lastpass/assets/lastpass.svg create mode 100644 lastpass/assets/logs/lastpass.yaml create mode 100644 lastpass/assets/logs/lastpass_tests.yaml create mode 100644 lastpass/images/lastpass_reporting_events_1.png create mode 100644 lastpass/images/lastpass_reporting_events_2.png create mode 100644 lastpass/images/lastpass_reporting_events_3.png diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 2bc60fd26bb13..45f7a00c1f303 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -284,10 +284,10 @@ datadog_checks_base/datadog_checks/base/checks/windows/ @DataDog/wi /mailchimp/*.md @DataDog/saas-integrations @DataDog/documentation /mailchimp/manifest.json @DataDog/saas-integrations @DataDog/documentation -/mimecast/ @DataDog/saas-integrations -/mimecast/*.md @DataDog/saas-integrations @DataDog/documentation -/mimecast/manifest.json @DataDog/saas-integrations @DataDog/documentation -/mimecast/assets/logs/ @DataDog/saas-integrations @DataDog/documentation @DataDog/logs-backend +/mimecast/ @DataDog/saas-integrations +/mimecast/*.md @DataDog/saas-integrations @DataDog/documentation +/mimecast/manifest.json @DataDog/saas-integrations @DataDog/documentation +/mimecast/assets/logs/ @DataDog/saas-integrations @DataDog/documentation @DataDog/logs-backend /palo_alto_cortex_xdr/ @DataDog/saas-integrations /palo_alto_cortex_xdr/*.md @DataDog/saas-integrations @DataDog/documentation @@ -329,10 +329,10 @@ datadog_checks_base/datadog_checks/base/checks/windows/ @DataDog/wi /ringcentral/metadata.csv @DataDog/saas-integrations @DataDog/documentation /ringcentral/assets/logs/ @DataDog/saas-integrations @DataDog/documentation @DataDog/logs-backend -/trend_micro_email_security/ @DataDog/saas-integrations -/trend_micro_email_security/*.md @DataDog/saas-integrations @DataDog/documentation -/trend_micro_email_security/manifest.json @DataDog/saas-integrations @DataDog/documentation -/trend_micro_email_security/assets/logs/ @DataDog/saas-integrations @DataDog/documentation @DataDog/logs-backend +/trend_micro_email_security/ @DataDog/saas-integrations +/trend_micro_email_security/*.md @DataDog/saas-integrations @DataDog/documentation +/trend_micro_email_security/manifest.json @DataDog/saas-integrations @DataDog/documentation +/trend_micro_email_security/assets/logs/ @DataDog/saas-integrations @DataDog/documentation @DataDog/logs-backend /trellix_endpoint_security/ @DataDog/saas-integrations /trellix_endpoint_security/*.md @DataDog/saas-integrations @DataDog/documentation diff --git a/lastpass/CHANGELOG.md b/lastpass/CHANGELOG.md index 18e8eef1a9484..cf44ddc855937 100644 --- a/lastpass/CHANGELOG.md +++ b/lastpass/CHANGELOG.md @@ -4,4 +4,4 @@ ***Added***: -* Initial Release \ No newline at end of file +* Initial Release diff --git a/lastpass/README.md b/lastpass/README.md index 94550af351aba..b73232f5557f3 100644 --- a/lastpass/README.md +++ b/lastpass/README.md @@ -1,29 +1,70 @@ ## Overview -LastPass is a password management solution that securely stores and manages passwords and other sensitive information. LastPass provides users with the ability to generate passwords, synchronize passwords across multiple devices, and add an extra layer of security through multi-factor authentication. +[LastPass][1] is a password management solution that securely stores and manages passwords and other sensitive +information. LastPass provides users with the ability to generate passwords, synchronize passwords across multiple +devices, and add an extra layer of security through multi-factor authentication. + +Integrate LastPass with Datadog to gain insights into reporting event logs through the LastPass Enterprise API. The data is +normalized and enriched before ingestion. Pre-built dashboard visualizations provide immediate insights into LastPass +reporting events, while out-of-the-box detection rules enhance detection and response capabilities. ## Setup ### Configuration -!!! Add list of steps to set up this integration !!! +#### Get config parameters of LastPass + +##### Account number + +1. Log in to the [Admin Console](https://admin.lastpass.com/) with your email address and master password. +2. On the **Dashboard** tab, click the profile email located in the top right corner to find the account number. +3. Alternatively, you can find the account number by navigating to **Advanced** > **Enterprise API**. + +##### Provisioning hash + +1. Log in to the [Admin Console](https://admin.lastpass.com) with your email address and master password. +2. Navigate to **Advanced** > **Enterprise API**. +3. From there, you can create or reset a provisioning hash if you forgot it. + +##### Time zone + +1. The options in the **Time Zone** dropdown menu are based on LastPass' time zone values. +2. You must select the time zone that is configured in your LastPass account. +3. To verify your LastPass account's time zone, do the following: + - Log in to your LastPass Business account. + - Access the [Vault page](https://lastpass.com/vault/). + - Navigate to **Account Settings**. + - Find the selected time zone under the **Account Information** section. -### Validation +#### Configure the LastPass and Datadog integration -!!! Add steps to validate integration is functioning as expected !!! +Configure the Datadog endpoint to forward LastPass logs to Datadog. + +1. Navigate to `LastPass` integration on Datadog platform. +2. Add your LastPass credentials. + +| LastPass Parameters | Description | +|---------------------|----------------------------------------------------------------------| +| Account number | The account number of your registered LastPass account. | +| Provisioning hash | The provisioning hash secret of your registered account on LastPass. | +| Time zone | The time zone of your registered account on LastPass | ## Data Collected ### Logs -The LastPass integration collects and forwards LastPass Reporting Event logs to Datadog. + +The LastPass integration collects and forwards LastPass reporting event logs to Datadog. ### Metrics + The LastPass integration does not include any metrics. ### Events + The LastPass integration does not include any events. ## Support + For further assistance, contact [Datadog Support][2]. [1]: https://www.lastpass.com/products/business diff --git a/lastpass/assets/dashboards/lastpass_reporting_events.json b/lastpass/assets/dashboards/lastpass_reporting_events.json new file mode 100644 index 0000000000000..f03cf1e14b09a --- /dev/null +++ b/lastpass/assets/dashboards/lastpass_reporting_events.json @@ -0,0 +1,2528 @@ +{ + "title": "LastPass - Reporting Events", + "description": "This dashboard provides a comprehensive analysis of reporting events.", + "widgets": [ + { + "id": 366259692847036, + "definition": { + "title": "", + "banner_img": "https://support.lastpass.com/resource/1677168358000/LastpassLogo", + "show_title": false, + "type": "group", + "layout_type": "ordered", + "widgets": [ + { + "id": 5191298634878960, + "definition": { + "type": "note", + "content": "[LastPass](https://www.lastpass.com/products/business) is a password management solution that securely stores and manages passwords and other sensitive\ninformation. LastPass provides users with the ability to generate passwords, synchronize passwords across multiple\ndevices, and add an extra layer of security through multi-factor authentication.\n\nThis dashboard provides a comprehensive analysis of reporting events.\n\n\n**Tips**\n- Use the timeframe selector in the top right of the dashboard to change the default timeframe.\n- Clone this dashboard to rearrange, modify and add widgets and visualizations.", + "background_color": "blue", + "font_size": "14", + "text_align": "left", + "vertical_align": "center", + "show_tick": true, + "tick_pos": "50%", + "tick_edge": "top", + "has_padding": true + }, + "layout": { + "x": 0, + "y": 0, + "width": 4, + "height": 9 + } + } + ] + }, + "layout": { + "x": 0, + "y": 0, + "width": 4, + "height": 12 + } + }, + { + "id": 4721155967459458, + "definition": { + "title": "Login Activity", + "background_color": "vivid_purple", + "show_title": true, + "type": "group", + "layout_type": "ordered", + "widgets": [ + { + "id": 1280501236012426, + "definition": { + "title": "Total LastPass Login Attempts", + "title_size": "16", + "title_align": "left", + "type": "query_value", + "requests": [ + { + "response_format": "scalar", + "queries": [ + { + "data_source": "logs", + "name": "query1", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [], + "search": { + "query": "source:lastpass service:reporting-events @Data:\"LastPass via Website\" $IP_Address $Username" + }, + "storage": "hot" + } + ], + "formulas": [ + { + "formula": "query1" + } + ], + "conditional_formats": [ + { + "comparator": ">", + "value": 0, + "palette": "custom_bg", + "custom_bg_color": "#dbdef5" + } + ] + } + ], + "autoscale": true, + "precision": 2, + "timeseries_background": { + "yaxis": { + "include_zero": true + }, + "type": "area" + } + }, + "layout": { + "x": 0, + "y": 0, + "width": 8, + "height": 3 + } + }, + { + "id": 4438774702454684, + "definition": { + "title": "Successful LastPass Logins", + "title_size": "16", + "title_align": "left", + "type": "query_value", + "requests": [ + { + "response_format": "scalar", + "queries": [ + { + "data_source": "logs", + "name": "query1", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [], + "search": { + "query": "source:lastpass service:reporting-events @Data:\"LastPass via Website\" @evt.name:\"Log in\" $IP_Address $Username" + }, + "storage": "hot" + } + ], + "formulas": [ + { + "formula": "query1" + } + ], + "conditional_formats": [ + { + "comparator": ">", + "value": 0, + "palette": "black_on_light_green" + } + ] + } + ], + "autoscale": true, + "precision": 2, + "timeseries_background": { + "yaxis": { + "include_zero": true + }, + "type": "area" + } + }, + "layout": { + "x": 0, + "y": 3, + "width": 4, + "height": 3 + } + }, + { + "id": 4674596454830660, + "definition": { + "title": "Failed LastPass Logins", + "title_size": "16", + "title_align": "left", + "type": "query_value", + "requests": [ + { + "response_format": "scalar", + "queries": [ + { + "data_source": "logs", + "name": "query1", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [], + "search": { + "query": "source:lastpass service:reporting-events @Data:\"LastPass via Website\" @evt.name:\"Failed login attempt\" $IP_Address $Username" + }, + "storage": "hot" + } + ], + "formulas": [ + { + "formula": "query1" + } + ], + "conditional_formats": [ + { + "comparator": ">", + "value": 0, + "palette": "black_on_light_red" + } + ] + } + ], + "autoscale": true, + "precision": 2, + "timeseries_background": { + "yaxis": { + "include_zero": true + }, + "type": "area" + } + }, + "layout": { + "x": 4, + "y": 3, + "width": 4, + "height": 3 + } + }, + { + "id": 8425364252595370, + "definition": { + "title": "Successful/Failed LastPass Logins Overtime", + "title_size": "16", + "title_align": "left", + "show_legend": true, + "legend_layout": "auto", + "legend_columns": [ + "avg", + "min", + "max", + "value", + "sum" + ], + "type": "timeseries", + "requests": [ + { + "formulas": [ + { + "alias": "Successful ", + "formula": "query1" + }, + { + "alias": "Failed", + "formula": "query2" + } + ], + "queries": [ + { + "data_source": "logs", + "name": "query1", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [], + "search": { + "query": "source:lastpass service:reporting-events @Data:\"LastPass via Website\" @evt.name:\"Log in\" $IP_Address $Username" + }, + "storage": "hot" + }, + { + "data_source": "logs", + "name": "query2", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [], + "search": { + "query": "source:lastpass service:reporting-events @Data:\"LastPass via Website\" @evt.name:\"Failed login attempt\" $IP_Address $Username" + }, + "storage": "hot" + } + ], + "response_format": "timeseries", + "style": { + "palette": "dog_classic", + "order_by": "values", + "line_type": "solid", + "line_width": "normal" + }, + "display_type": "line" + } + ] + }, + "layout": { + "x": 0, + "y": 6, + "width": 8, + "height": 5 + } + } + ] + }, + "layout": { + "x": 4, + "y": 0, + "width": 8, + "height": 12 + } + }, + { + "id": 3843119513260660, + "definition": { + "title": "Datadog Cloud SIEM", + "title_align": "center", + "background_color": "vivid_purple", + "show_title": true, + "type": "group", + "layout_type": "ordered", + "widgets": [ + { + "id": 6185164624143288, + "definition": { + "type": "note", + "content": "Datadog Cloud SIEM analyzes and correlates reporting events to detect real-time threats happening in your LastPass account. If you don't see any signals, make sure you've enabled [Datadog Cloud SIEM](/security).", + "background_color": "blue", + "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": 12, + "height": 1 + } + }, + { + "id": 1846663025930926, + "definition": { + "title": "CRITICALs", + "title_size": "16", + "title_align": "left", + "type": "query_value", + "requests": [ + { + "conditional_formats": [ + { + "comparator": ">", + "custom_bg_color": "#bc303c", + "palette": "custom_bg", + "value": 0 + } + ], + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "data_source": "security_signals", + "name": "query1", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [], + "search": { + "query": "source:lastpass service:reporting-events status:critical" + } + } + ], + "response_format": "scalar" + } + ], + "autoscale": true, + "custom_links": [], + "precision": 2 + }, + "layout": { + "x": 0, + "y": 1, + "width": 2, + "height": 2 + } + }, + { + "id": 5874320444095978, + "definition": { + "title": "MEDIUMs", + "title_size": "16", + "title_align": "left", + "type": "query_value", + "requests": [ + { + "conditional_formats": [ + { + "comparator": ">", + "custom_bg_color": "#e5a21c", + "palette": "custom_bg", + "value": 0 + } + ], + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "data_source": "security_signals", + "name": "query1", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [], + "search": { + "query": "source:lastpass service:reporting-events status:medium" + } + } + ], + "response_format": "scalar" + } + ], + "autoscale": true, + "custom_links": [], + "precision": 2 + }, + "layout": { + "x": 2, + "y": 1, + "width": 2, + "height": 2 + } + }, + { + "id": 7513659035159196, + "definition": { + "title": "Critical Security Signals", + "type": "toplist", + "requests": [ + { + "conditional_formats": [ + { + "comparator": ">", + "custom_bg_color": "#bc303c", + "palette": "custom_bg", + "value": 0 + } + ], + "queries": [ + { + "data_source": "security_signals", + "name": "query1", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [ + { + "facet": "@workflow.rule.name", + "limit": 10, + "sort": { + "order": "desc", + "aggregation": "count" + } + } + ], + "search": { + "query": "source:lastpass service:reporting-events status:critical" + } + } + ], + "response_format": "scalar", + "formulas": [ + { + "formula": "query1" + } + ], + "sort": { + "count": 10, + "order_by": [ + { + "type": "formula", + "index": 0, + "order": "desc" + } + ] + } + } + ], + "custom_links": [ + { + "label": "View related Security Signals", + "link": "/security?query=@workflow.rule.name:{{@workflow.rule.name.value}}&column=time&order=desc&view=signal&start={{timestamp_widget_start}}&end={{timestamp_widget_end}}&paused=false" + } + ], + "style": {} + }, + "layout": { + "x": 4, + "y": 1, + "width": 8, + "height": 4 + } + }, + { + "id": 5570817317099560, + "definition": { + "title": "HIGHs", + "title_size": "16", + "title_align": "left", + "type": "query_value", + "requests": [ + { + "conditional_formats": [ + { + "comparator": ">", + "custom_bg_color": "#d33043", + "palette": "custom_bg", + "value": 0 + } + ], + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "data_source": "security_signals", + "name": "query1", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [], + "search": { + "query": "source:lastpass service:reporting-events status:high" + } + } + ], + "response_format": "scalar" + } + ], + "autoscale": true, + "custom_links": [], + "precision": 2 + }, + "layout": { + "x": 0, + "y": 3, + "width": 2, + "height": 2 + } + }, + { + "id": 8300831351575414, + "definition": { + "title": "LOWs", + "title_size": "16", + "title_align": "left", + "type": "query_value", + "requests": [ + { + "conditional_formats": [ + { + "comparator": ">", + "custom_bg_color": "#bc303c", + "palette": "black_on_light_yellow", + "value": 0 + } + ], + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "data_source": "security_signals", + "name": "query1", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [], + "search": { + "query": "source:lastpass service:reporting-events status:low" + } + } + ], + "response_format": "scalar" + } + ], + "autoscale": true, + "custom_links": [], + "precision": 2 + }, + "layout": { + "x": 2, + "y": 3, + "width": 2, + "height": 1 + } + }, + { + "id": 5019476718522210, + "definition": { + "title": "INFOs", + "title_size": "16", + "title_align": "left", + "type": "query_value", + "requests": [ + { + "conditional_formats": [ + { + "comparator": ">", + "custom_bg_color": "#c9e5ff", + "palette": "custom_bg", + "value": 0 + } + ], + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "data_source": "security_signals", + "name": "query1", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [], + "search": { + "query": "source:lastpass service:reporting-events status:info" + } + } + ], + "response_format": "scalar" + } + ], + "autoscale": true, + "custom_links": [], + "precision": 2 + }, + "layout": { + "x": 2, + "y": 4, + "width": 2, + "height": 1 + } + }, + { + "id": 2394925443650716, + "definition": { + "title": "High Security Signals", + "type": "toplist", + "requests": [ + { + "conditional_formats": [ + { + "comparator": ">", + "custom_bg_color": "#d33043", + "palette": "custom_bg", + "value": 0 + } + ], + "queries": [ + { + "data_source": "security_signals", + "name": "query1", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [ + { + "facet": "@workflow.rule.name", + "limit": 10, + "sort": { + "order": "desc", + "aggregation": "count" + } + } + ], + "search": { + "query": "source:lastpass service:reporting-events status:high" + } + } + ], + "response_format": "scalar", + "formulas": [ + { + "formula": "query1" + } + ], + "sort": { + "count": 10, + "order_by": [ + { + "type": "formula", + "index": 0, + "order": "desc" + } + ] + } + } + ], + "custom_links": [ + { + "label": "View related Security Signals", + "link": "/security?query=@workflow.rule.name:{{@workflow.rule.name.value}}&column=time&order=desc&view=signal&start={{timestamp_widget_start}}&end={{timestamp_widget_end}}&paused=false" + } + ], + "style": {} + }, + "layout": { + "x": 0, + "y": 5, + "width": 6, + "height": 4 + } + }, + { + "id": 4353073577209702, + "definition": { + "title": "Medium Security Signals", + "type": "toplist", + "requests": [ + { + "conditional_formats": [ + { + "comparator": ">", + "custom_bg_color": "#e5a21c", + "palette": "custom_bg", + "value": 0 + } + ], + "queries": [ + { + "data_source": "security_signals", + "name": "query1", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [ + { + "facet": "@workflow.rule.name", + "limit": 10, + "sort": { + "order": "desc", + "aggregation": "count" + } + } + ], + "search": { + "query": "source:lastpass service:reporting-events status:medium" + } + } + ], + "response_format": "scalar", + "formulas": [ + { + "formula": "query1" + } + ], + "sort": { + "count": 10, + "order_by": [ + { + "type": "formula", + "index": 0, + "order": "desc" + } + ] + } + } + ], + "custom_links": [ + { + "label": "View related Security Signals", + "link": "/security?query=@workflow.rule.name:{{@workflow.rule.name.value}}&column=time&order=desc&view=signal&start={{timestamp_widget_start}}&end={{timestamp_widget_end}}&paused=false" + } + ], + "style": {} + }, + "layout": { + "x": 6, + "y": 5, + "width": 6, + "height": 4 + } + } + ] + }, + "layout": { + "x": 0, + "y": 12, + "width": 12, + "height": 10 + } + }, + { + "id": 4693872799867300, + "definition": { + "title": "User Activity", + "background_color": "vivid_purple", + "show_title": true, + "type": "group", + "layout_type": "ordered", + "widgets": [ + { + "id": 5242139185711476, + "definition": { + "title": "Top 10 Active Users", + "title_size": "16", + "title_align": "left", + "type": "toplist", + "requests": [ + { + "queries": [ + { + "data_source": "logs", + "name": "query1", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [ + { + "facet": "@usr.name", + "limit": 10, + "sort": { + "order": "desc", + "aggregation": "count" + } + } + ], + "search": { + "query": "source:lastpass service:reporting-events $IP_Address $Username -@Data:\"Initiated by API\" -@usr.name:\"\" $Event_Name" + }, + "storage": "hot" + } + ], + "response_format": "scalar", + "formulas": [ + { + "formula": "query1" + } + ], + "sort": { + "count": 10, + "order_by": [ + { + "type": "formula", + "index": 0, + "order": "desc" + } + ] + } + } + ], + "style": { + "display": { + "type": "stacked", + "legend": "automatic" + } + } + }, + "layout": { + "x": 0, + "y": 0, + "width": 6, + "height": 4 + } + }, + { + "id": 7392172131225458, + "definition": { + "title": "Users with Disabled MFA Actions", + "title_size": "16", + "title_align": "left", + "type": "toplist", + "requests": [ + { + "queries": [ + { + "data_source": "logs", + "name": "query1", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [ + { + "facet": "@usr.name", + "limit": 10, + "sort": { + "order": "desc", + "aggregation": "count" + } + } + ], + "search": { + "query": "source:lastpass service:reporting-events @evt.name:\"Disabled LastPass Authentication\" -@usr.name:\"\" $IP_Address $Username" + }, + "storage": "hot" + } + ], + "response_format": "scalar", + "formulas": [ + { + "formula": "query1" + } + ], + "sort": { + "count": 10, + "order_by": [ + { + "type": "formula", + "index": 0, + "order": "desc" + } + ] + } + } + ], + "style": { + "display": { + "type": "stacked", + "legend": "automatic" + } + } + }, + "layout": { + "x": 6, + "y": 0, + "width": 6, + "height": 4 + } + }, + { + "id": 6345008047916956, + "definition": { + "title": "Top IPs with Failed Login Attempts", + "title_size": "16", + "title_align": "left", + "type": "toplist", + "requests": [ + { + "queries": [ + { + "data_source": "logs", + "name": "query1", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [ + { + "facet": "@network.client.ip", + "limit": 10, + "sort": { + "order": "desc", + "aggregation": "count" + } + } + ], + "search": { + "query": "source:lastpass service:reporting-events @evt.name:\"Failed login attempt\" $IP_Address $Username" + }, + "storage": "hot" + } + ], + "response_format": "scalar", + "formulas": [ + { + "formula": "query1" + } + ], + "sort": { + "count": 10, + "order_by": [ + { + "type": "formula", + "index": 0, + "order": "desc" + } + ] + } + } + ], + "style": { + "display": { + "type": "stacked", + "legend": "automatic" + } + } + }, + "layout": { + "x": 0, + "y": 4, + "width": 12, + "height": 4 + } + }, + { + "id": 3338231403565158, + "definition": { + "title": "Total Master Password Changed", + "title_size": "16", + "title_align": "left", + "type": "query_value", + "requests": [ + { + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "data_source": "logs", + "name": "query1", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [], + "search": { + "query": "source:lastpass service:reporting-events @evt.name:\"Master password changed\" $IP_Address $Username" + }, + "storage": "hot" + } + ], + "response_format": "scalar", + "conditional_formats": [ + { + "comparator": ">", + "value": 0, + "palette": "custom_bg", + "custom_bg_color": "#dbdef5" + } + ] + } + ], + "autoscale": true, + "precision": 2, + "timeseries_background": { + "type": "area", + "yaxis": { + "include_zero": true + } + } + }, + "layout": { + "x": 0, + "y": 8, + "width": 3, + "height": 4 + } + }, + { + "id": 5816013216282476, + "definition": { + "title": "Top 10 Master Password Changers", + "title_size": "16", + "title_align": "left", + "type": "toplist", + "requests": [ + { + "queries": [ + { + "data_source": "logs", + "name": "query1", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [ + { + "facet": "@usr.name", + "limit": 10, + "sort": { + "order": "desc", + "aggregation": "count" + } + } + ], + "search": { + "query": "source:lastpass service:reporting-events @evt.name:\"Master password changed\" -@usr.name:\"\" $IP_Address $Username" + }, + "storage": "hot" + } + ], + "response_format": "scalar", + "formulas": [ + { + "formula": "query1" + } + ], + "sort": { + "count": 10, + "order_by": [ + { + "type": "formula", + "index": 0, + "order": "desc" + } + ] + } + } + ], + "style": { + "display": { + "type": "stacked", + "legend": "automatic" + } + } + }, + "layout": { + "x": 3, + "y": 8, + "width": 9, + "height": 4 + } + }, + { + "id": 801162268259126, + "definition": { + "title": "Total Password Changed for Sites", + "title_size": "16", + "title_align": "left", + "type": "query_value", + "requests": [ + { + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "data_source": "logs", + "name": "query1", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [], + "search": { + "query": "source:lastpass service:reporting-events @evt.name:\"Password changed\" $IP_Address $Username" + }, + "storage": "hot" + } + ], + "response_format": "scalar", + "conditional_formats": [ + { + "comparator": ">", + "value": 0, + "palette": "custom_bg", + "custom_bg_color": "#dbdef5" + } + ] + } + ], + "autoscale": true, + "precision": 2, + "timeseries_background": { + "type": "area", + "yaxis": { + "include_zero": true + } + } + }, + "layout": { + "x": 0, + "y": 12, + "width": 3, + "height": 4 + } + }, + { + "id": 8500122943944382, + "definition": { + "title": "Top Site Password Changers", + "title_size": "16", + "title_align": "left", + "type": "toplist", + "requests": [ + { + "queries": [ + { + "data_source": "logs", + "name": "query1", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [ + { + "facet": "@usr.name", + "limit": 10, + "sort": { + "order": "desc", + "aggregation": "count" + } + } + ], + "search": { + "query": "source:lastpass service:reporting-events @evt.name:\"Password changed\" -@usr.name:\"\" $IP_Address $Username" + }, + "storage": "hot" + } + ], + "response_format": "scalar", + "formulas": [ + { + "formula": "query1" + } + ], + "sort": { + "count": 10, + "order_by": [ + { + "type": "formula", + "index": 0, + "order": "desc" + } + ] + } + } + ], + "style": { + "display": { + "type": "stacked", + "legend": "automatic" + } + } + }, + "layout": { + "x": 3, + "y": 12, + "width": 9, + "height": 4 + } + }, + { + "id": 728768989256908, + "definition": { + "title": "Site Logins by Country", + "title_size": "16", + "title_align": "left", + "type": "geomap", + "requests": [ + { + "queries": [ + { + "data_source": "logs", + "name": "query1", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [ + { + "facet": "@network.client.geoip.country.iso_code", + "limit": 250, + "sort": { + "order": "desc", + "aggregation": "count" + } + } + ], + "search": { + "query": "source:lastpass service:reporting-events @evt.name:\"Log in\" -@Data:\"Lastpass via website\" $IP_Address $Username" + }, + "storage": "hot" + } + ], + "response_format": "scalar", + "formulas": [ + { + "formula": "query1" + } + ], + "sort": { + "count": 250, + "order_by": [ + { + "type": "formula", + "index": 0, + "order": "desc" + } + ] + } + } + ], + "style": { + "palette": "hostmap_blues", + "palette_flip": false + }, + "view": { + "focus": "WORLD" + } + }, + "layout": { + "x": 0, + "y": 16, + "width": 12, + "height": 4 + } + } + ] + }, + "layout": { + "x": 0, + "y": 22, + "width": 12, + "height": 21 + } + }, + { + "id": 3960011924423096, + "definition": { + "title": "Shared Folder Activity", + "background_color": "vivid_purple", + "show_title": true, + "type": "group", + "layout_type": "ordered", + "widgets": [ + { + "id": 3263778074706804, + "definition": { + "title": "Shared Folder Actions Overtime", + "title_size": "16", + "title_align": "left", + "show_legend": true, + "legend_layout": "horizontal", + "legend_columns": [ + "avg", + "min", + "max", + "value", + "sum" + ], + "type": "timeseries", + "requests": [ + { + "formulas": [ + { + "style": { + "palette": "classic", + "palette_index": 2 + }, + "alias": "Restored shared folder", + "formula": "query1" + }, + { + "style": { + "palette": "cool", + "palette_index": 3 + }, + "alias": "Update folder permissions", + "formula": "query2" + }, + { + "style": { + "palette": "green", + "palette_index": 3 + }, + "alias": "Limit shared folder", + "formula": "query3" + }, + { + "style": { + "palette": "warm", + "palette_index": 3 + }, + "alias": "Removed from shared folder", + "formula": "query4" + }, + { + "style": { + "palette": "gray", + "palette_index": 3 + }, + "alias": "Add to shared folder", + "formula": "query5" + }, + { + "style": { + "palette": "dd20", + "palette_index": 3 + }, + "alias": "Move to shared folder", + "formula": "query6" + }, + { + "style": { + "palette": "warm", + "palette_index": 0 + }, + "alias": "Created shared folder", + "formula": "query7" + }, + { + "style": { + "palette": "orange", + "palette_index": 1 + }, + "alias": "Permanently deleted shared folder", + "formula": "query8" + }, + { + "style": { + "palette": "dd20", + "palette_index": 9 + }, + "alias": "Deleted shared folder", + "formula": "query9" + } + ], + "queries": [ + { + "data_source": "logs", + "name": "query1", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [], + "search": { + "query": "source:lastpass service:reporting-events @evt.name:\"Restored shared folder\" $IP_Address $Username" + }, + "storage": "hot" + }, + { + "data_source": "logs", + "name": "query2", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [], + "search": { + "query": "source:lastpass service:reporting-events @evt.name:\"Update folder permissions\" $IP_Address $Username" + }, + "storage": "hot" + }, + { + "data_source": "logs", + "name": "query3", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [], + "search": { + "query": "source:lastpass service:reporting-events @evt.name:\"Limit shared folder\" $IP_Address $Username" + }, + "storage": "hot" + }, + { + "data_source": "logs", + "name": "query4", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [], + "search": { + "query": "source:lastpass service:reporting-events @evt.name:\"Removed from shared folder\" $IP_Address $Username" + }, + "storage": "hot" + }, + { + "data_source": "logs", + "name": "query5", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [], + "search": { + "query": "source:lastpass service:reporting-events @evt.name:\"Add to shared folder\" $IP_Address $Username" + }, + "storage": "hot" + }, + { + "data_source": "logs", + "name": "query6", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [], + "search": { + "query": "source:lastpass service:reporting-events @evt.name:\"Move to shared folder\" $IP_Address $Username" + }, + "storage": "hot" + }, + { + "data_source": "logs", + "name": "query7", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [], + "search": { + "query": "source:lastpass service:reporting-events @evt.name:\"Created shared folder\" $IP_Address $Username" + }, + "storage": "hot" + }, + { + "data_source": "logs", + "name": "query8", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [], + "search": { + "query": "source:lastpass service:reporting-events @evt.name:\"Permanently deleted shared folder\" $IP_Address $Username" + }, + "storage": "hot" + }, + { + "data_source": "logs", + "name": "query9", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [], + "search": { + "query": "source:lastpass service:reporting-events @evt.name:\"Deleted shared folder\" $IP_Address $Username" + }, + "storage": "hot" + } + ], + "response_format": "timeseries", + "style": { + "palette": "dog_classic", + "order_by": "values", + "line_type": "solid", + "line_width": "normal" + }, + "display_type": "line" + } + ] + }, + "layout": { + "x": 0, + "y": 0, + "width": 12, + "height": 5 + } + }, + { + "id": 2545229658024910, + "definition": { + "title": "Permanently Deleted Shared Folders", + "title_size": "16", + "title_align": "left", + "type": "query_value", + "requests": [ + { + "response_format": "scalar", + "queries": [ + { + "data_source": "logs", + "name": "query1", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [], + "search": { + "query": "source:lastpass service:reporting-events @evt.name:\"Permanently deleted shared folder\" $IP_Address $Username" + }, + "storage": "hot" + } + ], + "formulas": [ + { + "formula": "query1" + } + ], + "conditional_formats": [ + { + "comparator": ">", + "value": 0, + "palette": "black_on_light_red" + } + ] + } + ], + "autoscale": true, + "precision": 2, + "timeseries_background": { + "type": "area", + "yaxis": { + "include_zero": true + } + } + }, + "layout": { + "x": 0, + "y": 5, + "width": 4, + "height": 4 + } + }, + { + "id": 5118784576217878, + "definition": { + "title": "Shared Folder Actions Distribution", + "title_size": "16", + "title_align": "left", + "requests": [ + { + "response_format": "scalar", + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "data_source": "logs", + "name": "query1", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [ + { + "facet": "@evt.name", + "limit": 10, + "sort": { + "order": "desc", + "aggregation": "count" + } + } + ], + "search": { + "query": "source:lastpass service:reporting-events @evt.name:(\"Restored shared folder\" OR \"Update folder permissions\" OR \"Limit shared folder\" OR \"Removed from shared folder\" OR \"Add to shared folder\" OR \"Move to shared folder\" OR \"Created shared folder\" OR \"Permanently deleted shared folder\" OR \"Deleted shared folder\" OR \"Rename shared folder\") $IP_Address $Username" + }, + "storage": "hot" + } + ], + "style": { + "palette": "datadog16" + }, + "sort": { + "count": 10, + "order_by": [ + { + "type": "formula", + "index": 0, + "order": "desc" + } + ] + } + } + ], + "type": "sunburst", + "legend": { + "type": "table" + } + }, + "layout": { + "x": 4, + "y": 5, + "width": 8, + "height": 4 + } + }, + { + "id": 4571288467147354, + "definition": { + "title": "Top Folders and their Users", + "title_size": "16", + "title_align": "left", + "type": "toplist", + "requests": [ + { + "queries": [ + { + "data_source": "logs", + "name": "query1", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [ + { + "facet": "@shared_folder.name", + "limit": 10, + "sort": { + "order": "desc", + "aggregation": "count" + } + }, + { + "facet": "@usr.name", + "limit": 10, + "sort": { + "order": "desc", + "aggregation": "count" + } + } + ], + "search": { + "query": "source:lastpass service:reporting-events @shared_folder.name:* $IP_Address $Username -@shared_folder.name:\"INVALID SHARED FOLDER\" $Event_Name" + }, + "storage": "hot" + } + ], + "response_format": "scalar", + "formulas": [ + { + "formula": "query1" + } + ], + "sort": { + "count": 100, + "order_by": [ + { + "type": "formula", + "index": 0, + "order": "desc" + } + ] + } + } + ], + "style": { + "display": { + "type": "stacked", + "legend": "automatic" + } + } + }, + "layout": { + "x": 0, + "y": 9, + "width": 12, + "height": 4 + } + } + ] + }, + "layout": { + "x": 0, + "y": 43, + "width": 12, + "height": 14, + "is_column_break": true + } + }, + { + "id": 521163664454470, + "definition": { + "title": "Business Admin Activity", + "background_color": "vivid_purple", + "show_title": true, + "type": "group", + "layout_type": "ordered", + "widgets": [ + { + "id": 3518995677108260, + "definition": { + "title": "Total Count of Notified Password Change Events", + "title_size": "16", + "title_align": "left", + "type": "query_value", + "requests": [ + { + "response_format": "scalar", + "queries": [ + { + "data_source": "logs", + "name": "query1", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [], + "search": { + "query": "source:lastpass service:reporting-events @evt.name:\"Require password change\" $IP_Address $Username" + }, + "storage": "hot" + } + ], + "formulas": [ + { + "formula": "query1" + } + ], + "conditional_formats": [ + { + "comparator": ">", + "value": 0, + "palette": "custom_bg", + "custom_bg_color": "#dbdef5" + } + ] + } + ], + "autoscale": true, + "precision": 2, + "timeseries_background": { + "type": "area", + "yaxis": { + "include_zero": true + } + } + }, + "layout": { + "x": 0, + "y": 0, + "width": 5, + "height": 4 + } + }, + { + "id": 3864408125134510, + "definition": { + "title": "Policy Actions Distribution", + "title_size": "16", + "title_align": "left", + "requests": [ + { + "response_format": "scalar", + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "data_source": "logs", + "name": "query1", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [ + { + "facet": "@evt.name", + "limit": 10, + "sort": { + "order": "desc", + "aggregation": "count" + } + } + ], + "search": { + "query": "source:lastpass service:reporting-events @evt.name:(\"Add policy\" OR \"Edit policy\" OR \"Delete policy\" OR \"Update policy users\") $IP_Address $Username" + }, + "storage": "hot" + } + ], + "style": { + "palette": "datadog16" + }, + "sort": { + "count": 10, + "order_by": [ + { + "type": "formula", + "index": 0, + "order": "desc" + } + ] + } + } + ], + "type": "sunburst", + "legend": { + "type": "table" + } + }, + "layout": { + "x": 5, + "y": 0, + "width": 7, + "height": 4 + } + }, + { + "id": 4102109028396586, + "definition": { + "title": "Top 10 Policies and their Actions", + "title_size": "16", + "title_align": "left", + "type": "toplist", + "requests": [ + { + "queries": [ + { + "data_source": "logs", + "name": "query1", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [ + { + "facet": "@policy.name", + "limit": 10, + "sort": { + "order": "desc", + "aggregation": "count" + } + }, + { + "facet": "@evt.name", + "limit": 10, + "sort": { + "order": "desc", + "aggregation": "count" + } + } + ], + "search": { + "query": "source:lastpass service:reporting-events @evt.name:(\"Add policy\" OR \"Edit policy\" OR \"Delete policy\" OR \"Update policy users\") $IP_Address $Username" + }, + "storage": "hot" + } + ], + "response_format": "scalar", + "formulas": [ + { + "formula": "query1" + } + ], + "sort": { + "count": 100, + "order_by": [ + { + "type": "formula", + "index": 0, + "order": "desc" + } + ] + } + } + ], + "style": { + "display": { + "type": "stacked", + "legend": "automatic" + } + } + }, + "layout": { + "x": 0, + "y": 4, + "width": 12, + "height": 4 + } + }, + { + "id": 2158310616321462, + "definition": { + "title": "MFA-Disabled Actions by Admin Overtime", + "title_size": "16", + "title_align": "left", + "show_legend": true, + "legend_layout": "auto", + "legend_columns": [ + "avg", + "min", + "max", + "value", + "sum" + ], + "type": "timeseries", + "requests": [ + { + "formulas": [ + { + "alias": "MFA Disabled", + "formula": "query1" + } + ], + "queries": [ + { + "data_source": "logs", + "name": "query1", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [], + "search": { + "query": "source:lastpass service:reporting-events @evt.name:(Disabled OR \"Disabled LastPass Authentication\") $IP_Address $Username" + }, + "storage": "hot" + } + ], + "response_format": "timeseries", + "style": { + "palette": "dog_classic", + "order_by": "values", + "line_type": "solid", + "line_width": "normal" + }, + "display_type": "line" + } + ] + }, + "layout": { + "x": 0, + "y": 8, + "width": 12, + "height": 4 + } + }, + { + "id": 4398728177105610, + "definition": { + "title": "Employee Account Actions Distribution", + "title_size": "16", + "title_align": "left", + "requests": [ + { + "response_format": "scalar", + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "data_source": "logs", + "name": "query1", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [ + { + "facet": "@evt.name", + "limit": 10, + "sort": { + "order": "desc", + "aggregation": "count" + } + } + ], + "search": { + "query": "source:lastpass service:reporting-events @evt.name:(\"Created LastPass account\" OR \"Employee account created\" OR \"Employee account deleted\" OR \"Employee invited\" OR \"Employee account requires activation\") $IP_Address $Username" + }, + "storage": "hot" + } + ], + "style": { + "palette": "datadog16" + }, + "sort": { + "count": 10, + "order_by": [ + { + "type": "formula", + "index": 0, + "order": "desc" + } + ] + } + } + ], + "type": "sunburst", + "legend": { + "type": "table" + } + }, + "layout": { + "x": 0, + "y": 12, + "width": 6, + "height": 4 + } + }, + { + "id": 848330169767050, + "definition": { + "title": "Group Actions Distribution", + "title_size": "16", + "title_align": "left", + "requests": [ + { + "response_format": "scalar", + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "data_source": "logs", + "name": "query1", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [ + { + "facet": "@evt.name", + "limit": 10, + "sort": { + "order": "desc", + "aggregation": "count" + } + } + ], + "search": { + "query": "source:lastpass service:reporting-events @evt.name:(\"Rename group\" OR \"Delete group\" OR \"Create group\" OR \"Remove from group\" OR \"Adding user to group\") $IP_Address $Username" + }, + "storage": "hot" + } + ], + "style": { + "palette": "datadog16" + }, + "sort": { + "count": 10, + "order_by": [ + { + "type": "formula", + "index": 0, + "order": "desc" + } + ] + } + } + ], + "type": "sunburst", + "legend": { + "type": "table" + } + }, + "layout": { + "x": 6, + "y": 12, + "width": 6, + "height": 4 + } + }, + { + "id": 1912396428941678, + "definition": { + "title": "Total Password Reuse", + "title_size": "16", + "title_align": "left", + "type": "query_value", + "requests": [ + { + "response_format": "scalar", + "queries": [ + { + "data_source": "logs", + "name": "query1", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [], + "search": { + "query": "source:lastpass service:reporting-events @evt.name:\"Password reuse\" $IP_Address $Username" + }, + "storage": "hot" + } + ], + "formulas": [ + { + "formula": "query1" + } + ], + "conditional_formats": [ + { + "comparator": ">", + "value": 0, + "palette": "black_on_light_red" + } + ] + } + ], + "autoscale": true, + "precision": 2 + }, + "layout": { + "x": 0, + "y": 16, + "width": 4, + "height": 4 + } + }, + { + "id": 6489114963667280, + "definition": { + "title": "Top 10 Groups and their Actions", + "title_size": "16", + "title_align": "left", + "type": "toplist", + "requests": [ + { + "queries": [ + { + "data_source": "logs", + "name": "query1", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [ + { + "facet": "@group.name", + "limit": 10, + "sort": { + "order": "desc", + "aggregation": "count" + } + }, + { + "facet": "@evt.name", + "limit": 10, + "sort": { + "order": "desc", + "aggregation": "count" + } + } + ], + "search": { + "query": "source:lastpass service:reporting-events @evt.name:(\"Rename group\" OR \"Delete group\" OR \"Create group\" OR \"Remove from group\" OR \"Adding user to group\") $IP_Address $Username" + }, + "storage": "hot" + } + ], + "response_format": "scalar", + "formulas": [ + { + "formula": "query1" + } + ], + "sort": { + "count": 100, + "order_by": [ + { + "type": "formula", + "index": 0, + "order": "desc" + } + ] + } + } + ], + "style": { + "display": { + "type": "stacked", + "legend": "automatic" + } + } + }, + "layout": { + "x": 4, + "y": 16, + "width": 8, + "height": 4 + } + }, + { + "id": 1577864555655948, + "definition": { + "title": "Reactivated/Deactivated Users Overtime", + "title_size": "16", + "title_align": "left", + "show_legend": true, + "legend_layout": "auto", + "legend_columns": [ + "avg", + "min", + "max", + "value", + "sum" + ], + "type": "timeseries", + "requests": [ + { + "formulas": [ + { + "alias": "Reactivated User", + "formula": "query1" + }, + { + "alias": "Deactivated User", + "formula": "query2" + } + ], + "queries": [ + { + "data_source": "logs", + "name": "query1", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [], + "search": { + "query": "source:lastpass service:reporting-events @evt.name:\"Reactivated user\" $IP_Address $Username" + }, + "storage": "hot" + }, + { + "data_source": "logs", + "name": "query2", + "indexes": [ + "*" + ], + "compute": { + "aggregation": "count" + }, + "group_by": [], + "search": { + "query": "source:lastpass service:reporting-events @evt.name:\"Deactivated user\" $IP_Address $Username" + }, + "storage": "hot" + } + ], + "response_format": "timeseries", + "style": { + "palette": "dog_classic", + "order_by": "values", + "line_type": "solid", + "line_width": "normal" + }, + "display_type": "line" + } + ] + }, + "layout": { + "x": 0, + "y": 20, + "width": 12, + "height": 4 + } + }, + { + "id": 3037648160947038, + "definition": { + "title": "Reporting Event List", + "title_size": "16", + "title_align": "left", + "requests": [ + { + "response_format": "event_list", + "query": { + "data_source": "logs_stream", + "query_string": "source:lastpass service:reporting-events $IP_Address $Username -@Data:\"Initiated by API\" $Event_Name ", + "indexes": [], + "storage": "hot", + "sort": { + "order": "desc", + "column": "timestamp" + } + }, + "columns": [ + { + "field": "status_line", + "width": "auto" + }, + { + "field": "timestamp", + "width": "auto" + }, + { + "field": "@network.client.ip", + "width": "auto" + }, + { + "field": "@usr.name", + "width": "auto" + }, + { + "field": "@evt.name", + "width": "auto" + }, + { + "field": "content", + "width": "auto" + } + ] + } + ], + "type": "list_stream" + }, + "layout": { + "x": 0, + "y": 24, + "width": 12, + "height": 4 + } + } + ] + }, + "layout": { + "x": 0, + "y": 57, + "width": 12, + "height": 29 + } + } + ], + "template_variables": [ + { + "name": "Username", + "prefix": "@usr.name", + "available_values": [], + "default": "*" + }, + { + "name": "IP_Address", + "prefix": "@network.client.ip", + "available_values": [], + "default": "*" + }, + { + "name": "Event_Name", + "prefix": "@evt.name", + "available_values": [], + "default": "*" + } + ], + "layout_type": "ordered", + "notify_list": [], + "reflow_type": "fixed" +} diff --git a/lastpass/assets/lastpass.svg b/lastpass/assets/lastpass.svg new file mode 100644 index 0000000000000..5b4b646981c8d --- /dev/null +++ b/lastpass/assets/lastpass.svg @@ -0,0 +1,1623 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lastpass/assets/logs/lastpass.yaml b/lastpass/assets/logs/lastpass.yaml new file mode 100644 index 0000000000000..d842adb438fa3 --- /dev/null +++ b/lastpass/assets/logs/lastpass.yaml @@ -0,0 +1,225 @@ +id: lastpass +metric_id: lastpass +backend_only: false +facets: + - groups: + - Event + name: Event Name + path: evt.name + source: log + - groups: + - Geoip + name: City Name + path: network.client.geoip.city.name + source: log + - groups: + - Geoip + name: Continent Code + path: network.client.geoip.continent.code + source: log + - groups: + - Geoip + name: Continent Name + path: network.client.geoip.continent.name + source: log + - groups: + - Geoip + name: Country ISO Code + path: network.client.geoip.country.iso_code + source: log + - groups: + - Geoip + name: Country Name + path: network.client.geoip.country.name + source: log + - groups: + - Geoip + name: Subdivision ISO Code + path: network.client.geoip.subdivision.iso_code + source: log + - groups: + - Geoip + name: Subdivision Name + path: network.client.geoip.subdivision.name + source: log + - groups: + - Web Access + name: Client IP + path: network.client.ip + source: log + - groups: + - User + name: User Name + path: usr.name + source: log +pipeline: + type: pipeline + name: LastPass + enabled: true + filter: + query: "source:lastpass" + processors: + - type: attribute-remapper + name: Map `IP_Address` to `network.client.ip` + enabled: true + sources: + - IP_Address + sourceType: attribute + target: network.client.ip + targetType: attribute + preserveSource: false + overrideOnConflict: false + - type: attribute-remapper + name: Map `Username` to `usr.name` + enabled: true + sources: + - Username + sourceType: attribute + target: usr.name + targetType: attribute + preserveSource: false + overrideOnConflict: false + - type: attribute-remapper + name: Map `Action` to `evt.name` + enabled: true + sources: + - Action + sourceType: attribute + target: evt.name + targetType: attribute + preserveSource: false + overrideOnConflict: false + - type: geo-ip-parser + name: Define `network.client.ip` as default geoip attribute for source + enabled: true + sources: + - network.client.ip + target: network.client.geoip + ip_processing_behavior: do-nothing + - type: pipeline + name: Group Related Activity + enabled: true + filter: + query: '@evt.name:("Rename group" OR "Delete group" OR "Create group" OR "Remove + from group" OR "Adding user to group") ' + processors: + - type: grok-parser + name: Parsing Group Related Info Attribute + enabled: true + source: Data + samples: + - "'Groupabcde'" + - "'Group3' to 'Groupabcde'" + - "'Group3' 'test@abc.com'" + - test@abc.com - Group3 + grok: + supportRules: "" + matchRules: >- + modified_user_added %{notSpace:group.modified_user} \- + %{greedyData:group.name} + + modified_user_removed \'%{greedyData:group.name}\' \'%{notSpace:group.modified_user}\' + + renamed \'%{greedyData:group.oldname}\' to \'%{greedyData:group.name}\' + + add_delete \'%{greedyData:group.name}\' + - type: pipeline + name: Shared Folder Activity + enabled: true + filter: + query: '@evt.name:("Restored shared folder" OR "Update folder permissions" OR + "Limit shared folder" OR "Removed from shared folder" OR "Add to + shared folder" OR "Move to shared folder" OR "Created shared folder" + OR "Permanently deleted shared folder" OR "Deleted shared folder") ' + processors: + - type: grok-parser + name: Parsing Shared Folder Info Attribute + enabled: true + source: Data + samples: + - Testing_data + - "VID: 8931324857103585383 to Testing_data" + - "'Testing_data' 'test@abc.com' 'Read only:no Admin:yes Hide PW:yes" + - "'Testing_data' 'test@abc.com'" + - "VID: 4364210409355695795" + grok: + supportRules: "" + matchRules: >+ + permission_change \'%{greedyData:shared_folder.name}\' + \'%{notSpace:shared_folder.modified_user}\' \'Read + only\:%{word:shared_folder.permissions.read_only} + Admin\:%{word:shared_folder.permissions.is_admin} Hide + PW\:%{word:shared_folder.permissions.hide_password} + + move_to VID\: %{numberStr:shared_folder.VID} to %{greedyData:shared_folder.name} + + removed_added \'%{greedyData:shared_folder.name}\' \'%{notSpace:shared_folder.modified_user}\' + + move_to_without_folder VID\: %{numberStr:shared_folder.VID} + + limit_shared %{greedyData:shared_folder.name} %{notSpace:shared_folder.modified_user} + + create_delete_permanetly_restored %{greedyData:shared_folder.name} + + - type: pipeline + name: Rename Shared Folder Activity + enabled: true + filter: + query: '@evt.name:"Renamed shared folder" ' + processors: + - type: grok-parser + name: Parsing Folder Rename Info Attribute + enabled: true + source: Data + samples: + - "'Testing_data' 'Testing_data_abc'" + grok: + supportRules: "" + matchRules: rename \'%{greedyData:shared_folder.old_name}\' + \'%{greedyData:shared_folder.name}\' + - type: pipeline + name: Policy Related Actions + enabled: true + filter: + query: '@evt.name:("Add policy" OR "Edit policy" OR "Delete policy" OR "Update + policy users") ' + processors: + - type: grok-parser + name: Parsing Policy Related Activity Attribute + enabled: true + source: Data + samples: + - 'Length of site passwords New value: !@# abc.com = 1"' + - Length of site passwords + grok: + supportRules: "" + matchRules: >- + modify %{greedyData:policy.name} New value: + %{greedyData:policy.new_values} + + add %{greedyData:policy.name} + - type: pipeline + name: Vault Item Related Activity + enabled: true + filter: + query: '@evt.name:("Edit secure note" OR "Add secure note" OR "Open secure note" + OR "Site changed" OR "Deleted sites" OR "Site added" OR "Password + changed" OR "Username changed" OR "Log in") -@Data:"LastPass via + Website" ' + processors: + - type: grok-parser + name: Parsing Vault Item Related Info Attribute + enabled: true + source: Data + samples: + - "Secure Note (VID: 1965737432614185751)" + - "VID: 4963227935627314198" + - "VID: 7114762062923152782 from Common_DataDog_Creds" + grok: + supportRules: "" + matchRules: > + Add_Edit_Open Secure Note \(VID\: %{numberStr:VID}\) + + login_sharedfolder VID\: %{numberStr:VID} from %{greedyData:shared_folder.name} + + Site_added_deleted_login_changed_Password_Username_changed VID\: %{numberStr:VID} diff --git a/lastpass/assets/logs/lastpass_tests.yaml b/lastpass/assets/logs/lastpass_tests.yaml new file mode 100644 index 0000000000000..90ab9c1d541bd --- /dev/null +++ b/lastpass/assets/logs/lastpass_tests.yaml @@ -0,0 +1,529 @@ +id: lastpass +tests: + - sample: |- + { + "Time": "2024-08-06 05:16:17", + "Username": "abc@test.com", + "IP_Address": "10.10.10.10", + "Action": "Remove from group", + "Data": "'Group3' 'cdd@test.com'", + "timestamp": 1722921377000.0 + } + result: + custom: + Data: "'Group3' 'cdd@test.com'" + Time: "2024-08-06 05:16:17" + evt: + name: "Remove from group" + group: + modified_user: "cdd@test.com" + name: "Group3" + network: + client: + geoip: { } + ip: "10.10.10.10" + timestamp: 1.722921377E12 + usr: + name: "abc@test.com" + message: |- + { + "Action" : "Remove from group", + "Username" : "abc@test.com", + "Time" : "2024-08-06 05:16:17", + "Data" : "'Group3' 'cdd@test.com'", + "IP_Address" : "10.10.10.10", + "timestamp" : 1.722921377E12 + } + tags: + - "source:LOGS_SOURCE" + - sample: |- + { + "Time": "2024-08-06 05:16:17", + "Username": "abc@test.com", + "IP_Address": "10.10.10.10", + "Action": "Adding user to group", + "Data": "cdd@test.com - Group3", + "timestamp": 1722921377000.0 + } + result: + custom: + Data: "cdd@test.com - Group3" + Time: "2024-08-06 05:16:17" + evt: + name: "Adding user to group" + group: + modified_user: "cdd@test.com" + name: "Group3" + network: + client: + geoip: { } + ip: "10.10.10.10" + timestamp: 1.722921377E12 + usr: + name: "abc@test.com" + message: |- + { + "Action" : "Adding user to group", + "Username" : "abc@test.com", + "Time" : "2024-08-06 05:16:17", + "Data" : "cdd@test.com - Group3", + "IP_Address" : "10.10.10.10", + "timestamp" : 1.722921377E12 + } + tags: + - "source:LOGS_SOURCE" + - sample: |- + { + "Time": "2024-08-06 05:16:17", + "Username": "abc@test.com", + "IP_Address": "10.10.10.10", + "Action": "Add to shared folder", + "Data": "'shared by name1' 'cdd@test.com'", + "timestamp": 1722921377000.0 + } + result: + custom: + Data: "'shared by name1' 'cdd@test.com'" + Time: "2024-08-06 05:16:17" + evt: + name: "Add to shared folder" + network: + client: + geoip: { } + ip: "10.10.10.10" + shared_folder: + modified_user: "cdd@test.com" + name: "shared by name1" + timestamp: 1.722921377E12 + usr: + name: "abc@test.com" + message: |- + { + "Action" : "Add to shared folder", + "Username" : "abc@test.com", + "Time" : "2024-08-06 05:16:17", + "Data" : "'shared by name1' 'cdd@test.com'", + "IP_Address" : "10.10.10.10", + "timestamp" : 1.722921377E12 + } + tags: + - "source:LOGS_SOURCE" + - sample: |- + { + "Time": "2024-08-06 05:16:17", + "Username": "abc@test.com", + "IP_Address": "10.10.10.10", + "Action": "Move to shared folder", + "Data": "VID: 4901555952779484761 to Common_DataDog_Creds", + "timestamp": 1722921377000.0 + } + result: + custom: + Data: "VID: 4901555952779484761 to Common_DataDog_Creds" + Time: "2024-08-06 05:16:17" + evt: + name: "Move to shared folder" + network: + client: + geoip: { } + ip: "10.10.10.10" + shared_folder: + VID: "4901555952779484761" + name: "Common_DataDog_Creds" + timestamp: 1.722921377E12 + usr: + name: "abc@test.com" + message: |- + { + "Action" : "Move to shared folder", + "Username" : "abc@test.com", + "Time" : "2024-08-06 05:16:17", + "Data" : "VID: 4901555952779484761 to Common_DataDog_Creds", + "IP_Address" : "10.10.10.10", + "timestamp" : 1.722921377E12 + } + tags: + - "source:LOGS_SOURCE" + - sample: |- + { + "Time": "2024-08-06 05:16:17", + "Username": "abc@test.com", + "IP_Address": "10.10.10.10", + "Action": "Removed from shared folder", + "Data": "'Testing_data' 'cdd@test.com'", + "timestamp": 1722921377000.0 + } + result: + custom: + Data: "'Testing_data' 'cdd@test.com'" + Time: "2024-08-06 05:16:17" + evt: + name: "Removed from shared folder" + network: + client: + geoip: { } + ip: "10.10.10.10" + shared_folder: + modified_user: "cdd@test.com" + name: "Testing_data" + timestamp: 1.722921377E12 + usr: + name: "abc@test.com" + message: |- + { + "Action" : "Removed from shared folder", + "Username" : "abc@test.com", + "Time" : "2024-08-06 05:16:17", + "Data" : "'Testing_data' 'cdd@test.com'", + "IP_Address" : "10.10.10.10", + "timestamp" : 1.722921377E12 + } + tags: + - "source:LOGS_SOURCE" + - sample: |- + { + "Time": "2024-08-06 05:16:17", + "Username": "abc@test.com", + "IP_Address": "10.10.10.10", + "Action": "Renamed shared folder", + "Data": "'shared by name1' 'shared by name2'", + "timestamp": 1722921377000.0 + } + result: + custom: + Data: "'shared by name1' 'shared by name2'" + Time: "2024-08-06 05:16:17" + evt: + name: "Renamed shared folder" + network: + client: + geoip: { } + ip: "10.10.10.10" + shared_folder: + name: "shared by name2" + old_name: "shared by name1" + timestamp: 1.722921377E12 + usr: + name: "abc@test.com" + message: |- + { + "Action" : "Renamed shared folder", + "Username" : "abc@test.com", + "Time" : "2024-08-06 05:16:17", + "Data" : "'shared by name1' 'shared by name2'", + "IP_Address" : "10.10.10.10", + "timestamp" : 1.722921377E12 + } + tags: + - "source:LOGS_SOURCE" + - sample: |- + { + "Time": "2024-08-06 05:16:17", + "Username": "abc@test.com", + "IP_Address": "10.10.10.10", + "Action": "Add policy", + "Data": "Length of site passwords", + "timestamp": 1722921377000.0 + } + result: + custom: + Data: "Length of site passwords" + Time: "2024-08-06 05:16:17" + evt: + name: "Add policy" + network: + client: + geoip: { } + ip: "10.10.10.10" + policy: + name: "Length of site passwords" + timestamp: 1.722921377E12 + usr: + name: "abc@test.com" + message: |- + { + "Action" : "Add policy", + "Username" : "abc@test.com", + "Time" : "2024-08-06 05:16:17", + "Data" : "Length of site passwords", + "IP_Address" : "10.10.10.10", + "timestamp" : 1.722921377E12 + } + tags: + - "source:LOGS_SOURCE" + - sample: |- + { + "Time": "2024-08-06 05:16:17", + "Username": "abc@test.com", + "IP_Address": "10.10.10.10", + "Action": "Edit policy", + "Data": "Length of site passwords New value: test.com=8", + "timestamp": 1722921377000.0 + } + result: + custom: + Data: "Length of site passwords New value: test.com=8" + Time: "2024-08-06 05:16:17" + evt: + name: "Edit policy" + network: + client: + geoip: { } + ip: "10.10.10.10" + policy: + name: "Length of site passwords" + new_values: "test.com=8" + timestamp: 1.722921377E12 + usr: + name: "abc@test.com" + message: |- + { + "Action" : "Edit policy", + "Username" : "abc@test.com", + "Time" : "2024-08-06 05:16:17", + "Data" : "Length of site passwords New value: test.com=8", + "IP_Address" : "10.10.10.10", + "timestamp" : 1.722921377E12 + } + tags: + - "source:LOGS_SOURCE" + - sample: |- + { + "Time": "2024-08-06 05:16:17", + "Username": "abc@test.com", + "IP_Address": "10.10.10.10", + "Action": "Site added", + "Data": "VID: 5516541713708306640 from SFolder33", + "timestamp": 1722921377000.0 + } + result: + custom: + Data: "VID: 5516541713708306640 from SFolder33" + Time: "2024-08-06 05:16:17" + VID: "5516541713708306640" + evt: + name: "Site added" + network: + client: + geoip: {} + ip: "10.10.10.10" + shared_folder: + name: "SFolder33" + timestamp: 1.722921377E12 + usr: + name: "abc@test.com" + message: |- + { + "Action" : "Site added", + "Username" : "abc@test.com", + "Time" : "2024-08-06 05:16:17", + "Data" : "VID: 5516541713708306640 from SFolder33", + "IP_Address" : "10.10.10.10", + "timestamp" : 1.722921377E12 + } + tags: + - "source:LOGS_SOURCE" + - sample: |- + { + "Time": "2024-08-06 05:16:17", + "Username": "abc@test.com", + "IP_Address": "10.10.10.10", + "Action": "Username changed", + "Data": "VID: 4963227935627314198", + "timestamp": 1722921377000.0 + } + result: + custom: + Data: "VID: 4963227935627314198" + Time: "2024-08-06 05:16:17" + VID: "4963227935627314198" + evt: + name: "Username changed" + network: + client: + geoip: {} + ip: "10.10.10.10" + timestamp: 1.722921377E12 + usr: + name: "abc@test.com" + message: |- + { + "Action" : "Username changed", + "Username" : "abc@test.com", + "Time" : "2024-08-06 05:16:17", + "Data" : "VID: 4963227935627314198", + "IP_Address" : "10.10.10.10", + "timestamp" : 1.722921377E12 + } + tags: + - "source:LOGS_SOURCE" + - sample: |- + { + "Time": "2024-08-06 05:16:17", + "Username": "abc@test.com", + "IP_Address": "10.10.10.10", + "Action": "Password changed", + "Data": "VID: 4963227935627314198", + "timestamp": 1722921377000.0 + } + result: + custom: + Data: "VID: 4963227935627314198" + Time: "2024-08-06 05:16:17" + VID: "4963227935627314198" + evt: + name: "Password changed" + network: + client: + geoip: {} + ip: "10.10.10.10" + timestamp: 1.722921377E12 + usr: + name: "abc@test.com" + message: |- + { + "Action" : "Password changed", + "Username" : "abc@test.com", + "Time" : "2024-08-06 05:16:17", + "Data" : "VID: 4963227935627314198", + "IP_Address" : "10.10.10.10", + "timestamp" : 1.722921377E12 + } + tags: + - "source:LOGS_SOURCE" + - sample: |- + { + "Time": "2024-08-06 05:16:17", + "Username": "abc@test.com", + "IP_Address": "10.10.10.10", + "Action": "Site changed", + "Data": "VID: 8129207370202608594", + "timestamp": 1722921377000.0 + } + result: + custom: + Data: "VID: 8129207370202608594" + Time: "2024-08-06 05:16:17" + VID: "8129207370202608594" + evt: + name: "Site changed" + network: + client: + geoip: {} + ip: "10.10.10.10" + timestamp: 1.722921377E12 + usr: + name: "abc@test.com" + message: |- + { + "Action" : "Site changed", + "Username" : "abc@test.com", + "Time" : "2024-08-06 05:16:17", + "Data" : "VID: 8129207370202608594", + "IP_Address" : "10.10.10.10", + "timestamp" : 1.722921377E12 + } + tags: + - "source:LOGS_SOURCE" + - sample: |- + { + "Time": "2024-08-06 05:16:17", + "Username": "abc@test.com", + "IP_Address": "10.10.10.10", + "Action": "Deleted sites", + "Data": "VID: 8802943594384138037", + "timestamp": 1722921377000.0 + } + result: + custom: + Data: "VID: 8802943594384138037" + Time: "2024-08-06 05:16:17" + VID: "8802943594384138037" + evt: + name: "Deleted sites" + network: + client: + geoip: {} + ip: "10.10.10.10" + timestamp: 1.722921377E12 + usr: + name: "abc@test.com" + message: |- + { + "Action" : "Deleted sites", + "Username" : "abc@test.com", + "Time" : "2024-08-06 05:16:17", + "Data" : "VID: 8802943594384138037", + "IP_Address" : "10.10.10.10", + "timestamp" : 1.722921377E12 + } + tags: + - "source:LOGS_SOURCE" + - sample: |- + { + "Time": "2024-08-06 05:16:17", + "Username": "abc@test.com", + "IP_Address": "10.10.10.10", + "Action": "Log in", + "Data": "VID: 4963227935627314198", + "timestamp": 1722921377000.0 + } + result: + custom: + Data: "VID: 4963227935627314198" + Time: "2024-08-06 05:16:17" + VID: "4963227935627314198" + evt: + name: "Log in" + network: + client: + geoip: {} + ip: "10.10.10.10" + timestamp: 1.722921377E12 + usr: + name: "abc@test.com" + message: |- + { + "Action" : "Log in", + "Username" : "abc@test.com", + "Time" : "2024-08-06 05:16:17", + "Data" : "VID: 4963227935627314198", + "IP_Address" : "10.10.10.10", + "timestamp" : 1.722921377E12 + } + tags: + - "source:LOGS_SOURCE" + - sample: |- + { + "Time": "2024-08-06 05:16:17", + "Username": "abc@test.com", + "IP_Address": "10.10.10.10", + "Action": "Open secure note", + "Data": "Secure Note (VID: 7608813617878138489)", + "timestamp": 1722921377000.0 + } + result: + custom: + Data: "Secure Note (VID: 7608813617878138489)" + Time: "2024-08-06 05:16:17" + VID: "7608813617878138489" + evt: + name: "Open secure note" + network: + client: + geoip: {} + ip: "10.10.10.10" + timestamp: 1.722921377E12 + usr: + name: "abc@test.com" + message: |- + { + "Action" : "Open secure note", + "Username" : "abc@test.com", + "Time" : "2024-08-06 05:16:17", + "Data" : "Secure Note (VID: 7608813617878138489)", + "IP_Address" : "10.10.10.10", + "timestamp" : 1.722921377E12 + } + tags: + - "source:LOGS_SOURCE" \ No newline at end of file diff --git a/lastpass/images/lastpass_reporting_events_1.png b/lastpass/images/lastpass_reporting_events_1.png new file mode 100644 index 0000000000000000000000000000000000000000..20013e1f29fb9886a8c0fa5f2054b500d6046319 GIT binary patch literal 207534 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�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

8rgURrlAAs6{Er&FG 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 z

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 LP4@ExSm6Hvee?d& literal 0 HcmV?d00001 diff --git a/lastpass/images/lastpass_reporting_events_2.png b/lastpass/images/lastpass_reporting_events_2.png new file mode 100644 index 0000000000000000000000000000000000000000..0884178fb0b1ca2235e26c298b566266cf5bc4b0 GIT binary patch literal 220657 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�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 literal 0 HcmV?d00001 diff --git a/lastpass/images/lastpass_reporting_events_3.png b/lastpass/images/lastpass_reporting_events_3.png new file mode 100644 index 0000000000000000000000000000000000000000..9eadfc44f34bdde5b023f10857b000c067d033e4 GIT binary patch literal 155414 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 Date: Wed, 2 Oct 2024 12:24:18 -0400 Subject: [PATCH 35/56] [mongo] include clustername & database_instance in service check tags (#18751) * include clustername in service check * add changelog * add database_instance tag to service check * update changelog * update changelog * fix lint --- mongo/changelog.d/18751.added | 1 + mongo/datadog_checks/mongo/config.py | 2 ++ mongo/datadog_checks/mongo/mongo.py | 6 ++++++ 3 files changed, 9 insertions(+) create mode 100644 mongo/changelog.d/18751.added diff --git a/mongo/changelog.d/18751.added b/mongo/changelog.d/18751.added new file mode 100644 index 0000000000000..13b26ddcc81f4 --- /dev/null +++ b/mongo/changelog.d/18751.added @@ -0,0 +1 @@ +Include tag `clustername` & `database_instance` in mongo service check tags diff --git a/mongo/datadog_checks/mongo/config.py b/mongo/datadog_checks/mongo/config.py index 78e3b9c690c87..06fa2f9dd5c24 100644 --- a/mongo/datadog_checks/mongo/config.py +++ b/mongo/datadog_checks/mongo/config.py @@ -148,6 +148,8 @@ def _compute_service_check_tags(self): main_host, main_port = main_host.split(':') service_check_tags = ["db:%s" % self.db_name, "host:%s" % main_host, "port:%s" % main_port] + self._base_tags + if self.cluster_name: + service_check_tags.append('clustername:%s' % self.cluster_name) return service_check_tags def _compute_metric_tags(self): diff --git a/mongo/datadog_checks/mongo/mongo.py b/mongo/datadog_checks/mongo/mongo.py index c96fbf18af3ea..bb68d63b0c29b 100644 --- a/mongo/datadog_checks/mongo/mongo.py +++ b/mongo/datadog_checks/mongo/mongo.py @@ -259,6 +259,12 @@ def _get_tags(self, include_internal_resource_tags=False): tags.extend(self.deployment_type.replset_tags) return tags + def _get_service_check_tags(self): + tags = deepcopy(self._config.service_check_tags) + if self._resolved_hostname: + tags.append(f"database_instance:{self._resolved_hostname}") + return tags + def check(self, _): try: self._refresh_metadata() From 5e332db054319dc6ae68efdade8ced1cb248fc25 Mon Sep 17 00:00:00 2001 From: DhruvaPatel-crest Date: Thu, 3 Oct 2024 00:28:36 +0530 Subject: [PATCH 36/56] [SIEMINT-83] DDSaaS: GoDaddy: Crawler Integration v1.0.0 (#18351) * Initial Commit * updated tags for monitors * updated labeler file * update metadata.csv * updated readme file * removed non ascii characters from readme.md * Fix: updated dashobards, monitors and images * updated monitors * resolve pipeline failures * Updated display on public website to false in manifest.json * Updated CODEOWNERS file * Updated README.md file * Resolved PR comments * Updated metadata.csv file --------- Co-authored-by: vraj.patel Co-authored-by: Akshit Vaid --- godaddy/README.md | 47 +- .../assets/dashboards/godaddy_overview.json | 733 ++++++++++++++++++ godaddy/assets/godaddy.svg | 1 + .../monitors/godaddy_certificate_denied.json | 35 + .../monitors/godaddy_certificate_expired.json | 35 + ...godaddy_certificate_in_an_error_state.json | 35 + .../monitors/godaddy_certificate_revoked.json | 35 + ...maining_for_expiration_of_certificate.json | 35 + .../godaddy_domain_dropped_from_request.json | 35 + .../godaddy_domain_fraud_detected.json | 35 + .../godaddy_domain_verification_failed.json | 35 + godaddy/images/godaddy_1.png | Bin 0 -> 451625 bytes godaddy/images/godaddy_2.png | Bin 0 -> 426230 bytes godaddy/manifest.json | 28 +- godaddy/metadata.csv | 16 +- 15 files changed, 1093 insertions(+), 12 deletions(-) create mode 100644 godaddy/assets/dashboards/godaddy_overview.json create mode 100644 godaddy/assets/godaddy.svg create mode 100644 godaddy/assets/monitors/godaddy_certificate_denied.json create mode 100644 godaddy/assets/monitors/godaddy_certificate_expired.json create mode 100644 godaddy/assets/monitors/godaddy_certificate_in_an_error_state.json create mode 100644 godaddy/assets/monitors/godaddy_certificate_revoked.json create mode 100644 godaddy/assets/monitors/godaddy_days_remaining_for_expiration_of_certificate.json create mode 100644 godaddy/assets/monitors/godaddy_domain_dropped_from_request.json create mode 100644 godaddy/assets/monitors/godaddy_domain_fraud_detected.json create mode 100644 godaddy/assets/monitors/godaddy_domain_verification_failed.json create mode 100644 godaddy/images/godaddy_1.png create mode 100644 godaddy/images/godaddy_2.png diff --git a/godaddy/README.md b/godaddy/README.md index d2a881db82891..ba537ede595f4 100644 --- a/godaddy/README.md +++ b/godaddy/README.md @@ -1,13 +1,40 @@ +# GoDaddy + ## Overview -The GoDaddy integration seamlessly collects metrics from SSL certificates and domains, directing them into Datadog for analysis. This integration provides insights including total certificates, issued certificates, expired certificates, revoked certificates, count of domains associated with each certificate. It features statistics for certificates that are about to expire along with many additional metrics, all accessible through out-of-the-box dashboards and monitors. +GoDaddy is a web hosting and domain registration company that helps individuals and businesses establish their online presence. One of their key offerings is SSL certificate services. GoDaddy provides several types of SSL certificates, including Standard SSL for securing one site, Wildcard SSL for securing multiple subdomains, and advanced solutions for ecommerce sites requiring enhanced security. + +The GoDaddy integration collects metrics from SSL certificates and their domains, directing them into Datadog for analysis. This integration provides data points such as the total number of certificates, issued certificates, expired certificates, revoked certificates, and domains associated with each certificate. It also includes specific metrics for certificates nearing expiration. All these metrics are accessible through out-of-the-box dashboards and monitors. ## Setup -### Configuration -!!! Add list of steps to set up this integration !!! +### Get API credentials from GoDaddy + +#### Find your GoDaddy API key and API secret + +- Navigate to the [GoDaddy Developer Portal][1]. +- Sign in with your GoDaddy account. +- Select "API Keys." +- Choose "Create New API Key." +- Provide a name for your API. +- Select "Production" under Environment. +- Click "Next." Your API Key is now created. +- Copy these credentials for the following configuration steps. Ensure they are stored securely and not exposed in public repositories or insecure locations. +- After storing your API Key and Secret, click on "Got It." + +#### Find your GoDaddy customer number + +- Go to your GoDaddy [Login & PIN page][2]. You might be prompted to sign in. +Under **Login Info**, find your **Customer number** (also known as your **shopper ID**). + +### GoDaddy Datadog Integration Configuration + +Configure the Datadog endpoint to forward GoDaddy metrics to Datadog. -### Validation -!!! Add steps to validate integration is functioning as expected !!! +1. Navigate to `GoDaddy`. +2. Add your GoDaddy credentials. + - GoDaddy API key + - GoDaddy secret key + - GoDaddy customer number (or shopper ID) ## Data Collected @@ -17,7 +44,7 @@ The GoDaddy integration does not include any logs. ### Metrics -The GoDaddy integration collects and forwards Certificates and their Domains metrics to Datadog. See [metadata.csv][3] for a list of metrics provided by this integration. +The GoDaddy integration collects and forwards Certificates and their Domains metrics to Datadog. See [metadata.csv][5] for a list of metrics provided by this integration. ### Events @@ -25,8 +52,10 @@ The GoDaddy integration does not include any events. ## Support -For further assistance, contact [Datadog Support][2]. +For further assistance, contact [Datadog Support][4]. [1]: https://developer.godaddy.com/ -[2]: https://docs.datadoghq.com/help/ -[3]: https://github.com/DataDog/integrations-core/blob/master/godaddy/metadata.csv \ No newline at end of file +[2]: https://sso.godaddy.com/security +[3]: https://developer.godaddy.com/doc/ +[4]: https://docs.datadoghq.com/help/ +[5]: https://github.com/DataDog/integrations-core/blob/master/godaddy/metadata.csv diff --git a/godaddy/assets/dashboards/godaddy_overview.json b/godaddy/assets/dashboards/godaddy_overview.json new file mode 100644 index 0000000000000..1dd6f7de92443 --- /dev/null +++ b/godaddy/assets/dashboards/godaddy_overview.json @@ -0,0 +1,733 @@ +{ + "title": "GoDaddy Overview", + "description": "Godaddy dashboard provides an overview of certificate management, including the total count of certificates, the count of issued certificates, the count of expired certificates, the count of revoked certificates, and the distribution of certificates by status. It also shows the count of domains associated with each certificate and the list of certificates that are soon to expire. Additionally, it displays the status of certificate and domain monitors.", + "widgets": [ + { + "id": 1539830225140338, + "definition": { + "type": "image", + "url": "https://s23.q4cdn.com/406380394/files/images/media_resources/2022/GD_LOCKUP_RGB_BW.svg", + "url_dark_theme": "https://s23.q4cdn.com/406380394/files/images/media_resources/2022/GD_LOCKUP_RGB_BW_DARK_BG.svg", + "sizing": "fill", + "has_background": false, + "has_border": false, + "vertical_align": "center", + "horizontal_align": "center" + }, + "layout": { + "x": 0, + "y": 0, + "width": 6, + "height": 2 + } + }, + { + "id": 6674344167556010, + "definition": { + "title": "Certificates Summary", + "background_color": "vivid_purple", + "show_title": true, + "type": "group", + "layout_type": "ordered", + "widgets": [ + { + "id": 3210784733654786, + "definition": { + "title": "Total Certificates", + "title_size": "16", + "title_align": "left", + "time": { + "type": "live", + "unit": "hour", + "value": 4 + }, + "type": "query_value", + "requests": [ + { + "response_format": "scalar", + "queries": [ + { + "data_source": "metrics", + "name": "query1", + "query": "sum:godaddy.certificate.total_certificates{$CustomerId}.as_count()", + "aggregator": "last" + } + ], + "formulas": [ + { + "formula": "query1" + } + ], + "conditional_formats": [ + { + "comparator": ">=", + "value": 0, + "palette": "black_on_light_green", + "custom_bg_color": "#3d0de7" + } + ] + } + ], + "autoscale": true, + "precision": 0 + }, + "layout": { + "x": 0, + "y": 0, + "width": 3, + "height": 3 + } + }, + { + "id": 3886541897398508, + "definition": { + "title": "Expired Certificates", + "title_size": "16", + "title_align": "left", + "time": { + "type": "live", + "unit": "hour", + "value": 4 + }, + "type": "query_value", + "requests": [ + { + "response_format": "scalar", + "queries": [ + { + "data_source": "metrics", + "name": "query1", + "query": "sum:godaddy.certificate.expired_certificates{$CustomerId}.as_count()", + "aggregator": "last" + } + ], + "formulas": [ + { + "formula": "query1" + } + ], + "conditional_formats": [ + { + "comparator": ">=", + "value": 0, + "palette": "black_on_light_red" + } + ] + } + ], + "autoscale": true, + "precision": 0 + }, + "layout": { + "x": 3, + "y": 0, + "width": 3, + "height": 3 + } + }, + { + "id": 5615391778213782, + "definition": { + "title": "Issued Certificates", + "title_size": "16", + "title_align": "left", + "time": { + "type": "live", + "unit": "hour", + "value": 4 + }, + "type": "query_value", + "requests": [ + { + "response_format": "scalar", + "queries": [ + { + "data_source": "metrics", + "name": "query1", + "query": "sum:godaddy.certificate.issued_certificates{$CustomerId}.as_count()", + "aggregator": "last" + } + ], + "formulas": [ + { + "formula": "query1" + } + ], + "conditional_formats": [ + { + "comparator": ">=", + "value": 0, + "palette": "black_on_light_yellow" + } + ] + } + ], + "autoscale": true, + "precision": 0 + }, + "layout": { + "x": 0, + "y": 3, + "width": 3, + "height": 3 + } + }, + { + "id": 6578909606700220, + "definition": { + "title": "Revoked Certificates", + "title_size": "16", + "title_align": "left", + "time": { + "type": "live", + "unit": "hour", + "value": 4 + }, + "type": "query_value", + "requests": [ + { + "response_format": "scalar", + "queries": [ + { + "data_source": "metrics", + "name": "query1", + "query": "sum:godaddy.certificate.revoked_certificates{$CustomerId}.as_count()", + "aggregator": "last" + } + ], + "formulas": [ + { + "formula": "query1" + } + ], + "conditional_formats": [ + { + "comparator": ">=", + "value": 0, + "palette": "black_on_light_red" + } + ] + } + ], + "autoscale": true, + "precision": 0 + }, + "layout": { + "x": 3, + "y": 3, + "width": 3, + "height": 3 + } + } + ] + }, + "layout": { + "x": 6, + "y": 0, + "width": 6, + "height": 7 + } + }, + { + "id": 1277505914651742, + "definition": { + "type": "note", + "content": "**Overview**\n\nThis dashboard provides an overview of certificate summary, including the total count of certificates, the count of issued certificates, the count of expired certificates, the count of revoked certificates, and the distribution of certificates by status. It also shows the count of domains associated with each certificate and the list of certificates that are soon to expire. Additionally, it displays the status of certificate and domain monitors.\n\nFor more information, see the [GoDaddy Integration Documentation](https://docs.datadoghq.com/integrations/godaddy/).", + "background_color": "white", + "font_size": "14", + "text_align": "left", + "vertical_align": "top", + "show_tick": false, + "tick_pos": "50%", + "tick_edge": "left", + "has_padding": true + }, + "layout": { + "x": 0, + "y": 2, + "width": 6, + "height": 3 + } + }, + { + "id": 1865135671025406, + "definition": { + "type": "note", + "content": "**NOTE** \n\nThe data displayed in the dashboard widgets is time-bounded. Therefore, adjusting the global time filter will not impact these widgets.", + "background_color": "yellow", + "font_size": "14", + "text_align": "left", + "vertical_align": "center", + "show_tick": true, + "tick_pos": "50%", + "tick_edge": "top", + "has_padding": true + }, + "layout": { + "x": 0, + "y": 5, + "width": 6, + "height": 2 + } + }, + { + "id": 4377282170082600, + "definition": { + "title": "Certificate Insights", + "background_color": "vivid_orange", + "show_title": true, + "type": "group", + "layout_type": "ordered", + "widgets": [ + { + "id": 4728178297866722, + "definition": { + "title": "Certificates by Status", + "title_size": "16", + "title_align": "left", + "time": { + "type": "live", + "unit": "hour", + "value": 4 + }, + "requests": [ + { + "response_format": "scalar", + "formulas": [ + { + "formula": "query1 + query2 + query3 + query4 + query5 + query6 + query7 + query8 + query9" + } + ], + "queries": [ + { + "data_source": "metrics", + "name": "query1", + "query": "sum:godaddy.certificate.issued_certificates{$CustomerId} by {status}.as_count()", + "aggregator": "last" + }, + { + "data_source": "metrics", + "name": "query2", + "query": "sum:godaddy.certificate.denied_certificates{$CustomerId} by {status}.as_count()", + "aggregator": "last" + }, + { + "data_source": "metrics", + "name": "query3", + "query": "sum:godaddy.certificate.expired_certificates{$CustomerId} by {status}.as_count()", + "aggregator": "last" + }, + { + "data_source": "metrics", + "name": "query4", + "query": "sum:godaddy.certificate.canceled_certificates{$CustomerId} by {status}.as_count()", + "aggregator": "last" + }, + { + "data_source": "metrics", + "name": "query5", + "query": "sum:godaddy.certificate.revoked_certificates{$CustomerId} by {status}.as_count()", + "aggregator": "last" + }, + { + "data_source": "metrics", + "name": "query6", + "query": "sum:godaddy.certificate.pending_issuance_certificates{$CustomerId} by {status}.as_count()", + "aggregator": "last" + }, + { + "data_source": "metrics", + "name": "query7", + "query": "sum:godaddy.certificate.pending_rekey_certificates{$CustomerId} by {status}.as_count()", + "aggregator": "last" + }, + { + "data_source": "metrics", + "name": "query8", + "query": "sum:godaddy.certificate.pending_revocation_certificates{$CustomerId} by {status}.as_count()", + "aggregator": "last" + }, + { + "data_source": "metrics", + "name": "query9", + "query": "sum:godaddy.certificate.unused_certificates{$CustomerId} by {status}.as_count()", + "aggregator": "last" + } + ], + "style": { + "palette": "datadog16" + }, + "sort": { + "count": 500, + "order_by": [ + { + "type": "formula", + "index": 0, + "order": "desc" + } + ] + } + } + ], + "type": "sunburst", + "legend": { + "type": "table" + } + }, + "layout": { + "x": 0, + "y": 0, + "width": 12, + "height": 5 + } + }, + { + "id": 2848804234196820, + "definition": { + "title": "Soon to be Expired Certificates", + "title_size": "16", + "title_align": "left", + "time": { + "type": "live", + "unit": "hour", + "value": 4 + }, + "type": "query_table", + "requests": [ + { + "queries": [ + { + "data_source": "metrics", + "name": "query1", + "query": "min:godaddy.certificate.certificate_expiration_days{$CustomerId} by {certificateid,commonname}.as_count()", + "aggregator": "last" + } + ], + "response_format": "scalar", + "sort": { + "count": 10, + "order_by": [ + { + "type": "formula", + "index": 0, + "order": "asc" + } + ] + }, + "formulas": [ + { + "conditional_formats": [ + { + "comparator": "<=", + "value": 30, + "palette": "white_on_red" + }, + { + "comparator": ">", + "value": 30, + "palette": "white_on_green" + } + ], + "cell_display_mode": "bar", + "alias": "Remaining Days in Expiry", + "formula": "query1" + } + ] + } + ], + "has_search_bar": "auto" + }, + "layout": { + "x": 0, + "y": 5, + "width": 12, + "height": 5 + } + }, + { + "id": 229722093944502, + "definition": { + "title": "Certificates over Time", + "title_size": "16", + "title_align": "left", + "show_legend": true, + "legend_layout": "auto", + "legend_columns": [ + "avg", + "min", + "max", + "value", + "sum" + ], + "time": { + "type": "live", + "unit": "day", + "value": 1 + }, + "type": "timeseries", + "requests": [ + { + "formulas": [ + { + "alias": "Cancelled Certificates", + "formula": "query2" + }, + { + "alias": "Denied Certificates", + "formula": "query3" + }, + { + "alias": "Expired Certificates", + "formula": "query4" + }, + { + "alias": "Issued Certificates", + "formula": "query5" + }, + { + "alias": "Pending Issued Certificates", + "formula": "query6" + }, + { + "alias": "Pending Revocation Certificates", + "formula": "query7" + }, + { + "alias": "Pending Rekey Certificates", + "formula": "query8" + }, + { + "alias": "Revoked Certificates", + "formula": "query9" + }, + { + "alias": "Unused Certificates", + "formula": "query10" + } + ], + "queries": [ + { + "data_source": "metrics", + "name": "query2", + "query": "sum:godaddy.certificate.canceled_certificates{$CustomerId}.as_count()" + }, + { + "data_source": "metrics", + "name": "query3", + "query": "sum:godaddy.certificate.denied_certificates{$CustomerId}.as_count()" + }, + { + "data_source": "metrics", + "name": "query4", + "query": "sum:godaddy.certificate.expired_certificates{$CustomerId}.as_count()" + }, + { + "data_source": "metrics", + "name": "query5", + "query": "sum:godaddy.certificate.issued_certificates{$CustomerId}.as_count()" + }, + { + "data_source": "metrics", + "name": "query6", + "query": "sum:godaddy.certificate.pending_issuance_certificates{$CustomerId}.as_count()" + }, + { + "data_source": "metrics", + "name": "query7", + "query": "sum:godaddy.certificate.pending_revocation_certificates{$CustomerId}.as_count()" + }, + { + "data_source": "metrics", + "name": "query8", + "query": "sum:godaddy.certificate.pending_rekey_certificates{$CustomerId}.as_count()" + }, + { + "data_source": "metrics", + "name": "query9", + "query": "sum:godaddy.certificate.revoked_certificates{$CustomerId}.as_count()" + }, + { + "data_source": "metrics", + "name": "query10", + "query": "sum:godaddy.certificate.unused_certificates{$CustomerId}.as_count()" + } + ], + "response_format": "timeseries", + "style": { + "palette": "dog_classic", + "order_by": "values", + "color_order": "shuffled", + "line_type": "solid", + "line_width": "normal" + }, + "display_type": "line" + } + ] + }, + "layout": { + "x": 0, + "y": 10, + "width": 12, + "height": 4 + } + } + ] + }, + "layout": { + "x": 0, + "y": 7, + "width": 12, + "height": 15 + } + }, + { + "id": 6555127930450788, + "definition": { + "title": "Domain Overview", + "background_color": "vivid_yellow", + "show_title": true, + "type": "group", + "layout_type": "ordered", + "widgets": [ + { + "id": 5177473629095424, + "definition": { + "title": "Domain Count by Certificate", + "title_size": "16", + "title_align": "left", + "time": { + "type": "live", + "unit": "hour", + "value": 4 + }, + "type": "query_table", + "requests": [ + { + "queries": [ + { + "data_source": "metrics", + "name": "query1", + "query": "sum:godaddy.certificate.domains_count{$CustomerId} by {certificateid}.as_count()", + "aggregator": "last" + } + ], + "response_format": "scalar", + "sort": { + "count": 500, + "order_by": [ + { + "type": "formula", + "index": 0, + "order": "desc" + } + ] + }, + "formulas": [ + { + "cell_display_mode": "bar", + "alias": "Domains Count", + "formula": "query1" + } + ] + } + ], + "has_search_bar": "auto" + }, + "layout": { + "x": 0, + "y": 0, + "width": 12, + "height": 4 + } + } + ] + }, + "layout": { + "x": 0, + "y": 22, + "width": 12, + "height": 5, + "is_column_break": true + } + }, + { + "id": 8886524551670130, + "definition": { + "title": "Monitors Overview ", + "background_color": "vivid_green", + "show_title": true, + "type": "group", + "layout_type": "ordered", + "widgets": [ + { + "id": 5019585661866338, + "definition": { + "title": "Certificate Monitors Summary", + "type": "manage_status", + "display_format": "countsAndList", + "color_preference": "background", + "hide_zero_counts": true, + "show_status": true, + "last_triggered_format": "relative", + "query": "tag:(service:certificate AND source:godaddy)", + "sort": "status,asc", + "count": 50, + "start": 0, + "summary_type": "monitors", + "show_priority": false, + "show_last_triggered": false + }, + "layout": { + "x": 0, + "y": 0, + "width": 6, + "height": 5 + } + }, + { + "id": 3522330832237362, + "definition": { + "title": "Domain Monitors Summary", + "type": "manage_status", + "display_format": "countsAndList", + "color_preference": "background", + "hide_zero_counts": true, + "show_status": true, + "last_triggered_format": "relative", + "query": "tag:(service:domain AND source:godaddy)", + "sort": "status,asc", + "count": 50, + "start": 0, + "summary_type": "monitors", + "show_priority": false, + "show_last_triggered": false + }, + "layout": { + "x": 6, + "y": 0, + "width": 6, + "height": 5 + } + } + ] + }, + "layout": { + "x": 0, + "y": 27, + "width": 12, + "height": 6 + } + } + ], + "template_variables": [ + { + "name": "CustomerId", + "prefix": "customer_id", + "available_values": [], + "default": "*" + } + ], + "layout_type": "ordered", + "notify_list": [], + "reflow_type": "fixed" +} \ No newline at end of file diff --git a/godaddy/assets/godaddy.svg b/godaddy/assets/godaddy.svg new file mode 100644 index 0000000000000..c48eaf6df1ff2 --- /dev/null +++ b/godaddy/assets/godaddy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/godaddy/assets/monitors/godaddy_certificate_denied.json b/godaddy/assets/monitors/godaddy_certificate_denied.json new file mode 100644 index 0000000000000..be3140de27bc3 --- /dev/null +++ b/godaddy/assets/monitors/godaddy_certificate_denied.json @@ -0,0 +1,35 @@ +{ + "version": 2, + "created_at": "2024-08-20", + "last_updated_at": "2024-08-20", + "title": "SSL Certificate Denied", + "description": "The customer's request for an SSL certificate was denied. This monitor tracks the status of the SSL certificate and triggers an alert when the status changes to denied. This process ensures that appropriate actions are taken promptly to address the denial.", + "definition": { + "id": 149884454, + "name": "SSL Certificate Denied", + "type": "query alert", + "query": "sum(last_1h):max:godaddy.certificate.certificate_status{status:denied} by {certificateid} >= 1", + "message": "The certificate {{certificateid.name}} is denied. Please review and take the necessary actions.", + "tags": [ + "service:certificate", + "source:godaddy" + ], + "options": { + "thresholds": { + "critical": 1 + }, + "notify_audit": false, + "include_tags": true, + "notify_no_data": false, + "new_host_delay": 300, + "silenced": {} + }, + "priority": null, + "restriction_policy": { + "bindings": [] + } + }, + "tags": [ + "integration:godaddy" + ] +} \ No newline at end of file diff --git a/godaddy/assets/monitors/godaddy_certificate_expired.json b/godaddy/assets/monitors/godaddy_certificate_expired.json new file mode 100644 index 0000000000000..eff9b43bb15e9 --- /dev/null +++ b/godaddy/assets/monitors/godaddy_certificate_expired.json @@ -0,0 +1,35 @@ +{ + "version": 2, + "created_at": "2024-08-20", + "last_updated_at": "2024-08-20", + "title": "SSL Certificate Expired", + "description": "An issued SSL certificate has passed its valid end date and is now expired. This monitor tracks the status of the SSL certificate and triggers an alert when the status changes to expired. This ensures that necessary actions are taken promptly to renew the certificate.", + "definition": { + "id": 149114169, + "name": "SSL Certificate Expired", + "type": "query alert", + "query": "sum(last_1h):max:godaddy.certificate.certificate_status{status:expired} by {certificateid} >= 1", + "message": "The certificate {{certificateid.name}} has expired. Please review and take the necessary actions.", + "tags": [ + "service:certificate", + "source:godaddy" + ], + "options": { + "thresholds": { + "critical": 1 + }, + "notify_audit": false, + "include_tags": true, + "notify_no_data": false, + "new_host_delay": 300, + "silenced": {} + }, + "priority": null, + "restriction_policy": { + "bindings": [] + } + }, + "tags": [ + "integration:godaddy" + ] +} \ No newline at end of file diff --git a/godaddy/assets/monitors/godaddy_certificate_in_an_error_state.json b/godaddy/assets/monitors/godaddy_certificate_in_an_error_state.json new file mode 100644 index 0000000000000..627b8b0462681 --- /dev/null +++ b/godaddy/assets/monitors/godaddy_certificate_in_an_error_state.json @@ -0,0 +1,35 @@ +{ + "version": 2, + "created_at": "2024-08-20", + "last_updated_at": "2024-08-20", + "title": "SSL Certificate in an Error State", + "description": "An SSL certificate is currently in an error state and is not being used. This monitor tracks the status of the SSL certificate and triggers an alert when the status changes to unused. This will help ensure that the issue is promptly addressed.", + "definition": { + "id": 149884381, + "name": "SSL Certificate is in an Error State", + "type": "query alert", + "query": "sum(last_1h):max:godaddy.certificate.certificate_status{status:unused} by {certificateid} >= 1", + "message": "The certificate {{certificateid.name}} is currently in an error state (unused). Please review and take the necessary actions.", + "tags": [ + "service:certificate", + "source:godaddy" + ], + "options": { + "thresholds": { + "critical": 1 + }, + "notify_audit": false, + "include_tags": true, + "notify_no_data": false, + "new_host_delay": 300, + "silenced": {} + }, + "priority": null, + "restriction_policy": { + "bindings": [] + } + }, + "tags": [ + "integration:godaddy" + ] +} \ No newline at end of file diff --git a/godaddy/assets/monitors/godaddy_certificate_revoked.json b/godaddy/assets/monitors/godaddy_certificate_revoked.json new file mode 100644 index 0000000000000..3aa47c52a527a --- /dev/null +++ b/godaddy/assets/monitors/godaddy_certificate_revoked.json @@ -0,0 +1,35 @@ +{ + "version": 2, + "created_at": "2024-08-20", + "last_updated_at": "2024-08-20", + "title": "SSL Certificate Revoked", + "description": "An issued SSL certificate has been revoked. This monitor tracks the status of the SSL certificate and triggers an alert when the status changes to revoked. This will help ensure that appropriate actions are taken promptly to address the revocation and secure the affected systems.", + "definition": { + "id": 149116202, + "name": "SSL Certificate Revoked", + "type": "query alert", + "query": "sum(last_1h):max:godaddy.certificate.certificate_status{status:revoked} by {certificateid} >= 1", + "message": "The certificate {{certificateid.name}} has been revoked. Please review and take the necessary actions.", + "tags": [ + "service:certificate", + "source:godaddy" + ], + "options": { + "thresholds": { + "critical": 1 + }, + "notify_audit": false, + "include_tags": true, + "notify_no_data": false, + "new_host_delay": 300, + "silenced": {} + }, + "priority": null, + "restriction_policy": { + "bindings": [] + } + }, + "tags": [ + "integration:godaddy" + ] +} \ No newline at end of file diff --git a/godaddy/assets/monitors/godaddy_days_remaining_for_expiration_of_certificate.json b/godaddy/assets/monitors/godaddy_days_remaining_for_expiration_of_certificate.json new file mode 100644 index 0000000000000..0038cdb29469d --- /dev/null +++ b/godaddy/assets/monitors/godaddy_days_remaining_for_expiration_of_certificate.json @@ -0,0 +1,35 @@ +{ + "version": 2, + "created_at": "2024-08-20", + "last_updated_at": "2024-08-20", + "title": "SSL Certificate Expiration Alert", + "description": "Each SSL certificate has an expiration date. This monitor tracks the number of days remaining until the SSL certificate expires and triggers an alert when the remaining days fall below a defined threshold. This helps ensure that timely actions are taken to renew the certificate before it expires.", + "definition": { + "id": 149106208, + "name": "SSL Certificate Expiration Alert", + "type": "query alert", + "query": "min(last_1h):min:godaddy.certificate.certificate_expiration_days{*} by {certificateid} <= 7", + "message": "The certificate with id {{certificateid.name}} is set to expire in {{value}} days. Please review and take the necessary actions.", + "tags": [ + "service:certificate", + "source:godaddy" + ], + "options": { + "thresholds": { + "critical": 7 + }, + "notify_audit": false, + "include_tags": true, + "notify_no_data": false, + "new_group_delay": 300, + "silenced": {} + }, + "priority": null, + "restriction_policy": { + "bindings": [] + } + }, + "tags": [ + "integration:godaddy" + ] +} \ No newline at end of file diff --git a/godaddy/assets/monitors/godaddy_domain_dropped_from_request.json b/godaddy/assets/monitors/godaddy_domain_dropped_from_request.json new file mode 100644 index 0000000000000..251e88d39253b --- /dev/null +++ b/godaddy/assets/monitors/godaddy_domain_dropped_from_request.json @@ -0,0 +1,35 @@ +{ + "version": 2, + "created_at": "2024-08-20", + "last_updated_at": "2024-08-20", + "title": "Domain Dropped from Request", + "description": "A domain can be dropped from the request. This monitor tracks the status of the domain and triggers an alert when the status changes to \"dropped.\" This helps ensure that appropriate actions are taken promptly to address the dropped domain and prevent any potential disruptions.", + "definition": { + "id": 150029151, + "name": "Domain Dropped from Request", + "type": "query alert", + "query": "sum(last_1h):max:godaddy.certificate.domain_status{domain_status:dropped} by {domain_name} >= 1", + "message": "The domain {{domain_name.name}} has been dropped from the request. Please review and take the necessary actions.", + "tags": [ + "service:domain", + "source:godaddy" + ], + "options": { + "thresholds": { + "critical": 1 + }, + "notify_audit": false, + "include_tags": true, + "notify_no_data": false, + "new_group_delay": 0, + "silenced": {} + }, + "priority": null, + "restriction_policy": { + "bindings": [] + } + }, + "tags": [ + "integration:godaddy" + ] +} \ No newline at end of file diff --git a/godaddy/assets/monitors/godaddy_domain_fraud_detected.json b/godaddy/assets/monitors/godaddy_domain_fraud_detected.json new file mode 100644 index 0000000000000..c537232e003fe --- /dev/null +++ b/godaddy/assets/monitors/godaddy_domain_fraud_detected.json @@ -0,0 +1,35 @@ +{ + "version": 2, + "created_at": "2024-08-20", + "last_updated_at": "2024-08-20", + "title": "Domain Fraud Detected", + "description": "Fraudulent activity can occur with a domain. This monitor tracks the status of the domain and triggers an alert when the status changes to verified_possible_fraud. This helps ensure that potential fraudulent activity is promptly investigated and addressed to protect the integrity of the domain.", + "definition": { + "id": 149884615, + "name": "Domain Fraud Detected", + "type": "query alert", + "query": "sum(last_1h):max:godaddy.certificate.domain_status{domain_status:verified_possible_fraud} by {domain_name} >= 1", + "message": "Fraud has been detected for the domain {{domain_name.name}}. Please review and take the necessary actions.", + "tags": [ + "service:domain", + "source:godaddy" + ], + "options": { + "thresholds": { + "critical": 1 + }, + "notify_audit": false, + "include_tags": true, + "new_group_delay": 60, + "notify_no_data": false, + "silenced": {} + }, + "priority": null, + "restriction_policy": { + "bindings": [] + } + }, + "tags": [ + "integration:godaddy" + ] +} \ No newline at end of file diff --git a/godaddy/assets/monitors/godaddy_domain_verification_failed.json b/godaddy/assets/monitors/godaddy_domain_verification_failed.json new file mode 100644 index 0000000000000..246cde50d645f --- /dev/null +++ b/godaddy/assets/monitors/godaddy_domain_verification_failed.json @@ -0,0 +1,35 @@ +{ + "version": 2, + "created_at": "2024-08-20", + "last_updated_at": "2024-08-20", + "title": "Domain Verification Failed", + "description": "A domain verification request can fail. This monitor tracks the status of the domain and triggers an alert when the status changes to failed_verification. This helps ensure that any issues with the verification process are promptly addressed to prevent delays or disruptions.", + "definition": { + "id": 149884600, + "name": "Domain Verification Failed", + "type": "query alert", + "query": "sum(last_1h):max:godaddy.certificate.domain_status{domain_status:failed_verification} by {domain_name} >= 1", + "message": "Domain verification for {{domain_name.name}} has failed on GoDaddy. Please review and take the necessary actions.", + "tags": [ + "service:domain", + "source:godaddy" + ], + "options": { + "thresholds": { + "critical": 1 + }, + "notify_audit": false, + "include_tags": true, + "new_group_delay": 60, + "notify_no_data": false, + "silenced": {} + }, + "priority": null, + "restriction_policy": { + "bindings": [] + } + }, + "tags": [ + "integration:godaddy" + ] +} \ No newline at end of file diff --git a/godaddy/images/godaddy_1.png b/godaddy/images/godaddy_1.png new file mode 100644 index 0000000000000000000000000000000000000000..9f83c3f3caecc485cbe5136f245589f7d6cdc2a6 GIT binary patch literal 451625 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%0AW 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

_kDdPrK5jf$x^jqBy}>a8d2x&4g;vJ~W#BubpA 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 z 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ﯽ(&o*#x!^%eApg-t1{Kc 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
^Y8KdW?<9qB)RX>cMbKl@$iR`H59ANvxs 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Μ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�~WJpaID1)@atD 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 z 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 ~j=Yd1!IuTxq!qKM#K&xl=~F8$1J*DJ61z{hdM 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 KU6qu{$NvL6cHI&H literal 0 HcmV?d00001 diff --git a/godaddy/manifest.json b/godaddy/manifest.json index b4438a7e73052..b44480a339206 100644 --- a/godaddy/manifest.json +++ b/godaddy/manifest.json @@ -10,7 +10,18 @@ "changelog": "CHANGELOG.md", "description": "Gain insights and monitor GoDaddy SSL Certificates.", "title": "GoDaddy", - "media": [], + "media": [ + { + "caption": "GoDaddy Overview", + "image_url": "images/godaddy_1.png", + "media_type": "image" + }, + { + "caption": "GoDaddy Overview", + "image_url": "images/godaddy_2.png", + "media_type": "image" + } + ], "classifier_tags": [ "Category::Metrics", "Submitted Data Type::Metrics", @@ -27,12 +38,25 @@ }, "metrics": { "prefix": "godaddy.", - "check": [], + "check": "godaddy.certificate.total_certificates", "metadata_path": "metadata.csv" }, "service_checks": { "metadata_path": "assets/service_checks.json" } + }, + "dashboards": { + "GoDaddy Overview": "assets/dashboards/godaddy_overview.json" + }, + "monitors": { + "SSL Certificate Denied": "assets/monitors/godaddy_certificate_denied.json", + "SSL Certificate Expired": "assets/monitors/godaddy_certificate_expired.json", + "SSL Certificate in an Error State": "assets/monitors/godaddy_certificate_in_an_error_state.json", + "SSL Certificate Revoked": "assets/monitors/godaddy_certificate_revoked.json", + "SSL Certificate Expiration Alert": "assets/monitors/godaddy_days_remaining_for_expiration_of_certificate.json", + "Domain Dropped from Request": "assets/monitors/godaddy_domain_dropped_from_request.json", + "Domain Fraud Detected": "assets/monitors/godaddy_domain_fraud_detected.json", + "Domain Verification Failed": "assets/monitors/godaddy_domain_verification_failed.json" } }, "author": { diff --git a/godaddy/metadata.csv b/godaddy/metadata.csv index 60d916455a42f..5a3b859a6cf09 100644 --- a/godaddy/metadata.csv +++ b/godaddy/metadata.csv @@ -1 +1,15 @@ -metric_name,metric_type,interval,unit_name,per_unit_name,description,orientation,integration,short_name,curated_metric,sample_tags \ No newline at end of file +metric_name,metric_type,interval,unit_name,per_unit_name,description,orientation,integration,short_name,curated_metric,sample_tags +godaddy.certificate.canceled_certificates,count,,,,The total number of canceled certificates,0,godaddy,Canceled Certificates,, +godaddy.certificate.certificate_expiration_days,count,,day,,Count of expiration days by certificate,0,godaddy,Certificate Expiration Days,, +godaddy.certificate.certificate_status,count,,,,Contains the certificate and it's current status,0,godaddy,Certificate Status,, +godaddy.certificate.denied_certificates,count,,,,The total number of denied certificates,0,godaddy,Denied Certificates,, +godaddy.certificate.domain_status,count,,,,Contains the domain and it's current status by certificate,0,godaddy,Domain Status,, +godaddy.certificate.domains_count,count,,,,The total number of domains by certificate,0,godaddy,Domains Count,, +godaddy.certificate.expired_certificates,count,,,,The total number of expired certificates,0,godaddy,Expired Certificates,, +godaddy.certificate.issued_certificates,count,,,,The total number of issued certificates,0,godaddy,Issued Certificates,, +godaddy.certificate.pending_issuance_certificates,count,,,,The total number of pending issued certificates,0,godaddy,Pending Issued Certificates,, +godaddy.certificate.pending_rekey_certificates,count,,,,The total number of pending rekey certificates,0,godaddy,Pending Rekey Certificates,, +godaddy.certificate.pending_revocation_certificates,count,,,,The total number of pending revocation certificates,0,godaddy,Pending Revocation Certificates,, +godaddy.certificate.revoked_certificates,count,,,,The total number of revoked certificates,0,godaddy,Revoked Certificates,, +godaddy.certificate.total_certificates,count,,,,The total number of certificates,0,godaddy,Total Certificates,, +godaddy.certificate.unused_certificates,count,,,,The total number of unused certificates,0,godaddy,Unused Certificates,, From 797869d0d67bd1aeb206c13e168546008ca5d077 Mon Sep 17 00:00:00 2001 From: Bryce Eadie Date: Wed, 2 Oct 2024 16:02:01 -0700 Subject: [PATCH 37/56] (DOCS-9122) Add partial (#18745) --- terraform/README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/terraform/README.md b/terraform/README.md index 4e1c3057a3e24..fb5abfc506b3a 100644 --- a/terraform/README.md +++ b/terraform/README.md @@ -33,9 +33,12 @@ The Datadog Terraform provider is available through the [Terraform Registry][1]. **Note**: If you are not using the Datadog US1 site, you must set the `api_url` [optional parameter][7] with your [Datadog site][6]. Ensure the documentation site selector on the right of the page is set to your correct Datadog site, then use the following URL as the value of the `api_url` parameter: + + 4. Run `terraform init`. This initializes the directory for use with Terraform and pulls the Datadog provider. 5. Create any `.tf` file in the `terraform_config/` directory and start creating Datadog resources. From b6cbfdbc688acc8134488c606d59f5389fae40ad Mon Sep 17 00:00:00 2001 From: Nenad Noveljic <18366081+nenadnoveljic@users.noreply.github.com> Date: Thu, 3 Oct 2024 13:20:59 +0200 Subject: [PATCH 38/56] Unhide SQL Server deadlocks collection config (#18755) * Unhide deadlocks collection config * validate config --- sqlserver/assets/configuration/spec.yaml | 1 - .../sqlserver/data/conf.yaml.example | 19 +++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/sqlserver/assets/configuration/spec.yaml b/sqlserver/assets/configuration/spec.yaml index 46ae98846412e..83817e6c1f253 100644 --- a/sqlserver/assets/configuration/spec.yaml +++ b/sqlserver/assets/configuration/spec.yaml @@ -776,7 +776,6 @@ files: example: false type: boolean - name: deadlocks_collection - hidden: True description: | Configure the collection of deadlock data. The feature is supported for odbc connector only. options: diff --git a/sqlserver/datadog_checks/sqlserver/data/conf.yaml.example b/sqlserver/datadog_checks/sqlserver/data/conf.yaml.example index ee5316c9a61c7..0aa748b5b3841 100644 --- a/sqlserver/datadog_checks/sqlserver/data/conf.yaml.example +++ b/sqlserver/datadog_checks/sqlserver/data/conf.yaml.example @@ -692,6 +692,25 @@ instances: # # propagate_agent_tags: false + ## Configure the collection of deadlock data. The feature is supported for odbc connector only. + # + # deadlocks_collection: + + ## @param enabled - boolean - optional - default: false + ## Enable the collection of deadlock data. Requires `dbm: true`. Disabled by default. + # + # enabled: false + + ## @param collection_interval - number - optional - default: 600 + ## Set the interval for collecting deadlock data, in seconds. Defaults to 600 seconds. + # + # collection_interval: 600 + + ## @param max_deadlocks - number - optional - default: 100 + ## Set the maximum number of deadlocks to retrieve per collection. + # + # max_deadlocks: 100 + ## @param tags - list of strings - optional ## A list of tags to attach to every metric and service check emitted by this instance. ## From bdd7dc80503ef34eddfc3208a77af20db15f1e50 Mon Sep 17 00:00:00 2001 From: Aldrick Castro Date: Thu, 3 Oct 2024 09:26:55 -0400 Subject: [PATCH 39/56] Adds additional debug logging to help with schema collection investigations (#18754) --- postgres/changelog.d/18754.added | 1 + postgres/datadog_checks/postgres/metadata.py | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) create mode 100644 postgres/changelog.d/18754.added diff --git a/postgres/changelog.d/18754.added b/postgres/changelog.d/18754.added new file mode 100644 index 0000000000000..30a7029f7f2ae --- /dev/null +++ b/postgres/changelog.d/18754.added @@ -0,0 +1 @@ +Adds additional debug logging to help with schema collection investigations diff --git a/postgres/datadog_checks/postgres/metadata.py b/postgres/datadog_checks/postgres/metadata.py index 3c870e86a435d..a5b8fd592d0be 100644 --- a/postgres/datadog_checks/postgres/metadata.py +++ b/postgres/datadog_checks/postgres/metadata.py @@ -310,6 +310,14 @@ def report_postgres_metadata(self): continue tables = self._query_tables_for_schema(cursor, schema["id"], dbname) + self._log.debug( + "Tables found for schema '{schema}' in database '{database}':" + "{tables}".format( + schema=database["schemas"], + database=dbname, + tables=[table["name"] for table in tables], + ) + ) table_chunks = list(get_list_chunks(tables, chunk_size)) buffer_column_count = 0 @@ -415,6 +423,8 @@ def _query_schema_information(self, cursor: psycopg2.extensions.cursor, dbname: schemas = [] for row in rows: schemas.append({"id": str(row["id"]), "name": row["name"], "owner": row["owner"]}) + + self._log.debug("Schemas found for database '{database}': [{schemas}]".format(database=dbname, schemas=rows)) return schemas def _get_table_info(self, cursor, dbname, schema_id): @@ -437,6 +447,13 @@ def _get_table_info(self, cursor, dbname, schema_id): if len(table_info) <= limit: return table_info + self._log.debug( + "{table_count} tables found but max_tables is set to {max_tables}." + "{missing_count} tables will be missing from this collection".format( + table_count=len(table_info), max_tables=limit, missing_count=len(table_info) - limit + ) + ) + if not self._config.relations: self._check.log.warning( "Number of tables exceeds limit of %d set by max_tables but " From af62c99a180f0f8f04da37c36af331c4d3ec589d Mon Sep 17 00:00:00 2001 From: Zhengda Lu Date: Thu, 3 Oct 2024 09:44:30 -0400 Subject: [PATCH 40/56] unhide slow_operations config (#18757) --- mongo/assets/configuration/spec.yaml | 1 - .../mongo/data/conf.yaml.example | 20 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/mongo/assets/configuration/spec.yaml b/mongo/assets/configuration/spec.yaml index defd4a34db300..762a49a836450 100644 --- a/mongo/assets/configuration/spec.yaml +++ b/mongo/assets/configuration/spec.yaml @@ -218,7 +218,6 @@ files: example: 10 - name: slow_operations description: Configure collection of MongoDB slow operations. - hidden: true options: - name: enabled description: | diff --git a/mongo/datadog_checks/mongo/data/conf.yaml.example b/mongo/datadog_checks/mongo/data/conf.yaml.example index 25140de02139f..9d978b840f0e1 100644 --- a/mongo/datadog_checks/mongo/data/conf.yaml.example +++ b/mongo/datadog_checks/mongo/data/conf.yaml.example @@ -182,6 +182,26 @@ instances: # # collection_interval: 10 + ## Configure collection of MongoDB slow operations. + # + # slow_operations: + + ## @param enabled - boolean - optional - default: true + ## Enable collection of slow operations. Requires `dbm: true`. + # + # enabled: true + + ## @param collection_interval - number - optional - default: 10 + ## Set the slow operations collection interval in seconds. Each collection involves capturing + ## profiled slow operations from sys.profile collection or from the Slow Query log. + # + # collection_interval: 10 + + ## @param max_operations - number - optional - default: 1000 + ## Set the maximum number of slow operations to collect per interval. + # + # max_operations: 1000 + ## Configure collection of MongoDB schemas (inferred) by sampling documents. # # schemas: From 1b58301200eee2a4d063bebc2dbe75d35aab8e20 Mon Sep 17 00:00:00 2001 From: Zhengda Lu Date: Thu, 3 Oct 2024 12:45:11 -0400 Subject: [PATCH 41/56] [mongo] Add resolved_views, working_millis and queues to the slow query event payload (#18761) * ingest mongodb 8 specific slow query fields * add changelog --- mongo/changelog.d/18761.added | 4 + .../mongo/dbm/slow_operations.py | 22 ++++- mongo/hatch.toml | 2 +- mongo/tests/fixtures/getLog-standalone | 7 +- .../results/slow-operations-standalone.json | 83 +++++++++++++++++++ mongo/tests/test_dbm_slow_operations.py | 2 + 6 files changed, 115 insertions(+), 5 deletions(-) create mode 100644 mongo/changelog.d/18761.added diff --git a/mongo/changelog.d/18761.added b/mongo/changelog.d/18761.added new file mode 100644 index 0000000000000..9af73df70e76a --- /dev/null +++ b/mongo/changelog.d/18761.added @@ -0,0 +1,4 @@ +Add `resolved_views`, `working_millis`, and `queues` fields to the slow query (dbm only) event payload +- resolved_views: contains view details for slow queries on views (MongoDB 5.0+) +- working_millis: the amount of time that MongoDB spends working on the operation (MongoDB 8.0+) +- queues: contains information about the operation's queues (MongoDB 8.0+) \ No newline at end of file diff --git a/mongo/datadog_checks/mongo/dbm/slow_operations.py b/mongo/datadog_checks/mongo/dbm/slow_operations.py index 40b2f10c91360..aafd587dbb699 100644 --- a/mongo/datadog_checks/mongo/dbm/slow_operations.py +++ b/mongo/datadog_checks/mongo/dbm/slow_operations.py @@ -257,7 +257,7 @@ def _create_slow_operation_event(self, slow_operation): "user": slow_operation.get("user"), # only available with profiling "application": slow_operation.get("appName"), # only available with profiling "statement": slow_operation["obfuscated_command"], - "query_hash": slow_operation.get("queryHash"), # only available with profiling + "query_hash": slow_operation.get("queryHash") or slow_operation.get("planCacheShapeHash"), "plan_cache_key": slow_operation.get("planCacheKey"), # only available with profiling "query_framework": slow_operation.get("queryFramework"), "comment": slow_operation["command"].get("comment"), @@ -290,6 +290,11 @@ def _create_slow_operation_event(self, slow_operation): "cursor": self._get_slow_operation_cursor(slow_operation), "lock_stats": self._get_slow_operation_lock_stats(slow_operation), "flow_control_stats": self._get_slow_operation_flow_control_stats(slow_operation), + # MongoDB 5.0+ specific fields + "resolved_views": self._get_slow_operation_resolved_views(slow_operation), + # MongoDB 8.0+ specific fields + "working_millis": slow_operation.get("workingMillis"), # the amount of time spends working on the operation + "queues": self._get_slow_operation_queues(slow_operation), } return self._sanitize_event(event) @@ -372,6 +377,21 @@ def _get_slow_operation_flow_control_stats(self, slow_operation): return format_key_name(self._check.convert_to_underscore_separated, flow_control_stats) return None + def _get_slow_operation_queues(self, slow_operation): + queues = slow_operation.get("queues") + if queues: + return format_key_name(self._check.convert_to_underscore_separated, queues) + return + + def _get_slow_operation_resolved_views(self, slow_operation): + resolved_views = slow_operation.get("resolvedViews") + result = [] + if resolved_views: + for view in resolved_views: + view.pop("resolvedPipeline", None) + result.append(format_key_name(self._check.convert_to_underscore_separated, view)) + return result or None + def _sanitize_event(self, event): # remove empty fields return {k: v for k, v in event.items() if v is not None} diff --git a/mongo/hatch.toml b/mongo/hatch.toml index 30c0e594ed026..fbd7a3fd7c0b3 100644 --- a/mongo/hatch.toml +++ b/mongo/hatch.toml @@ -8,7 +8,7 @@ dependencies = [ [[envs.default.matrix]] python = ["3.12"] -version = ["4.4", "5.0", "6.0", "7.0"] +version = ["4.4", "5.0", "6.0", "7.0", "8.0"] flavor = ["standalone", "shard", "auth", "tls"] [envs.default.overrides] diff --git a/mongo/tests/fixtures/getLog-standalone b/mongo/tests/fixtures/getLog-standalone index 260f95874a802..4a2f95fca9236 100644 --- a/mongo/tests/fixtures/getLog-standalone +++ b/mongo/tests/fixtures/getLog-standalone @@ -2,14 +2,15 @@ "totalLinesWritten": 1306, "log": [ "{\"t\":{\"$date\":\"2023-04-01T18:45:38.733+00:00\"},\"s\":\"I\", \"c\":\"WTCHKPT\", \"id\":22430, \"ctx\":\"Checkpointer\",\"msg\":\"WiredTiger message\",\"attr\":{\"message\":{\"ts_sec\":1720550738,\"ts_usec\":733701,\"thread\":\"1:0xffff796debc0\",\"session_name\":\"WT_SESSION.checkpoint\",\"category\":\"WT_VERB_CHECKPOINT_PROGRESS\",\"category_id\":6,\"verbose_level\":\"DEBUG_1\",\"verbose_level_id\":1,\"msg\":\"saving checkpoint snapshot min: 1332074, snapshot max: 1332074 snapshot count: 0, oldest timestamp: (0, 0) , meta checkpoint timestamp: (0, 0) base write gen: 7015\"}}}\n", - "{\"t\":{\"$date\":\"2023-04-01T18:45:41.386+00:00\"},\"s\":\"I\", \"c\":\"WRITE\", \"id\":51803, \"ctx\":\"conn50\",\"msg\":\"Slow query\",\"attr\":{\"type\":\"update\",\"ns\":\"test.customers\",\"command\":{\"q\":{\"age\":{\"$gt\":35}},\"u\":{\"$set\":{\"subscribed\":true}},\"multi\":true,\"upsert\":false,\"comment\":\"update customers subscription status by age\"},\"planSummary\":\"IXSCAN { age: -1 }\",\"keysExamined\":487,\"docsExamined\":487,\"nMatched\":487,\"nModified\":487,\"nUpserted\":0,\"keysInserted\":487,\"keysDeleted\":487,\"numYields\":0,\"locks\":{\"ParallelBatchWriterMode\":{\"acquireCount\":{\"r\":1}},\"FeatureCompatibilityVersion\":{\"acquireCount\":{\"w\":1}},\"ReplicationStateTransition\":{\"acquireCount\":{\"w\":1}},\"Global\":{\"acquireCount\":{\"w\":1}},\"Database\":{\"acquireCount\":{\"w\":1}},\"Collection\":{\"acquireCount\":{\"w\":1}}},\"flowControl\":{\"acquireCount\":1},\"storage\":{},\"cpuNanos\":11530375,\"remote\":\"192.168.65.1:58133\",\"durationMillis\":11}}\n", + "{\"t\":{\"$date\":\"2023-04-01T18:45:41.386+00:00\"},\"s\":\"I\", \"c\":\"WRITE\", \"id\":51803, \"ctx\":\"conn50\",\"msg\":\"Slow query\",\"attr\":{\"type\":\"update\",\"ns\":\"test.customers\",\"command\":{\"q\":{\"age\":{\"$gt\":35}},\"u\":{\"$set\":{\"subscribed\":true}},\"multi\":true,\"upsert\":false,\"comment\":\"update customers subscription status by age\"},\"planSummary\":\"IXSCAN { age: -1 }\",\"keysExamined\":487,\"docsExamined\":487,\"nMatched\":487,\"nModified\":487,\"nUpserted\":0,\"keysInserted\":487,\"keysDeleted\":487,\"numYields\":0,\"locks\":{\"ParallelBatchWriterMode\":{\"acquireCount\":{\"r\":1}},\"FeatureCompatibilityVersion\":{\"acquireCount\":{\"w\":1}},\"ReplicationStateTransition\":{\"acquireCount\":{\"w\":1}},\"Global\":{\"acquireCount\":{\"w\":1}},\"Database\":{\"acquireCount\":{\"w\":1}},\"Collection\":{\"acquireCount\":{\"w\":1}}},\"flowControl\":{\"acquireCount\":1},\"storage\":{},\"cpuNanos\":11530375,\"remote\":\"192.168.65.1:58133\",\"durationMillis\":11,\"workingMillis\":10}}\n", "{\"t\":{\"$date\":\"2024-04-01T18:45:41.387+00:00\"},\"s\":\"I\", \"c\":\"COMMAND\", \"id\":51803, \"ctx\":\"conn50\",\"msg\":\"Slow query\",\"attr\":{\"type\":\"command\",\"ns\":\"test.$cmd\",\"command\":{\"update\":\"customers\",\"ordered\":true,\"comment\":\"update customers subscription status by age\",\"$db\":\"test\"},\"numYields\":0,\"reslen\":60,\"locks\":{\"ParallelBatchWriterMode\":{\"acquireCount\":{\"r\":2}},\"FeatureCompatibilityVersion\":{\"acquireCount\":{\"r\":1,\"w\":2}},\"ReplicationStateTransition\":{\"acquireCount\":{\"w\":1}},\"Global\":{\"acquireCount\":{\"r\":1,\"w\":2}},\"Database\":{\"acquireCount\":{\"w\":2}},\"Collection\":{\"acquireCount\":{\"w\":2}}},\"flowControl\":{\"acquireCount\":1},\"storage\":{},\"cpuNanos\":11746542,\"remote\":\"192.168.65.1:58133\",\"protocol\":\"op_msg\",\"durationMillis\":11}}\n", "{\"t\":{\"$date\":\"2024-04-01T18:45:41.387+00:00\"},\"s\":\"I\", \"c\":\"COMMAND\", \"id\":51803, \"ctx\":\"conn50\",\"msg\":\"Slow query\",\"attr\":{\"type\":\"command\",\"ns\":\"test.$cmd\",\"command\":{\"update\":\"customers\",\"ordered\":true,\"comment\":\"update customers subscription status by age\",\"$db\":\"test\"},\"numYields\":0,\"reslen\":60,\"locks\":{\"ParallelBatchWriterMode\":{\"acquireCount\":{\"r\":2}},\"FeatureCompatibilityVersion\":{\"acquireCount\":{\"r\":1,\"w\":2}},\"ReplicationStateTransition\":{\"acquireCount\":{\"w\":1}},\"Global\":{\"acquireCount\":{\"r\":1,\"w\":2}},\"Database\":{\"acquireCount\":{\"w\":2}},\"Collection\":{\"acquireCount\":{\"w\":2}}},\"flowControl\":{\"acquireCount\":1},\"storage\":{},\"cpuNanos\":11746542,\"remote\":\"192.168.65.1:58133\",\"protocol\":\"op_msg\",\"durationMillis\":11}}\n", "{\"t\":{\"$date\":\"2024-04-01T18:45:41.387+00:00\"},\"s\":\"I\", \"c\":\"COMMAND\", \"id\":51803, \"ctx\":\"conn50\",\"msg\":\"Slow query\",\"attr\":{\"type\":\"command\",\"ns\":\"test.$cmd\",\"command\":{\"update\":\"customers\",\"ordered\":true,\"comment\":\"update customers subscription status by age\",\"$db\":\"test\"},\"numYields\":0,\"reslen\":60,\"locks\":{\"ParallelBatchWriterMode\":{\"acquireCount\":{\"r\":2}},\"FeatureCompatibilityVersion\":{\"acquireCount\":{\"r\":1,\"w\":2}},\"ReplicationStateTransition\":{\"acquireCount\":{\"w\":1}},\"Global\":{\"acquireCount\":{\"r\":1,\"w\":2}},\"Database\":{\"acquireCount\":{\"w\":2}},\"Collection\":{\"acquireCount\":{\"w\":2}}},\"flowControl\":{\"acquireCount\":1},\"storage\":{},\"cpuNanos\":11746542,\"remote\":\"192.168.65.1:58133\",\"protocol\":\"op_msg\",\"durationMillis\":11}}\n", - "{\"t\":{\"$date\":\"2999-04-01T18:45:43.991+00:00\"},\"s\":\"I\", \"c\":\"WRITE\", \"id\":51803, \"ctx\":\"conn50\",\"msg\":\"Slow query\",\"attr\":{\"type\":\"update\",\"ns\":\"test.customers\",\"command\":{\"q\":{\"age\":{\"$gt\":18}},\"u\":{\"$set\":{\"subscribed\":false}},\"multi\":true,\"upsert\":false,\"comment\":\"update customers subscription status by age\"},\"planSummary\":\"IXSCAN { age: -1 }\",\"keysExamined\":608,\"docsExamined\":608,\"nMatched\":608,\"nModified\":441,\"nUpserted\":0,\"keysInserted\":441,\"keysDeleted\":441,\"numYields\":4,\"locks\":{\"ParallelBatchWriterMode\":{\"acquireCount\":{\"r\":5}},\"FeatureCompatibilityVersion\":{\"acquireCount\":{\"w\":5}},\"ReplicationStateTransition\":{\"acquireCount\":{\"w\":5}},\"Global\":{\"acquireCount\":{\"w\":5}},\"Database\":{\"acquireCount\":{\"w\":5}},\"Collection\":{\"acquireCount\":{\"w\":5}}},\"flowControl\":{\"acquireCount\":5},\"storage\":{},\"cpuNanos\":74500749,\"remote\":\"192.168.65.1:58133\",\"durationMillis\":74}}\n", + "{\"t\":{\"$date\":\"2999-04-01T18:45:43.991+00:00\"},\"s\":\"I\", \"c\":\"WRITE\", \"id\":51803, \"ctx\":\"conn50\",\"msg\":\"Slow query\",\"attr\":{\"type\":\"update\",\"ns\":\"test.customers\",\"command\":{\"q\":{\"age\":{\"$gt\":18}},\"u\":{\"$set\":{\"subscribed\":false}},\"multi\":true,\"upsert\":false,\"comment\":\"update customers subscription status by age\"},\"planSummary\":\"IXSCAN { age: -1 }\",\"keysExamined\":608,\"docsExamined\":608,\"nMatched\":608,\"nModified\":441,\"nUpserted\":0,\"keysInserted\":441,\"keysDeleted\":441,\"numYields\":4,\"locks\":{\"ParallelBatchWriterMode\":{\"acquireCount\":{\"r\":5}},\"FeatureCompatibilityVersion\":{\"acquireCount\":{\"w\":5}},\"ReplicationStateTransition\":{\"acquireCount\":{\"w\":5}},\"Global\":{\"acquireCount\":{\"w\":5}},\"Database\":{\"acquireCount\":{\"w\":5}},\"Collection\":{\"acquireCount\":{\"w\":5}}},\"flowControl\":{\"acquireCount\":5},\"storage\":{},\"cpuNanos\":74500749,\"remote\":\"192.168.65.1:58133\",\"durationMillis\":74,\"queues\":{\"ingress\":{\"admissions\":7,\"totalTimeQueuedMicros\":0},\"execution\":{\"admissions\":328,\"totalTimeQueuedMicros\":2109}}}}\n", "{\"t\":{\"$date\":\"2999-04-01T18:45:43.991+00:00\"},\"s\":\"I\", \"c\":\"COMMAND\", \"id\":51803, \"ctx\":\"conn50\",\"msg\":\"Slow query\",\"attr\":{\"type\":\"command\",\"ns\":\"test.$cmd\",\"command\":{\"update\":\"customers\",\"ordered\":true,\"comment\":\"update customers subscription status by age\",\"$db\":\"test\"},\"numYields\":4,\"reslen\":60,\"locks\":{\"ParallelBatchWriterMode\":{\"acquireCount\":{\"r\":6}},\"FeatureCompatibilityVersion\":{\"acquireCount\":{\"r\":1,\"w\":6}},\"ReplicationStateTransition\":{\"acquireCount\":{\"w\":5}},\"Global\":{\"acquireCount\":{\"r\":1,\"w\":6}},\"Database\":{\"acquireCount\":{\"w\":6}},\"Collection\":{\"acquireCount\":{\"w\":6}}},\"flowControl\":{\"acquireCount\":5},\"storage\":{},\"cpuNanos\":74715957,\"remote\":\"192.168.65.1:58133\",\"protocol\":\"op_msg\",\"durationMillis\":74}}\n", - "{\"t\":{\"$date\":\"2999-04-01T18:45:45.007+00:00\"},\"s\":\"I\", \"c\":\"WRITE\", \"id\":51803, \"ctx\":\"conn50\",\"msg\":\"Slow query\",\"attr\":{\"type\":\"update\",\"ns\":\"test.customers\",\"command\":{\"q\":{\"age\":{\"$gt\":35}},\"u\":{\"$set\":{\"subscribed\":true}},\"multi\":true,\"upsert\":false,\"comment\":\"update customers subscription status by age\"},\"planSummary\":\"IXSCAN { age: -1 }\",\"keysExamined\":495,\"docsExamined\":495,\"nMatched\":495,\"nModified\":495,\"nUpserted\":0,\"keysInserted\":495,\"keysDeleted\":495,\"numYields\":2,\"locks\":{\"ParallelBatchWriterMode\":{\"acquireCount\":{\"r\":3}},\"FeatureCompatibilityVersion\":{\"acquireCount\":{\"w\":3}},\"ReplicationStateTransition\":{\"acquireCount\":{\"w\":3}},\"Global\":{\"acquireCount\":{\"w\":3}},\"Database\":{\"acquireCount\":{\"w\":3}},\"Collection\":{\"acquireCount\":{\"w\":3}}},\"flowControl\":{\"acquireCount\":3},\"storage\":{},\"cpuNanos\":27416375,\"remote\":\"192.168.65.1:58133\",\"durationMillis\":27}}\n", + "{\"t\":{\"$date\":\"2999-04-01T18:45:45.007+00:00\"},\"s\":\"I\", \"c\":\"WRITE\", \"id\":51803, \"ctx\":\"conn50\",\"msg\":\"Slow query\",\"attr\":{\"type\":\"update\",\"ns\":\"test.customers\",\"command\":{\"q\":{\"age\":{\"$gt\":35}},\"u\":{\"$set\":{\"subscribed\":true}},\"multi\":true,\"upsert\":false,\"comment\":\"update customers subscription status by age\"},\"planSummary\":\"IXSCAN { age: -1 }\",\"keysExamined\":495,\"docsExamined\":495,\"nMatched\":495,\"nModified\":495,\"nUpserted\":0,\"keysInserted\":495,\"keysDeleted\":495,\"numYields\":2,\"locks\":{\"ParallelBatchWriterMode\":{\"acquireCount\":{\"r\":3}},\"FeatureCompatibilityVersion\":{\"acquireCount\":{\"w\":3}},\"ReplicationStateTransition\":{\"acquireCount\":{\"w\":3}},\"Global\":{\"acquireCount\":{\"w\":3}},\"Database\":{\"acquireCount\":{\"w\":3}},\"Collection\":{\"acquireCount\":{\"w\":3}}},\"flowControl\":{\"acquireCount\":3},\"storage\":{},\"cpuNanos\":27416375,\"remote\":\"192.168.65.1:58133\",\"durationMillis\":27,\"workingMillis\":20,\"queues\":{\"ingress\":{\"admissions\":7,\"totalTimeQueuedMicros\":0},\"execution\":{\"admissions\":328,\"totalTimeQueuedMicros\":2109}}}}\n", "{\"t\":{\"$date\":\"2999-04-01T18:45:45.008+00:00\"},\"s\":\"I\", \"c\":\"COMMAND\", \"id\":51803, \"ctx\":\"conn50\",\"msg\":\"Slow query\",\"attr\":{\"type\":\"command\",\"ns\":\"test.$cmd\",\"command\":{\"update\":\"customers\",\"ordered\":true,\"comment\":\"update customers subscription status by age\",\"$db\":\"test\"},\"numYields\":2,\"reslen\":60,\"locks\":{\"ParallelBatchWriterMode\":{\"acquireCount\":{\"r\":4}},\"FeatureCompatibilityVersion\":{\"acquireCount\":{\"r\":1,\"w\":4}},\"ReplicationStateTransition\":{\"acquireCount\":{\"w\":3}},\"Global\":{\"acquireCount\":{\"r\":1,\"w\":4}},\"Database\":{\"acquireCount\":{\"w\":4}},\"Collection\":{\"acquireCount\":{\"w\":4}}},\"flowControl\":{\"acquireCount\":3},\"storage\":{},\"cpuNanos\":27721625,\"remote\":\"192.168.65.1:58133\",\"protocol\":\"op_msg\",\"durationMillis\":27}}\n", + "{\"t\":{\"$date\":\"2999-04-01T18:45:45.009+00:00\"},\"s\":\"I\", \"c\":\"COMMAND\", \"id\":51803, \"ctx\":\"conn50\",\"msg\":\"Slow query\",\"attr\":{\"type\":\"command\",\"ns\":\"test.myview\",\"command\":{\"update\":\"customers\",\"ordered\":true,\"comment\":\"update customers subscription status by age\",\"$db\":\"test\"},\"numYields\":2,\"reslen\":60,\"locks\":{\"ParallelBatchWriterMode\":{\"acquireCount\":{\"r\":4}},\"FeatureCompatibilityVersion\":{\"acquireCount\":{\"r\":1,\"w\":4}},\"ReplicationStateTransition\":{\"acquireCount\":{\"w\":3}},\"Global\":{\"acquireCount\":{\"r\":1,\"w\":4}},\"Database\":{\"acquireCount\":{\"w\":4}},\"Collection\":{\"acquireCount\":{\"w\":4}}},\"flowControl\":{\"acquireCount\":3},\"storage\":{},\"cpuNanos\":27721625,\"remote\":\"192.168.65.1:58133\",\"protocol\":\"op_msg\",\"durationMillis\":27,\"resolvedViews\":[{\"viewNamespace\":\"test.myview\",\"dependencyChain\":[\"myView\",\"myCollection\"],\"resolvedPipeline\":[{\"$sort\":{\"firstName\":1}}]}]}}\n", "{\"t\":{\"$date\":\"2999-04-01T18:45:45.040+00:00\"},\"s\":\"I\", \"c\":\"WRITE\", \"id\":51803, \"ctx\":\"conn50\",\"msg\":\"Slow query\",\"attr\":{\"type\":\"update\",\"ns\":\"test.customers\",\"command\":{\"q\":{\"age\":{\"$gt\":18}},\"u\":{\"$set\":{\"subscribed\":false}},\"multi\":true,\"upsert\":false,\"comment\":\"update customers subscription status by age\"},\"planSummary\":\"IXSCAN { age: -1 }\",\"keysExamined\":495,\"docsExamined\":495,\"nMatched\":495,\"nModified\":495,\"nUpserted\":0,\"keysInserted\":495,\"keysDeleted\":495,\"numYields\":0,\"locks\":{\"ParallelBatchWriterMode\":{\"acquireCount\":{\"r\":1}},\"FeatureCompatibilityVersion\":{\"acquireCount\":{\"w\":1}},\"ReplicationStateTransition\":{\"acquireCount\":{\"w\":1}},\"Global\":{\"acquireCount\":{\"w\":1}},\"Database\":{\"acquireCount\":{\"w\":1}},\"Collection\":{\"acquireCount\":{\"w\":1}}},\"flowControl\":{\"acquireCount\":1},\"storage\":{},\"cpuNanos\":14032417,\"remote\":\"192.168.65.1:58133\",\"durationMillis\":14}}\n", "{\"t\":{\"$date\":\"2999-04-01T18:45:45.041+00:00\"},\"s\":\"I\", \"c\":\"COMMAND\", \"id\":51803, \"ctx\":\"conn50\",\"msg\":\"Slow query\",\"attr\":{\"type\":\"command\",\"ns\":\"test.$cmd\",\"command\":{\"update\":\"customers\",\"ordered\":true,\"comment\":\"update customers subscription status by age\",\"$db\":\"test\"},\"numYields\":0,\"reslen\":60,\"locks\":{\"ParallelBatchWriterMode\":{\"acquireCount\":{\"r\":2}},\"FeatureCompatibilityVersion\":{\"acquireCount\":{\"r\":1,\"w\":2}},\"ReplicationStateTransition\":{\"acquireCount\":{\"w\":1}},\"Global\":{\"acquireCount\":{\"r\":1,\"w\":2}},\"Database\":{\"acquireCount\":{\"w\":2}},\"Collection\":{\"acquireCount\":{\"w\":2}}},\"flowControl\":{\"acquireCount\":1},\"storage\":{},\"cpuNanos\":15198542,\"remote\":\"192.168.65.1:58133\",\"protocol\":\"op_msg\",\"durationMillis\":15}}\n", "{\"t\":{\"$date\":\"2999-04-01T18:45:45.338+00:00\"},\"s\":\"I\", \"c\":\"COMMAND\", \"id\":51803, \"ctx\":\"conn50\",\"msg\":\"Slow query\",\"attr\":{\"type\":\"command\",\"ns\":\"test.customers\",\"command\":{\"find\":\"customers\",\"filter\":{\"subscribed\":false},\"sort\":{\"name\":1},\"comment\":\"query customers by subscription status\",\"limit\":151,\"$db\":\"test\"},\"planSummary\":\"IXSCAN { name: 1 }\",\"planningTimeMicros\":11891,\"cursorid\":5170666760900931828,\"keysExamined\":540,\"docsExamined\":540,\"fromPlanCache\":true,\"nBatches\":1,\"numYields\":0,\"nreturned\":101,\"queryHash\":\"A9774B9D\",\"planCacheKey\":\"0D12DCDF\",\"queryFramework\":\"classic\",\"reslen\":14089,\"locks\":{\"FeatureCompatibilityVersion\":{\"acquireCount\":{\"r\":1}},\"Global\":{\"acquireCount\":{\"r\":1}}},\"storage\":{},\"cpuNanos\":12071416,\"remote\":\"192.168.65.1:58133\",\"protocol\":\"op_msg\",\"durationMillis\":12}}\n", diff --git a/mongo/tests/results/slow-operations-standalone.json b/mongo/tests/results/slow-operations-standalone.json index 9fb87db7ad7c2..bcd604a916f39 100644 --- a/mongo/tests/results/slow-operations-standalone.json +++ b/mongo/tests/results/slow-operations-standalone.json @@ -265,6 +265,16 @@ }, "flow_control_stats": { "acquire_count": 5 + }, + "queues": { + "ingress": { + "admissions": 7, + "total_time_queued_micros": 0 + }, + "execution": { + "admissions": 328, + "total_time_queued_micros": 2109 + } } }, { @@ -375,6 +385,17 @@ }, "flow_control_stats": { "acquire_count": 3 + }, + "working_millis": 20, + "queues": { + "ingress": { + "admissions": 7, + "total_time_queued_micros": 0 + }, + "execution": { + "admissions": 328, + "total_time_queued_micros": 2109 + } } }, { @@ -430,6 +451,68 @@ "acquire_count": 3 } }, + { + "timestamp": 32479987545009.0, + "dbname": "test", + "op": "command", + "ns": "test.myview", + "query_signature": "c1df6c33f6b6c258", + "statement": "{\"update\": \"customers\", \"ordered\": true, \"$db\": \"test\"}", + "comment": "update customers subscription status by age", + "mills": 27, + "num_yields": 2, + "response_length": 60, + "cpu_nanos": 27721625, + "client": { + "hostname": "192.168.65.1:58133" + }, + "lock_stats": { + "parallel_batch_writer_mode": { + "acquire_count": { + "r": 4 + } + }, + "feature_compatibility_version": { + "acquire_count": { + "r": 1, + "w": 4 + } + }, + "replication_state_transition": { + "acquire_count": { + "w": 3 + } + }, + "global": { + "acquire_count": { + "r": 1, + "w": 4 + } + }, + "database": { + "acquire_count": { + "w": 4 + } + }, + "collection": { + "acquire_count": { + "w": 4 + } + } + }, + "flow_control_stats": { + "acquire_count": 3 + }, + "resolved_views": [ + { + "view_namespace": "test.myview", + "dependency_chain": [ + "myView", + "myCollection" + ] + } + ] + }, { "timestamp": 32479987545040.0, "dbname": "test", diff --git a/mongo/tests/test_dbm_slow_operations.py b/mongo/tests/test_dbm_slow_operations.py index ce747d3d28c86..392a6c336f98b 100644 --- a/mongo/tests/test_dbm_slow_operations.py +++ b/mongo/tests/test_dbm_slow_operations.py @@ -36,6 +36,8 @@ def test_mongo_slow_operations_standalone(aggregator, instance_integration_clust dbm_samples = aggregator.get_event_platform_events("dbm-samples") slow_operation_explain_plans_payload = [event for event in dbm_samples if event['dbm_type'] == 'plan'] + print(json.dumps(slow_operation_payload)) + with open(os.path.join(HERE, "results", "slow-operations-standalone.json"), 'r') as f: expected_slow_operation_payload = json.load(f) assert slow_operation_payload == expected_slow_operation_payload From 721ee62cc2c2830964cf245f9d9636e89970f387 Mon Sep 17 00:00:00 2001 From: Seth Samuel Date: Thu, 3 Oct 2024 13:33:28 -0400 Subject: [PATCH 42/56] Parse each row of pg_stat_activity separately inside a try/catch (#18762) --- postgres/changelog.d/18762.fixed | 1 + .../datadog_checks/postgres/statement_samples.py | 12 +++++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 postgres/changelog.d/18762.fixed diff --git a/postgres/changelog.d/18762.fixed b/postgres/changelog.d/18762.fixed new file mode 100644 index 0000000000000..010efda46ccaf --- /dev/null +++ b/postgres/changelog.d/18762.fixed @@ -0,0 +1 @@ +Parse each row of pg_stat_activity separately inside a try/catch to avoid crashing on bad UTF8 data. diff --git a/postgres/datadog_checks/postgres/statement_samples.py b/postgres/datadog_checks/postgres/statement_samples.py index 0a93cad3b5616..4f27ca18875eb 100644 --- a/postgres/datadog_checks/postgres/statement_samples.py +++ b/postgres/datadog_checks/postgres/statement_samples.py @@ -268,7 +268,17 @@ def _get_new_pg_stat_activity(self, available_activity_columns): with conn.cursor(cursor_factory=CommenterDictCursor) as cursor: self._log.debug("Running query [%s] %s", query, params) cursor.execute(query, params) - rows = cursor.fetchall() + rows = [] + while True: + try: + row = cursor.fetchone() + if row is None: + break + rows.append(row) + except UnicodeDecodeError: + self._log.debug("Invalid unicode in row from pg_stat_activity") + except: + self._log.warning("Unknown error fetching row from pg_stat_activity") self._report_check_hist_metrics(start_time, len(rows), "get_new_pg_stat_activity") self._log.debug("Loaded %s rows from %s", len(rows), self._config.pg_stat_activity_view) From 797d480f4eab317a60a43da9cbf235f7911728a5 Mon Sep 17 00:00:00 2001 From: Seth Samuel Date: Thu, 3 Oct 2024 14:16:31 -0400 Subject: [PATCH 43/56] Postgres cross-org telemetry (#18758) --- datadog_checks_base/changelog.d/18758.added | 1 + .../base/stubs/datadog_agent.py | 10 ++++++ postgres/changelog.d/18758.added | 1 + postgres/datadog_checks/postgres/metadata.py | 22 +++++++++++++ postgres/datadog_checks/postgres/postgres.py | 2 ++ .../postgres/statement_samples.py | 31 +++++++++++++++++++ 6 files changed, 67 insertions(+) create mode 100644 datadog_checks_base/changelog.d/18758.added create mode 100644 postgres/changelog.d/18758.added diff --git a/datadog_checks_base/changelog.d/18758.added b/datadog_checks_base/changelog.d/18758.added new file mode 100644 index 0000000000000..426f18362cb36 --- /dev/null +++ b/datadog_checks_base/changelog.d/18758.added @@ -0,0 +1 @@ +Added Postgres cross-org telemetry metrics. diff --git a/datadog_checks_base/datadog_checks/base/stubs/datadog_agent.py b/datadog_checks_base/datadog_checks/base/stubs/datadog_agent.py index 5d355a97c7f72..67f59540d0a80 100644 --- a/datadog_checks_base/datadog_checks/base/stubs/datadog_agent.py +++ b/datadog_checks_base/datadog_checks/base/stubs/datadog_agent.py @@ -29,6 +29,7 @@ def __init__(self): self._process_start_time = 0 self._external_tags = [] self._host_tags = "{}" + self._sent_telemetry = defaultdict(list) def get_default_config(self): return {'enable_metadata_collection': True, 'disable_unsafe_yaml': True} @@ -84,6 +85,12 @@ def assert_external_tags_count(self, count): count, tags_count, repr(self._external_tags) ) + def assert_telemetry(self, check_name, metric_name, metric_type, metric_value): + values = self._sent_telemetry[(check_name, metric_name, metric_type)] + assert metric_value in values, 'Expected value {} for check {}, metric {}, type {}. Found {}.'.format( + metric_value, check_name, metric_name, metric_type, values + ) + def get_hostname(self): return self._hostname @@ -152,6 +159,9 @@ def obfuscate_mongodb_string(self, command): # Passthrough stub: obfuscation implementation is in Go code. return command + def emit_agent_telemetry(self, check_name, metric_name, metric_value, metric_type): + self._sent_telemetry[(check_name, metric_name, metric_type)].append(metric_value) + # Use the stub as a singleton datadog_agent = DatadogAgentStub() diff --git a/postgres/changelog.d/18758.added b/postgres/changelog.d/18758.added new file mode 100644 index 0000000000000..426f18362cb36 --- /dev/null +++ b/postgres/changelog.d/18758.added @@ -0,0 +1 @@ +Added Postgres cross-org telemetry metrics. diff --git a/postgres/datadog_checks/postgres/metadata.py b/postgres/datadog_checks/postgres/metadata.py index a5b8fd592d0be..8c859f8d4b01d 100644 --- a/postgres/datadog_checks/postgres/metadata.py +++ b/postgres/datadog_checks/postgres/metadata.py @@ -297,6 +297,8 @@ def report_postgres_metadata(self): # Tuned from experiments on staging, we may want to make this dynamic based on schema size in the future chunk_size = 50 + total_tables = 0 + start_time = time.time() for database in schema_metadata: dbname = database["name"] @@ -332,11 +334,31 @@ def report_postgres_metadata(self): if buffer_column_count >= 100_000: self._flush_schema(base_event, database, schema, tables_buffer) + total_tables += len(tables_buffer) tables_buffer = [] buffer_column_count = 0 if len(tables_buffer) > 0: self._flush_schema(base_event, database, schema, tables_buffer) + total_tables += len(tables_buffer) + elapsed_ms = (time.time() - start_time) * 1000 + self._check.histogram( + "dd.postgres.schema.time", + elapsed_ms, + tags=self._check.tags, + hostname=self._check.resolved_hostname, + raw=True, + ) + self._check.gauge( + "dd.postgres.schema.tables_count", + total_tables, + tags=self._check.tags, + hostname=self._check.resolved_hostname, + raw=True, + ) + datadog_agent.emit_agent_telemetry("postgres", "schema_tables_elapsed_ms", elapsed_ms, "gauge") + datadog_agent.emit_agent_telemetry("postgres", "schema_tables_count", total_tables, "gauge") + self._is_schemas_collection_in_progress = False def _should_collect_metadata(self, name, metadata_type): diff --git a/postgres/datadog_checks/postgres/postgres.py b/postgres/datadog_checks/postgres/postgres.py index 03d77018b93ee..65aeb4d86fcda 100644 --- a/postgres/datadog_checks/postgres/postgres.py +++ b/postgres/datadog_checks/postgres/postgres.py @@ -646,6 +646,8 @@ def _collect_metric_autodiscovery(self, instance_tags, scopes, scope_type): hostname=self.resolved_hostname, raw=True, ) + telemetry_metric = scope_type.replace("_", "", 1) # remove the first underscore to match telemetry convention + datadog_agent.emit_agent_telemetry("postgres", f"{telemetry_metric}_ms", elapsed_ms, "histogram") if elapsed_ms > self._config.min_collection_interval * 1000: self.record_warning( DatabaseConfigurationError.autodiscovered_metrics_exceeds_collection_interval, diff --git a/postgres/datadog_checks/postgres/statement_samples.py b/postgres/datadog_checks/postgres/statement_samples.py index 4f27ca18875eb..3ec1f07fd64d0 100644 --- a/postgres/datadog_checks/postgres/statement_samples.py +++ b/postgres/datadog_checks/postgres/statement_samples.py @@ -434,6 +434,18 @@ def _report_check_hist_metrics(self, start_time, row_len, method_name): hostname=self._check.resolved_hostname, raw=True, ) + datadog_agent.emit_agent_telemetry( + "postgres", + f"{method_name}_ms", + (time.time() - start_time) * 1000, + "histogram", + ) + datadog_agent.emit_agent_telemetry( + "postgres", + f"{method_name}_count", + row_len, + "histogram", + ) def run_job(self): # do not emit any dd.internal metrics for DBM specific check code @@ -478,6 +490,13 @@ def _collect_statement_samples(self): tags=self.tags, raw=True, ) + datadog_agent.emit_agent_telemetry( + "postgres", + "collect_activity_snapshot_ms", + (time.time() - start_time) * 1000, + "histogram", + ) + elapsed_ms = (time.time() - start_time) * 1000 self._check.histogram( "dd.postgres.collect_statement_samples.time", @@ -514,6 +533,18 @@ def _collect_statement_samples(self): hostname=self._check.resolved_hostname, raw=True, ) + datadog_agent.emit_agent_telemetry( + "postgres", + "collect_statement_samples_ms", + elapsed_ms, + "histogram", + ) + datadog_agent.emit_agent_telemetry( + "postgres", + "collect_statement_samples_count", + submitted_count, + "gauge", + ) @staticmethod def _to_active_session(row, track_activity_query_size): From 834e99deb2b162999983138ba83d167336244d47 Mon Sep 17 00:00:00 2001 From: edengorevoy <40647567+edengorevoy@users.noreply.github.com> Date: Thu, 3 Oct 2024 18:11:29 -0400 Subject: [PATCH 44/56] SDBM-1193 Sqlserver agent jobs: reduce querying time for large histories (#18760) * Update job history query --- sqlserver/changelog.d/18760.fixed | 1 + .../datadog_checks/sqlserver/agent_history.py | 114 +++++---- sqlserver/tests/test_agent_jobs.py | 229 ++++++++++-------- 3 files changed, 191 insertions(+), 153 deletions(-) create mode 100644 sqlserver/changelog.d/18760.fixed diff --git a/sqlserver/changelog.d/18760.fixed b/sqlserver/changelog.d/18760.fixed new file mode 100644 index 0000000000000..a295600258290 --- /dev/null +++ b/sqlserver/changelog.d/18760.fixed @@ -0,0 +1 @@ +Updated SQL Server Agent job query for completed jobs, significantly reducing query times for large job history logs \ No newline at end of file diff --git a/sqlserver/datadog_checks/sqlserver/agent_history.py b/sqlserver/datadog_checks/sqlserver/agent_history.py index f78d126fdabca..7492dac5ae8ad 100644 --- a/sqlserver/datadog_checks/sqlserver/agent_history.py +++ b/sqlserver/datadog_checks/sqlserver/agent_history.py @@ -18,37 +18,26 @@ DEFAULT_ROW_LIMIT = 10000 AGENT_HISTORY_QUERY = """\ -WITH HISTORY_ENTRIES AS ( +WITH BASE AS ( SELECT {history_row_limit_filter} j.name AS job_name, - CAST(sjh1.job_id AS char(36)) AS job_id, - sjh1.step_name, - sjh1.step_id, - sjh1.instance_id AS step_instance_id, - ( - SELECT MIN(sjh2.instance_id) - FROM msdb.dbo.sysjobhistory AS sjh2 - WHERE sjh2.job_id = sjh1.job_id - AND sjh2.step_id = 0 - AND sjh2.instance_id >= sjh1.instance_id - ) AS completion_instance_id, - ( - SELECT DATEDIFF(SECOND, '19700101', - DATEADD(HOUR, sjh1.run_time / 10000, - DATEADD(MINUTE, (sjh1.run_time / 100) % 100, - DATEADD(SECOND, sjh1.run_time % 100, - CAST(CAST(sjh1.run_date AS CHAR(8)) AS DATETIME) - ) + CAST(sjh.job_id AS CHAR(36)) AS job_id, + sjh.step_name, + sjh.step_id, + sjh.instance_id AS step_instance_id, + DATEDIFF(SECOND, '19700101', + DATEADD(HOUR, sjh.run_time / 10000, + DATEADD(MINUTE, (sjh.run_time / 100) % 100, + DATEADD(SECOND, sjh.run_time % 100, + CAST(CAST(sjh.run_date AS CHAR(8)) AS DATETIME) ) ) - ) - DATEPART(tzoffset, SYSDATETIMEOFFSET()) * 60 - ) AS run_epoch_time, - ( - (sjh1.run_duration / 10000) * 3600 - + ((sjh1.run_duration % 10000) / 100) * 60 - + (sjh1.run_duration % 100) - ) AS run_duration_seconds, - CASE sjh1.run_status + ) + ) - DATEPART(TZOFFSET, SYSDATETIMEOFFSET()) * 60 AS run_epoch_time, + (sjh.run_duration / 10000) * 3600 + + ((sjh.run_duration % 10000) / 100) * 60 + + (sjh.run_duration % 100) AS run_duration_seconds, + CASE sjh.run_status WHEN 0 THEN 'Failed' WHEN 1 THEN 'Succeeded' WHEN 2 THEN 'Retry' @@ -56,32 +45,55 @@ WHEN 4 THEN 'In Progress' ELSE 'Unknown' END AS step_run_status, - sjh1.message - FROM - msdb.dbo.sysjobhistory AS sjh1 - INNER JOIN msdb.dbo.sysjobs AS j - ON j.job_id = sjh1.job_id - ORDER BY completion_instance_id DESC -) -SELECT * FROM HISTORY_ENTRIES -WHERE - EXISTS ( - SELECT 1 - FROM msdb.dbo.sysjobhistory AS sjh2 - WHERE sjh2.instance_id = HISTORY_ENTRIES.completion_instance_id - AND (DATEDIFF(SECOND, '19700101', - DATEADD(HOUR, sjh2.run_time / 10000, - DATEADD(MINUTE, (sjh2.run_time / 100) % 100, - DATEADD(SECOND, sjh2.run_time % 100, - CAST(CAST(sjh2.run_date AS CHAR(8)) AS DATETIME) - ) + sjh.message + FROM msdb.dbo.sysjobhistory AS sjh + INNER JOIN msdb.dbo.sysjobs AS j ON j.job_id = sjh.job_id + ORDER BY step_instance_id DESC +), +COMPLETION_CTE AS ( + SELECT + BASE.*, + MIN(CASE WHEN BASE.step_id = 0 THEN BASE.step_instance_id END) OVER ( + PARTITION BY BASE.job_id + ORDER BY BASE.step_instance_id + ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING + ) AS completion_instance_id + FROM BASE +), +HISTORY_ENTRIES AS ( + SELECT + C.*, + DATEDIFF(SECOND, '19700101', + DATEADD(HOUR, c_sjh.run_time / 10000, + DATEADD(MINUTE, (c_sjh.run_time / 100) % 100, + DATEADD(SECOND, c_sjh.run_time % 100, + CAST(CAST(c_sjh.run_date AS CHAR(8)) AS DATETIME) ) ) - ) - DATEPART(tzoffset, SYSDATETIMEOFFSET()) * 60 - + (sjh2.run_duration / 10000) * 3600 - + ((sjh2.run_duration % 10000) / 100) * 60 - + (sjh2.run_duration % 100)) > 0 + {last_collection_time_filter} - ) + ) + ) - DATEPART(TZOFFSET, SYSDATETIMEOFFSET()) * 60 + + (c_sjh.run_duration / 10000) * 3600 + + ((c_sjh.run_duration % 10000) / 100) * 60 + + (c_sjh.run_duration % 100) AS completion_epoch_time + FROM COMPLETION_CTE AS C + LEFT JOIN msdb.dbo.sysjobhistory AS c_sjh + ON c_sjh.instance_id = C.completion_instance_id + WHERE C.completion_instance_id IS NOT NULL +) +SELECT + job_name, + job_id, + step_name, + step_id, + step_instance_id, + completion_instance_id, + run_epoch_time, + run_duration_seconds, + step_run_status, + message +FROM HISTORY_ENTRIES +WHERE + completion_epoch_time > {last_collection_time_filter}; """ diff --git a/sqlserver/tests/test_agent_jobs.py b/sqlserver/tests/test_agent_jobs.py index f2b1ff7d83efa..e265e892b03cb 100644 --- a/sqlserver/tests/test_agent_jobs.py +++ b/sqlserver/tests/test_agent_jobs.py @@ -21,37 +21,26 @@ AGENT_HISTORY_QUERY = """\ -WITH HISTORY_ENTRIES AS ( +WITH BASE AS ( SELECT {history_row_limit_filter} j.name AS job_name, - CAST(sjh1.job_id AS char(36)) AS job_id, - sjh1.step_name, - sjh1.step_id, - sjh1.instance_id AS step_instance_id, - ( - SELECT MIN(sjh2.instance_id) - FROM msdb.dbo.sysjobhistory AS sjh2 - WHERE sjh2.job_id = sjh1.job_id - AND sjh2.step_id = 0 - AND sjh2.instance_id >= sjh1.instance_id - ) AS completion_instance_id, - ( - SELECT DATEDIFF(SECOND, '19700101', - DATEADD(HOUR, sjh1.run_time / 10000, - DATEADD(MINUTE, (sjh1.run_time / 100) % 100, - DATEADD(SECOND, sjh1.run_time % 100, - CAST(CAST(sjh1.run_date AS CHAR(8)) AS DATETIME) - ) + CAST(sjh.job_id AS CHAR(36)) AS job_id, + sjh.step_name, + sjh.step_id, + sjh.instance_id AS step_instance_id, + DATEDIFF(SECOND, '19700101', + DATEADD(HOUR, sjh.run_time / 10000, + DATEADD(MINUTE, (sjh.run_time / 100) % 100, + DATEADD(SECOND, sjh.run_time % 100, + CAST(CAST(sjh.run_date AS CHAR(8)) AS DATETIME) ) ) - ) - DATEPART(tzoffset, SYSDATETIMEOFFSET()) * 60 - ) AS run_epoch_time, - ( - (sjh1.run_duration / 10000) * 3600 - + ((sjh1.run_duration % 10000) / 100) * 60 - + (sjh1.run_duration % 100) - ) AS run_duration_seconds, - CASE sjh1.run_status + ) + ) - DATEPART(TZOFFSET, SYSDATETIMEOFFSET()) * 60 AS run_epoch_time, + (sjh.run_duration / 10000) * 3600 + + ((sjh.run_duration % 10000) / 100) * 60 + + (sjh.run_duration % 100) AS run_duration_seconds, + CASE sjh.run_status WHEN 0 THEN 'Failed' WHEN 1 THEN 'Succeeded' WHEN 2 THEN 'Retry' @@ -59,66 +48,79 @@ WHEN 4 THEN 'In Progress' ELSE 'Unknown' END AS step_run_status, - sjh1.message - FROM - msdb.dbo.sysjobhistory AS sjh1 - INNER JOIN msdb.dbo.sysjobs AS j - ON j.job_id = sjh1.job_id - ORDER BY completion_instance_id DESC -) -SELECT * FROM HISTORY_ENTRIES -WHERE - EXISTS ( - SELECT 1 - FROM msdb.dbo.sysjobhistory AS sjh2 - WHERE sjh2.instance_id = HISTORY_ENTRIES.completion_instance_id - AND (DATEDIFF(SECOND, '19700101', - DATEADD(HOUR, sjh2.run_time / 10000, - DATEADD(MINUTE, (sjh2.run_time / 100) % 100, - DATEADD(SECOND, sjh2.run_time % 100, - CAST(CAST(sjh2.run_date AS CHAR(8)) AS DATETIME) - ) + sjh.message + FROM msdb.dbo.sysjobhistory AS sjh + INNER JOIN msdb.dbo.sysjobs AS j ON j.job_id = sjh.job_id + ORDER BY step_instance_id DESC +), +COMPLETION_CTE AS ( + SELECT + BASE.*, + MIN(CASE WHEN BASE.step_id = 0 THEN BASE.step_instance_id END) OVER ( + PARTITION BY BASE.job_id + ORDER BY BASE.step_instance_id + ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING + ) AS completion_instance_id + FROM BASE +), +HISTORY_ENTRIES AS ( + SELECT + C.*, + DATEDIFF(SECOND, '19700101', + DATEADD(HOUR, c_sjh.run_time / 10000, + DATEADD(MINUTE, (c_sjh.run_time / 100) % 100, + DATEADD(SECOND, c_sjh.run_time % 100, + CAST(CAST(c_sjh.run_date AS CHAR(8)) AS DATETIME) ) ) - ) - DATEPART(tzoffset, SYSDATETIMEOFFSET()) * 60 - + (sjh2.run_duration / 10000) * 3600 - + ((sjh2.run_duration % 10000) / 100) * 60 - + (sjh2.run_duration % 100)) > 0 + {last_collection_time_filter} - ) + ) + ) - DATEPART(TZOFFSET, SYSDATETIMEOFFSET()) * 60 + + (c_sjh.run_duration / 10000) * 3600 + + ((c_sjh.run_duration % 10000) / 100) * 60 + + (c_sjh.run_duration % 100) AS completion_epoch_time + FROM COMPLETION_CTE AS C + LEFT JOIN msdb.dbo.sysjobhistory AS c_sjh + ON c_sjh.instance_id = C.completion_instance_id + WHERE C.completion_instance_id IS NOT NULL +) +SELECT + job_name, + job_id, + step_name, + step_id, + step_instance_id, + completion_instance_id, + run_epoch_time, + run_duration_seconds, + step_run_status, + message +FROM HISTORY_ENTRIES +WHERE + completion_epoch_time > {last_collection_time_filter}; """ + FORMATTED_HISTORY_QUERY = """\ -WITH HISTORY_ENTRIES AS ( +WITH BASE AS ( SELECT TOP 10000 j.name AS job_name, - CAST(sjh1.job_id AS char(36)) AS job_id, - sjh1.step_name, - sjh1.step_id, - sjh1.instance_id AS step_instance_id, - ( - SELECT MIN(sjh2.instance_id) - FROM msdb.dbo.sysjobhistory AS sjh2 - WHERE sjh2.job_id = sjh1.job_id - AND sjh2.step_id = 0 - AND sjh2.instance_id >= sjh1.instance_id - ) AS completion_instance_id, - ( - SELECT DATEDIFF(SECOND, '19700101', - DATEADD(HOUR, sjh1.run_time / 10000, - DATEADD(MINUTE, (sjh1.run_time / 100) % 100, - DATEADD(SECOND, sjh1.run_time % 100, - CAST(CAST(sjh1.run_date AS CHAR(8)) AS DATETIME) - ) + CAST(sjh.job_id AS CHAR(36)) AS job_id, + sjh.step_name, + sjh.step_id, + sjh.instance_id AS step_instance_id, + DATEDIFF(SECOND, '19700101', + DATEADD(HOUR, sjh.run_time / 10000, + DATEADD(MINUTE, (sjh.run_time / 100) % 100, + DATEADD(SECOND, sjh.run_time % 100, + CAST(CAST(sjh.run_date AS CHAR(8)) AS DATETIME) ) ) - ) - DATEPART(tzoffset, SYSDATETIMEOFFSET()) * 60 - ) AS run_epoch_time, - ( - (sjh1.run_duration / 10000) * 3600 - + ((sjh1.run_duration % 10000) / 100) * 60 - + (sjh1.run_duration % 100) - ) AS run_duration_seconds, - CASE sjh1.run_status + ) + ) - DATEPART(TZOFFSET, SYSDATETIMEOFFSET()) * 60 AS run_epoch_time, + (sjh.run_duration / 10000) * 3600 + + ((sjh.run_duration % 10000) / 100) * 60 + + (sjh.run_duration % 100) AS run_duration_seconds, + CASE sjh.run_status WHEN 0 THEN 'Failed' WHEN 1 THEN 'Succeeded' WHEN 2 THEN 'Retry' @@ -126,32 +128,55 @@ WHEN 4 THEN 'In Progress' ELSE 'Unknown' END AS step_run_status, - sjh1.message - FROM - msdb.dbo.sysjobhistory AS sjh1 - INNER JOIN msdb.dbo.sysjobs AS j - ON j.job_id = sjh1.job_id - ORDER BY completion_instance_id DESC -) -SELECT * FROM HISTORY_ENTRIES -WHERE - EXISTS ( - SELECT 1 - FROM msdb.dbo.sysjobhistory AS sjh2 - WHERE sjh2.instance_id = HISTORY_ENTRIES.completion_instance_id - AND (DATEDIFF(SECOND, '19700101', - DATEADD(HOUR, sjh2.run_time / 10000, - DATEADD(MINUTE, (sjh2.run_time / 100) % 100, - DATEADD(SECOND, sjh2.run_time % 100, - CAST(CAST(sjh2.run_date AS CHAR(8)) AS DATETIME) - ) + sjh.message + FROM msdb.dbo.sysjobhistory AS sjh + INNER JOIN msdb.dbo.sysjobs AS j ON j.job_id = sjh.job_id + ORDER BY step_instance_id DESC +), +COMPLETION_CTE AS ( + SELECT + BASE.*, + MIN(CASE WHEN BASE.step_id = 0 THEN BASE.step_instance_id END) OVER ( + PARTITION BY BASE.job_id + ORDER BY BASE.step_instance_id + ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING + ) AS completion_instance_id + FROM BASE +), +HISTORY_ENTRIES AS ( + SELECT + C.*, + DATEDIFF(SECOND, '19700101', + DATEADD(HOUR, c_sjh.run_time / 10000, + DATEADD(MINUTE, (c_sjh.run_time / 100) % 100, + DATEADD(SECOND, c_sjh.run_time % 100, + CAST(CAST(c_sjh.run_date AS CHAR(8)) AS DATETIME) ) ) - ) - DATEPART(tzoffset, SYSDATETIMEOFFSET()) * 60 - + (sjh2.run_duration / 10000) * 3600 - + ((sjh2.run_duration % 10000) / 100) * 60 - + (sjh2.run_duration % 100)) > 0 + 10000 - ) + ) + ) - DATEPART(TZOFFSET, SYSDATETIMEOFFSET()) * 60 + + (c_sjh.run_duration / 10000) * 3600 + + ((c_sjh.run_duration % 10000) / 100) * 60 + + (c_sjh.run_duration % 100) AS completion_epoch_time + FROM COMPLETION_CTE AS C + LEFT JOIN msdb.dbo.sysjobhistory AS c_sjh + ON c_sjh.instance_id = C.completion_instance_id + WHERE C.completion_instance_id IS NOT NULL +) +SELECT + job_name, + job_id, + step_name, + step_id, + step_instance_id, + completion_instance_id, + run_epoch_time, + run_duration_seconds, + step_run_status, + message +FROM HISTORY_ENTRIES +WHERE + completion_epoch_time > 10000; """ AGENT_ACTIVITY_DURATION_QUERY = """\ From b572db213aba14d3ee58a558c5ee9d463df2e4c6 Mon Sep 17 00:00:00 2001 From: Alicia Scott Date: Thu, 3 Oct 2024 16:57:07 -0600 Subject: [PATCH 45/56] Remove beta label from Cisco SD-WAN (#18610) * Update README.md * changing to in Preview --- cisco_sdwan/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cisco_sdwan/README.md b/cisco_sdwan/README.md index 6fcaca0c15d8f..fa6194285587b 100644 --- a/cisco_sdwan/README.md +++ b/cisco_sdwan/README.md @@ -1,4 +1,4 @@ -

The Cisco SD-WAN NDM integration is in public beta.
+
The Cisco SD-WAN NDM integration is in Preview.
# Agent Check: Cisco SD-WAN From 0eb0b9772d35287b4b9ef1e6c549eb948f9fc5ba Mon Sep 17 00:00:00 2001 From: HadhemiDD <43783545+HadhemiDD@users.noreply.github.com> Date: Fri, 4 Oct 2024 09:51:55 +0200 Subject: [PATCH 46/56] enable display for the kubeflow integration (#18766) --- kubeflow/manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kubeflow/manifest.json b/kubeflow/manifest.json index 2252c0462db06..96eebed0294d9 100644 --- a/kubeflow/manifest.json +++ b/kubeflow/manifest.json @@ -2,7 +2,7 @@ "manifest_version": "2.0.0", "app_uuid": "0db7b333-38a1-4e09-af1b-317da2f9f413", "app_id": "kubeflow", - "display_on_public_website": false, + "display_on_public_website": true, "tile": { "overview": "README.md#Overview", "configuration": "README.md#Setup", From 315063435d8044c576c91c325793521f2cde7076 Mon Sep 17 00:00:00 2001 From: NouemanKHAL Date: Fri, 4 Oct 2024 13:21:48 +0200 Subject: [PATCH 47/56] Finalize KubeVirt integrations (#18744) * rename namespace label to vmi_namespace for kubevirt_handler metrics * images folders * update the description of the can_connect metrics * add process_signatures entries * rename namespace label to vm_namespace for both vm and vmi metrics since they share the same name value * add missing units to kubevirt_controller --- kubevirt_api/manifest.json | 3 +- kubevirt_api/metadata.csv | 2 +- .../kubevirt_controller/check.py | 4 ++ kubevirt_controller/manifest.json | 3 +- kubevirt_controller/metadata.csv | 50 +++++++++---------- .../datadog_checks/kubevirt_handler/check.py | 3 ++ kubevirt_handler/images/IMAGES_README.md | 41 --------------- kubevirt_handler/manifest.json | 5 +- kubevirt_handler/metadata.csv | 2 +- 9 files changed, 41 insertions(+), 72 deletions(-) delete mode 100644 kubevirt_handler/images/IMAGES_README.md diff --git a/kubevirt_api/manifest.json b/kubevirt_api/manifest.json index 5db35a9102ba1..68274dbad8c03 100644 --- a/kubevirt_api/manifest.json +++ b/kubevirt_api/manifest.json @@ -42,7 +42,8 @@ }, "service_checks": { "metadata_path": "assets/service_checks.json" - } + }, + "process_signatures": ["virt-api"] }, "dashboards": { "KubeVirt Overview": "assets/dashboards/kubevirt_overview.json" diff --git a/kubevirt_api/metadata.csv b/kubevirt_api/metadata.csv index c2c50890e7599..523b73c43bc18 100644 --- a/kubevirt_api/metadata.csv +++ b/kubevirt_api/metadata.csv @@ -1,5 +1,5 @@ metric_name,metric_type,interval,unit_name,per_unit_name,description,orientation,integration,short_name,curated_metric,sample_tags -kubevirt_api.can_connect,gauge,,,,Whether the check can connect to the KubeVirt API or not.,0,kubevirt_api,api connect,, +kubevirt_api.can_connect,gauge,,,,"Value of 1 if the agent can connect to the KubeVirt Handler, and 0 otherwise.",0,kubevirt_api,api connect,, kubevirt_api.process.cpu_seconds.count,count,,second,,Total user and system CPU time spent in seconds.,0,kubevirt_api,cpu time total,, kubevirt_api.process.max_fds,gauge,,file,,Maximum number of open file descriptors.,0,kubevirt_api,max fds,, kubevirt_api.process.open_fds,gauge,,file,,Number of open file descriptors.,0,kubevirt_api,open fds,, diff --git a/kubevirt_controller/datadog_checks/kubevirt_controller/check.py b/kubevirt_controller/datadog_checks/kubevirt_controller/check.py index 4a4063870f68c..591857bc6964a 100644 --- a/kubevirt_controller/datadog_checks/kubevirt_controller/check.py +++ b/kubevirt_controller/datadog_checks/kubevirt_controller/check.py @@ -63,6 +63,10 @@ def _parse_config(self): "namespace": self.__NAMESPACE__, "enable_health_service_check": False, "tls_verify": self.tls_verify, + "rename_labels": { + "namespace": "vm_namespace", + # both kubevirt_vm_* and kubevirt_vmi_* metrics share the same name and namespace labels + }, } self.scraper_configs.append(instance) diff --git a/kubevirt_controller/manifest.json b/kubevirt_controller/manifest.json index 8600a63ef8a5e..552896c23a325 100644 --- a/kubevirt_controller/manifest.json +++ b/kubevirt_controller/manifest.json @@ -42,7 +42,8 @@ }, "service_checks": { "metadata_path": "assets/service_checks.json" - } + }, + "process_signatures": ["virt-controller"] } }, "author": { diff --git a/kubevirt_controller/metadata.csv b/kubevirt_controller/metadata.csv index bc3261e7b18af..0f1b194405586 100644 --- a/kubevirt_controller/metadata.csv +++ b/kubevirt_controller/metadata.csv @@ -1,35 +1,35 @@ metric_name,metric_type,interval,unit_name,per_unit_name,description,orientation,integration,short_name,curated_metric,sample_tags -kubevirt_controller.can_connect,gauge,,,,Whether the check can connect to the KubeVirt Controller or not.,0,kubevirt_controller,api connect,, +kubevirt_controller.can_connect,gauge,,,,"Value of 1 if the agent can connect to the KubeVirt Controller, and 0 otherwise.",0,kubevirt_controller,api connect,, kubevirt_controller.virt_controller.leading_status,gauge,,,,Indication for an operating virt-controller.,0,kubevirt_controller,leading_status,, kubevirt_controller.virt_controller.ready_status,gauge,,,,Indication for a virt-controller that is ready to take the lead.,0,kubevirt_controller,ready_status,, -kubevirt_controller.vm.error_status_last_transition_timestamp_seconds.count,count,,,,Virtual Machine last transition timestamp to error status.,0,kubevirt_controller,,, -kubevirt_controller.vm.migrating_status_last_transition_timestamp_seconds.count,count,,,,Virtual Machine last transition timestamp to migrating status.,0,kubevirt_controller,,, -kubevirt_controller.vm.non_running_status_last_transition_timestamp_seconds.count,count,,,,Virtual Machine last transition timestamp to paused/stopped status.,0,kubevirt_controller,,, -kubevirt_controller.vm.running_status_last_transition_timestamp_seconds.count,count,,,,Virtual Machine last transition timestamp to running status.,0,kubevirt_controller,,, -kubevirt_controller.vm.starting_status_last_transition_timestamp_seconds.count,count,,,,Virtual Machine last transition timestamp to starting status.,0,kubevirt_controller,,, +kubevirt_controller.vm.error_status_last_transition_timestamp_seconds.count,count,,second,,Virtual Machine last transition timestamp to error status.,0,kubevirt_controller,,, +kubevirt_controller.vm.migrating_status_last_transition_timestamp_seconds.count,count,,second,,Virtual Machine last transition timestamp to migrating status.,0,kubevirt_controller,,, +kubevirt_controller.vm.non_running_status_last_transition_timestamp_seconds.count,count,,second,,Virtual Machine last transition timestamp to paused/stopped status.,0,kubevirt_controller,,, +kubevirt_controller.vm.running_status_last_transition_timestamp_seconds.count,count,,second,,Virtual Machine last transition timestamp to running status.,0,kubevirt_controller,,, +kubevirt_controller.vm.starting_status_last_transition_timestamp_seconds.count,count,,second,,Virtual Machine last transition timestamp to starting status.,0,kubevirt_controller,,, kubevirt_controller.vmi.migrations_in_pending_phase,gauge,,,,Number of current pending migrations.,0,kubevirt_controller,,, kubevirt_controller.vmi.migrations_in_running_phase,gauge,,,,Number of current running migrations.,0,kubevirt_controller,,, kubevirt_controller.vmi.migrations_in_scheduling_phase,gauge,,,,Number of current scheduling migrations.,0,kubevirt_controller,,, kubevirt_controller.vmi.non_evictable,gauge,,,,Indication for a VirtualMachine that its eviction strategy is set to Live Migration but is not migratable.,0,kubevirt_controller,,, kubevirt_controller.vmi.number_of_outdated,gauge,,,,Indication for the total number of VirtualMachineInstance workloads that are not running within the most up-to-date version of the virt-launcher environment.,0,kubevirt_controller,,, kubevirt_controller.vmi.phase_count,gauge,,,,"Sum of VMIs per phase and node. phase can be one of the following: [Pending, Scheduling, Scheduled, Running, Succeeded, Failed, Unknown].",0,kubevirt_controller,,, -kubevirt_controller.vmi.phase_transition_time_from_creation_seconds.bucket,count,,,,Histogram of VM phase transitions duration from creation time in seconds.,0,kubevirt_controller,,, -kubevirt_controller.vmi.phase_transition_time_from_creation_seconds.count,count,,,,Histogram of VM phase transitions duration from creation time in seconds.,0,kubevirt_controller,,, -kubevirt_controller.vmi.phase_transition_time_from_creation_seconds.sum,count,,,,Histogram of VM phase transitions duration from creation time in seconds.,0,kubevirt_controller,,, -kubevirt_controller.vmi.phase_transition_time_from_deletion_seconds.bucket,count,,,,Histogram of VM phase transitions duration from deletion time in seconds.,0,kubevirt_controller,,, -kubevirt_controller.vmi.phase_transition_time_from_deletion_seconds.count,count,,,,Histogram of VM phase transitions duration from deletion time in seconds.,0,kubevirt_controller,,, -kubevirt_controller.vmi.phase_transition_time_from_deletion_seconds.sum,count,,,,Histogram of VM phase transitions duration from deletion time in seconds.,0,kubevirt_controller,,, -kubevirt_controller.vmi.phase_transition_time_seconds.bucket,count,,,,Histogram of VM phase transitions duration between different phases in seconds.,0,kubevirt_controller,,, -kubevirt_controller.vmi.phase_transition_time_seconds.count,count,,,,Histogram of VM phase transitions duration between different phases in seconds.,0,kubevirt_controller,,, -kubevirt_controller.vmi.phase_transition_time_seconds.sum,count,,,,Histogram of VM phase transitions duration between different phases in seconds.,0,kubevirt_controller,,, -kubevirt_controller.workqueue.adds.count,count,,,,Total number of adds handled by workqueue,0,kubevirt_controller,,, -kubevirt_controller.workqueue.depth,gauge,,,,Current depth of workqueue,0,kubevirt_controller,,, -kubevirt_controller.workqueue.longest_running_processor_seconds,gauge,,,,How many seconds has the longest running processor for workqueue been running.,0,kubevirt_controller,,, -kubevirt_controller.workqueue.queue_duration_seconds.bucket,count,,,,How long an item stays in workqueue before being requested.,0,kubevirt_controller,,, -kubevirt_controller.workqueue.queue_duration_seconds.count,count,,,,How long an item stays in workqueue before being requested.,0,kubevirt_controller,,, -kubevirt_controller.workqueue.queue_duration_seconds.sum,count,,,,How long an item stays in workqueue before being requested.,0,kubevirt_controller,,, +kubevirt_controller.vmi.phase_transition_time_from_creation_seconds.bucket,count,,second,,Histogram of VM phase transitions duration from creation time in seconds.,0,kubevirt_controller,,, +kubevirt_controller.vmi.phase_transition_time_from_creation_seconds.count,count,,second,,Histogram of VM phase transitions duration from creation time in seconds.,0,kubevirt_controller,,, +kubevirt_controller.vmi.phase_transition_time_from_creation_seconds.sum,count,,second,,Histogram of VM phase transitions duration from creation time in seconds.,0,kubevirt_controller,,, +kubevirt_controller.vmi.phase_transition_time_from_deletion_seconds.bucket,count,,second,,Histogram of VM phase transitions duration from deletion time in seconds.,0,kubevirt_controller,,, +kubevirt_controller.vmi.phase_transition_time_from_deletion_seconds.count,count,,second,,Histogram of VM phase transitions duration from deletion time in seconds.,0,kubevirt_controller,,, +kubevirt_controller.vmi.phase_transition_time_from_deletion_seconds.sum,count,,second,,Histogram of VM phase transitions duration from deletion time in seconds.,0,kubevirt_controller,,, +kubevirt_controller.vmi.phase_transition_time_seconds.bucket,count,,second,,Histogram of VM phase transitions duration between different phases in seconds.,0,kubevirt_controller,,, +kubevirt_controller.vmi.phase_transition_time_seconds.count,count,,second,,Histogram of VM phase transitions duration between different phases in seconds.,0,kubevirt_controller,,, +kubevirt_controller.vmi.phase_transition_time_seconds.sum,count,,second,,Histogram of VM phase transitions duration between different phases in seconds.,0,kubevirt_controller,,, +kubevirt_controller.workqueue.adds.count,count,,item,,Total number of adds handled by workqueue,0,kubevirt_controller,,, +kubevirt_controller.workqueue.depth,gauge,,item,,Current depth of workqueue,0,kubevirt_controller,,, +kubevirt_controller.workqueue.longest_running_processor_seconds,gauge,,second,,How many seconds has the longest running processor for workqueue been running.,0,kubevirt_controller,,, +kubevirt_controller.workqueue.queue_duration_seconds.bucket,count,,second,,How long an item stays in workqueue before being requested.,0,kubevirt_controller,,, +kubevirt_controller.workqueue.queue_duration_seconds.count,count,,second,,How long an item stays in workqueue before being requested.,0,kubevirt_controller,,, +kubevirt_controller.workqueue.queue_duration_seconds.sum,count,,second,,How long an item stays in workqueue before being requested.,0,kubevirt_controller,,, kubevirt_controller.workqueue.retries.count,count,,,,Total number of retries handled by workqueue.,0,kubevirt_controller,,, -kubevirt_controller.workqueue.unfinished_work_seconds,gauge,,,,How many seconds of work has done that is in progress and hasn't been observed by work_duration. Large values indicate stuck threads. One can deduce the number of stuck threads by observing the rate at which this increases.,0,kubevirt_controller,,, -kubevirt_controller.workqueue.work_duration_seconds.bucket,count,,,,How long in seconds processing an item from workqueue takes.,0,kubevirt_controller,,, -kubevirt_controller.workqueue.work_duration_seconds.count,count,,,,How long in seconds processing an item from workqueue takes.,0,kubevirt_controller,,, -kubevirt_controller.workqueue.work_duration_seconds.sum,count,,,,How long in seconds processing an item from workqueue takes.,0,kubevirt_controller,,, +kubevirt_controller.workqueue.unfinished_work_seconds,gauge,,second,,How many seconds of work has done that is in progress and hasn't been observed by work_duration. Large values indicate stuck threads. One can deduce the number of stuck threads by observing the rate at which this increases.,0,kubevirt_controller,,, +kubevirt_controller.workqueue.work_duration_seconds.bucket,count,,second,,How long in seconds processing an item from workqueue takes.,0,kubevirt_controller,,, +kubevirt_controller.workqueue.work_duration_seconds.count,count,,second,,How long in seconds processing an item from workqueue takes.,0,kubevirt_controller,,, +kubevirt_controller.workqueue.work_duration_seconds.sum,count,,second,,How long in seconds processing an item from workqueue takes.,0,kubevirt_controller,,, diff --git a/kubevirt_handler/datadog_checks/kubevirt_handler/check.py b/kubevirt_handler/datadog_checks/kubevirt_handler/check.py index f009596b2cc1a..26d77e4e2566f 100644 --- a/kubevirt_handler/datadog_checks/kubevirt_handler/check.py +++ b/kubevirt_handler/datadog_checks/kubevirt_handler/check.py @@ -61,6 +61,9 @@ def _parse_config(self): "namespace": self.__NAMESPACE__, "enable_health_service_check": False, "tls_verify": self.tls_verify, + "rename_labels": { + "namespace": "vm_namespace", + }, } self.scraper_configs.append(instance) diff --git a/kubevirt_handler/images/IMAGES_README.md b/kubevirt_handler/images/IMAGES_README.md deleted file mode 100644 index 70612c2830ffb..0000000000000 --- a/kubevirt_handler/images/IMAGES_README.md +++ /dev/null @@ -1,41 +0,0 @@ -# Marketplace Media Carousel Guidelines - -## Using the media gallery - -To use the media gallery, you must upload a minimum of one image. 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/kubevirt_handler/manifest.json b/kubevirt_handler/manifest.json index ea197c1090e70..a9a0d6db1620c 100644 --- a/kubevirt_handler/manifest.json +++ b/kubevirt_handler/manifest.json @@ -35,14 +35,15 @@ "metrics": { "prefix": "kubevirt_handler.", "check": [ - "kubevirt_handler.can_connect", + "kubevirt_handler.can_connect", "kubevirt_handler.vmi.cpu_system_usage_seconds.count" ], "metadata_path": "metadata.csv" }, "service_checks": { "metadata_path": "assets/service_checks.json" - } + }, + "process_signatures": ["virt-handler"] } }, "author": { diff --git a/kubevirt_handler/metadata.csv b/kubevirt_handler/metadata.csv index 1b9faba853995..7f697de4cae94 100644 --- a/kubevirt_handler/metadata.csv +++ b/kubevirt_handler/metadata.csv @@ -1,5 +1,5 @@ metric_name,metric_type,interval,unit_name,per_unit_name,description,orientation,integration,short_name,curated_metric,sample_tags -kubevirt_handler.can_connect,gauge,,,,Whether the check can connect to the KubeVirt Handler or not.,0,kubevirt_handler,handler connect,, +kubevirt_handler.can_connect,gauge,,,,"Value of 1 if the agent can connect to the KubeVirt Handler, and 0 otherwise.",0,kubevirt_handler,handler connect,, kubevirt_handler.vmi.cpu_system_usage_seconds.count,count,,second,,"Total CPU time spent in system mode.",0,kubevirt_handler,short_name,, kubevirt_handler.vmi.cpu_usage_seconds.count,count,,second,,"Total CPU time spent in all modes (sum of both vcpu and hypervisor usage).",0,kubevirt_handler,short_name,, kubevirt_handler.vmi.cpu_user_usage_seconds.count,count,,second,,"Total CPU time spent in user mode.",0,kubevirt_handler,short_name,, From 83b18fd1348da0d00e18ade45fccf596a4f8079f Mon Sep 17 00:00:00 2001 From: Ilia Kurenkov Date: Fri, 4 Oct 2024 15:28:38 +0200 Subject: [PATCH 48/56] Release new integrations for agent 7.59 (#18768) * [Release] Bumped appgate_sdp version to 1.0.0 * [Release] Bumped kubeflow version to 1.0.0 * [Release] Bumped kubevirt_api version to 1.0.0 * [Release] Bumped kubevirt_controller version to 1.0.0 * [Release] Bumped kubevirt_handler version to 1.0.0 --- appgate_sdp/CHANGELOG.md | 5 +++++ appgate_sdp/changelog.d/18465.added | 1 - appgate_sdp/datadog_checks/appgate_sdp/__about__.py | 2 +- kubeflow/CHANGELOG.md | 5 +++++ kubeflow/changelog.d/18617.fixed | 1 - kubeflow/datadog_checks/kubeflow/__about__.py | 2 +- kubevirt_api/CHANGELOG.md | 10 ++++++++++ kubevirt_api/changelog.d/18179.added | 1 - kubevirt_api/changelog.d/18617.fixed | 1 - kubevirt_api/datadog_checks/kubevirt_api/__about__.py | 2 +- kubevirt_controller/CHANGELOG.md | 9 +++++++++ kubevirt_controller/changelog.d/18186.added | 1 - kubevirt_controller/changelog.d/18617.fixed | 1 - .../datadog_checks/kubevirt_controller/__about__.py | 2 +- kubevirt_handler/CHANGELOG.md | 6 ++++++ kubevirt_handler/changelog.d/18283.added | 1 - .../datadog_checks/kubevirt_handler/__about__.py | 2 +- requirements-agent-release.txt | 5 +++++ 18 files changed, 45 insertions(+), 12 deletions(-) delete mode 100644 appgate_sdp/changelog.d/18465.added delete mode 100644 kubeflow/changelog.d/18617.fixed delete mode 100644 kubevirt_api/changelog.d/18179.added delete mode 100644 kubevirt_api/changelog.d/18617.fixed delete mode 100644 kubevirt_controller/changelog.d/18186.added delete mode 100644 kubevirt_controller/changelog.d/18617.fixed delete mode 100644 kubevirt_handler/changelog.d/18283.added diff --git a/appgate_sdp/CHANGELOG.md b/appgate_sdp/CHANGELOG.md index 7dd14c64baf40..96c18884e43fe 100644 --- a/appgate_sdp/CHANGELOG.md +++ b/appgate_sdp/CHANGELOG.md @@ -2,3 +2,8 @@ +## 1.0.0 / 2024-10-04 + +***Added***: + +* Initial Release ([#18465](https://github.com/DataDog/integrations-core/pull/18465)) diff --git a/appgate_sdp/changelog.d/18465.added b/appgate_sdp/changelog.d/18465.added deleted file mode 100644 index aa949b47b7b41..0000000000000 --- a/appgate_sdp/changelog.d/18465.added +++ /dev/null @@ -1 +0,0 @@ -Initial Release \ No newline at end of file diff --git a/appgate_sdp/datadog_checks/appgate_sdp/__about__.py b/appgate_sdp/datadog_checks/appgate_sdp/__about__.py index e9541ce83e9e5..acbfd1c866b84 100644 --- a/appgate_sdp/datadog_checks/appgate_sdp/__about__.py +++ b/appgate_sdp/datadog_checks/appgate_sdp/__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/kubeflow/CHANGELOG.md b/kubeflow/CHANGELOG.md index 8658345ebf7a3..5c3bf784bb7d8 100644 --- a/kubeflow/CHANGELOG.md +++ b/kubeflow/CHANGELOG.md @@ -2,3 +2,8 @@ +## 1.0.0 / 2024-10-04 + +***Fixed***: + +* Bump the version of datadog-checks-base to 37.0.0 ([#18617](https://github.com/DataDog/integrations-core/pull/18617)) diff --git a/kubeflow/changelog.d/18617.fixed b/kubeflow/changelog.d/18617.fixed deleted file mode 100644 index e759164f82784..0000000000000 --- a/kubeflow/changelog.d/18617.fixed +++ /dev/null @@ -1 +0,0 @@ -Bump the version of datadog-checks-base to 37.0.0 \ No newline at end of file diff --git a/kubeflow/datadog_checks/kubeflow/__about__.py b/kubeflow/datadog_checks/kubeflow/__about__.py index e9541ce83e9e5..acbfd1c866b84 100644 --- a/kubeflow/datadog_checks/kubeflow/__about__.py +++ b/kubeflow/datadog_checks/kubeflow/__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/kubevirt_api/CHANGELOG.md b/kubevirt_api/CHANGELOG.md index fd98fa4837529..41fab8d0f2a51 100644 --- a/kubevirt_api/CHANGELOG.md +++ b/kubevirt_api/CHANGELOG.md @@ -1,3 +1,13 @@ # CHANGELOG - KubeVirt API + +## 1.0.0 / 2024-10-04 + +***Added***: + +* Initial Release ([#18179](https://github.com/DataDog/integrations-core/pull/18179)) + +***Fixed***: + +* Bump the version of datadog-checks-base to 37.0.0 ([#18617](https://github.com/DataDog/integrations-core/pull/18617)) diff --git a/kubevirt_api/changelog.d/18179.added b/kubevirt_api/changelog.d/18179.added deleted file mode 100644 index aa949b47b7b41..0000000000000 --- a/kubevirt_api/changelog.d/18179.added +++ /dev/null @@ -1 +0,0 @@ -Initial Release \ No newline at end of file diff --git a/kubevirt_api/changelog.d/18617.fixed b/kubevirt_api/changelog.d/18617.fixed deleted file mode 100644 index e759164f82784..0000000000000 --- a/kubevirt_api/changelog.d/18617.fixed +++ /dev/null @@ -1 +0,0 @@ -Bump the version of datadog-checks-base to 37.0.0 \ No newline at end of file diff --git a/kubevirt_api/datadog_checks/kubevirt_api/__about__.py b/kubevirt_api/datadog_checks/kubevirt_api/__about__.py index e9541ce83e9e5..acbfd1c866b84 100644 --- a/kubevirt_api/datadog_checks/kubevirt_api/__about__.py +++ b/kubevirt_api/datadog_checks/kubevirt_api/__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/kubevirt_controller/CHANGELOG.md b/kubevirt_controller/CHANGELOG.md index 63ef4768a3096..faadd0fcdb0fc 100644 --- a/kubevirt_controller/CHANGELOG.md +++ b/kubevirt_controller/CHANGELOG.md @@ -2,3 +2,12 @@ +## 1.0.0 / 2024-10-04 + +***Added***: + +* Initial Release ([#18186](https://github.com/DataDog/integrations-core/pull/18186)) + +***Fixed***: + +* Bump the version of datadog-checks-base to 37.0.0 ([#18617](https://github.com/DataDog/integrations-core/pull/18617)) diff --git a/kubevirt_controller/changelog.d/18186.added b/kubevirt_controller/changelog.d/18186.added deleted file mode 100644 index aa949b47b7b41..0000000000000 --- a/kubevirt_controller/changelog.d/18186.added +++ /dev/null @@ -1 +0,0 @@ -Initial Release \ No newline at end of file diff --git a/kubevirt_controller/changelog.d/18617.fixed b/kubevirt_controller/changelog.d/18617.fixed deleted file mode 100644 index e759164f82784..0000000000000 --- a/kubevirt_controller/changelog.d/18617.fixed +++ /dev/null @@ -1 +0,0 @@ -Bump the version of datadog-checks-base to 37.0.0 \ No newline at end of file diff --git a/kubevirt_controller/datadog_checks/kubevirt_controller/__about__.py b/kubevirt_controller/datadog_checks/kubevirt_controller/__about__.py index e9541ce83e9e5..acbfd1c866b84 100644 --- a/kubevirt_controller/datadog_checks/kubevirt_controller/__about__.py +++ b/kubevirt_controller/datadog_checks/kubevirt_controller/__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/kubevirt_handler/CHANGELOG.md b/kubevirt_handler/CHANGELOG.md index 934b76a9af53b..efb69c7b7ace0 100644 --- a/kubevirt_handler/CHANGELOG.md +++ b/kubevirt_handler/CHANGELOG.md @@ -1,3 +1,9 @@ # CHANGELOG - KubeVirt Handler + +## 1.0.0 / 2024-10-04 + +***Added***: + +* Initial Release ([#18283](https://github.com/DataDog/integrations-core/pull/18283)) diff --git a/kubevirt_handler/changelog.d/18283.added b/kubevirt_handler/changelog.d/18283.added deleted file mode 100644 index aa949b47b7b41..0000000000000 --- a/kubevirt_handler/changelog.d/18283.added +++ /dev/null @@ -1 +0,0 @@ -Initial Release \ No newline at end of file diff --git a/kubevirt_handler/datadog_checks/kubevirt_handler/__about__.py b/kubevirt_handler/datadog_checks/kubevirt_handler/__about__.py index e9541ce83e9e5..acbfd1c866b84 100644 --- a/kubevirt_handler/datadog_checks/kubevirt_handler/__about__.py +++ b/kubevirt_handler/datadog_checks/kubevirt_handler/__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 d8574097f1e6d..c2b2cf3ee2afd 100644 --- a/requirements-agent-release.txt +++ b/requirements-agent-release.txt @@ -9,6 +9,7 @@ datadog-airflow==6.0.0 datadog-amazon-msk==5.0.0 datadog-ambari==5.0.0; sys_platform != 'win32' datadog-apache==5.0.0 +datadog-appgate-sdp==1.0.0; sys_platform != 'win32' datadog-arangodb==3.0.0 datadog-argo-rollouts==2.0.0 datadog-argo-workflows==2.0.0 @@ -100,9 +101,13 @@ datadog-kube-dns==5.0.0 datadog-kube-metrics-server==4.0.0 datadog-kube-proxy==7.0.0 datadog-kube-scheduler==5.0.0 +datadog-kubeflow==1.0.0 datadog-kubelet==8.0.0 datadog-kubernetes-cluster-autoscaler==2.0.0 datadog-kubernetes-state==9.0.0 +datadog-kubevirt-api==1.0.0 +datadog-kubevirt-controller==1.0.0 +datadog-kubevirt-handler==1.0.0 datadog-kyototycoon==3.0.0 datadog-kyverno==2.0.0 datadog-lighttpd==4.0.0 From 990cc9bec8bb1a4b5b89bcdeca3118b24776488f Mon Sep 17 00:00:00 2001 From: Branden Clark Date: Fri, 4 Oct 2024 10:29:07 -0400 Subject: [PATCH 49/56] Fix tcp.current_established/tcp.connections metric types (#18764) --- network/datadog_checks/network/check_linux.py | 3 --- network/datadog_checks/network/check_windows.py | 10 +++++++++- network/datadog_checks/network/network.py | 3 +++ network/metadata.csv | 6 ------ network/tests/test_windows.py | 15 ++++++++++++++- 5 files changed, 26 insertions(+), 11 deletions(-) diff --git a/network/datadog_checks/network/check_linux.py b/network/datadog_checks/network/check_linux.py index 986003b763052..7bd7cfc452256 100644 --- a/network/datadog_checks/network/check_linux.py +++ b/network/datadog_checks/network/check_linux.py @@ -304,9 +304,6 @@ def get_expected_metrics(self): ) return expected_metrics - def _submit_netmetric_gauge(self, metric, value, tags=None): - self.gauge(metric, value, tags=tags) - def _read_int_file(self, file_location): try: with open(file_location, 'r') as f: diff --git a/network/datadog_checks/network/check_windows.py b/network/datadog_checks/network/check_windows.py index fa56342dc77b7..3baa292d04cf3 100644 --- a/network/datadog_checks/network/check_windows.py +++ b/network/datadog_checks/network/check_windows.py @@ -128,6 +128,11 @@ def _tcp_stats(self, tags): 'dwOutRsts': '.out_resets', 'dwNumConns': '.connections', } + # similar to the linux check + nstat_metrics_gauge_names = [ + '.connections', + '.current_established', + ] proto_dict = {} tcp4stats = self._get_tcp_stats(socket.AF_INET) @@ -149,7 +154,10 @@ def _tcp_stats(self, tags): for fieldname in tcpstats_dict: fieldvalue = getattr(stats, fieldname) metric_name = "system.net." + str(proto) + tcpstats_dict[fieldname] - self.submit_netmetric(metric_name, fieldvalue, tags) + if tcpstats_dict[fieldname] in nstat_metrics_gauge_names: + self._submit_netmetric_gauge(metric_name, fieldvalue, tags) + else: + self.submit_netmetric(metric_name, fieldvalue, tags) def _parse_protocol_psutil(self, conn): """ diff --git a/network/datadog_checks/network/network.py b/network/datadog_checks/network/network.py index b9f6d5cf97cac..18761deef2846 100644 --- a/network/datadog_checks/network/network.py +++ b/network/datadog_checks/network/network.py @@ -274,6 +274,9 @@ def submit_netmetric(self, metric, value, tags=None): if self._collect_count_metrics: self.monotonic_count('{}.count'.format(metric), value, tags=tags) + def _submit_netmetric_gauge(self, metric, value, tags=None): + self.gauge(metric, value, tags=tags) + def submit_regexed_values(self, output, regex_list, tags): lines = output.splitlines() for line in lines: diff --git a/network/metadata.csv b/network/metadata.csv index 8d0db8d0ba21c..abb42cc3f11ec 100644 --- a/network/metadata.csv +++ b/network/metadata.csv @@ -105,9 +105,7 @@ system.net.tcp.attempt_fails.count,count,,connection,,The number of times TCP co system.net.tcp.established_resets,gauge,,connection,second,The number of times TCP connections have made a direct transition to the CLOSED state from either the ESTABLISHED state or the CLOSE-WAIT state (Linux or Windows only).,-1,system,tcp established rst, system.net.tcp.established_resets.count,count,,connection,,The number of times TCP connections have made a direct transition to the CLOSED state from either the ESTABLISHED state or the CLOSE-WAIT state (Linux or Windows only).,-1,system,tcp established rst count, system.net.tcp.current_established,gauge,,connection,,The number of TCP connections for which the current state is either ESTABLISHED or CLOSE-WAIT (Linux or Windows only).,0,system,tcp current estab, -system.net.tcp.current_established.count,count,,connection,,The number of TCP connections for which the current state is either ESTABLISHED or CLOSE-WAIT (Linux or Windows only).,0,system,tcp current estab count, system.net.tcp.connections,gauge,,segment,second,The number of TCP connections in all states except listening connections.,0,system,tcp connections, -system.net.tcp.connections.count,count,,segment,,Total count of TCP connections in all states except listening connections.,0,system,tcp connections count, system.net.tcp.in_errors,gauge,,packet,second,The total number of segments received in error (e.g. bad TCP checksums) (Linux or Windows only).,-1,system,tcp in errors, system.net.tcp.in_errors.count,count,,packet,,The total number of segments received in error (e.g. bad TCP checksums) (Linux or Windows only).,-1,system,tcp in errors count, system.net.tcp.out_resets,gauge,,packet,second,The number of TCP segments sent containing the RST flag (Linux or Windows only).,-1,system,tcp out rst, @@ -186,7 +184,6 @@ system.net.tcp4.unconn,gauge,,connection,,The number of TCP IPv4 connections in system.net.tcp4.active_opens,gauge,,connection,second,Number of times TCP IPv4 connections have made a direct transition to the SYN-SENT state from the CLOSED state (Windows only).,0,system,tcp4 active opens, system.net.tcp4.active_opens.count,count,,connection,,Number of times TCP IPv4 connections have made a direct transition to the SYN-SENT state from the CLOSED state (Windows only).,0,system,tcp4 active opens count, system.net.tcp4.connections,gauge,,segment,second,The number of TCP IPv4 connections connections in all states except listening connections (Windows only).,0,system,tcp4 connections, -system.net.tcp4.connections.count,count,,segment,,Total count of TCP IPv4 connections connections in all states except listening connections (Windows only).,0,system,tcp4 connections count, system.net.tcp4.passive_opens,gauge,,connection,second,Number of times TCP IPv4 connections have made a direct transition to the SYN-RCVD state from the LISTEN state (Windows only).,0,system,tcp4 passive opens, system.net.tcp4.passive_opens.count,count,,connection,,Number of times TCP IPv4 connections have made a direct transition to the SYN-RCVD state from the LISTEN state (Windows only).,0,system,tcp4 passive opens count, system.net.tcp4.attempt_fails,gauge,,connection,second,The number of times TCP IPv4 connections have made a direct transition to the CLOSED state from either the SYN-SENT state or the SYN-RCVD state plus the number of times TCP IPv4 connections have made a direct transition to the LISTEN state from the SYN-RCVD state (Windows only).,-1,system,tcp4 attempt fails, @@ -194,7 +191,6 @@ system.net.tcp4.attempt_fails.count,count,,connection,,The number of times TCP I system.net.tcp4.established_resets,gauge,,connection,second,The number of times TCP IPv4 connections have made a direct transition to the CLOSED state from either the ESTABLISHED state or the CLOSE-WAIT state (Windows only).,-1,system,tcp4 established rst, system.net.tcp4.established_resets.count,count,,connection,,The number of times TCP IPv4 connections have made a direct transition to the CLOSED state from either the ESTABLISHED state or the CLOSE-WAIT state (Windows only).,-1,system,tcp4 established rst count, system.net.tcp4.current_established,gauge,,segment,second,The number of currently established TCP IPv4 connections (Windows only).,0,system,tcp4 current established, -system.net.tcp4.current_established.count,count,,segment,,The number of currently established TCP IPv4 connections (Windows only).,0,system,tcp4 current established count, system.net.tcp4.in_errors,gauge,,packet,second,The total number of segments received in error (e.g. bad TCP IPv4 checksums) (Windows only).,-1,system,tcp4 in errors, system.net.tcp4.in_errors.count,count,,packet,,The total number of segments received in error (e.g. bad TCP IPv4 checksums) (Windows only).,-1,system,tcp4 in errors count, system.net.tcp4.out_resets,gauge,,packet,second,The number of TCP IPv4 segments sent containing the RST flag (Windows only).,-1,system,tcp4 out rst, @@ -222,7 +218,6 @@ system.net.tcp6.unconn,gauge,,connection,,The number of TCP IPv6 connections in system.net.tcp6.active_opens,gauge,,connection,second,Number of times TCP IPv6 connections have made a direct transition to the SYN-SENT state from the CLOSED state (Windows only).,0,system,tcp6 active opens, system.net.tcp6.active_opens.count,count,,connection,,Number of times TCP IPv6 connections have made a direct transition to the SYN-SENT state from the CLOSED state (Windows only).,0,system,tcp6 active opens count, system.net.tcp6.connections,gauge,,segment,second,The number of TCP IPv6 connections connections in all states except listening connections (Windows only).,0,system,tcp6 connections, -system.net.tcp6.connections.count,count,,segment,,Total count of TCP IPv6 connections connections in all states except listening connections (Windows only).,0,system,tcp6 connections count, system.net.tcp6.passive_opens,gauge,,connection,second,Number of times TCP IPv6 connections have made a direct transition to the SYN-RCVD state from the LISTEN state (Windows only).,0,system,tcp6 passive opens, system.net.tcp6.passive_opens.count,count,,connection,,Number of times TCP IPv6 connections have made a direct transition to the SYN-RCVD state from the LISTEN state (Windows only).,0,system,tcp6 passive opens count, system.net.tcp6.attempt_fails,gauge,,connection,second,The number of times TCP IPv6 connections have made a direct transition to the CLOSED state from either the SYN-SENT state or the SYN-RCVD state plus the number of times TCP IPv6 connections have made a direct transition to the LISTEN state from the SYN-RCVD state (Windows only).,-1,system,tcp6 attempt fails, @@ -230,7 +225,6 @@ system.net.tcp6.attempt_fails.count,count,,connection,,The number of times TCP I system.net.tcp6.established_resets,gauge,,connection,second,The number of times TCP IPv6 connections have made a direct transition to the CLOSED state from either the ESTABLISHED state or the CLOSE-WAIT state (Windows only).,-1,system,tcp6 established rst, system.net.tcp6.established_resets.count,count,,connection,,The number of times TCP IPv6 connections have made a direct transition to the CLOSED state from either the ESTABLISHED state or the CLOSE-WAIT state (Windows only).,-1,system,tcp6 established rst count, system.net.tcp6.current_established,gauge,,segment,second,The number of currently established TCP IPv6 connections (Windows only).,0,system,tcp6 current established, -system.net.tcp6.current_established.count,count,,segment,,The number of currently established TCP IPv6 connections (Windows only).,0,system,tcp6 current established count, system.net.tcp6.in_errors,gauge,,packet,second,The total number of segments received in error (e.g. bad TCP IPv6 checksums) (Windows only).,-1,system,tcp6 in errors, system.net.tcp6.in_errors.count,count,,packet,,The total number of segments received in error (e.g. bad TCP IPv6 checksums) (Windows only).,-1,system,tcp6 in errors count, system.net.tcp6.out_resets,gauge,,packet,second,The number of TCP IPv6 segments sent containing the RST flag (Windows only).,-1,system,tcp6 out rst, diff --git a/network/tests/test_windows.py b/network/tests/test_windows.py index 88c448c99ab25..02de9e0ba027d 100644 --- a/network/tests/test_windows.py +++ b/network/tests/test_windows.py @@ -45,6 +45,7 @@ def test_get_tcp_stats_failure(): def test_get_tcp_stats(aggregator): instance = copy.deepcopy(common.INSTANCE) + instance["collect_count_metrics"] = True check_instance = WindowsNetwork('network', {}, [instance]) mock_stats = TCPSTATS( @@ -99,12 +100,24 @@ def test_get_tcp_stats(aggregator): 'system.net.tcp.out_resets': 28, 'system.net.tcp.connections': 30, } + gauge_mets = [ + 'system.net.tcp4.connections', + 'system.net.tcp4.current_established', + 'system.net.tcp6.connections', + 'system.net.tcp6.current_established', + 'system.net.tcp.connections', + 'system.net.tcp.current_established', + ] with mock.patch('datadog_checks.network.check_windows.WindowsNetwork._get_tcp_stats') as mock_get_tcp_stats: mock_get_tcp_stats.return_value = mock_stats # Make _get_tcp_stats return my mock object check_instance.check({}) for name, value in expected_mets.items(): - aggregator.assert_metric(name, value=value) + if name in gauge_mets: + aggregator.assert_metric(name, value=value, metric_type=aggregator.GAUGE) + else: + aggregator.assert_metric(name, value=value, metric_type=aggregator.RATE) + aggregator.assert_metric(name + '.count', value=value, metric_type=aggregator.MONOTONIC_COUNT) def test_check_psutil_no_collect_connection_state(aggregator): From 39ea43173d46353c5ae75bbfdc6c65568df6a1cd Mon Sep 17 00:00:00 2001 From: madhavpandya-crest Date: Fri, 4 Oct 2024 20:52:04 +0530 Subject: [PATCH 50/56] DDS: Cisco Secure Endpoint - V1.0.0 - Updated Readme file. (#18756) * Updated cse readme file. * Updated Readme file. --------- Co-authored-by: madhav.pandya --- cisco_secure_endpoint/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cisco_secure_endpoint/README.md b/cisco_secure_endpoint/README.md index 0d4bc372b5718..6f88038d18f0f 100644 --- a/cisco_secure_endpoint/README.md +++ b/cisco_secure_endpoint/README.md @@ -38,10 +38,10 @@ Configure the Datadog endpoint to forward Cisco Secure Endpoint logs to Datadog. | Cisco Secure Endpoint Parameters | Description | | -------------------- | ------------ | -| API Host URL | The API Host URL for Cisco Secure Endpoint Cloud is "https://api.\.apm.cisco.com". Adjust the "region" part based on the region of the Cisco Secure Endpoint server. If Cisco Secure Endpoint is hosted on VPC (Virtual Private Cloud), directly provide the API Host URL. | +| API Domain Name | The API Domain Name for Cisco Secure Endpoint Cloud is "api.\.amp.cisco.com". Adjust the "region" part based on the region of the Cisco Secure Endpoint server. If Cisco Secure Endpoint is hosted on VPC (Virtual Private Cloud), directly provide the API Domain Name. | | Client ID | Client ID from Cisco Secure Endpoint. | | API Key | API Key from Cisco Secure Endpoint. | -| Get Endpoint Details | Keep it "true" to collect endpoint metadata for Cisco Secure Endpoint event logs, otherwise "false". | +| Get Endpoint Details | Keep it "true" to collect endpoint metadata for Cisco Secure Endpoint event logs, otherwise "false". Default value is "true". | ## Data Collected From 346a5ac257e63a0c8e080032d0c03e41cbbfd14c Mon Sep 17 00:00:00 2001 From: Kyle Neale Date: Fri, 4 Oct 2024 14:44:08 -0400 Subject: [PATCH 51/56] Port network release to master (#18775) * Port network release to master * small changelog fix * change changelog type --- network/CHANGELOG.md | 6 ++++++ network/datadog_checks/network/__about__.py | 2 +- requirements-agent-release.txt | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/network/CHANGELOG.md b/network/CHANGELOG.md index 28d9395b39152..337302b4c0645 100644 --- a/network/CHANGELOG.md +++ b/network/CHANGELOG.md @@ -2,6 +2,12 @@ +## 4.1.0 / 2024-10-04 + +***Fixed***: + +* Fix metric type in new network metrics ([#18764](https://github.com/DataDog/integrations-core/pull/18764)) + ## 4.0.0 / 2024-10-01 ***Changed***: diff --git a/network/datadog_checks/network/__about__.py b/network/datadog_checks/network/__about__.py index c25988b9e6d8b..d83361248d388 100644 --- a/network/datadog_checks/network/__about__.py +++ b/network/datadog_checks/network/__about__.py @@ -2,4 +2,4 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '4.0.0' +__version__ = '4.1.0' diff --git a/requirements-agent-release.txt b/requirements-agent-release.txt index c2b2cf3ee2afd..85052975e4984 100644 --- a/requirements-agent-release.txt +++ b/requirements-agent-release.txt @@ -123,7 +123,7 @@ datadog-mesos-slave==4.0.0; sys_platform != 'win32' datadog-mongo==7.0.0 datadog-mysql==13.0.0 datadog-nagios==2.0.0 -datadog-network==4.0.0 +datadog-network==4.1.0 datadog-nfsstat==2.0.0; sys_platform == 'linux2' datadog-nginx-ingress-controller==3.0.0 datadog-nginx==7.0.0 From a9e8077247dd8d4275c928ca4dd69032ce5a3e93 Mon Sep 17 00:00:00 2001 From: savandalasaniya-crest Date: Sat, 5 Oct 2024 00:39:53 +0530 Subject: [PATCH 52/56] Readme application role change (#18614) Co-authored-by: apiazza-dd <120594144+apiazza-dd@users.noreply.github.com> --- mimecast/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mimecast/README.md b/mimecast/README.md index 721e1d0a177d7..29266260e8109 100644 --- a/mimecast/README.md +++ b/mimecast/README.md @@ -33,7 +33,7 @@ To find your application's details in Mimecast Email Security: - Application Name: Enter the application name of your choice - Category: Select **SIEM Integration** - Products: Click **Select all** option - - Application Role: Select **SIEM Admin Role** + - Application Role: Select **Basic Administrator** - Description: Enter the description of your choice - In **Notifications**, provide the contact details of your technical administrator and click on **Next** - After clicking on **Add and Generate Keys** there will be pop up window showing Client ID and Client Secret. Please copy those keys to a safe place as they won't be displayed again. From 3fa5466c7c3cf5fa0d7bb04f1a8b75e17fe93264 Mon Sep 17 00:00:00 2001 From: Janae Quinones <62717289+Janaeq@users.noreply.github.com> Date: Mon, 7 Oct 2024 07:35:01 -0400 Subject: [PATCH 53/56] create dashboard for openmetrics v2 (#18680) --- coredns/assets/dashboards/coredns_v2.json | 962 ++++++++++++++++++++++ coredns/manifest.json | 5 +- 2 files changed, 965 insertions(+), 2 deletions(-) create mode 100644 coredns/assets/dashboards/coredns_v2.json diff --git a/coredns/assets/dashboards/coredns_v2.json b/coredns/assets/dashboards/coredns_v2.json new file mode 100644 index 0000000000000..fe4a1d4720b53 --- /dev/null +++ b/coredns/assets/dashboards/coredns_v2.json @@ -0,0 +1,962 @@ +{ + "title":"CoreDNS [V2]", + "description":"## CoreDNS\n\nWith this dashboard, you can monitor CoreDNS in real time to visualize and monitor DNS failures and cache hits/misses.\n\n- [CoreDNS Integration Docs](https://docs.datadoghq.com/integrations/coredns/)\n- [Monitor CoreDNS with Datadog](https://www.datadoghq.com/blog/monitor-coredns-with-datadog/)\n- [Debugging DNS in Kubernetes](https://kubernetes.io/docs/tasks/administer-cluster/dns-debugging-resolution/#check-for-errors-in-the-dns-pod) ", + "widgets":[ + { + "id":2197552365820208, + "definition":{ + "title":"About CoreDNS", + "title_align":"center", + "banner_img":"/static/images/integration_dashboard/coredns_hero_1.jpeg", + "show_title":false, + "type":"group", + "layout_type":"ordered", + "widgets":[ + { + "id":2586292269732124, + "definition":{ + "type":"note", + "content":"### With this dashboard, you can monitor CoreDNS in real time to visualize and monitor DNS failures and cache hits/misses.\n\nCoreDNS Guides\n\n- [CoreDNS Integration Docs ↗](https://docs.datadoghq.com/integrations/coredns/)\n- [Monitor CoreDNS with Datadog ↗](https://www.datadoghq.com/blog/monitor-coredns-with-datadog/)\n- [Debugging DNS in Kubernetes ↗](https://kubernetes.io/docs/tasks/administer-cluster/dns-debugging-resolution/#check-for-errors-in-the-dns-pod) ", + "background_color":"transparent", + "font_size":"14", + "text_align":"left", + "vertical_align":"top", + "show_tick":false, + "tick_pos":"50%", + "tick_edge":"left" + }, + "layout":{ + "x":0, + "y":0, + "width":4, + "height":4 + } + } + ] + }, + "layout":{ + "x":0, + "y":0, + "width":4, + "height":7 + } + }, + { + "id":2010772691059290, + "definition":{ + "title":"Cache", + "title_align":"center", + "background_color":"vivid_purple", + "type":"group", + "layout_type":"ordered", + "widgets":[ + { + "id":6652100387539206, + "definition":{ + "title":"Cache hits vs misses", + "title_size":"16", + "title_align":"left", + "show_legend":true, + "legend_layout":"horizontal", + "legend_columns":[ + "avg", + "min", + "max", + "value", + "sum" + ], + "time":{ + + }, + "type":"timeseries", + "requests":[ + { + "on_right_yaxis":false, + "formulas":[ + { + "alias":"Cache Hits", + "formula":"query1" + } + ], + "queries":[ + { + "query":"avg:coredns.cache_hits_count.count{$cluster,$deployment,$service,$namespace,$node,$label} by {type}.as_count()", + "data_source":"metrics", + "name":"query1" + } + ], + "response_format":"timeseries", + "style":{ + "palette":"dog_classic", + "line_type":"solid", + "line_width":"normal" + }, + "display_type":"bars" + }, + { + "on_right_yaxis":false, + "formulas":[ + { + "alias":"Cache Misses", + "formula":"query1" + } + ], + "queries":[ + { + "query":"avg:coredns.cache_misses_count.count{$cluster,$deployment,$service,$namespace,$node,$label}.as_count()", + "data_source":"metrics", + "name":"query1" + } + ], + "response_format":"timeseries", + "style":{ + "palette":"warm", + "line_type":"solid", + "line_width":"normal" + }, + "display_type":"bars" + } + ], + "yaxis":{ + "scale":"linear", + "label":"", + "include_zero":true, + "min":"auto", + "max":"auto" + }, + "markers":[ + + ] + }, + "layout":{ + "x":0, + "y":0, + "width":4, + "height":2 + } + }, + { + "id":5163612880793228, + "definition":{ + "title":"Cache size", + "title_size":"16", + "title_align":"left", + "show_legend":true, + "legend_layout":"horizontal", + "legend_columns":[ + "avg", + "min", + "max", + "value", + "sum" + ], + "type":"timeseries", + "requests":[ + { + "on_right_yaxis":false, + "response_format":"timeseries", + "queries":[ + { + "query":"avg:coredns.cache_size.count{$cluster,$deployment,$service,$namespace,$node,$label} by {type}", + "data_source":"metrics", + "name":"query1" + } + ], + "style":{ + "palette":"dog_classic", + "line_type":"solid", + "line_width":"normal" + }, + "display_type":"bars" + } + ], + "yaxis":{ + "scale":"linear", + "label":"", + "include_zero":true, + "min":"auto", + "max":"auto" + }, + "markers":[ + + ] + }, + "layout":{ + "x":4, + "y":0, + "width":4, + "height":2 + } + }, + { + "id":8129252478872840, + "definition":{ + "title":"Cache Hit %", + "title_size":"16", + "title_align":"left", + "show_legend":false, + "time":{ + + }, + "type":"heatmap", + "requests":[ + { + "style":{ + "palette":"purple" + }, + "response_format":"timeseries", + "queries":[ + { + "data_source":"metrics", + "name":"query1", + "query":"avg:coredns.cache_hits_count.count{$cluster,$deployment,$service,$namespace,$node,$label} by {host}.as_count()" + }, + { + "data_source":"metrics", + "name":"query2", + "query":"avg:coredns.cache_misses_count.count{$cluster,$deployment,$service,$namespace,$node,$label} by {host}.as_count()" + } + ], + "formulas":[ + { + "formula":"query1 * 100 / (query1 + query2)" + } + ] + } + ] + }, + "layout":{ + "x":0, + "y":2, + "width":8, + "height":3 + } + }, + { + "id":5650030377334470, + "definition":{ + "type":"note", + "content":"The higher the hit ratio, the better. If this is low, even while overall traffic is high, you should consider raising the TTL value in the CoreDNS cache plugin configuration to keep records cached longer.", + "background_color":"purple", + "font_size":"14", + "text_align":"left", + "vertical_align":"center", + "show_tick":true, + "tick_pos":"50%", + "tick_edge":"top", + "has_padding":true + }, + "layout":{ + "x":0, + "y":5, + "width":8, + "height":1 + } + } + ] + }, + "layout":{ + "x":4, + "y":0, + "width":8, + "height":7 + } + }, + { + "id":729145808814926, + "definition":{ + "title":"Resource Usage", + "title_align":"center", + "background_color":"vivid_orange", + "type":"group", + "layout_type":"ordered", + "widgets":[ + { + "id":2456767441672046, + "definition":{ + "title":"CPU Usage", + "title_size":"16", + "title_align":"left", + "show_legend":false, + "legend_layout":"auto", + "legend_columns":[ + "avg", + "min", + "max", + "value", + "sum" + ], + "type":"timeseries", + "requests":[ + { + "formulas":[ + { + "formula":"query1", + "alias":"CPU Seconds" + } + ], + "response_format":"timeseries", + "on_right_yaxis":false, + "queries":[ + { + "query":"max:coredns.process.cpu_seconds_total{$cluster,$deployment,$service,$namespace,$node,$label}.as_count()", + "data_source":"metrics", + "name":"query1" + } + ], + "style":{ + "palette":"orange", + "line_type":"solid", + "line_width":"normal" + }, + "display_type":"line" + } + ], + "yaxis":{ + "scale":"linear", + "label":"", + "include_zero":true, + "min":"auto", + "max":"auto" + }, + "markers":[ + + ] + }, + "layout":{ + "x":0, + "y":0, + "width":8, + "height":2 + } + }, + { + "id":969087395184616, + "definition":{ + "title":"Open file descriptors", + "title_size":"16", + "title_align":"left", + "show_legend":true, + "legend_layout":"auto", + "legend_columns":[ + "avg", + "min", + "max", + "value", + "sum" + ], + "type":"timeseries", + "requests":[ + { + "formulas":[ + { + "formula":"query1", + "alias":"Max File Descriptors" + } + ], + "response_format":"timeseries", + "on_right_yaxis":false, + "queries":[ + { + "query":"avg:coredns.process.max_fds{$cluster,$deployment,$service,$namespace,$node,$label}", + "data_source":"metrics", + "name":"query1" + } + ], + "style":{ + "palette":"orange", + "line_type":"solid", + "line_width":"normal" + }, + "display_type":"line" + }, + { + "formulas":[ + { + "formula":"query1", + "alias":"Open File Descriptors" + } + ], + "response_format":"timeseries", + "on_right_yaxis":false, + "queries":[ + { + "query":"avg:coredns.process.open_fds{$cluster,$deployment,$service,$namespace,$node,$label}", + "data_source":"metrics", + "name":"query1" + } + ], + "style":{ + "palette":"dog_classic", + "line_type":"solid", + "line_width":"normal" + }, + "display_type":"line" + } + ], + "yaxis":{ + "scale":"linear", + "label":"", + "include_zero":true, + "min":"auto", + "max":"auto" + }, + "markers":[ + + ] + }, + "layout":{ + "x":0, + "y":2, + "width":5, + "height":2 + } + }, + { + "id":5425374732596050, + "definition":{ + "type":"note", + "content":" If your graphs show you’re running out of file descriptors, you may need to modify your server configuration to increase the available limit. ", + "background_color":"orange", + "font_size":"14", + "text_align":"left", + "vertical_align":"center", + "show_tick":true, + "tick_pos":"50%", + "tick_edge":"left", + "has_padding":true + }, + "layout":{ + "x":5, + "y":2, + "width":3, + "height":2 + } + } + ] + }, + "layout":{ + "x":0, + "y":0, + "width":8, + "height":5, + "is_column_break":true + } + }, + { + "id":8329118887177336, + "definition":{ + "title":" Memstats", + "title_align":"center", + "background_color":"orange", + "type":"group", + "layout_type":"ordered", + "widgets":[ + { + "id":5313027485980740, + "definition":{ + "title":"Allocated bytes", + "title_size":"16", + "title_align":"left", + "show_legend":false, + "legend_layout":"auto", + "legend_columns":[ + "avg", + "min", + "max", + "value", + "sum" + ], + "type":"timeseries", + "requests":[ + { + "formulas":[ + { + "formula":"query1", + "alias":"Allocated Bytes" + } + ], + "response_format":"timeseries", + "on_right_yaxis":false, + "queries":[ + { + "query":"avg:coredns.go.memstats.alloc_bytes{$deployment,$service,$cluster,$namespace,$node,$label}", + "data_source":"metrics", + "name":"query1" + } + ], + "style":{ + "palette":"orange", + "line_type":"solid", + "line_width":"normal" + }, + "display_type":"line" + } + ], + "yaxis":{ + "scale":"linear", + "label":"", + "include_zero":true, + "min":"auto", + "max":"auto" + }, + "markers":[ + + ] + }, + "layout":{ + "x":0, + "y":0, + "width":4, + "height":2 + } + }, + { + "id":1207074264588140, + "definition":{ + "title":"Allocated heap", + "title_size":"16", + "title_align":"left", + "show_legend":false, + "legend_layout":"auto", + "legend_columns":[ + "avg", + "min", + "max", + "value", + "sum" + ], + "type":"timeseries", + "requests":[ + { + "formulas":[ + { + "formula":"query1", + "alias":"Allocated Heap" + } + ], + "response_format":"timeseries", + "on_right_yaxis":false, + "queries":[ + { + "query":"avg:coredns.go.memstats.heap_alloc_bytes{$deployment,$service,$cluster,$namespace,$node,$label}", + "data_source":"metrics", + "name":"query1" + } + ], + "style":{ + "palette":"orange", + "line_type":"solid", + "line_width":"normal" + }, + "display_type":"line" + } + ], + "yaxis":{ + "scale":"linear", + "label":"", + "include_zero":true, + "min":"auto", + "max":"auto" + }, + "markers":[ + + ] + }, + "layout":{ + "x":0, + "y":2, + "width":4, + "height":2 + } + } + ] + }, + "layout":{ + "x":8, + "y":0, + "width":4, + "height":5 + } + }, + { + "id":6843685726262044, + "definition":{ + "title":"DNS Latency - Request", + "background_color":"blue", + "type":"group", + "layout_type":"ordered", + "widgets":[ + { + "id":6375540467085212, + "definition":{ + "title":"Average upstream request latency", + "title_size":"16", + "title_align":"left", + "show_legend":false, + "legend_layout":"auto", + "legend_columns":[ + "avg", + "min", + "max", + "value", + "sum" + ], + "type":"timeseries", + "requests":[ + { + "formulas":[ + { + "formula":"query1 / query2", + "alias":"Upstream Request Latency" + } + ], + "response_format":"timeseries", + "on_right_yaxis":false, + "queries":[ + { + "query":"sum:coredns.forward_request_duration.seconds.sum{$cluster,$deployment,$service,$namespace,$node,$label}", + "data_source":"metrics", + "name":"query1" + }, + { + "query":"sum:coredns.forward_request_duration.seconds.count{$cluster,$deployment,$service,$namespace,$node,$label}", + "data_source":"metrics", + "name":"query2" + } + ], + "style":{ + "palette":"dog_classic", + "line_type":"solid", + "line_width":"normal" + }, + "display_type":"line" + } + ], + "yaxis":{ + "scale":"linear", + "label":"", + "include_zero":true, + "min":"auto", + "max":"auto" + }, + "markers":[ + + ] + }, + "layout":{ + "x":0, + "y":0, + "width":6, + "height":2 + } + }, + { + "id":972681784544666, + "definition":{ + "title":"Average request latency", + "title_size":"16", + "title_align":"left", + "show_legend":false, + "legend_layout":"auto", + "legend_columns":[ + "avg", + "min", + "max", + "value", + "sum" + ], + "type":"timeseries", + "requests":[ + { + "formulas":[ + { + "formula":"query1 / query2", + "alias":"Request Latency" + } + ], + "response_format":"timeseries", + "on_right_yaxis":false, + "queries":[ + { + "query":"sum:coredns.request_duration.seconds.sum{$cluster,$deployment,$service,$namespace,$node,$label}", + "data_source":"metrics", + "name":"query1" + }, + { + "query":"sum:coredns.request_duration.seconds.count{$cluster,$deployment,$service,$namespace,$node,$label}", + "data_source":"metrics", + "name":"query2" + } + ], + "style":{ + "palette":"dog_classic", + "line_type":"solid", + "line_width":"normal" + }, + "display_type":"line" + } + ], + "yaxis":{ + "scale":"linear", + "label":"", + "include_zero":true, + "min":"auto", + "max":"auto" + }, + "markers":[ + + ] + }, + "layout":{ + "x":0, + "y":2, + "width":6, + "height":2 + } + }, + { + "id":4485197061940970, + "definition":{ + "type":"note", + "content":"If CoreDNS is slow to resolve requests, your users could encounter poor performance even if your backend services are all responding quickly.", + "background_color":"transparent", + "font_size":"14", + "text_align":"left", + "vertical_align":"top", + "show_tick":false, + "tick_pos":"50%", + "tick_edge":"top", + "has_padding":false + }, + "layout":{ + "x":0, + "y":4, + "width":6, + "height":1 + } + } + ] + }, + "layout":{ + "x":0, + "y":0, + "width":6, + "height":6 + } + }, + { + "id":6109012544060802, + "definition":{ + "title":"DNS Latency - Response", + "background_color":"blue", + "type":"group", + "layout_type":"ordered", + "widgets":[ + { + "id":8480798220641536, + "definition":{ + "title":"Rcode count upstream", + "title_size":"16", + "title_align":"left", + "show_legend":true, + "legend_layout":"horizontal", + "legend_columns":[ + "avg", + "min", + "max", + "value", + "sum" + ], + "time":{ + + }, + "type":"timeseries", + "requests":[ + { + "formulas":[ + { + "formula":"query1" + } + ], + "queries":[ + { + "query":"avg:coredns.forward_response_rcode_count.count{$cluster,$deployment,$service,$namespace,$node,$label} by {rcode}.as_count()", + "data_source":"metrics", + "name":"query1" + } + ], + "response_format":"timeseries", + "style":{ + "palette":"dog_classic", + "line_type":"solid", + "line_width":"normal" + }, + "display_type":"line" + } + ], + "yaxis":{ + "scale":"linear", + "label":"", + "include_zero":true, + "min":"auto", + "max":"auto" + }, + "markers":[ + + ] + }, + "layout":{ + "x":0, + "y":0, + "width":6, + "height":2 + } + }, + { + "id":100857845205490, + "definition":{ + "title":"Rcode count", + "title_size":"16", + "title_align":"left", + "show_legend":true, + "legend_layout":"horizontal", + "legend_columns":[ + "avg", + "min", + "max", + "value", + "sum" + ], + "time":{ + + }, + "type":"timeseries", + "requests":[ + { + "formulas":[ + { + "formula":"query1" + } + ], + "queries":[ + { + "query":"avg:coredns.response_code_count.count{$cluster,$deployment,$service,$namespace,$node,$label} by {rcode}.as_count()", + "data_source":"metrics", + "name":"query1" + } + ], + "response_format":"timeseries", + "style":{ + "palette":"dog_classic", + "line_type":"solid", + "line_width":"normal" + }, + "display_type":"line" + } + ], + "yaxis":{ + "scale":"linear", + "label":"", + "include_zero":true, + "min":"auto", + "max":"auto" + }, + "markers":[ + + ] + }, + "layout":{ + "x":0, + "y":2, + "width":6, + "height":2 + } + }, + { + "id":441625512207476, + "definition":{ + "type":"note", + "content":"When CoreDNS encounters an error, it returns an rcode—a standard DNS error code. \n\nErrors like NXDomain and FormErr can reveal a problem with the requests CoreDNS is receiving, while a ServFail error could indicate an issue with the function of the CoreDNS server itself. ", + "background_color":"transparent", + "font_size":"14", + "text_align":"left", + "vertical_align":"top", + "show_tick":false, + "tick_pos":"50%", + "tick_edge":"top", + "has_padding":false + }, + "layout":{ + "x":0, + "y":4, + "width":6, + "height":1 + } + } + ] + }, + "layout":{ + "x":6, + "y":0, + "width":6, + "height":6 + } + } + ], + "template_variables":[ + { + "name":"cluster", + "prefix":"kube_cluster_name", + "available_values":[ + + ], + "default":"*" + }, + { + "name":"deployment", + "prefix":"kube_deployment", + "available_values":[ + + ], + "default":"*" + }, + { + "name":"service", + "prefix":"kube_service", + "available_values":[ + + ], + "default":"*" + }, + { + "name":"namespace", + "prefix":"kube_namespace", + "available_values":[ + + ], + "default":"*" + }, + { + "name":"node", + "prefix":"node", + "available_values":[ + + ], + "default":"*" + }, + { + "name":"label", + "prefix":"label", + "available_values":[ + + ], + "default":"*" + } + ], + "layout_type":"ordered", + "notify_list":[ + + ], + "reflow_type":"fixed" + } \ No newline at end of file diff --git a/coredns/manifest.json b/coredns/manifest.json index 347f769132b15..ea75137a84dae 100644 --- a/coredns/manifest.json +++ b/coredns/manifest.json @@ -65,11 +65,12 @@ "auto_install": true }, "dashboards": { - "CoreDNS": "assets/dashboards/coredns.json" + "CoreDNS": "assets/dashboards/coredns.json", + "CoreDNS [V2]": "assets/dashboards/coredns_v2.json" }, "monitors": { "Cache hits count is low": "assets/monitors/coredns_cache_hits_low.json", "Request duration is high": "assets/monitors/coredns_request_duration_high.json" } } -} \ No newline at end of file +} From 96c2b3d2fc6389e673c063c02023085d90557cb2 Mon Sep 17 00:00:00 2001 From: Kyle Neale Date: Mon, 7 Oct 2024 10:54:54 -0400 Subject: [PATCH 54/56] Add to docs (#18784) --- tibco_ems/README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tibco_ems/README.md b/tibco_ems/README.md index 1cbb731862c48..f6fd38fa81118 100644 --- a/tibco_ems/README.md +++ b/tibco_ems/README.md @@ -27,12 +27,13 @@ The Tibco EMS integration utilizes the `tibemsadmin` CLI tool provided by Tibco *Note*: The `dd-agent` user needs execute permissions on the `tibemsadmin` binary. 1. Create a file named `show_commands` with the following contents: ```text - show server + show connections full + show durables show queues - show topics + show server show stat consumers show stat producers - show connections full + show topics ``` From 979e3f3f4774453a66f9de65d187c92f77f7b80f Mon Sep 17 00:00:00 2001 From: Sarah Witt Date: Mon, 7 Oct 2024 12:22:17 -0400 Subject: [PATCH 55/56] Add debug log line for external tags (#18774) * Add debug log line for external tags * Add changelog --- vsphere/changelog.d/18774.fixed | 1 + vsphere/datadog_checks/vsphere/vsphere.py | 1 + 2 files changed, 2 insertions(+) create mode 100644 vsphere/changelog.d/18774.fixed diff --git a/vsphere/changelog.d/18774.fixed b/vsphere/changelog.d/18774.fixed new file mode 100644 index 0000000000000..086ac6f120411 --- /dev/null +++ b/vsphere/changelog.d/18774.fixed @@ -0,0 +1 @@ +Add debug log line for host tags. \ No newline at end of file diff --git a/vsphere/datadog_checks/vsphere/vsphere.py b/vsphere/datadog_checks/vsphere/vsphere.py index 91f46c8a150d7..c5c5d6fd5b74d 100644 --- a/vsphere/datadog_checks/vsphere/vsphere.py +++ b/vsphere/datadog_checks/vsphere/vsphere.py @@ -616,6 +616,7 @@ def submit_external_host_tags(self): mor_tags = mor_props['tags'] + mor_tags tags = [t for t in mor_tags if t.split(':')[0] not in self._config.excluded_host_tags] tags.extend(self._config.base_tags) + self.log.debug("Submitting host tags for %s: %s", hostname, tags) external_host_tags.append((hostname, {self.__NAMESPACE__: tags})) if external_host_tags: From 50589cb1a09523c819b8db6dba01b524b53b070a Mon Sep 17 00:00:00 2001 From: Zhengda Lu Date: Mon, 7 Oct 2024 14:05:32 -0400 Subject: [PATCH 56/56] [dbm] add supported database versions to readme (#18787) * add supported database versions to readme * format --- mysql/README.md | 2 ++ postgres/README.md | 2 ++ sqlserver/README.md | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/mysql/README.md b/mysql/README.md index fec8f4a27e39a..3ad2dfe7e2307 100644 --- a/mysql/README.md +++ b/mysql/README.md @@ -8,6 +8,8 @@ The MySQL integration tracks the performance of your MySQL instances. It collect Enable [Database Monitoring][32] (DBM) for enhanced insights into query performance and database health. In addition to the standard integration, Datadog DBM provides query-level metrics, live and historical query snapshots, wait event analysis, database load, and query explain plans. +MySQL version 5.6, 5.7, 8.0, and MariaDB versions 10.5, 10.6, 10.11 and 11.1 are supported. + ## Setup
diff --git a/postgres/README.md b/postgres/README.md index e6c980196eb22..44f57b2a40d3a 100644 --- a/postgres/README.md +++ b/postgres/README.md @@ -8,6 +8,8 @@ The Postgres integration provides health and performance metrics for your Postgr Enable [Database Monitoring][28] (DBM) for enhanced insights into query performance and database health. In addition to the standard integration, Datadog DBM provides query-level metrics, live and historical query snapshots, wait event analysis, database load, query explain plans, and blocking query insights. +Postgres versions 9.6-16 are supported. + ## Setup
This page describes the standard Postgres Agent integration. If you are looking for the Database Monitoring product for Postgres, see Datadog Database Monitoring.
diff --git a/sqlserver/README.md b/sqlserver/README.md index c7eab98b12a99..c487b052d4e3f 100644 --- a/sqlserver/README.md +++ b/sqlserver/README.md @@ -8,7 +8,7 @@ The SQL Server integration tracks the performance of your SQL Server instances. Enable [Database Monitoring](https://docs.datadoghq.com/database_monitoring/) (DBM) for enhanced insight into query performance and database health. In addition to the standard integration, Datadog DBM provides query-level metrics, live and historical query snapshots, wait event analysis, database load, query explain plans, and blocking query insights. -All editions of SQL Server 2012 and above are supported. +SQL Server 2012, 2014, 2016, 2017, 2019, and 2022 are supported. ## Setup