converting to quart app w/ sqlite
This commit is contained in:
parent
e121cc8920
commit
4037dc7b78
|
@ -0,0 +1,14 @@
|
||||||
|
.PHONY: format help
|
||||||
|
|
||||||
|
# Help system from https://marmelab.com/blog/2016/02/29/auto-documented-makefile.html
|
||||||
|
.DEFAULT_GOAL := help
|
||||||
|
|
||||||
|
help:
|
||||||
|
@grep -E '^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'
|
||||||
|
|
||||||
|
setup: ## Establish local environment with dependencies installed
|
||||||
|
python3 -m venv .venv
|
||||||
|
.venv/bin/pip install -r requirements.txt
|
||||||
|
|
||||||
|
up: ## Run Grafana container
|
||||||
|
docker-compose up -d
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -5,7 +5,7 @@ volumes:
|
||||||
services:
|
services:
|
||||||
grafana:
|
grafana:
|
||||||
image: grafana/grafana:6.5.0
|
image: grafana/grafana:6.5.0
|
||||||
container_name: trader_grafana
|
container_name: marketmaker_dashboard
|
||||||
ports:
|
ports:
|
||||||
- 127.0.0.1:3000:3000
|
- 127.0.0.1:3000:3000
|
||||||
environment:
|
environment:
|
||||||
|
@ -19,15 +19,4 @@ services:
|
||||||
GF_USERS_ALLOW_ORG_CREATE: "false"
|
GF_USERS_ALLOW_ORG_CREATE: "false"
|
||||||
GF_LOG_LEVEL: "debug"
|
GF_LOG_LEVEL: "debug"
|
||||||
volumes:
|
volumes:
|
||||||
- grafana:/var/lib/grafana
|
- ./data/grafana:/var/lib/grafana
|
||||||
postgres:
|
|
||||||
image: postgres:9.6.15-alpine
|
|
||||||
container_name: trader_postgres
|
|
||||||
ports:
|
|
||||||
- 5432:5432
|
|
||||||
environment:
|
|
||||||
POSTGRES_PASSWORD: ${DB_PASS}
|
|
||||||
POSTGRES_USER: ${DB_USER}
|
|
||||||
POSTGRES_DB: ${DB_NAME}
|
|
||||||
volumes:
|
|
||||||
- postgres:/var/lib/postgresql/data
|
|
|
@ -4,8 +4,8 @@ DB_PASS=yyyyy
|
||||||
DB_USER=trader
|
DB_USER=trader
|
||||||
DB_NAME=trader_xmr
|
DB_NAME=trader_xmr
|
||||||
DB_HOST=127.0.0.1
|
DB_HOST=127.0.0.1
|
||||||
TO_USER=zzzzzzzzz
|
TO_KEY=zzzzzzzzz
|
||||||
TO_PASS=vvvvvvvvv
|
TO_SECRET=vvvvvvvvv
|
||||||
TRADE_CURRENCY=WOW
|
TRADE_CURRENCY=WOW
|
||||||
TRADE_AMOUNT=300
|
TRADE_AMOUNT=300
|
||||||
SPREAD_TARGET=4
|
SPREAD_TARGET=4
|
||||||
|
|
|
@ -1,13 +0,0 @@
|
||||||
apiVersion: 1
|
|
||||||
|
|
||||||
providers:
|
|
||||||
- name: 'default'
|
|
||||||
orgId: 1
|
|
||||||
folder: ''
|
|
||||||
type: file
|
|
||||||
disableDeletion: true
|
|
||||||
editable: true
|
|
||||||
updateIntervalSeconds: 60
|
|
||||||
allowUiUpdates: true
|
|
||||||
options:
|
|
||||||
path: /var/lib/grafana/dashboards
|
|
|
@ -1,9 +0,0 @@
|
||||||
apiVersion: 1
|
|
||||||
|
|
||||||
datasources:
|
|
||||||
- name: PostgreSQL
|
|
||||||
type: postgresql
|
|
||||||
url: http://prometheus:9090
|
|
||||||
access: proxy
|
|
||||||
isDefault: true
|
|
||||||
timeInterval: 10s
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -1,4 +1,5 @@
|
||||||
requests
|
requests
|
||||||
peewee
|
peewee
|
||||||
psycopg2-binary
|
|
||||||
python-dotenv
|
python-dotenv
|
||||||
|
hypercorn
|
||||||
|
quart
|
|
@ -0,0 +1,7 @@
|
||||||
|
from totrader.factory import create_app
|
||||||
|
|
||||||
|
|
||||||
|
app = create_app()
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app.run()
|
Binary file not shown.
Before Width: | Height: | Size: 404 KiB |
Binary file not shown.
Before Width: | Height: | Size: 692 KiB |
|
@ -0,0 +1 @@
|
||||||
|
from totrader.factory import create_app
|
|
@ -0,0 +1,16 @@
|
||||||
|
import quart.flask_patch
|
||||||
|
from quart import Quart
|
||||||
|
|
||||||
|
|
||||||
|
def create_app():
|
||||||
|
app = Quart(__name__)
|
||||||
|
app.config.from_envvar('FLASK_SECRETS', 'config.py')
|
||||||
|
|
||||||
|
@app.before_serving
|
||||||
|
async def startup():
|
||||||
|
from totrader.routes import meta
|
||||||
|
from totrader import filters
|
||||||
|
app.register_blueprint(meta.bp)
|
||||||
|
app.register_blueprint(filters.bp)
|
||||||
|
|
||||||
|
return app
|
|
@ -0,0 +1,15 @@
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
from quart import Blueprint
|
||||||
|
|
||||||
|
|
||||||
|
bp = Blueprint('filters', 'filters')
|
||||||
|
|
||||||
|
|
||||||
|
@bp.app_template_filter('ts')
|
||||||
|
def from_ts(v):
|
||||||
|
return datetime.fromtimestamp(v)
|
||||||
|
|
||||||
|
@bp.app_template_filter('xmr_block_explorer')
|
||||||
|
def xmr_block_explorer(v):
|
||||||
|
return f'https://www.exploremonero.com/transaction/{v}'
|
|
@ -1,23 +1,14 @@
|
||||||
from os import getenv
|
from datetime import datetime
|
||||||
|
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
from peewee import *
|
from peewee import *
|
||||||
from datetime import datetime, timedelta
|
from playhouse.sqliteq import SqliteQueueDatabase
|
||||||
|
|
||||||
|
|
||||||
load_dotenv('.env')
|
load_dotenv('.env')
|
||||||
|
|
||||||
db = PostgresqlDatabase(
|
db = SqliteQueueDatabase('data/mm.db')
|
||||||
getenv('DB_NAME', 'trader'),
|
|
||||||
user=getenv('DB_USER'),
|
|
||||||
password=getenv('DB_PASS'),
|
|
||||||
host=getenv('DB_HOST', '127.0.0.1'),
|
|
||||||
port=getenv('DB_PORT', 5432)
|
|
||||||
)
|
|
||||||
|
|
||||||
def get_time():
|
|
||||||
now = datetime.now()
|
|
||||||
now = now + timedelta(hours=7)
|
|
||||||
return now
|
|
||||||
|
|
||||||
class Ticker(Model):
|
class Ticker(Model):
|
||||||
id = AutoField()
|
id = AutoField()
|
||||||
|
@ -32,7 +23,7 @@ class Ticker(Model):
|
||||||
spread_btc = DoubleField()
|
spread_btc = DoubleField()
|
||||||
spread_sats = IntegerField()
|
spread_sats = IntegerField()
|
||||||
spread_perc = DoubleField()
|
spread_perc = DoubleField()
|
||||||
date = DateTimeField(default=get_time)
|
date = DateTimeField(default=datetime.utcnow)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
database = db
|
database = db
|
||||||
|
@ -41,7 +32,7 @@ class Balance(Model):
|
||||||
total = DoubleField()
|
total = DoubleField()
|
||||||
available = DoubleField()
|
available = DoubleField()
|
||||||
currency = CharField()
|
currency = CharField()
|
||||||
date = DateTimeField(default=get_time)
|
date = DateTimeField(default=datetime.utcnow)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
database = db
|
database = db
|
||||||
|
@ -55,7 +46,7 @@ class Order(Model):
|
||||||
uuid = TextField(null=True)
|
uuid = TextField(null=True)
|
||||||
active = BooleanField(default=True)
|
active = BooleanField(default=True)
|
||||||
cancelled = BooleanField(default=False)
|
cancelled = BooleanField(default=False)
|
||||||
date = DateTimeField(default=get_time)
|
date = DateTimeField(default=datetime.utcnow)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
database = db
|
database = db
|
||||||
|
@ -63,7 +54,7 @@ class Order(Model):
|
||||||
class Earning(Model):
|
class Earning(Model):
|
||||||
trade_pair = CharField()
|
trade_pair = CharField()
|
||||||
quantity = DoubleField()
|
quantity = DoubleField()
|
||||||
date = DateTimeField(default=get_time)
|
date = DateTimeField(default=datetime.utcnow)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
database = db
|
database = db
|
|
@ -0,0 +1,9 @@
|
||||||
|
|
||||||
|
from quart import Blueprint, render_template
|
||||||
|
|
||||||
|
|
||||||
|
bp = Blueprint('meta', 'meta')
|
||||||
|
|
||||||
|
@bp.route('/')
|
||||||
|
async def index():
|
||||||
|
return await render_template('index.html')
|
|
@ -0,0 +1 @@
|
||||||
|
hello
|
|
@ -2,13 +2,15 @@
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
from os import getenv
|
from os import getenv
|
||||||
from dotenv import load_dotenv
|
|
||||||
from argparse import ArgumentParser
|
from argparse import ArgumentParser
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from random import uniform
|
from random import uniform
|
||||||
from time import sleep
|
from time import sleep
|
||||||
from db import Ticker, Balance, Order, Earning
|
|
||||||
|
from dotenv import load_dotenv
|
||||||
|
|
||||||
|
from models import Ticker, Balance, Order, Earning
|
||||||
from tradeogre import TradeOgre
|
from tradeogre import TradeOgre
|
||||||
|
|
||||||
|
|
|
@ -10,8 +10,8 @@ class TradeOgre(object):
|
||||||
load_dotenv('.env')
|
load_dotenv('.env')
|
||||||
self.base = 'https://tradeogre.com/api/v1'
|
self.base = 'https://tradeogre.com/api/v1'
|
||||||
self.auth = HTTPBasicAuth(
|
self.auth = HTTPBasicAuth(
|
||||||
getenv('TO_USER'),
|
getenv('TO_KEY'),
|
||||||
getenv('TO_PASS')
|
getenv('TO_SECRET')
|
||||||
)
|
)
|
||||||
|
|
||||||
def req(self, route, method='get', data={}):
|
def req(self, route, method='get', data={}):
|
Loading…
Reference in New Issue