Skip to content

Commit

Permalink
Added logging across the entire application.
Browse files Browse the repository at this point in the history
  • Loading branch information
ben-abraham committed Jun 11, 2021
1 parent cd6ee00 commit de1d95b
Show file tree
Hide file tree
Showing 18 changed files with 146 additions and 123 deletions.
27 changes: 26 additions & 1 deletion app_instance.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,36 @@
import os.path, logging
from logging.handlers import TimedRotatingFileHandler
from util import ensure_directory

LOG_STORAGE_PATH = "~/.raventrader/raventrader.log"

class AppInstance:
settings = None
storage = None
wallet = None
server = None

@staticmethod
def setup_logging(directory):
path = os.path.expanduser(LOG_STORAGE_PATH)
ensure_directory(os.path.dirname(path))
logger = logging.getLogger()
handler = TimedRotatingFileHandler(path, when='D', interval=1, backupCount=7)
fmt = '%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s'
formatter = logging.Formatter(fmt=fmt, datefmt='%m/%d/%Y %H:%M:%S')
handler.setFormatter(formatter)
handler.setLevel(logging.INFO)
# tee output to console as well
console = logging.StreamHandler()
console.setFormatter(formatter)
console.setLevel(logging.INFO)
logger.addHandler(console)
logger.addHandler(handler)
logger.setLevel(logging.INFO)

@staticmethod
def on_init():
AppInstance.setup_logging(AppInstance.settings.get_path())
AppInstance.storage = AppStorage()
AppInstance.wallet = WalletManager()
AppInstance.server = ServerConnection()
Expand All @@ -27,7 +52,7 @@ def on_close():
@staticmethod
def on_exit(error=None):
if error:
print("App Error: ", error)
logging.error(error)
AppInstance.on_close()


Expand Down
6 changes: 3 additions & 3 deletions app_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from PyQt5.QtWidgets import *
from PyQt5 import uic

import sys, getopt, argparse, json, time, getpass, os.path
import sys, getopt, argparse, json, time, getpass, os.path, logging

SETTINGS_STORAGE_PATH = "~/.raventrader/settings.json"

Expand All @@ -18,13 +18,13 @@ def ensure_directory(dir):

def load_json(path, hook, title, default=[]):
if not os.path.isfile(path):
#print("No {} records.".format(title))
#logging.info("No {} records.".format(title))
return default
fSwap = open(path, mode="r")
swapJson = fSwap.read()
fSwap.close()
data = json.loads(swapJson, object_hook=hook)
#print("Loaded {} {} records from disk".format(len(data), title))
#logging.info("Loaded {} {} records from disk".format(len(data), title))
return data

def save_json(path, data):
Expand Down
2 changes: 1 addition & 1 deletion app_storage.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from PyQt5.QtWidgets import *
from PyQt5 import uic

import sys, getopt, argparse, json, time, getpass, os.path
import sys, getopt, argparse, json, time, getpass, os.path, logging
from util import load_json, save_json, init_list
from rvn_rpc import *

Expand Down
4 changes: 2 additions & 2 deletions contrib/generate_locale_pot
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,11 @@ files = subprocess.check_output(cmd, shell=True)
with open("app.fil", "wb") as f:
f.write(files)

print("Found {} files to translate".format(len(files.splitlines())))
logging.info("Found {} files to translate".format(len(files.splitlines())))

# Generate fresh translation template
if not os.path.exists('locale'):
os.mkdir('locale')
cmd = 'xgettext -s --from-code UTF-8 --language Python --no-wrap -f app.fil --output=locale/messages.pot'
print('Generate template')
logging.info('Generate template')
os.system(cmd)
5 changes: 3 additions & 2 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from PyQt5.QtWidgets import *
from PyQt5 import uic

import sys, getopt, argparse, time, getpass, os.path
import sys, getopt, argparse, time, getpass, os.path, logging

from ui.main_window import MainWindow

Expand All @@ -26,7 +26,8 @@
#Finally init/run main window
window = MainWindow()
window.show()

logging.info("App Startup")

error = None
try:
app.exec_()
Expand Down
22 changes: 10 additions & 12 deletions rvn_rpc.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from PyQt5 import uic
from ui.ui_prompt import *

import sys, getopt, argparse, json, time, getpass, os, os.path, webbrowser
import sys, getopt, argparse, json, time, getpass, os, os.path, webbrowser, logging
from util import *


Expand Down Expand Up @@ -57,25 +57,23 @@ def do_rpc(method, log_error=True, **kwargs):
url = AppInstance.settings.rpc_url()
resp = post(url, json=req, timeout=10)
if resp.status_code != 200 and log_error:
print("RPC ==>", end="")
print(req)
print("RPC <== ERR:", end="")
print(resp.text)
logging.error("RPC ==> {}".format(req))
logging.error("RPC <== {}".format(resp.text))
if resp.status_code != 200:
return None
return json.loads(resp.text)["result"]
except TimeoutError:
if log_error:
#Any RPC timeout errors are totally fatal
print("RPC Timeout")
logging.error("RPC Timeout")
AppInstance.on_exit()
show_error("RPC Timeout", "Timeout contacting RPC")
exit(-1)
return None
else:
return None
except:
print("RPC Error")
except Exception as ex:
logging.error(ex)
return None

def decode_full(txid):
Expand All @@ -87,10 +85,10 @@ def decode_full(txid):
#TODO: Better way of handling full decode
tx_url = "https://rvnt.cryptoscope.io/api/getrawtransaction/?txid={}&decode=1" if rpc["testnet"]\
else "https://rvn.cryptoscope.io/api/getrawtransaction/?txid={}&decode=1"
print("Query Full: {}".format(tx_url.format(txid)))
logging.info("Query Full: {}".format(tx_url.format(txid)))
resp = get(tx_url.format(txid))
if resp.status_code != 200:
print("Error fetching raw transaction")
logging.info("Error fetching raw transaction")
result = json.loads(resp.text)
return result

Expand All @@ -102,7 +100,7 @@ def requires_unlock():
def check_unlock(timeout = 10):
rpc = AppInstance.settings.rpc_details()
if requires_unlock():
print("Unlocking Wallet for {}s".format(timeout))
logging.info("Unlocking Wallet for {}s".format(timeout))
do_rpc("walletpassphrase", passphrase=rpc["unlock"], timeout=timeout)

def dup_transaction(tx, vins=[], vouts={}):
Expand All @@ -126,7 +124,7 @@ def search_swap_tx(utxo):
if ("txid" in tx_vin and "vout" in tx_vin) and \
(tx_vin["txid"] == txid and tx_vin["vout"] == vout):
return tx
print("Unable to find transaction for completed swap")
logging.info("Unable to find transaction for completed swap")
return None #If we don't find it 10 blocks back, who KNOWS what happened to it

def asset_details(asset_name):
Expand Down
10 changes: 5 additions & 5 deletions server_connection.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from PyQt5.QtWidgets import *
from PyQt5 import uic

import sys, getopt, argparse, json, time, getpass, os.path
import sys, getopt, argparse, json, time, getpass, os.path, logging
from util import *
from rvn_rpc import *

Expand All @@ -33,16 +33,16 @@ def exec_url(self, method, url, **kwargs):
try:
resp = get(url, params=req) if method == "GET" else post(url, json=req)
if resp.status_code != 200:
print("RTServer ==> {} {} {}".format(method, url, req))
print("RTServer <== {}".format(resp.text))
logging.error("RTServer ==> {} {} {}".format(method, url, req))
logging.error("RTServer <== {}".format(resp.text))
j_resp = json.loads(resp.text)
if "error" in j_resp and j_resp["error"]:
print("RT Error: ", resp.text)
logging.error(resp.text)
return None
else:
return j_resp
except (Exception) as e:
print("RT Server Error ", e)
logging.error(e)
return None

def do_get(self, url, **kwargs):
Expand Down
4 changes: 2 additions & 2 deletions swap_trade.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from PyQt5.QtWidgets import *
from PyQt5 import uic

import sys, getopt, argparse, json, time, getpass, os.path
import sys, getopt, argparse, json, time, getpass, os.path, logging
from util import *
from rvn_rpc import *

Expand Down Expand Up @@ -125,7 +125,7 @@ def setup_trade(self, max_add=None):
if max_add:
num_create = min(max_add, num_create)
quantity_required = self.in_quantity * num_create
print("Setting up trade for {} missing. Max add: {}. Required Qty: {}".format(num_create, max_add, quantity_required))
logging.info("Setting up trade for {} missing. Max add: {}. Required Qty: {}".format(num_create, max_add, quantity_required))

#Get a distinct list of addresses to use for deposits
addr_list = AppInstance.wallet.addresses.get_address_set(num_create + 2)
Expand Down
Loading

0 comments on commit de1d95b

Please sign in to comment.