|
46 | 46 | import json
|
47 | 47 | import os
|
48 | 48 | import socket
|
| 49 | +from pathlib import Path |
49 | 50 | from urllib.parse import urlparse
|
50 | 51 |
|
51 | 52 | from aws_embedded_metrics.constants import DEFAULT_NAMESPACE
|
52 | 53 | from aws_embedded_metrics.logger.metrics_logger_factory import create_metrics_logger
|
53 | 54 |
|
54 | 55 |
|
55 |
| -class MetricsWrapperDummy: |
56 |
| - """Send metrics to /dev/null""" |
| 56 | +class MetricsWrapper: |
| 57 | + """A convenient metrics logger""" |
| 58 | + |
| 59 | + def __init__(self, logger): |
| 60 | + self.data = {} |
| 61 | + self.logger = logger |
57 | 62 |
|
58 | 63 | def set_dimensions(self, *args, **kwargs):
|
59 | 64 | """Set dimensions"""
|
| 65 | + if self.logger: |
| 66 | + self.logger.set_dimensions(*args, **kwargs) |
60 | 67 |
|
61 |
| - def put_metric(self, *args, **kwargs): |
| 68 | + def put_metric(self, name, data, unit): |
62 | 69 | """Put a datapoint with given dimensions"""
|
| 70 | + if name not in self.data: |
| 71 | + self.data[name] = [] |
| 72 | + self.data[name].append(data) |
| 73 | + |
| 74 | + if self.logger: |
| 75 | + self.logger.put_metric(name, data, unit) |
63 | 76 |
|
64 | 77 | def set_property(self, *args, **kwargs):
|
65 | 78 | """Set a property"""
|
| 79 | + if self.logger: |
| 80 | + self.logger.set_property(*args, **kwargs) |
66 | 81 |
|
67 | 82 | def flush(self):
|
68 | 83 | """Flush any remaining metrics"""
|
| 84 | + if self.logger: |
| 85 | + asyncio.run(self.logger.flush()) |
69 | 86 |
|
70 |
| - |
71 |
| -class MetricsWrapper: |
72 |
| - """A convenient metrics logger""" |
73 |
| - |
74 |
| - def __init__(self, logger): |
75 |
| - self.logger = logger |
76 |
| - |
77 |
| - def __getattr__(self, attr): |
78 |
| - """Dispatch methods to logger instance""" |
79 |
| - if attr not in self.__dict__: |
80 |
| - return getattr(self.logger, attr) |
81 |
| - return getattr(self, attr) |
82 |
| - |
83 |
| - def flush(self): |
84 |
| - """Flush any remaining metrics""" |
85 |
| - asyncio.run(self.logger.flush()) |
| 87 | + def store_data(self, dir_path): |
| 88 | + """Store data into a file""" |
| 89 | + metrics_path = Path(dir_path / "metrics.json") |
| 90 | + with open(metrics_path, "w", encoding="utf-8") as f: |
| 91 | + json.dump(self.data, f) |
86 | 92 |
|
87 | 93 |
|
88 | 94 | def get_metrics_logger():
|
89 | 95 | """Get a new metrics logger object"""
|
90 | 96 | # if no metrics namespace, don't output metrics
|
91 |
| - if "AWS_EMF_NAMESPACE" not in os.environ: |
92 |
| - return MetricsWrapperDummy() |
93 |
| - logger = create_metrics_logger() |
94 |
| - logger.reset_dimensions(False) |
| 97 | + if "AWS_EMF_NAMESPACE" in os.environ: |
| 98 | + logger = create_metrics_logger() |
| 99 | + logger.reset_dimensions(False) |
| 100 | + else: |
| 101 | + logger = None |
95 | 102 | return MetricsWrapper(logger)
|
96 | 103 |
|
97 | 104 |
|
|
0 commit comments