mirror of
https://github.com/EDCD/EDMarketConnector.git
synced 2025-06-07 10:53:26 +03:00
Fully set up logging early, and use it in no_other_instance() checks
This commit is contained in:
parent
7ed90aee83
commit
0530eecc52
@ -57,6 +57,12 @@ if __name__ == '__main__': # noqa: C901
|
|||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
if args.trace:
|
||||||
|
logger.setLevel(logging.TRACE)
|
||||||
|
edmclogger.set_channels_loglevel(logging.TRACE)
|
||||||
|
else:
|
||||||
|
edmclogger.set_channels_loglevel(logging.DEBUG)
|
||||||
|
|
||||||
journal_dir: str = config.get('journaldir') or config.default_journal_dir
|
journal_dir: str = config.get('journaldir') or config.default_journal_dir
|
||||||
# This must be at top level to guarantee the file handle doesn't go out
|
# This must be at top level to guarantee the file handle doesn't go out
|
||||||
# of scope and get cleaned up, removing the lock with it.
|
# of scope and get cleaned up, removing the lock with it.
|
||||||
@ -68,22 +74,22 @@ if __name__ == '__main__': # noqa: C901
|
|||||||
|
|
||||||
:returns: True if we are the single instance, else False.
|
:returns: True if we are the single instance, else False.
|
||||||
"""
|
"""
|
||||||
print('no_other_instance_running(): Begin...')
|
logger.trace('Begin...')
|
||||||
|
|
||||||
if platform == 'win32':
|
if platform == 'win32':
|
||||||
print('no_other_instance_running(): win32, using msvcrt')
|
logger.trace('win32, using msvcrt')
|
||||||
# win32 doesn't have fcntl, so we have to use msvcrt
|
# win32 doesn't have fcntl, so we have to use msvcrt
|
||||||
import msvcrt
|
import msvcrt
|
||||||
|
|
||||||
print(f'no_other_instance_running(): journal_dir_lockfile = {journal_dir_lockfile!r}')
|
logger.trace(f'journal_dir_lockfile = {journal_dir_lockfile!r}')
|
||||||
|
|
||||||
locked = False
|
locked = False
|
||||||
try:
|
try:
|
||||||
msvcrt.locking(journal_dir_lockfile.fileno(), msvcrt.LK_NBLCK, 4096)
|
msvcrt.locking(journal_dir_lockfile.fileno(), msvcrt.LK_NBLCK, 4096)
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"Exception: Couldn't lock journal directory \"{journal_dir}\""
|
logger.info(f"Exception: Couldn't lock journal directory \"{journal_dir}\""
|
||||||
f", assuming another process running\n{e!r}")
|
f", assuming another process running\n{e!r}")
|
||||||
locked = True
|
locked = True
|
||||||
|
|
||||||
if locked:
|
if locked:
|
||||||
@ -169,24 +175,25 @@ if __name__ == '__main__': # noqa: C901
|
|||||||
return False # Another instance is running
|
return False # Another instance is running
|
||||||
|
|
||||||
else:
|
else:
|
||||||
print('no_other_instance_running(): NOT win32, using fcntl')
|
logger.trace('NOT win32, using fcntl')
|
||||||
try:
|
try:
|
||||||
import fcntl
|
import fcntl
|
||||||
|
|
||||||
except ImportError:
|
except ImportError:
|
||||||
print("Not on win32 and we have no fcntl, can't use a file lock! Allowing multiple instances!")
|
logger.warning("Not on win32 and we have no fcntl, can't use a file lock!"
|
||||||
|
"Allowing multiple instances!")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
fcntl.flock(journal_dir_lockfile, fcntl.LOCK_EX | fcntl.LOCK_NB)
|
fcntl.flock(journal_dir_lockfile, fcntl.LOCK_EX | fcntl.LOCK_NB)
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"Exception: Couldn't lock journal directory \"{journal_dir}\","
|
logger.info(f"Exception: Couldn't lock journal directory \"{journal_dir}\","
|
||||||
f"assuming another process running\n{e!r}")
|
f"assuming another process running\n{e!r}")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
journal_dir_lockfile.write(f"Path: {journal_dir}\nPID: {os_getpid()}\n")
|
journal_dir_lockfile.write(f"Path: {journal_dir}\nPID: {os_getpid()}\n")
|
||||||
|
|
||||||
print('no_other_instance_running(): Done')
|
logger.trace('Done')
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def already_running_popup():
|
def already_running_popup():
|
||||||
@ -215,10 +222,7 @@ if __name__ == '__main__': # noqa: C901
|
|||||||
if not no_other_instance_running():
|
if not no_other_instance_running():
|
||||||
# There's a copy already running.
|
# There's a copy already running.
|
||||||
|
|
||||||
# Logging isn't set up yet. # TODO: Actually it will be by now in `develop`
|
logger.info("An EDMarketConnector.exe process was already running, exiting.")
|
||||||
# We'll keep this print, but it will be over-written by any subsequent
|
|
||||||
# write by the already-running process.
|
|
||||||
print("An EDMarketConnector.exe process was already running, exiting.")
|
|
||||||
|
|
||||||
# To be sure the user knows, we need a popup
|
# To be sure the user knows, we need a popup
|
||||||
already_running_popup()
|
already_running_popup()
|
||||||
@ -1246,12 +1250,6 @@ Locale LC_TIME: {locale.getlocale(locale.LC_TIME)}'''
|
|||||||
|
|
||||||
# Run the app
|
# Run the app
|
||||||
if __name__ == "__main__": # noqa C901
|
if __name__ == "__main__": # noqa C901
|
||||||
if args.trace:
|
|
||||||
logger.setLevel(logging.TRACE)
|
|
||||||
edmclogger.set_channels_loglevel(logging.TRACE)
|
|
||||||
else:
|
|
||||||
edmclogger.set_channels_loglevel(logging.DEBUG)
|
|
||||||
|
|
||||||
logger.info(f'Startup v{appversion} : Running on Python v{sys.version}')
|
logger.info(f'Startup v{appversion} : Running on Python v{sys.version}')
|
||||||
logger.debug(f'''Platform: {sys.platform} {sys.platform == "win32" and sys.getwindowsversion()}
|
logger.debug(f'''Platform: {sys.platform} {sys.platform == "win32" and sys.getwindowsversion()}
|
||||||
argv[0]: {sys.argv[0]}
|
argv[0]: {sys.argv[0]}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user