File size: 1,430 Bytes
879fdec
5585ad5
879fdec
5585ad5
879fdec
 
e2cf778
5585ad5
e2cf778
879fdec
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
from flask import Flask, request, jsonify
from queue import Queue
from threading import Thread
import os
import time
import requests

app = Flask(__name__)

queue = Queue()
API_ENDPOINT = os.environ.get("API_ENDPOINT", "")
WORKERS = int(os.environ.get("WORKERS", "1"))

def worker():
    while True:
        req = queue.get()
        if req is None:
            break

        # Forward the request to the API endpoint
        response = requests.request(req['method'], API_ENDPOINT, headers=req['headers'], data=req['data'])
        req['result'] = response.json()
        queue.task_done()

@app.route('/api', methods=['GET', 'POST'])
def handle_request():
    headers = {key: value for key, value in request.headers}
    data = request.get_data()
    method = request.method

    # Add the request to the queue
    req = {'headers': headers, 'data': data, 'method': method, 'result': None}
    queue.put(req)

    # Wait until the request has been processed
    while req['result'] is None:
        time.sleep(0.1)

    return jsonify(req['result']), 200


if __name__ == "__main__":
    # Start the worker threads
    threads = []
    for i in range(WORKERS):
        t = Thread(target=worker)
        t.start()
        threads.append(t)

    # Start the Flask app
    app.run(host='0.0.0.0', port=5000)

    # Stop the worker threads
    for i in range(WORKERS):
        queue.put(None)
    for t in threads:
        t.join()