From bd442b6e8694613059c6ff7db2db2aa3e73534b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edgar=20Rami=CC=81rez=20Mondrago=CC=81n?= Date: Sat, 1 Apr 2023 22:06:05 -0600 Subject: [PATCH 1/2] fix: Conform metric field `type` to Singer spec According to the [Singer Spec](https://github.com/singer-io/getting-started/blob/master/docs/SYNC_MODE.md#metric-messages), the correct field name is `type` and not `metric_type`. --- singer_sdk/metrics.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/singer_sdk/metrics.py b/singer_sdk/metrics.py index 1c69a3681..da6465954 100644 --- a/singer_sdk/metrics.py +++ b/singer_sdk/metrics.py @@ -8,7 +8,7 @@ import logging import logging.config import os -from dataclasses import asdict, dataclass, field +from dataclasses import dataclass, field from pathlib import Path from time import time from typing import TYPE_CHECKING, Any, Generic, Mapping, TypeVar @@ -79,7 +79,15 @@ def to_json(self) -> str: Returns: A JSON object. """ - return json.dumps(asdict(self), default=str) + return json.dumps( + { + "type": self.metric_type, + "metric": self.metric.value, + "value": self.value, + "tags": self.tags, + }, + default=str, + ) def log(logger: logging.Logger, point: Point) -> None: From 8f18ade4ccf36208ad38538d88dfa27307da4a9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edgar=20Rami=CC=81rez=20Mondrago=CC=81n?= Date: Mon, 3 Apr 2023 00:20:52 -0600 Subject: [PATCH 2/2] Remove hardcoded level name from log message See https://github.com/transferwise/pipelinewise-singer-python/blob/da64a10cdbcad48ab373d4dab3d9e6dd6f58556b/singer/metrics.py#L87 --- docs/implementation/logging.md | 2 +- singer_sdk/metrics.py | 2 +- tests/core/test_metrics.py | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/implementation/logging.md b/docs/implementation/logging.md index ea9e186b9..da20a5780 100644 --- a/docs/implementation/logging.md +++ b/docs/implementation/logging.md @@ -51,7 +51,7 @@ version: 1 disable_existing_loggers: false formatters: metrics: - format: "{asctime} {message}" + format: "{asctime} {levelname} {message}" style: "{" handlers: metrics: diff --git a/singer_sdk/metrics.py b/singer_sdk/metrics.py index da6465954..f61d3e1ee 100644 --- a/singer_sdk/metrics.py +++ b/singer_sdk/metrics.py @@ -97,7 +97,7 @@ def log(logger: logging.Logger, point: Point) -> None: logger: An logger instance. point: A measurement. """ - logger.info("INFO METRIC: %s", point) + logger.info("METRIC: %s", point) class Meter(metaclass=abc.ABCMeta): diff --git a/tests/core/test_metrics.py b/tests/core/test_metrics.py index 5eb8fa501..a9d6b4d26 100644 --- a/tests/core/test_metrics.py +++ b/tests/core/test_metrics.py @@ -59,7 +59,7 @@ def test_record_counter(caplog: pytest.LogCaptureFixture): for record in caplog.records: assert record.levelname == "INFO" - assert record.msg == "INFO METRIC: %s" + assert record.msg == "METRIC: %s" assert "test=1" in record.message point: metrics.Point[int] = record.args[0] @@ -89,7 +89,7 @@ def test_sync_timer(caplog: pytest.LogCaptureFixture): record = caplog.records[0] assert record.levelname == "INFO" - assert record.msg == "INFO METRIC: %s" + assert record.msg == "METRIC: %s" point: metrics.Point[float] = record.args[0] assert point.metric_type == "timer"