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
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
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()
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()
def rest_metrics_server(): app = seldon_microservice.get_metrics_microservice(seldon_metrics) app.run(host="0.0.0.0", port=metrics_port)