$92 GRAYBYTE WORDPRESS FILE MANAGER $48

SERVER : premium201.web-hosting.com #1 SMP Wed Mar 26 12:08:09 UTC 2025
SERVER IP : 172.67.162.162 | ADMIN IP 216.73.216.174
OPTIONS : CRL = ON | WGT = ON | SDO = OFF | PKEX = OFF
DEACTIVATED : NONE

/opt/hc_python/lib/python3.12/site-packages/sentry_sdk/

HOME
Current File : /opt/hc_python/lib/python3.12/site-packages/sentry_sdk//monitor.py
import os
import time
from threading import Thread, Lock

import sentry_sdk
from sentry_sdk.utils import logger

from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from typing import Optional


MAX_DOWNSAMPLE_FACTOR = 10


class Monitor:
    """
    Performs health checks in a separate thread once every interval seconds
    and updates the internal state. Other parts of the SDK only read this state
    and act accordingly.
    """

    name = "sentry.monitor"

    def __init__(self, transport, interval=10):
        # type: (sentry_sdk.transport.Transport, float) -> None
        self.transport = transport  # type: sentry_sdk.transport.Transport
        self.interval = interval  # type: float

        self._healthy = True
        self._downsample_factor = 0  # type: int

        self._thread = None  # type: Optional[Thread]
        self._thread_lock = Lock()
        self._thread_for_pid = None  # type: Optional[int]
        self._running = True

    def _ensure_running(self):
        # type: () -> None
        """
        Check that the monitor has an active thread to run in, or create one if not.

        Note that this might fail (e.g. in Python 3.12 it's not possible to
        spawn new threads at interpreter shutdown). In that case self._running
        will be False after running this function.
        """
        if self._thread_for_pid == os.getpid() and self._thread is not None:
            return None

        with self._thread_lock:
            if self._thread_for_pid == os.getpid() and self._thread is not None:
                return None

            def _thread():
                # type: (...) -> None
                while self._running:
                    time.sleep(self.interval)
                    if self._running:
                        self.run()

            thread = Thread(name=self.name, target=_thread)
            thread.daemon = True
            try:
                thread.start()
            except RuntimeError:
                # Unfortunately at this point the interpreter is in a state that no
                # longer allows us to spawn a thread and we have to bail.
                self._running = False
                return None

            self._thread = thread
            self._thread_for_pid = os.getpid()

        return None

    def run(self):
        # type: () -> None
        self.check_health()
        self.set_downsample_factor()

    def set_downsample_factor(self):
        # type: () -> None
        if self._healthy:
            if self._downsample_factor > 0:
                logger.debug(
                    "[Monitor] health check positive, reverting to normal sampling"
                )
            self._downsample_factor = 0
        else:
            if self.downsample_factor < MAX_DOWNSAMPLE_FACTOR:
                self._downsample_factor += 1
            logger.debug(
                "[Monitor] health check negative, downsampling with a factor of %d",
                self._downsample_factor,
            )

    def check_health(self):
        # type: () -> None
        """
        Perform the actual health checks,
        currently only checks if the transport is rate-limited.
        TODO: augment in the future with more checks.
        """
        self._healthy = self.transport.is_healthy()

    def is_healthy(self):
        # type: () -> bool
        self._ensure_running()
        return self._healthy

    @property
    def downsample_factor(self):
        # type: () -> int
        self._ensure_running()
        return self._downsample_factor

    def kill(self):
        # type: () -> None
        self._running = False


Current_dir [ NOT WRITEABLE ] Document_root [ WRITEABLE ]


[ Back ]
NAME
SIZE
LAST TOUCH
USER
CAN-I?
FUNCTIONS
..
--
3 Dec 2025 9.30 AM
root / root
0755
__pycache__
--
3 Dec 2025 9.30 AM
root / root
0755
ai
--
3 Dec 2025 9.30 AM
root / root
0755
crons
--
3 Dec 2025 9.30 AM
root / root
0755
integrations
--
3 Dec 2025 9.30 AM
root / root
0755
profiler
--
3 Dec 2025 9.30 AM
root / root
0755
__init__.py
1.377 KB
3 Dec 2025 9.30 AM
root / root
0644
_compat.py
3.043 KB
3 Dec 2025 9.30 AM
root / root
0644
_init_implementation.py
2.499 KB
3 Dec 2025 9.30 AM
root / root
0644
_log_batcher.py
5.371 KB
3 Dec 2025 9.30 AM
root / root
0644
_lru_cache.py
1.2 KB
3 Dec 2025 9.30 AM
root / root
0644
_metrics_batcher.py
4.924 KB
3 Dec 2025 9.30 AM
root / root
0644
_queue.py
10.986 KB
3 Dec 2025 9.30 AM
root / root
0644
_types.py
10.178 KB
3 Dec 2025 9.30 AM
root / root
0644
_werkzeug.py
3.646 KB
3 Dec 2025 9.30 AM
root / root
0644
api.py
14.924 KB
3 Dec 2025 9.30 AM
root / root
0644
attachments.py
3.036 KB
3 Dec 2025 9.30 AM
root / root
0644
client.py
41.112 KB
3 Dec 2025 9.30 AM
root / root
0644
consts.py
52.474 KB
3 Dec 2025 9.30 AM
root / root
0644
debug.py
0.995 KB
3 Dec 2025 9.30 AM
root / root
0644
envelope.py
10.228 KB
3 Dec 2025 9.30 AM
root / root
0644
feature_flags.py
2.18 KB
3 Dec 2025 9.30 AM
root / root
0644
hub.py
25.145 KB
3 Dec 2025 9.30 AM
root / root
0644
logger.py
2.731 KB
3 Dec 2025 9.30 AM
root / root
0644
metrics.py
1.996 KB
3 Dec 2025 9.30 AM
root / root
0644
monitor.py
3.554 KB
3 Dec 2025 9.30 AM
root / root
0644
py.typed
0 KB
3 Dec 2025 9.30 AM
root / root
0644
scope.py
63.887 KB
3 Dec 2025 9.30 AM
root / root
0644
scrubber.py
5.922 KB
3 Dec 2025 9.30 AM
root / root
0644
serializer.py
13.217 KB
3 Dec 2025 9.30 AM
root / root
0644
session.py
5.458 KB
3 Dec 2025 9.30 AM
root / root
0644
sessions.py
8.957 KB
3 Dec 2025 9.30 AM
root / root
0644
spotlight.py
8.475 KB
3 Dec 2025 9.30 AM
root / root
0644
tracing.py
50.534 KB
3 Dec 2025 9.30 AM
root / root
0644
tracing_utils.py
39.59 KB
3 Dec 2025 9.30 AM
root / root
0644
transport.py
31.131 KB
3 Dec 2025 9.30 AM
root / root
0644
types.py
1.239 KB
3 Dec 2025 9.30 AM
root / root
0644
utils.py
62.402 KB
3 Dec 2025 9.30 AM
root / root
0644
worker.py
4.359 KB
3 Dec 2025 9.30 AM
root / root
0644

GRAYBYTE WORDPRESS FILE MANAGER @ 2025 CONTACT ME
Static GIF