Ejemplo n.º 1
0
def test_proto_seldon_metrics_endpoint(cls, client_gets_metrics):
    def _match_label(line):
        _data, value = line.split()
        name, labels = _data.split()[0].split("{")
        labels = labels[:-1]
        return name, value, eval(f"dict({labels})")

    def _iterate_metrics(text):
        for line in text.split("\n"):
            if not line or line[0] == "#":
                continue
            yield _match_label(line)

    user_object = cls()
    seldon_metrics = SeldonMetrics()

    app = SeldonModelGRPC(user_object, seldon_metrics)
    datadef = prediction_pb2.DefaultData(
        tensor=prediction_pb2.Tensor(shape=(2, 1), values=np.array([1, 2]))
    )

    request = prediction_pb2.SeldonMessage(data=datadef)

    metrics_app = get_metrics_microservice(seldon_metrics)
    metrics_client = metrics_app.test_client()

    rv = metrics_client.get("/metrics")
    assert rv.status_code == 200
    assert rv.data.decode() == ""

    resp = app.Predict(request, None)
    j = json.loads(json_format.MessageToJson(resp))
    assert j["data"] == {
        "names": ["t:0"],
        "tensor": {"shape": [2, 1], "values": [1.0, 2.0]},
    }
    assert j["meta"]["tags"] == EXPECTED_TAGS
    assert ("metrics" in j["meta"]) == client_gets_metrics
    rv = metrics_client.get("/metrics")
    text = rv.data.decode()

    timer_present = False
    for name, value, labels in _iterate_metrics(text):
        if name == "mytimer_bucket":
            timer_present = True

        if name == "mycounter_total":
            assert value == "1.0"
            assert labels["worker_id"] == str(os.getpid())

        if name == "mygauge":
            assert value == "100.0"
            assert labels["worker_id"] == str(os.getpid())

        if name == "customtag":
            assert value == "200.0"
            assert labels["mytag"] == "mytagvalue"

    assert timer_present
Ejemplo n.º 2
0
def test_seldon_metrics_endpoint(cls, client_gets_metrics):
    def _match_label(line):
        _data, value = line.split()
        name, labels = _data.split()[0].split("{")
        labels = labels[:-1]
        return name, value, eval(f"dict({labels})")

    def _iterate_metrics(text):
        for line in text.split("\n"):
            if not line or line[0] == "#":
                continue
            yield _match_label(line)

    user_object = cls()
    seldon_metrics = SeldonMetrics()

    app = get_rest_microservice(user_object, seldon_metrics)
    client = app.test_client()

    metrics_app = get_metrics_microservice(seldon_metrics)
    metrics_client = metrics_app.test_client()

    rv = metrics_client.get("/metrics")
    assert rv.status_code == 200
    assert rv.data.decode() == ""

    rv = client.get(
        '/predict?json={"data": {"names": ["input"], "ndarray": ["data"]}}')
    assert rv.status_code == 200
    assert ("metrics" in json.loads(rv.data)["meta"]) == client_gets_metrics

    rv = metrics_client.get("/metrics")
    text = rv.data.decode()

    timer_present = False
    for name, value, labels in _iterate_metrics(text):
        if name == "mytimer_bucket":
            timer_present = True

        if name == "mycounter_total":
            assert value == "1.0"
            assert labels["worker_id"] == str(os.getpid())

        if name == "mygauge":
            assert value == "100.0"
            assert labels["worker_id"] == str(os.getpid())

        if name == "customtag":
            assert value == "200.0"
            assert labels["mytag"] == "mytagvalue"

    assert timer_present
Ejemplo n.º 3
0
 def rest_metrics_server():
     app = seldon_microservice.get_metrics_microservice(seldon_metrics)
     if args.debug:
         app.run(host="0.0.0.0", port=metrics_port)
     else:
         options = {
             "bind": "%s:%s" % ("0.0.0.0", metrics_port),
             "accesslog": accesslog(args.log_level),
             "loglevel": args.log_level.lower(),
             "timeout": 5000,
             "max_requests": args.max_requests,
             "max_requests_jitter": args.max_requests_jitter,
         }
         StandaloneApplication(app, options=options).run()
Ejemplo n.º 4
0
 def rest_metrics_server():
     app = seldon_microservice.get_metrics_microservice(seldon_metrics)
     if args.debug:
         app.run(host="0.0.0.0", port=metrics_port)
     else:
         options = {
             "bind": "%s:%s" % ("0.0.0.0", metrics_port),
             "accesslog": accesslog(args.access_log),
             "loglevel": args.log_level.lower(),
             "timeout": 5000,
             "max_requests": args.max_requests,
             "max_requests_jitter": args.max_requests_jitter,
             "post_worker_init": post_worker_init,
         }
         if args.pidfile is not None:
             options["pidfile"] = args.pidfile
         StandaloneApplication(app, options=options).run()
Ejemplo n.º 5
0
 def rest_metrics_server():
     app = seldon_microservice.get_metrics_microservice(seldon_metrics)
     app.run(host="0.0.0.0", port=metrics_port)