5
5
import random
6
6
import time
7
7
import zlib
8
+ from datetime import datetime
8
9
from functools import wraps , partial
9
10
from threading import Event , Lock , Thread
10
11
from contextlib import contextmanager
11
12
13
+ import sentry_sdk
12
14
from sentry_sdk ._compat import text_type
13
- from sentry_sdk .hub import Hub
14
- from sentry_sdk .utils import now , nanosecond_time
15
+ from sentry_sdk .utils import now , nanosecond_time , to_timestamp
15
16
from sentry_sdk .envelope import Envelope , Item
16
17
from sentry_sdk .tracing import (
17
18
TRANSACTION_SOURCE_ROUTE ,
29
30
from typing import Optional
30
31
from typing import Generator
31
32
from typing import Tuple
33
+ from typing import Union
32
34
33
35
from sentry_sdk ._types import BucketKey
34
36
from sentry_sdk ._types import DurationUnit
@@ -406,14 +408,16 @@ def add(
406
408
value , # type: MetricValue
407
409
unit , # type: MeasurementUnit
408
410
tags , # type: Optional[MetricTags]
409
- timestamp = None , # type: Optional[float]
411
+ timestamp = None , # type: Optional[Union[ float, datetime] ]
410
412
):
411
413
# type: (...) -> None
412
414
if not self ._ensure_thread () or self ._flusher is None :
413
415
return
414
416
415
417
if timestamp is None :
416
418
timestamp = time .time ()
419
+ elif isinstance (timestamp , datetime ):
420
+ timestamp = to_timestamp (timestamp )
417
421
418
422
bucket_timestamp = int (
419
423
(timestamp // self .ROLLUP_IN_SECONDS ) * self .ROLLUP_IN_SECONDS
@@ -500,7 +504,7 @@ def _serialize_tags(
500
504
def _get_aggregator_and_update_tags (key , tags ):
501
505
# type: (str, Optional[MetricTags]) -> Tuple[Optional[MetricsAggregator], Optional[MetricTags]]
502
506
"""Returns the current metrics aggregator if there is one."""
503
- hub = Hub .current
507
+ hub = sentry_sdk . Hub .current
504
508
client = hub .client
505
509
if client is None or client .metrics_aggregator is None :
506
510
return None , tags
@@ -531,7 +535,7 @@ def incr(
531
535
value = 1.0 , # type: float
532
536
unit = "none" , # type: MeasurementUnit
533
537
tags = None , # type: Optional[MetricTags]
534
- timestamp = None , # type: Optional[float]
538
+ timestamp = None , # type: Optional[Union[ float, datetime] ]
535
539
):
536
540
# type: (...) -> None
537
541
"""Increments a counter."""
@@ -545,7 +549,7 @@ def __init__(
545
549
self ,
546
550
key , # type: str
547
551
tags , # type: Optional[MetricTags]
548
- timestamp , # type: Optional[float]
552
+ timestamp , # type: Optional[Union[ float, datetime] ]
549
553
value , # type: Optional[float]
550
554
unit , # type: DurationUnit
551
555
):
@@ -597,7 +601,7 @@ def timing(
597
601
value = None , # type: Optional[float]
598
602
unit = "second" , # type: DurationUnit
599
603
tags = None , # type: Optional[MetricTags]
600
- timestamp = None , # type: Optional[float]
604
+ timestamp = None , # type: Optional[Union[ float, datetime] ]
601
605
):
602
606
# type: (...) -> _Timing
603
607
"""Emits a distribution with the time it takes to run the given code block.
@@ -620,7 +624,7 @@ def distribution(
620
624
value , # type: float
621
625
unit = "none" , # type: MeasurementUnit
622
626
tags = None , # type: Optional[MetricTags]
623
- timestamp = None , # type: Optional[float]
627
+ timestamp = None , # type: Optional[Union[ float, datetime] ]
624
628
):
625
629
# type: (...) -> None
626
630
"""Emits a distribution."""
@@ -634,7 +638,7 @@ def set(
634
638
value , # type: MetricValue
635
639
unit = "none" , # type: MeasurementUnit
636
640
tags = None , # type: Optional[MetricTags]
637
- timestamp = None , # type: Optional[float]
641
+ timestamp = None , # type: Optional[Union[ float, datetime] ]
638
642
):
639
643
# type: (...) -> None
640
644
"""Emits a set."""
@@ -648,7 +652,7 @@ def gauge(
648
652
value , # type: float
649
653
unit = "none" , # type: MetricValue
650
654
tags = None , # type: Optional[MetricTags]
651
- timestamp = None , # type: Optional[float]
655
+ timestamp = None , # type: Optional[Union[ float, datetime] ]
652
656
):
653
657
# type: (...) -> None
654
658
"""Emits a gauge."""
0 commit comments