dream
85 строк · 2.2 Кб
1#!/usr/bin/env python
2
3import logging
4import time
5import os
6import random
7
8import sentry_sdk
9from flask import Flask, request, jsonify
10from sentry_sdk.integrations.logging import ignore_logger
11
12from common.dff.integration.actor import load_ctxs, get_response
13from scenario.main import actor
14
15import test_server
16
17
18ignore_logger("root")
19
20sentry_sdk.init(os.getenv("SENTRY_DSN"))
21SERVICE_NAME = os.getenv("SERVICE_NAME")
22SERVICE_PORT = int(os.getenv("SERVICE_PORT"))
23RANDOM_SEED = int(os.getenv("RANDOM_SEED", 2718))
24
25logging.basicConfig(
26format="%(asctime)s - %(pathname)s - %(lineno)d - %(levelname)s - %(message)s",
27level=logging.DEBUG,
28)
29logger = logging.getLogger(__name__)
30
31
32app = Flask(__name__)
33logging.getLogger("werkzeug").setLevel("WARNING")
34
35
36def handler(requested_data, random_seed=None):
37st_time = time.time()
38ctxs = load_ctxs(requested_data)
39random_seed = requested_data.get("random_seed", random_seed) # for tests
40
41responses = []
42for ctx in ctxs:
43try:
44# for tests
45if random_seed:
46random.seed(int(random_seed))
47ctx = actor(ctx)
48responses.append(get_response(ctx, actor))
49except Exception as exc:
50sentry_sdk.capture_exception(exc)
51logger.exception(exc)
52responses.append(("", 0.0, {}, {}, {}))
53
54total_time = time.time() - st_time
55logger.info(f"{SERVICE_NAME} exec time = {total_time:.3f}s")
56return responses
57
58
59try:
60test_server.run_test(handler)
61logger.info("test query processed")
62except Exception as exc:
63sentry_sdk.capture_exception(exc)
64logger.exception(exc)
65raise exc
66
67
68logger.info(f"{SERVICE_NAME} is loaded and ready")
69
70
71@app.route("/respond", methods=["POST"])
72def respond():
73# import common.test_utils as t_utils
74
75# t_utils.save_to_test(request.json, "tests/lets_talk_in.json", indent=4) # TEST
76# responses = handler(request.json, RANDOM_SEED) # TEST
77# import common.test_utils as t_utils
78
79# t_utils.save_to_test(responses, "tests/lets_talk_out.json", indent=4) # TEST
80responses = handler(request.json)
81return jsonify(responses)
82
83
84if __name__ == "__main__":
85app.run(debug=False, host="0.0.0.0", port=SERVICE_PORT)
86