Rename log functions for consistency
This commit is contained in:
parent
5e88ee5819
commit
943f5d35c5
|
@ -9,13 +9,13 @@ from threading import Thread
|
||||||
log = logging.getLogger('mynode')
|
log = logging.getLogger('mynode')
|
||||||
log.setLevel(logging.INFO)
|
log.setLevel(logging.INFO)
|
||||||
|
|
||||||
def print_and_log(msg):
|
def log_message(msg):
|
||||||
global log
|
global log
|
||||||
print(msg)
|
print(msg)
|
||||||
log.info(msg)
|
log.info(msg)
|
||||||
|
|
||||||
def set_clone_state(state):
|
def set_clone_state(state):
|
||||||
print_and_log("Clone State: {}".format(state))
|
log_message("Clone State: {}".format(state))
|
||||||
try:
|
try:
|
||||||
with open("/tmp/.clone_state", "w") as f:
|
with open("/tmp/.clone_state", "w") as f:
|
||||||
f.write(state)
|
f.write(state)
|
||||||
|
@ -35,7 +35,7 @@ def reset_clone_rescan():
|
||||||
os.system("rm /tmp/.clone_rescan")
|
os.system("rm /tmp/.clone_rescan")
|
||||||
|
|
||||||
def set_clone_error(error_msg):
|
def set_clone_error(error_msg):
|
||||||
print_and_log("Clone Error: {}".format(error_msg))
|
log_message("Clone Error: {}".format(error_msg))
|
||||||
try:
|
try:
|
||||||
with open("/tmp/.clone_error", "w") as f:
|
with open("/tmp/.clone_error", "w") as f:
|
||||||
f.write(error_msg)
|
f.write(error_msg)
|
||||||
|
@ -57,7 +57,7 @@ def get_drive_size(drive):
|
||||||
size = int(parts[3])
|
size = int(parts[3])
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
print_and_log(f"Drive {drive} size: {size}")
|
log_message(f"Drive {drive} size: {size}")
|
||||||
return size
|
return size
|
||||||
|
|
||||||
|
|
||||||
|
@ -131,12 +131,12 @@ def main():
|
||||||
|
|
||||||
# Detect drives
|
# Detect drives
|
||||||
drives = find_drives()
|
drives = find_drives()
|
||||||
print_and_log(f"Drives: {drives}")
|
log_message(f"Drives: {drives}")
|
||||||
|
|
||||||
# Check exactly two drives found
|
# Check exactly two drives found
|
||||||
drive_count = len(drives)
|
drive_count = len(drives)
|
||||||
if drive_count != 2:
|
if drive_count != 2:
|
||||||
print_and_log("Clone tool did not find 2 drives!")
|
log_message("Clone tool did not find 2 drives!")
|
||||||
set_clone_state("error")
|
set_clone_state("error")
|
||||||
set_clone_error("Clone tool needs 2 drives! Found {}.".format(drive_count))
|
set_clone_error("Clone tool needs 2 drives! Found {}.".format(drive_count))
|
||||||
wait_on_clone_error_dismiss()
|
wait_on_clone_error_dismiss()
|
||||||
|
@ -150,7 +150,7 @@ def main():
|
||||||
both_drives_have_mynode = False
|
both_drives_have_mynode = False
|
||||||
for d in drives:
|
for d in drives:
|
||||||
partitions = find_partitions_for_drive(d)
|
partitions = find_partitions_for_drive(d)
|
||||||
print_and_log(f"Drive {d} paritions: {partitions}")
|
log_message(f"Drive {d} paritions: {partitions}")
|
||||||
|
|
||||||
if len(partitions) == 0:
|
if len(partitions) == 0:
|
||||||
# No partition found - must be target drive since its empty
|
# No partition found - must be target drive since its empty
|
||||||
|
@ -189,7 +189,7 @@ def main():
|
||||||
mynode_drive = d
|
mynode_drive = d
|
||||||
target_found = True
|
target_found = True
|
||||||
else:
|
else:
|
||||||
print_and_log(f"myNode Partition Found: {p}")
|
log_message(f"myNode Partition Found: {p}")
|
||||||
mynode_drive = d
|
mynode_drive = d
|
||||||
mynode_found = True
|
mynode_found = True
|
||||||
else:
|
else:
|
||||||
|
@ -203,11 +203,11 @@ def main():
|
||||||
target_drive = d
|
target_drive = d
|
||||||
b = round(time.time() * 1000)
|
b = round(time.time() * 1000)
|
||||||
total_time = b - a
|
total_time = b - a
|
||||||
print_and_log(f"Checked partition {p} in {total_time}ms")
|
log_message(f"Checked partition {p} in {total_time}ms")
|
||||||
|
|
||||||
# Successfully found source and target, wait for confirm
|
# Successfully found source and target, wait for confirm
|
||||||
print_and_log(f"Source Drive: {mynode_drive}")
|
log_message(f"Source Drive: {mynode_drive}")
|
||||||
print_and_log(f"Target Drive: {target_drive}")
|
log_message(f"Target Drive: {target_drive}")
|
||||||
if both_drives_have_mynode:
|
if both_drives_have_mynode:
|
||||||
os.system("touch /tmp/.clone_target_drive_has_mynode")
|
os.system("touch /tmp/.clone_target_drive_has_mynode")
|
||||||
os.system(f"echo {mynode_drive} > /tmp/.clone_source")
|
os.system(f"echo {mynode_drive} > /tmp/.clone_source")
|
||||||
|
@ -228,7 +228,7 @@ def main():
|
||||||
os.system(f"umount /dev/{target_drive}1")
|
os.system(f"umount /dev/{target_drive}1")
|
||||||
|
|
||||||
# Update partitions (removes all + makes new without removing data)
|
# Update partitions (removes all + makes new without removing data)
|
||||||
print_and_log("Formatting Drive...")
|
log_message("Formatting Drive...")
|
||||||
os.system("echo 'Formatting drive...' > /tmp/.clone_progress")
|
os.system("echo 'Formatting drive...' > /tmp/.clone_progress")
|
||||||
subprocess.check_output(f"wipefs -a /dev/{target_drive}", shell=True)
|
subprocess.check_output(f"wipefs -a /dev/{target_drive}", shell=True)
|
||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
|
@ -236,13 +236,13 @@ def main():
|
||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
|
|
||||||
# Make new partition on dest drive
|
# Make new partition on dest drive
|
||||||
print_and_log("Creating Partition...")
|
log_message("Creating Partition...")
|
||||||
os.system("echo 'Creating Partition...' > /tmp/.clone_progress")
|
os.system("echo 'Creating Partition...' > /tmp/.clone_progress")
|
||||||
subprocess.check_output(f"mkfs.ext4 -F -L myNode /dev/{target_drive}1", shell=True)
|
subprocess.check_output(f"mkfs.ext4 -F -L myNode /dev/{target_drive}1", shell=True)
|
||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
|
|
||||||
# Mounting Partitions
|
# Mounting Partitions
|
||||||
print_and_log("Mounting Partitions...")
|
log_message("Mounting Partitions...")
|
||||||
os.system("echo 'Mounting Partitions...' > /tmp/.clone_progress")
|
os.system("echo 'Mounting Partitions...' > /tmp/.clone_progress")
|
||||||
subprocess.check_output(f"mount /dev/{mynode_drive}1 /tmp/drive1", shell=True)
|
subprocess.check_output(f"mount /dev/{mynode_drive}1 /tmp/drive1", shell=True)
|
||||||
subprocess.check_output(f"mount /dev/{target_drive}1 /tmp/drive2", shell=True)
|
subprocess.check_output(f"mount /dev/{target_drive}1 /tmp/drive2", shell=True)
|
||||||
|
@ -254,7 +254,7 @@ def main():
|
||||||
#cmd = ["dd","bs=512",f"if=/dev/zero",f"of=/dev/null","count=5999999","conv=sync,noerror"]
|
#cmd = ["dd","bs=512",f"if=/dev/zero",f"of=/dev/null","count=5999999","conv=sync,noerror"]
|
||||||
cmd = ["rsync","-avxHAX","--info=progress2",f"/tmp/drive1/","/tmp/drive2/"]
|
cmd = ["rsync","-avxHAX","--info=progress2",f"/tmp/drive1/","/tmp/drive2/"]
|
||||||
clone_process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
clone_process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||||
print_and_log("CLONE PID: {}".format(clone_process.pid))
|
log_message("CLONE PID: {}".format(clone_process.pid))
|
||||||
for l in clone_process.stdout:
|
for l in clone_process.stdout:
|
||||||
l = l.decode("utf-8")
|
l = l.decode("utf-8")
|
||||||
if 'xfr#' in l:
|
if 'xfr#' in l:
|
||||||
|
@ -271,32 +271,32 @@ def main():
|
||||||
out_fd.write(logline)
|
out_fd.write(logline)
|
||||||
out_fd.close()
|
out_fd.close()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print_and_log("Write Exception: " + str(e))
|
log_message("Write Exception: " + str(e))
|
||||||
|
|
||||||
while clone_process.poll() is None:
|
while clone_process.poll() is None:
|
||||||
time.sleep(5)
|
time.sleep(5)
|
||||||
print_and_log("Waiting on rsync exit...")
|
log_message("Waiting on rsync exit...")
|
||||||
|
|
||||||
print_and_log("CLONE RET CODE: {}".format(clone_process.returncode))
|
log_message("CLONE RET CODE: {}".format(clone_process.returncode))
|
||||||
if clone_process.returncode != 0:
|
if clone_process.returncode != 0:
|
||||||
# Clone had an error - log it
|
# Clone had an error - log it
|
||||||
if clone_process.stderr != None:
|
if clone_process.stderr != None:
|
||||||
for l in clone_process.stderr:
|
for l in clone_process.stderr:
|
||||||
print_and_log("CLONE STDERR: "+l.decode("utf-8"))
|
log_message("CLONE STDERR: "+l.decode("utf-8"))
|
||||||
if clone_process.stdout != None:
|
if clone_process.stdout != None:
|
||||||
for l in clone_process.stdout:
|
for l in clone_process.stdout:
|
||||||
print_and_log("CLONE STDOUT: "+l.decode("utf-8"))
|
log_message("CLONE STDOUT: "+l.decode("utf-8"))
|
||||||
set_clone_state("error")
|
set_clone_state("error")
|
||||||
set_clone_error("Clone failed with return code {}".format(clone_process.returncode))
|
set_clone_error("Clone failed with return code {}".format(clone_process.returncode))
|
||||||
wait_on_clone_error_dismiss()
|
wait_on_clone_error_dismiss()
|
||||||
return
|
return
|
||||||
|
|
||||||
print_and_log("CLONE IS COMPLETE")
|
log_message("CLONE IS COMPLETE")
|
||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
except subprocess.CalledProcessError as e:
|
except subprocess.CalledProcessError as e:
|
||||||
print_and_log("CalledProcessError")
|
log_message("CalledProcessError")
|
||||||
print_and_log(e.stderr)
|
log_message(e.stderr)
|
||||||
print_and_log(e.stdout)
|
log_message(e.stdout)
|
||||||
set_clone_state("error")
|
set_clone_state("error")
|
||||||
set_clone_error("Clone failed: {}".format(e))
|
set_clone_error("Clone failed: {}".format(e))
|
||||||
wait_on_clone_error_dismiss()
|
wait_on_clone_error_dismiss()
|
||||||
|
@ -309,8 +309,8 @@ def main():
|
||||||
|
|
||||||
# Complete - wait for reboot
|
# Complete - wait for reboot
|
||||||
set_clone_state("complete")
|
set_clone_state("complete")
|
||||||
print_and_log("Clone Complete!")
|
log_message("Clone Complete!")
|
||||||
print_and_log("Waiting for reboot...")
|
log_message("Waiting for reboot...")
|
||||||
while True:
|
while True:
|
||||||
time.sleep(60)
|
time.sleep(60)
|
||||||
|
|
||||||
|
@ -320,6 +320,6 @@ if __name__ == "__main__":
|
||||||
try:
|
try:
|
||||||
main()
|
main()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print_and_log("Exception: {}".format(str(e)))
|
log_message("Exception: {}".format(str(e)))
|
||||||
set_clone_error("Exception: {}".format(str(e)))
|
set_clone_error("Exception: {}".format(str(e)))
|
||||||
wait_on_clone_error_dismiss()
|
wait_on_clone_error_dismiss()
|
|
@ -55,13 +55,13 @@ def write_usb_devices_json():
|
||||||
## Utility Functions
|
## Utility Functions
|
||||||
################################
|
################################
|
||||||
|
|
||||||
def print_and_log(msg):
|
def log_message(msg):
|
||||||
global log
|
global log
|
||||||
print(msg)
|
print(msg)
|
||||||
log.info(msg)
|
log.info(msg)
|
||||||
|
|
||||||
def set_usb_extras_state(state):
|
def set_usb_extras_state(state):
|
||||||
print_and_log("USB Extras State: {}".format(state))
|
log_message("USB Extras State: {}".format(state))
|
||||||
try:
|
try:
|
||||||
with open("/tmp/.usb_extras_state", "w") as f:
|
with open("/tmp/.usb_extras_state", "w") as f:
|
||||||
f.write(state)
|
f.write(state)
|
||||||
|
@ -79,7 +79,7 @@ def get_drive_size(drive):
|
||||||
size = int(parts[3])
|
size = int(parts[3])
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
print_and_log(f"Drive {drive} size: {size}")
|
log_message(f"Drive {drive} size: {size}")
|
||||||
return size
|
return size
|
||||||
|
|
||||||
def mount_partition(partition, folder_name, permissions="ro"):
|
def mount_partition(partition, folder_name, permissions="ro"):
|
||||||
|
@ -216,17 +216,17 @@ class OpendimeHandler(UsbDeviceHandler):
|
||||||
content = f.read()
|
content = f.read()
|
||||||
if "This Opendime is fresh and unused. It hasn't picked a private key yet." in content:
|
if "This Opendime is fresh and unused. It hasn't picked a private key yet." in content:
|
||||||
self.state = "new"
|
self.state = "new"
|
||||||
print_and_log(" Opendime in state 'new'")
|
log_message(" Opendime in state 'new'")
|
||||||
|
|
||||||
if os.path.isfile(private_key_file):
|
if os.path.isfile(private_key_file):
|
||||||
with open(private_key_file) as f:
|
with open(private_key_file) as f:
|
||||||
content = f.read()
|
content = f.read()
|
||||||
if "SEALED" in content:
|
if "SEALED" in content:
|
||||||
self.state = "sealed"
|
self.state = "sealed"
|
||||||
print_and_log(" Opendime in state 'sealed'")
|
log_message(" Opendime in state 'sealed'")
|
||||||
else:
|
else:
|
||||||
self.state = "unsealed"
|
self.state = "unsealed"
|
||||||
print_and_log(" Opendime in state 'unsealed'")
|
log_message(" Opendime in state 'unsealed'")
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.state = "error_reading_opendime"
|
self.state = "error_reading_opendime"
|
||||||
|
@ -238,11 +238,11 @@ class OpendimeHandler(UsbDeviceHandler):
|
||||||
self.http_server_thread.start()
|
self.http_server_thread.start()
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
print_and_log("Error mounting partition for opendime")
|
log_message("Error mounting partition for opendime")
|
||||||
return False
|
return False
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
unmount_partition(self.folder_name)
|
unmount_partition(self.folder_name)
|
||||||
print_and_log("Opendime Start Exception: {}".format(str(e)))
|
log_message("Opendime Start Exception: {}".format(str(e)))
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def stop(self):
|
def stop(self):
|
||||||
|
@ -251,7 +251,7 @@ class OpendimeHandler(UsbDeviceHandler):
|
||||||
self.http_server.shutdown()
|
self.http_server.shutdown()
|
||||||
unmount_partition(self.folder_name)
|
unmount_partition(self.folder_name)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print_and_log("Opendime Stop Exception: {}".format(str(e)))
|
log_message("Opendime Stop Exception: {}".format(str(e)))
|
||||||
|
|
||||||
################################
|
################################
|
||||||
## check_usb_devices()
|
## check_usb_devices()
|
||||||
|
@ -267,47 +267,47 @@ def check_usb_devices():
|
||||||
|
|
||||||
# Detect drives
|
# Detect drives
|
||||||
drives = find_unmounted_drives()
|
drives = find_unmounted_drives()
|
||||||
print_and_log(f"Drives: {drives}")
|
log_message(f"Drives: {drives}")
|
||||||
|
|
||||||
# Check exactly one extra drive found
|
# Check exactly one extra drive found
|
||||||
drive_count = len(drives)
|
drive_count = len(drives)
|
||||||
if drive_count == 0:
|
if drive_count == 0:
|
||||||
print_and_log("No USB extras found.")
|
log_message("No USB extras found.")
|
||||||
else:
|
else:
|
||||||
set_usb_extras_state("processing")
|
set_usb_extras_state("processing")
|
||||||
for drive in drives:
|
for drive in drives:
|
||||||
# Check drive for partitions
|
# Check drive for partitions
|
||||||
drive = drives[0]
|
drive = drives[0]
|
||||||
partitions = find_partitions_for_drive(drive)
|
partitions = find_partitions_for_drive(drive)
|
||||||
print_and_log(f"Drive {drive} paritions: {partitions}")
|
log_message(f"Drive {drive} paritions: {partitions}")
|
||||||
|
|
||||||
num_partitions = len(partitions)
|
num_partitions = len(partitions)
|
||||||
if num_partitions == 0:
|
if num_partitions == 0:
|
||||||
print_and_log("No partitions found. Nothing to do.")
|
log_message("No partitions found. Nothing to do.")
|
||||||
elif num_partitions == 1:
|
elif num_partitions == 1:
|
||||||
# Process partition
|
# Process partition
|
||||||
partition = partitions[0]
|
partition = partitions[0]
|
||||||
print_and_log("One partition found! Scanning...")
|
log_message("One partition found! Scanning...")
|
||||||
if check_partition_for_opendime(partition):
|
if check_partition_for_opendime(partition):
|
||||||
print_and_log("Found Opendime!")
|
log_message("Found Opendime!")
|
||||||
opendime = OpendimeHandler(drive, partition)
|
opendime = OpendimeHandler(drive, partition)
|
||||||
if opendime.start():
|
if opendime.start():
|
||||||
add_usb_device(opendime)
|
add_usb_device(opendime)
|
||||||
else:
|
else:
|
||||||
opendime.stop()
|
opendime.stop()
|
||||||
else:
|
else:
|
||||||
print_and_log(f"Drive {drive} could not be detected.")
|
log_message(f"Drive {drive} could not be detected.")
|
||||||
else:
|
else:
|
||||||
print_and_log(f"{num_partitions} partitions found. Not sure what to do.")
|
log_message(f"{num_partitions} partitions found. Not sure what to do.")
|
||||||
|
|
||||||
# Successful scan post init or usb action detected, mark homepage refresh
|
# Successful scan post init or usb action detected, mark homepage refresh
|
||||||
os.system("touch /tmp/homepage_needs_refresh")
|
os.system("touch /tmp/homepage_needs_refresh")
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print_and_log("Exception: {}".format(str(e)))
|
log_message("Exception: {}".format(str(e)))
|
||||||
set_usb_extras_state("error")
|
set_usb_extras_state("error")
|
||||||
reset_usb_devices()
|
reset_usb_devices()
|
||||||
print_and_log("Caught exception. Delaying 30s.")
|
log_message("Caught exception. Delaying 30s.")
|
||||||
time.sleep(30)
|
time.sleep(30)
|
||||||
|
|
||||||
|
|
||||||
|
@ -328,29 +328,29 @@ def main():
|
||||||
monitor = pyudev.Monitor.from_netlink(context)
|
monitor = pyudev.Monitor.from_netlink(context)
|
||||||
monitor.filter_by(subsystem='usb')
|
monitor.filter_by(subsystem='usb')
|
||||||
# this is module level logger, can be ignored
|
# this is module level logger, can be ignored
|
||||||
print_and_log("Starting to monitor for usb")
|
log_message("Starting to monitor for usb")
|
||||||
monitor.start()
|
monitor.start()
|
||||||
print_and_log("Waiting on USB Event...")
|
log_message("Waiting on USB Event...")
|
||||||
set_usb_extras_state("waiting")
|
set_usb_extras_state("waiting")
|
||||||
for device in iter(monitor.poll, None):
|
for device in iter(monitor.poll, None):
|
||||||
print_and_log("")
|
log_message("")
|
||||||
print_and_log("Got USB event: %s", device.action)
|
log_message("Got USB event: %s", device.action)
|
||||||
if device.action == 'add':
|
if device.action == 'add':
|
||||||
check_usb_devices()
|
check_usb_devices()
|
||||||
else:
|
else:
|
||||||
# HANDLE DEVICE REMOVAL BETTER? This resets all and re-scans
|
# HANDLE DEVICE REMOVAL BETTER? This resets all and re-scans
|
||||||
reset_usb_devices()
|
reset_usb_devices()
|
||||||
check_usb_devices()
|
check_usb_devices()
|
||||||
print_and_log("Waiting on USB Event...")
|
log_message("Waiting on USB Event...")
|
||||||
set_usb_extras_state("waiting")
|
set_usb_extras_state("waiting")
|
||||||
|
|
||||||
|
|
||||||
@atexit.register
|
@atexit.register
|
||||||
def goodbye():
|
def goodbye():
|
||||||
print_and_log("ATEXIT: Resetting devices")
|
log_message("ATEXIT: Resetting devices")
|
||||||
unmount_partition("*")
|
unmount_partition("*")
|
||||||
reset_usb_devices()
|
reset_usb_devices()
|
||||||
print_and_log("ATEXIT: Done")
|
log_message("ATEXIT: Done")
|
||||||
|
|
||||||
# This is the main entry point for the program
|
# This is the main entry point for the program
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
@ -359,8 +359,8 @@ if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
set_usb_extras_state("error")
|
set_usb_extras_state("error")
|
||||||
print_and_log("Main Exception: {}".format(str(e)))
|
log_message("Main Exception: {}".format(str(e)))
|
||||||
print_and_log("Caught exception. Delaying 30s.")
|
log_message("Caught exception. Delaying 30s.")
|
||||||
unmount_partition("*")
|
unmount_partition("*")
|
||||||
reset_usb_devices()
|
reset_usb_devices()
|
||||||
time.sleep(30)
|
time.sleep(30)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user