add LIVE mode restr on test prods
This commit is contained in:
36
testy/iptest.py
Normal file
36
testy/iptest.py
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
import socket
|
||||||
|
from v2realbot.enums.enums import Env
|
||||||
|
from v2realbot.config import PROD_SERVER_IPS, TEST_SERVER_IPS
|
||||||
|
|
||||||
|
# def get_server_ip():
|
||||||
|
# """Retrieve the current server's IP address."""
|
||||||
|
# hostname = socket.gethostname()
|
||||||
|
# current_ip = socket.gethostbyname(hostname)
|
||||||
|
# print("Current IP:", current_ip, hostname)
|
||||||
|
# return current_ip
|
||||||
|
|
||||||
|
def get_environment():
|
||||||
|
"""Determine if the current server is production or test based on IP."""
|
||||||
|
current_ip = get_server_ip()
|
||||||
|
if current_ip in PROD_SERVER_IPS:
|
||||||
|
return Env.PROD
|
||||||
|
else:
|
||||||
|
return Env.TEST
|
||||||
|
|
||||||
|
def get_server_ip():
|
||||||
|
"""Get the IP address of the server."""
|
||||||
|
try:
|
||||||
|
# Create a dummy socket and connect to an external address
|
||||||
|
with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
|
||||||
|
s.connect(("8.8.8.8", 80)) # Google's DNS server
|
||||||
|
return s.getsockname()[0]
|
||||||
|
except Exception as e:
|
||||||
|
return f"Error: {e}"
|
||||||
|
|
||||||
|
# Test the function
|
||||||
|
#print(get_server_ip())
|
||||||
|
|
||||||
|
hostname = socket.gethostname()
|
||||||
|
print(hostname)
|
||||||
|
current_ip = socket.gethostbyname(hostname)
|
||||||
|
print(hostname, current_ip)
|
||||||
@ -2,6 +2,11 @@ from alpaca.data.enums import DataFeed
|
|||||||
from v2realbot.enums.enums import Mode, Account, FillCondition
|
from v2realbot.enums.enums import Mode, Account, FillCondition
|
||||||
from appdirs import user_data_dir
|
from appdirs import user_data_dir
|
||||||
|
|
||||||
|
#'0.0.0.0',
|
||||||
|
#currently only prod server has acces to LIVE
|
||||||
|
PROD_SERVER_HOSTNAMES = ['tradingeastcoast','David-MacBook-Pro.local'] #,'David-MacBook-Pro.local'
|
||||||
|
TEST_SERVER_HOSTNAMES = ['tradingtestprod']
|
||||||
|
|
||||||
#TODO vybrane dat do config db a managovat pres GUI
|
#TODO vybrane dat do config db a managovat pres GUI
|
||||||
|
|
||||||
#AGGREGATOR filter trades
|
#AGGREGATOR filter trades
|
||||||
|
|||||||
@ -363,8 +363,8 @@ def run_batch_stratin(id: UUID, runReq: RunRequest):
|
|||||||
if runReq.test_batch_id is None and (runReq.bt_from is None or runReq.bt_from.date() == runReq.bt_to.date()):
|
if runReq.test_batch_id is None and (runReq.bt_from is None or runReq.bt_from.date() == runReq.bt_to.date()):
|
||||||
return (-1, "test interval or different days required for batch run")
|
return (-1, "test interval or different days required for batch run")
|
||||||
|
|
||||||
if runReq.mode != Mode.BT:
|
if runReq.mode not in (Mode.BT, Mode.PREP):
|
||||||
return (-1, "batch run only for backtest")
|
return (-1, "batch run only for backtest/prep")
|
||||||
|
|
||||||
#print("request values:", runReq)
|
#print("request values:", runReq)
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,10 @@
|
|||||||
from enum import Enum
|
from enum import Enum
|
||||||
from alpaca.trading.enums import OrderSide, OrderStatus, OrderType
|
from alpaca.trading.enums import OrderSide, OrderStatus, OrderType
|
||||||
|
|
||||||
|
class Env(str, Enum):
|
||||||
|
PROD = "prod"
|
||||||
|
TEST = "test"
|
||||||
|
|
||||||
class TargetTRFM(str, Enum):
|
class TargetTRFM(str, Enum):
|
||||||
#ponecha as is
|
#ponecha as is
|
||||||
KEEPVAL = "keepval"
|
KEEPVAL = "keepval"
|
||||||
|
|||||||
@ -16,6 +16,7 @@ from fastapi import FastAPI, WebSocket, WebSocketDisconnect, Depends, HTTPExcept
|
|||||||
from fastapi.responses import FileResponse
|
from fastapi.responses import FileResponse
|
||||||
from fastapi.staticfiles import StaticFiles
|
from fastapi.staticfiles import StaticFiles
|
||||||
from fastapi.security import HTTPBasic, HTTPBasicCredentials
|
from fastapi.security import HTTPBasic, HTTPBasicCredentials
|
||||||
|
from v2realbot.enums.enums import Env, Mode
|
||||||
from typing import Annotated
|
from typing import Annotated
|
||||||
import os
|
import os
|
||||||
import uvicorn
|
import uvicorn
|
||||||
@ -25,6 +26,7 @@ from threading import Thread
|
|||||||
import asyncio
|
import asyncio
|
||||||
from v2realbot.common.db import insert_queue, insert_conn, pool
|
from v2realbot.common.db import insert_queue, insert_conn, pool
|
||||||
from v2realbot.utils.utils import json_serial, send_to_telegram, zoneNY, zonePRG
|
from v2realbot.utils.utils import json_serial, send_to_telegram, zoneNY, zonePRG
|
||||||
|
from v2realbot.utils.sysutils import get_environment
|
||||||
from uuid import uuid4
|
from uuid import uuid4
|
||||||
from sqlite3 import OperationalError
|
from sqlite3 import OperationalError
|
||||||
from time import sleep
|
from time import sleep
|
||||||
@ -225,6 +227,10 @@ def _get_stratin(stratin_id) -> StrategyInstance:
|
|||||||
|
|
||||||
@app.put("/stratins/{stratin_id}/run", dependencies=[Depends(api_key_auth)], status_code=status.HTTP_200_OK)
|
@app.put("/stratins/{stratin_id}/run", dependencies=[Depends(api_key_auth)], status_code=status.HTTP_200_OK)
|
||||||
def _run_stratin(stratin_id: UUID, runReq: RunRequest):
|
def _run_stratin(stratin_id: UUID, runReq: RunRequest):
|
||||||
|
|
||||||
|
if runReq.mode == Mode.LIVE and get_environment() != Env.PROD:
|
||||||
|
raise HTTPException(status_code=status.HTTP_406_NOT_ACCEPTABLE, detail=f"Live MODE disabled for TEST env")
|
||||||
|
|
||||||
#print(runReq)
|
#print(runReq)
|
||||||
if runReq.bt_from is not None and runReq.bt_from.tzinfo is None:
|
if runReq.bt_from is not None and runReq.bt_from.tzinfo is None:
|
||||||
runReq.bt_from = zonePRG.localize(runReq.bt_from)
|
runReq.bt_from = zonePRG.localize(runReq.bt_from)
|
||||||
@ -233,7 +239,7 @@ def _run_stratin(stratin_id: UUID, runReq: RunRequest):
|
|||||||
runReq.bt_to = zonePRG.localize(runReq.bt_to)
|
runReq.bt_to = zonePRG.localize(runReq.bt_to)
|
||||||
#pokud jedeme nad test intervaly anebo je požadováno více dní - pouštíme jako batch day by day
|
#pokud jedeme nad test intervaly anebo je požadováno více dní - pouštíme jako batch day by day
|
||||||
#do budoucna dát na FE jako flag
|
#do budoucna dát na FE jako flag
|
||||||
if runReq.test_batch_id is not None or (runReq.bt_from.date() != runReq.bt_to.date()):
|
if runReq.mode != Mode.LIVE and runReq.test_batch_id is not None or (runReq.bt_from.date() != runReq.bt_to.date()):
|
||||||
res, id = cs.run_batch_stratin(id=stratin_id, runReq=runReq)
|
res, id = cs.run_batch_stratin(id=stratin_id, runReq=runReq)
|
||||||
else:
|
else:
|
||||||
res, id = cs.run_stratin(id=stratin_id, runReq=runReq)
|
res, id = cs.run_stratin(id=stratin_id, runReq=runReq)
|
||||||
|
|||||||
11
v2realbot/utils/sysutils.py
Normal file
11
v2realbot/utils/sysutils.py
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
import socket
|
||||||
|
from v2realbot.enums.enums import Env
|
||||||
|
from v2realbot.config import PROD_SERVER_HOSTNAMES, TEST_SERVER_HOSTNAMES
|
||||||
|
|
||||||
|
def get_environment():
|
||||||
|
"""Determine if the current server is production or test based on hostname."""
|
||||||
|
hostname = socket.gethostname()
|
||||||
|
if hostname in PROD_SERVER_HOSTNAMES:
|
||||||
|
return Env.PROD
|
||||||
|
else:
|
||||||
|
return Env.TEST
|
||||||
Reference in New Issue
Block a user