[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
from threading import Thread
import src.pricing.collector as collector
from pricing.collector import collector
def callCollector(args):
collector(args)
@ -11,4 +11,4 @@ if __name__=='__main__':
currencies = [ "btc_gbp" ]
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):
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 = json.loads(response.text)
@ -14,7 +14,7 @@ def bitfinexPublicTicker(type):
price = round(price, 3)
return price
except KeyError as e:
print("Error: %s" % str(e))
print("Bitfinex Spot Price Error: %s" % str(e))
sys.stdout.flush()
price = 0
return price
@ -22,7 +22,7 @@ def bitfinexPublicTicker(type):
def bitfinexHighLowVol(type):
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 = json.loads(response.text)
@ -33,6 +33,6 @@ def bitfinexHighLowVol(type):
return high, low, vol
except KeyError as e:
print("Error: %s" % str(e))
print("Bitfinex High Low Volume Error: %s" % str(e))
sys.stdout.flush()
return 0, 0, 0

View File

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

View File

@ -11,7 +11,7 @@ from pricing.gemini import geminiPublicTicker, geminiHighLowVol, geminiOpenClose
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):
if type == "btc_usd":
@ -75,35 +75,37 @@ def getHighLowVol(type):
return high, low, vol
def sendToGateway(type, timestamp, av_price, high, low, vol, open, close):
try:
with open(btc_usd, 'r') as queryFile:
data = queryFile.read()
query = data % (type, timestamp, av_price, high, low, vol, open, close)
def sendToGateway(c_type, timestamp, av_price, high, low, vol, o_price, c_price):
with open(btc_usd, 'r') as file:
data = file.read()
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)
print("Status: ", status)
print("Response: ", response)
return True
except BaseException as exception:
print("Error: %s" % str(exception))
sys.stdout.flush()
return False
def getOpenClose(type):
open, close = geminiOpenClose()
open, close = geminiOpenClose(type)
return open, close
# Dynamically Spin up Child process for each type wanting to track
def collector(type):
def collector(c_type):
print("Console: ", "== Historical Price Collector ==")
while True:
sleep(3600)
av_price, timestamp = averager(type)
high, low, vol = getHighLowVol(type)
open, close = getOpenClose(type)
av_price, timestamp = averager(c_type)
high, low, vol = getHighLowVol(c_type)
o_price, c_price = getOpenClose(c_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
import requests, json, sys
from currency_converter import CurrencyConverter
def geminiPublicTicker(type):
converter = CurrencyConverter()
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 = 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)
return price
except KeyError as e:
print("Error: %s" % str(e))
print("Gemini Spot Price Error: %s" % str(e))
sys.stdout.flush()
price = 0
return price
def geminiHighLowVol(type):
converter = CurrencyConverter()
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 = json.loads(response.text)
high = float(response['high'])
low = float(response['low'])
vol = float(response['volo'])
high = converter.convert(float(response['high']), 'USD', 'GBP')
low = converter.convert(float(response['low']), 'USD', 'GBP')
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
except KeyError as e:
print("Error: %s" % str(e))
print("Gemini High Low Volume Error: %s" % str(e))
sys.stdout.flush()
return 0, 0, 0
def geminiOpenClose(type):
converter = CurrencyConverter()
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 = json.loads(response.text)
open = float(response['open'])
close = float(response['close'])
open = converter.convert(float(response['open']), 'USD', 'GBP')
close = converter.convert(float(response['close']), 'USD', 'GBP')
return open, close
except KeyError as e:
print("Error: %s" % str(e))
print("Gemini Open Close Error: %s" % str(e))
sys.stdout.flush()
return 0, 0

View File

@ -4,23 +4,23 @@ import requests, os, json
from dotenv import load_dotenv
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)
class keys():
def __init__(self):
self.uri = os.getenv('URI')
self.uri = os.getenv("URI")
self.port = os.getenv("PORT")
def send(query):
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)
return statusCode, response