Skip to content

Commit 47c5e75

Browse files
authored
[sqlserver] fix bug where tempdb is wrongly excluded in database files metrics (#19803)
* fix bug where tempdb is wronly excluded * add changelog
1 parent de560c8 commit 47c5e75

File tree

3 files changed

+36
-1
lines changed

3 files changed

+36
-1
lines changed

sqlserver/changelog.d/19803.fixed

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix a bug where `tempdb` is wrongly excluded from database files metrics due to all instances inherited from `SqlserverDatabaseMetricsBase` share the same reference of auto-discovered databases.

sqlserver/datadog_checks/sqlserver/database_metrics/base.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
# Licensed under a 3-clause BSD style license (see LICENSE)
44

55

6+
import copy
67
from typing import Callable, List, Optional
78

89
from datadog_checks.base.log import get_check_logger
@@ -28,7 +29,7 @@ def __init__(
2829
] = new_query_executor
2930
self.execute_query_handler: Callable[[str, Optional[str]], List[tuple]] = execute_query_handler
3031
self.track_operation_time: bool = track_operation_time
31-
self._databases: Optional[List[str]] = databases
32+
self._databases: Optional[List[str]] = copy.copy(databases)
3233
self._query_executors: List[QueryExecutor] = []
3334
self.log = get_check_logger()
3435

sqlserver/tests/test_database_metrics.py

+33
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
SqlserverServerStateMetrics,
3535
SqlserverTempDBFileSpaceUsageMetrics,
3636
)
37+
from datadog_checks.sqlserver.utils import Database
3738

3839
from .common import (
3940
CHECK_NAME,
@@ -1491,3 +1492,35 @@ def test_sqlserver_database_metrics_defaults(
14911492
databases=AUTODISCOVERY_DBS,
14921493
)
14931494
assert database_metrics.enabled == enabled
1495+
1496+
1497+
@pytest.mark.unit
1498+
def test_sqlserver_database_metrics_init(
1499+
init_config,
1500+
instance_docker_metrics,
1501+
):
1502+
instance_docker_metrics['database_autodiscovery'] = True
1503+
instance_docker_metrics['database_metrics'] = {
1504+
'index_usage_metrics': {
1505+
'enabled': True,
1506+
'enabled_tempdb': False,
1507+
},
1508+
}
1509+
1510+
sqlserver_check = SQLServer(CHECK_NAME, init_config, [instance_docker_metrics])
1511+
sqlserver_check.databases = {Database(db) for db in AUTODISCOVERY_DBS + ['tempdb']}
1512+
assert sqlserver_check.database_metrics is not None
1513+
1514+
index_usage_metrics = [
1515+
metric for metric in sqlserver_check.database_metrics if isinstance(metric, SqlserverIndexUsageMetrics)
1516+
]
1517+
assert len(index_usage_metrics) == 1
1518+
assert index_usage_metrics[0].enabled is True
1519+
assert 'tempdb' not in index_usage_metrics[0].databases
1520+
1521+
database_file_metrics = [
1522+
metric for metric in sqlserver_check.database_metrics if isinstance(metric, SqlserverDatabaseFilesMetrics)
1523+
]
1524+
assert len(database_file_metrics) == 1
1525+
assert database_file_metrics[0].enabled is True
1526+
assert 'tempdb' in database_file_metrics[0].databases

0 commit comments

Comments
 (0)