[07.02.20] path changes, fixing issues and finalising connection to graphql

This commit is contained in:
andrewso 2020-02-07 21:17:39 +00:00
parent 232d3ca0c8
commit 775ef507ea
6 changed files with 63 additions and 46 deletions

View File

@ -1,7 +1,7 @@
#!/usr/bin/env python #!/usr/bin/env python
from threading import Thread from threading import Thread
import src.pricing.collector as collector from pricing.collector import collector
def callCollector(args): def callCollector(args):
collector(args) collector(args)
@ -11,4 +11,4 @@ if __name__=='__main__':
currencies = [ "btc_gbp" ] currencies = [ "btc_gbp" ]
for i in range(len(currencies)): for i in range(len(currencies)):
Thread(target=callCollector, args=(1,)).start() Thread(target=callCollector, args=[currencies[i]]).start()

View File

@ -5,7 +5,7 @@ import requests, json, sys
def bitfinexPublicTicker(type): def bitfinexPublicTicker(type):
try: try:
uri = "https://api.bitfinex.com/v2/tickers?symbols=" + "t"+type.toLower().replace('_', '') uri = "https://api.bitfinex.com/v2/tickers?symbols=" + "t"+type.upper().replace('_', '')
response = requests.request("GET", uri) response = requests.request("GET", uri)
response = json.loads(response.text) response = json.loads(response.text)
@ -14,7 +14,7 @@ def bitfinexPublicTicker(type):
price = round(price, 3) price = round(price, 3)
return price return price
except KeyError as e: except KeyError as e:
print("Error: %s" % str(e)) print("Bitfinex Spot Price Error: %s" % str(e))
sys.stdout.flush() sys.stdout.flush()
price = 0 price = 0
return price return price
@ -22,7 +22,7 @@ def bitfinexPublicTicker(type):
def bitfinexHighLowVol(type): def bitfinexHighLowVol(type):
try: try:
uri = "https://api.bitfinex.com/v2/tickers?symbols=" + "t"+type.toLower().replace('_', '') uri = "https://api.bitfinex.com/v2/tickers?symbols=" + "t"+type.upper().replace('_', '')
response = requests.request("GET", uri) response = requests.request("GET", uri)
response = json.loads(response.text) response = json.loads(response.text)
@ -33,6 +33,6 @@ def bitfinexHighLowVol(type):
return high, low, vol return high, low, vol
except KeyError as e: except KeyError as e:
print("Error: %s" % str(e)) print("Bitfinex High Low Volume Error: %s" % str(e))
sys.stdout.flush() sys.stdout.flush()
return 0, 0, 0 return 0, 0, 0

View File

@ -20,7 +20,7 @@ def coinbasePublicTicker(type):
api_key = keys().api_key api_key = keys().api_key
api_secret = keys().api_secret api_secret = keys().api_secret
type = type.toUpper().replace('_', '-') type = type.upper().replace('_', '-')
try: try:
client = Client(api_key, api_secret) client = Client(api_key, api_secret)
@ -29,7 +29,7 @@ def coinbasePublicTicker(type):
price = round(price, 3) price = round(price, 3)
return price return price
except KeyError as e: except KeyError as e:
print("Error: %s" % str(e)) print("Coinbase Spot Price Error: %s" % str(e))
sys.stdout.flush() sys.stdout.flush()
price = 0 price = 0
return price return price

View File

@ -11,7 +11,7 @@ from pricing.gemini import geminiPublicTicker, geminiHighLowVol, geminiOpenClose
from utils.databaseConnect import send from utils.databaseConnect import send
btc_usd="resources/sql/V1_INSERT_NEW_PRICE_RECORD_BTC.graphql" btc_usd="src/resources/queries/V1_INSERT_NEW_PRICE_RECORD_BTC.graphql"
def getInsertForType(type): def getInsertForType(type):
if type == "btc_usd": if type == "btc_usd":
@ -75,35 +75,37 @@ def getHighLowVol(type):
return high, low, vol return high, low, vol
def sendToGateway(type, timestamp, av_price, high, low, vol, open, close): def sendToGateway(c_type, timestamp, av_price, high, low, vol, o_price, c_price):
try:
with open(btc_usd, 'r') as queryFile: with open(btc_usd, 'r') as file:
data = queryFile.read() data = file.read()
query = data % (type, timestamp, av_price, high, low, vol, open, close)
timestamp = '"'+timestamp.strftime('%Y-%m-%dT%H:%M:%S+00:00')+'"'
type = '"'+c_type+'"'
query = data % (timestamp, type, float(av_price), float(high), float(low), float(vol), float(o_price), float(c_price))
print(query)
status, response = send(query) status, response = send(query)
print("Status: ", status) print("Status: ", status)
print("Response: ", response) print("Response: ", response)
return True
except BaseException as exception:
print("Error: %s" % str(exception))
sys.stdout.flush()
return False
def getOpenClose(type): def getOpenClose(type):
open, close = geminiOpenClose() open, close = geminiOpenClose(type)
return open, close return open, close
# Dynamically Spin up Child process for each type wanting to track # Dynamically Spin up Child process for each type wanting to track
def collector(type): def collector(c_type):
print("Console: ", "== Historical Price Collector ==") print("Console: ", "== Historical Price Collector ==")
while True: while True:
sleep(3600) av_price, timestamp = averager(c_type)
av_price, timestamp = averager(type) high, low, vol = getHighLowVol(c_type)
high, low, vol = getHighLowVol(type) o_price, c_price = getOpenClose(c_type)
open, close = getOpenClose(type)
sendToGateway(type, timestamp, av_price, high, low, vol, open, close) sendToGateway(c_type, timestamp, av_price, high, low, vol, o_price, c_price)
sleep(3600)

View File

@ -1,51 +1,66 @@
#!/usr/bin/env python #!/usr/bin/env python
import requests, json, sys import requests, json, sys
from currency_converter import CurrencyConverter
def geminiPublicTicker(type): def geminiPublicTicker(type):
converter = CurrencyConverter()
try: try:
uri = "https://api.gemini.com/v1/pubticker/" + type.toUpper().replace('_', '') uri = "https://api.gemini.com/v1/pubticker/" + (type.lower().replace('gbp', 'usd')).replace('_', '')
response = requests.request("GET", uri) response = requests.request("GET", uri)
response = json.loads(response.text) response = json.loads(response.text)
price = (float(response['last']) + float(response['ask']) + float(response['bid']))/3 price = (converter.convert(float(response['last']), 'USD', 'GBP') +
converter.convert(float(response['ask']), 'USD', 'GBP') +
converter.convert(float(response['bid']), 'USD', 'GBP'))/3
price = round(price, 3) price = round(price, 3)
return price return price
except KeyError as e: except KeyError as e:
print("Error: %s" % str(e)) print("Gemini Spot Price Error: %s" % str(e))
sys.stdout.flush() sys.stdout.flush()
price = 0 price = 0
return price return price
def geminiHighLowVol(type): def geminiHighLowVol(type):
converter = CurrencyConverter()
try: try:
uri = "https://api.gemini.com/v2/ticker/" + type.toUpper().replace('_', '') uri = "https://api.gemini.com/v2/ticker/" + (type.lower().replace('gbp', 'usd')).replace('_', '')
response = requests.request("GET", uri) response = requests.request("GET", uri)
response = json.loads(response.text) response = json.loads(response.text)
high = float(response['high']) high = converter.convert(float(response['high']), 'USD', 'GBP')
low = float(response['low']) low = converter.convert(float(response['low']), 'USD', 'GBP')
vol = float(response['volo'])
uri = "https://api.gemini.com/v1/pubticker/" + (type.lower().replace('gbp', 'usd')).replace('_', '')
response = requests.request("GET", uri)
response = json.loads(response.text)
vol = converter.convert(float(response['volume']['BTC']), 'USD', 'GBP')
return high, low, vol return high, low, vol
except KeyError as e: except KeyError as e:
print("Error: %s" % str(e)) print("Gemini High Low Volume Error: %s" % str(e))
sys.stdout.flush() sys.stdout.flush()
return 0, 0, 0 return 0, 0, 0
def geminiOpenClose(type): def geminiOpenClose(type):
converter = CurrencyConverter()
try: try:
uri = "https://api.gemini.com/v2/ticker/" + type.toUpper().replace('_', '') uri = "https://api.gemini.com/v2/ticker/" + (type.lower().replace('gbp', 'usd')).replace('_', '')
response = requests.request("GET", uri) response = requests.request("GET", uri)
response = json.loads(response.text) response = json.loads(response.text)
open = float(response['open']) open = converter.convert(float(response['open']), 'USD', 'GBP')
close = float(response['close']) close = converter.convert(float(response['close']), 'USD', 'GBP')
return open, close return open, close
except KeyError as e: except KeyError as e:
print("Error: %s" % str(e)) print("Gemini Open Close Error: %s" % str(e))
sys.stdout.flush() sys.stdout.flush()
return 0, 0 return 0, 0

View File

@ -4,23 +4,23 @@ import requests, os, json
from dotenv import load_dotenv from dotenv import load_dotenv
from pathlib import Path # python3 only from pathlib import Path # python3 only
env_path = Path('.') / 'configuration/dbgateway.env.env' env_path = Path('.') / 'configuration/dbgateway.env'
load_dotenv(dotenv_path=env_path) load_dotenv(dotenv_path=env_path)
class keys(): class keys():
def __init__(self): def __init__(self):
self.uri = os.getenv('URI') self.uri = os.getenv("URI")
self.port = os.getenv("PORT") self.port = os.getenv("PORT")
def send(query): def send(query):
uri = keys().uri + ":"+ keys().port + "/graphql" uri = keys().uri + ":"+ keys().port + "/graphql"
headers = {'Content-type': 'application/graphql'} headers = {'Content-type': 'application/json'}
response = requests.post(uri, data=query, headers=headers) response = requests.post(uri, json={'query': query}, headers=headers)
statusCode = json.loads(response.status_code) statusCode = response.status_code
response = json.loads(response.text) response = json.loads(response.text)
return statusCode, response return statusCode, response