mirror of
https://github.com/isjerryxiao/pacroller.git
synced 2024-11-26 01:30:42 +08:00
automatic reset-failed and implement status exit code
This commit is contained in:
parent
0cad72d401
commit
b43589a01e
2 changed files with 34 additions and 15 deletions
|
@ -35,6 +35,15 @@ class checkReport:
|
||||||
self._crit = crit or list()
|
self._crit = crit or list()
|
||||||
self._changes = changes or list()
|
self._changes = changes or list()
|
||||||
self._date = date
|
self._date = date
|
||||||
|
@property
|
||||||
|
def failed(self, extra_safe: bool = False) -> bool:
|
||||||
|
if extra_safe:
|
||||||
|
if self._info or self._warn or self._crit:
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
if self._warn or self._crit:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
def to_dict(self) -> dict:
|
def to_dict(self) -> dict:
|
||||||
return {'info': self._info, 'warn': self._warn, 'crit': self._crit, 'changes': self._changes, 'date': self._date}
|
return {'info': self._info, 'warn': self._warn, 'crit': self._crit, 'changes': self._changes, 'date': self._date}
|
||||||
def summary(self, verbose=True, show_package=False, indent=2) -> str:
|
def summary(self, verbose=True, show_package=False, indent=2) -> str:
|
||||||
|
|
|
@ -213,12 +213,12 @@ def main() -> None:
|
||||||
if getuid() != 0:
|
if getuid() != 0:
|
||||||
logger.error('you need to be root')
|
logger.error('you need to be root')
|
||||||
exit(1)
|
exit(1)
|
||||||
|
if prev_err := has_previous_error():
|
||||||
|
logger.error(f'Cannot continue, a previous error {prev_err} is still present. Please resolve this issue and run fail-reset.')
|
||||||
if SYSTEMD:
|
if SYSTEMD:
|
||||||
if _s := is_system_failed():
|
if _s := is_system_failed():
|
||||||
logger.error(f'systemd is in {_s} state, refused')
|
logger.error(f'systemd is in {_s} state, refused')
|
||||||
exit(11)
|
exit(11)
|
||||||
if prev_err := has_previous_error():
|
|
||||||
logger.error(f'Cannot continue, a previous error {prev_err} is still present. Please resolve this issue and run fail-reset.')
|
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
report = do_system_upgrade(args.debug)
|
report = do_system_upgrade(args.debug)
|
||||||
|
@ -228,13 +228,7 @@ def main() -> None:
|
||||||
write_db(None, e)
|
write_db(None, e)
|
||||||
raise
|
raise
|
||||||
else:
|
else:
|
||||||
exc = None
|
exc = CheckFailed('manual inspection required') if report.failed else None
|
||||||
if EXTRA_SAFE:
|
|
||||||
if report._info or report._warn or report._crit:
|
|
||||||
exc = CheckFailed('manual inspection required')
|
|
||||||
else:
|
|
||||||
if report._warn or report._crit:
|
|
||||||
exc = CheckFailed('manual inspection required')
|
|
||||||
write_db(report, exc)
|
write_db(report, exc)
|
||||||
if exc:
|
if exc:
|
||||||
exit(2)
|
exit(2)
|
||||||
|
@ -250,30 +244,46 @@ def main() -> None:
|
||||||
)
|
)
|
||||||
except subprocess.CalledProcessError as e:
|
except subprocess.CalledProcessError as e:
|
||||||
logger.error(f'needrestart failed with {e.returncode=} {e.output=}')
|
logger.error(f'needrestart failed with {e.returncode=} {e.output=}')
|
||||||
exc = NeedrestartFailed(f'{e.returncode=}')
|
write_db(None, NeedrestartFailed(f'{e.returncode=}'))
|
||||||
write_db(None, exc)
|
|
||||||
exit(2)
|
exit(2)
|
||||||
else:
|
else:
|
||||||
logger.debug(f'needrestart {p.stdout=}')
|
logger.debug(f'needrestart {p.stdout=}')
|
||||||
|
|
||||||
elif args.action == 'status':
|
elif args.action == 'status':
|
||||||
count = 0
|
count = 0
|
||||||
|
failed = False
|
||||||
for entry in read_db():
|
for entry in read_db():
|
||||||
if report_dict := entry.get('report'):
|
if report_dict := entry.get('report'):
|
||||||
count += 1
|
count += 1
|
||||||
report = checkReport(**report_dict)
|
report = checkReport(**report_dict)
|
||||||
|
if count == 1:
|
||||||
|
failed = report.failed
|
||||||
print(report.summary(verbose=args.verbose, show_package=True))
|
print(report.summary(verbose=args.verbose, show_package=True))
|
||||||
if count >= args.max:
|
if count >= args.max and args.max > 0:
|
||||||
break
|
break
|
||||||
print()
|
print()
|
||||||
|
if failed:
|
||||||
|
exit(2)
|
||||||
elif args.action == 'fail-reset':
|
elif args.action == 'fail-reset':
|
||||||
|
if getuid() != 0:
|
||||||
|
logger.error('you need to be root')
|
||||||
|
exit(1)
|
||||||
|
try:
|
||||||
|
subprocess.run(["systemctl", "is-failed", "pacroller"],
|
||||||
|
stdin=subprocess.DEVNULL,
|
||||||
|
stdout=subprocess.DEVNULL,
|
||||||
|
stderr=subprocess.DEVNULL,
|
||||||
|
encoding='utf-8',
|
||||||
|
timeout=20
|
||||||
|
)
|
||||||
|
except subprocess.CalledProcessError:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
subprocess.run(["systemctl", "reset-failed", "pacroller"], timeout=20)
|
||||||
if SYSTEMD:
|
if SYSTEMD:
|
||||||
if _s := is_system_failed():
|
if _s := is_system_failed():
|
||||||
logger.error(f'systemd is in {_s} state, refused')
|
logger.error(f'systemd is in {_s} state, refused')
|
||||||
exit(11)
|
exit(11)
|
||||||
if getuid() != 0:
|
|
||||||
logger.error('you need to be root')
|
|
||||||
exit(1)
|
|
||||||
if prev_err := has_previous_error():
|
if prev_err := has_previous_error():
|
||||||
write_db(None)
|
write_db(None)
|
||||||
logger.info(f'reset previous error {prev_err}')
|
logger.info(f'reset previous error {prev_err}')
|
||||||
|
|
Loading…
Reference in a new issue