Added thread locking to log output. Various housekeeping.

pull/4/head
Mark Qvist 2021-05-03 20:24:44 +02:00
rodzic 178c69e361
commit 54206d9101
4 zmienionych plików z 31 dodań i 14 usunięć

Wyświetl plik

@ -73,7 +73,7 @@ if __name__ == "__main__":
try: try:
parser = argparse.ArgumentParser(description="Reticulum example that demonstrates sending and receiving unencrypted broadcasts") parser = argparse.ArgumentParser(description="Reticulum example that demonstrates sending and receiving unencrypted broadcasts")
parser.add_argument("--config", action="store", default=None, help="path to alternative Reticulum config directory", type=str) parser.add_argument("--config", action="store", default=None, help="path to alternative Reticulum config directory", type=str)
parser.add_argument("--channel", action="store", default=None, help="path to alternative Reticulum config directory", type=str) parser.add_argument("--channel", action="store", default=None, help="broadcast channel name", type=str)
args = parser.parse_args() args = parser.parse_args()
if args.config: if args.config:

Wyświetl plik

@ -188,7 +188,7 @@ class Identity:
except Exception as e: except Exception as e:
RNS.log("Failed to load identity key", RNS.LOG_ERROR) RNS.log("Failed to load identity key", RNS.LOG_ERROR)
RNS.log("The contained exception was: "+str(e)) RNS.log("The contained exception was: "+str(e), RNS.LOG_ERROR)
return False return False
def loadPublicKey(self, key): def loadPublicKey(self, key):

Wyświetl plik

@ -42,15 +42,15 @@ class Resource:
HASHMAP_IS_EXHAUSTED = 0xFF HASHMAP_IS_EXHAUSTED = 0xFF
# Status constants # Status constants
NONE = 0x00 NONE = 0x00
QUEUED = 0x01 QUEUED = 0x01
ADVERTISED = 0x02 ADVERTISED = 0x02
TRANSFERRING = 0x03 TRANSFERRING = 0x03
AWAITING_PROOF = 0x04 AWAITING_PROOF = 0x04
ASSEMBLING = 0x05 ASSEMBLING = 0x05
COMPLETE = 0x06 COMPLETE = 0x06
FAILED = 0x07 FAILED = 0x07
CORRUPT = 0x08 CORRUPT = 0x08
@staticmethod @staticmethod
def accept(advertisement_packet, callback=None, progress_callback = None): def accept(advertisement_packet, callback=None, progress_callback = None):

Wyświetl plik

@ -3,6 +3,7 @@ import sys
import glob import glob
import time import time
import random import random
import threading
from .Reticulum import Reticulum from .Reticulum import Reticulum
from .Identity import Identity from .Identity import Identity
@ -35,6 +36,10 @@ logtimefmt = "%Y-%m-%d %H:%M:%S"
random.seed(os.urandom(10)) random.seed(os.urandom(10))
_always_override_destination = False
logging_lock = threading.Lock()
def loglevelname(level): def loglevelname(level):
if (level == LOG_CRITICAL): if (level == LOG_CRITICAL):
return "Critical" return "Critical"
@ -55,19 +60,31 @@ def loglevelname(level):
return "Unknown" return "Unknown"
def log(msg, level=3): def log(msg, level=3, _override_destination = False):
# TODO: not thread safe global _always_override_destination
if loglevel >= level: if loglevel >= level:
timestamp = time.time() timestamp = time.time()
logstring = "["+time.strftime(logtimefmt)+"] ["+loglevelname(level)+"] "+msg logstring = "["+time.strftime(logtimefmt)+"] ["+loglevelname(level)+"] "+msg
logging_lock.acquire()
if (logdest == LOG_STDOUT): if (logdest == LOG_STDOUT or _always_override_destination):
print(logstring) print(logstring)
logging_lock.release()
if (logdest == LOG_FILE and logfile != None): elif (logdest == LOG_FILE and logfile != None):
file = open(logfile, "a") try:
file.write(logstring+"\n") file = open(logfile, "a")
file.close() file.write(logstring+"\n")
file.close()
logging_lock.release()
except Exception as e:
logging_lock.release()
_always_override_destination = True
log("Exception occurred while writing log message to log file: "+str(e), LOG_CRITICAL)
log("Dumping future log events to console!", LOG_CRITICAL)
log(msg, level)
def rand(): def rand():
result = random.random() result = random.random()