62 lines
1.7 KiB
Python
62 lines
1.7 KiB
Python
from __future__ import annotations
|
|
import os, json, threading
|
|
from flask import Flask, jsonify, render_template, abort
|
|
from trading_bot import main as trading_bot_main # zakładam, że tak nazywasz plik
|
|
|
|
DATA_DIR = os.environ.get("DATA_DIR", ".")
|
|
|
|
def _load_json(name: str):
|
|
path = os.path.join(DATA_DIR, name)
|
|
if not os.path.isfile(path):
|
|
return None
|
|
with open(path, "r", encoding="utf-8") as f:
|
|
try:
|
|
return json.load(f)
|
|
except Exception:
|
|
return None
|
|
|
|
app = Flask(
|
|
__name__,
|
|
static_folder="static",
|
|
static_url_path="/static",
|
|
template_folder="templates"
|
|
)
|
|
|
|
@app.route("/")
|
|
def index():
|
|
return render_template("index.html")
|
|
|
|
@app.route("/api/snapshot")
|
|
def api_snapshot():
|
|
data = _load_json("snapshot.json")
|
|
if data is None: abort(404, "snapshot.json not found")
|
|
return jsonify(data)
|
|
|
|
@app.route("/api/history")
|
|
def api_history():
|
|
data = _load_json("portfolio_history.json")
|
|
if data is None: abort(404, "portfolio_history.json not found")
|
|
return jsonify(data)
|
|
|
|
@app.route("/api/positions")
|
|
def api_positions():
|
|
data = _load_json("positions.json")
|
|
if data is None: data = []
|
|
return jsonify(data)
|
|
|
|
@app.route("/api/trades")
|
|
def api_trades():
|
|
data = _load_json("trade_log.json")
|
|
if data is None: data = []
|
|
return jsonify(data)
|
|
|
|
def start_trading_bot():
|
|
"""Uruchamia bota w osobnym wątku."""
|
|
trading_thread = threading.Thread(target=trading_bot_main, daemon=True)
|
|
trading_thread.start()
|
|
print("[Flask] Trading bot uruchomiony w wątku.")
|
|
|
|
if __name__ == "__main__":
|
|
start_trading_bot()
|
|
app.run(host="0.0.0.0", port=int(os.environ.get("PORT", 5000)), debug=True)
|