예제 #1
0
    def test_working(self):
        GCCollector(registry=self.registry)
        self.registry.collect()
        before = self.registry.get_sample_value(
            'python_gc_objects_collected_total', labels={"generation": "0"})

        #  add targets for gc
        a = []
        a.append(a)
        del a
        b = []
        b.append(b)
        del b

        gc.collect(0)
        self.registry.collect()

        after = self.registry.get_sample_value(
            'python_gc_objects_collected_total', labels={"generation": "0"})
        self.assertEqual(2, after - before)
        self.assertEqual(
            0,
            self.registry.get_sample_value(
                'python_gc_objects_uncollectable_total',
                labels={"generation": "0"}))
예제 #2
0
    def test_working(self):
        collector = GCCollector(registry=self.registry, gc=self.gc)
        self.gc.start_gc({'generation': 0})
        self.gc.stop_gc({'generation': 0, 'collected': 10, 'uncollectable': 2})

        self.assertEqual(1,
            self.registry.get_sample_value(
                'python_gc_duration_seconds_count',
                labels={"generation": "0"}))

        self.assertEqual(1,
            self.registry.get_sample_value(
                'python_gc_collected_objects_count',
                labels={"generation": "0"}))

        self.assertEqual(1,
            self.registry.get_sample_value(
                'python_gc_uncollectable_objects_count',
                labels={"generation": "0"}))

        self.assertEqual(10,
            self.registry.get_sample_value(
                'python_gc_collected_objects_sum',
                labels={"generation": "0"}))

        self.assertEqual(2,
            self.registry.get_sample_value(
                'python_gc_uncollectable_objects_sum',
                labels={"generation": "0"}))
예제 #3
0
    def test_empty(self):
        GCCollector(registry=self.registry)
        self.registry.collect()
        before = self.registry.get_sample_value(
            'python_gc_objects_collected_total', labels={"generation": "0"})
        gc.collect(0)
        self.registry.collect()

        after = self.registry.get_sample_value(
            'python_gc_objects_collected_total', labels={"generation": "0"})
        self.assertEqual(0, after - before)
info.info({'name': 'jeffrey4l', 'email': '*****@*****.**'})

h = Histogram('random_integer', 'Request size (bytes)',
              buckets=[0, 2, 4, 6, 8, INF],
              registry=None)

e = Enum('task_state', 'Description of enum',
         states=['starting', 'running', 'stopped'])

platform_collector = PlatformCollector(registry=None)
p_collector = ProcessCollector(registry=None)

collectors = [c, s, info, h, e, platform_collector, p_collector]
global_registry = CollectorRegistry()

gc_collector = GCCollector(registry=global_registry)


class MyHandler(BaseHTTPRequestHandler):

    @s.time()
    def do_GET(self):
        c.inc()
        e.state(random.choice(['starting', 'running', 'stopped']))
        h.observe(random.randint(1, 11))
        registry = CollectorRegistry(auto_describe=True)
        for i in collectors:
            registry.register(i)
        encoder, content_type = choose_encoder(self.headers.get('Accept'))
        output = encoder(registry)
        output2 = encoder(global_registry)
예제 #5
0
def setup_monitoring(
    app: web.Application,
    app_name: str,
    *,
    enter_middleware_cb: Optional[EnterMiddlewareCB] = None,
    exit_middleware_cb: Optional[ExitMiddlewareCB] = None,
    **app_info_kwargs,
):
    # app-scope registry
    target_info = {"application_name": app_name}
    target_info.update(app_info_kwargs)
    app[kCOLLECTOR_REGISTRY] = reg = CollectorRegistry(
        auto_describe=False, target_info=target_info
    )
    # automatically collects process metrics see [https://github.com/prometheus/client_python]
    app[kPROCESS_COLLECTOR] = ProcessCollector(registry=reg)
    # automatically collects python_info metrics see [https://github.com/prometheus/client_python]
    app[kPLATFORM_COLLECTOR] = PlatformCollector(registry=reg)
    # automatically collects python garbage collector metrics see [https://github.com/prometheus/client_python]
    # prefixed with python_gc_
    app[kGC_COLLECTOR] = GCCollector(registry=reg)

    # Total number of requests processed
    app[kREQUEST_COUNT] = Counter(
        name="http_requests",
        documentation="Total requests count",
        labelnames=["app_name", "method", "endpoint", "http_status"],
        registry=reg,
    )

    app[kINFLIGHTREQUESTS] = Gauge(
        name="http_in_flight_requests",
        documentation="Number of requests in process",
        labelnames=["app_name", "method", "endpoint"],
        registry=reg,
    )

    app[kRESPONSELATENCY] = Summary(
        name="http_request_latency_seconds",
        documentation="Time processing a request",
        labelnames=["app_name", "method", "endpoint"],
        registry=reg,
    )

    # WARNING: ensure ERROR middleware is over this one
    #
    # non-API request/response (e.g /metrics, /x/*  ...)
    #                                 |
    # API request/response (/v0/*)    |
    #       |                         |
    #       |                         |
    #       v                         |
    # ===== monitoring-middleware =====
    # == rest-error-middlewarer ====  |
    # ==           ...            ==  |
    # == rest-envelope-middleware ==  v
    #
    #

    # ensures is first layer but cannot guarantee the order setup is applied
    app.middlewares.insert(
        0,
        middleware_factory(
            app_name,
            enter_middleware_cb=enter_middleware_cb,
            exit_middleware_cb=exit_middleware_cb,
        ),
    )

    app.router.add_get("/metrics", metrics_handler)

    return True