forked from infra/ansible
updates-uptimes: Add dynamic uptime for main data. Fix cron (sigh 12h fix).
Signed-off-by: James Antill <james@and.org>
This commit is contained in:
parent
fd6828d7c8
commit
e29a37a23a
2 changed files with 42 additions and 18 deletions
|
|
@ -6,8 +6,9 @@
|
|||
# This is very helpful when doing upgrade+reboot runs, as we can easily see
|
||||
# what has/hasn't been upgraded and/or rebooted.
|
||||
|
||||
# Examples: ($0 = updates-uptime-cmd.py)
|
||||
# $0 update = create the file and/or do backups
|
||||
# $0 diff [x] [y] = see the difference between the current state and backups
|
||||
# $0 diff [x] [y] = see the difference between the current state and history
|
||||
# $0 uptime [x] = see the current state, can be filtered for uptime >= x
|
||||
# $0 info [x] = see the current state, in long form, can be filtered by name
|
||||
# $0 host [x] = see the current state of a host(s), can be filtered by name
|
||||
|
|
@ -16,14 +17,13 @@
|
|||
# $0 history-keep = clenaup old history
|
||||
# $0 stats [x] = see stats, can specify a backup
|
||||
|
||||
# Examples:
|
||||
# $0 update ... run it daily or so as root.
|
||||
# $0 diff ... see what changed.
|
||||
# $0 list '*.stg.*' ... see what staging looks like.
|
||||
# $0 list '*copr*' ... see what copr looks like.
|
||||
# $0 history-keep 4 ... keep four days of history (including today)
|
||||
# $0 uptime 1d ... see what hasn't been rebooted in the last 24 hours.
|
||||
# $0 uptime 25w ... see what hasn't been rebooted in too damn long
|
||||
# $0 uptime 25w ... see what hasn't been rebooted in too damn long.
|
||||
# $0 update-daily-refresh ... daily update, including a new history, and
|
||||
# refresh the main file (so any old hosts aren't there anymore).
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
|
@ -53,6 +53,10 @@ conf_align_osinfo_small = True
|
|||
# Allow 9,999,999 updates, or try to work out the correct size.
|
||||
conf_fast_width_history = True
|
||||
|
||||
# Dynamically change the uptime of hosts based on the time since we looked
|
||||
# at their uptime. Only for the main file. Assume they are still up etc.
|
||||
conf_dynamic_main_uptime = True
|
||||
|
||||
# Remove suffix noise in names.
|
||||
conf_suffix_dns_replace = {
|
||||
'.fedoraproject.org' : '.<FP>.org',
|
||||
|
|
@ -396,10 +400,25 @@ def fname2lines(fname):
|
|||
def bfname2lines(b):
|
||||
return fname2lines(fname + '.' + b)
|
||||
|
||||
def _maybe_dynamic_uptime(data):
|
||||
""" Only call this for the main file data. """
|
||||
if not conf_dynamic_main_uptime:
|
||||
return data
|
||||
|
||||
mtime = os.path.getmtime(fname)
|
||||
since = int(time.time()) - int(mtime)
|
||||
data = list(sorted(data))
|
||||
for d1 in data:
|
||||
d1.uptime += since
|
||||
return data
|
||||
|
||||
def fname_datas():
|
||||
return _maybe_dynamic_uptime(lines2datas(fname2lines(fname)))
|
||||
|
||||
def fname1():
|
||||
if cmp_arg:
|
||||
return bfname2lines(cmp)
|
||||
return fname2lines(fname)
|
||||
return lines2datas(bfname2lines(cmp))
|
||||
return fname_datas()
|
||||
|
||||
_max_len_name = 0
|
||||
_max_len_rpms = 0 # Number of rpm updates via. _ui_int().
|
||||
|
|
@ -565,7 +584,7 @@ if cmd in ("backups", "hist", "history"):
|
|||
ident = _backup_today_identical()
|
||||
print("History:")
|
||||
last_name = "main"
|
||||
last_data = list(sorted(lines2datas(fname2lines(fname))))
|
||||
last_data = list(sorted(fname_datas()))
|
||||
last_suff = ""
|
||||
|
||||
# We _could_ open+read+etc each file, just to find out the max updates for
|
||||
|
|
@ -664,7 +683,7 @@ def _cli_match_host(data):
|
|||
|
||||
if cmd == "stats":
|
||||
_cmp_arg()
|
||||
data = lines2datas(fname1())
|
||||
data = fname1()
|
||||
if cmp_arg:
|
||||
sys.argv.pop(1)
|
||||
data = list(_cli_match_host(data))
|
||||
|
|
@ -775,10 +794,9 @@ if cmd == "stats":
|
|||
_ui_osinfo(a[2])))
|
||||
_explain_ui_name()
|
||||
|
||||
def _print_info(host, lines):
|
||||
def _print_info(host, data):
|
||||
hosts = []
|
||||
for x in lines:
|
||||
x = line2data(x)
|
||||
for x in data:
|
||||
if fnmatch.fnmatch(x.name, host):
|
||||
hosts.append(x)
|
||||
if not hosts:
|
||||
|
|
@ -801,7 +819,7 @@ if cmd in ("host", "info"):
|
|||
if len(sys.argv) >= 2 and sys.argv[1] == "all":
|
||||
for b in backups:
|
||||
print("Backup:", b)
|
||||
_print_info(host, bfname2lines(b))
|
||||
_print_info(host, lines2datas(bfname2lines(b)))
|
||||
sys.argv = [sys.argv[0]]
|
||||
print("Main:")
|
||||
_cmp_arg()
|
||||
|
|
@ -821,7 +839,7 @@ if cmd == "list":
|
|||
host = sys.argv.pop(1)
|
||||
|
||||
_cmp_arg()
|
||||
data = lines2datas(fname1())
|
||||
data = fname1()
|
||||
data = list(filter_name_datas(data, host))
|
||||
_max_update(data)
|
||||
_max_update_correct('')
|
||||
|
|
@ -835,7 +853,7 @@ if cmd == "uptime":
|
|||
age = parse_duration(sys.argv.pop(1))
|
||||
|
||||
_cmp_arg()
|
||||
data = lines2datas(fname1())
|
||||
data = fname1()
|
||||
data = list(filter_uptime_datas(data, age))
|
||||
_max_update(data)
|
||||
_max_update_correct('')
|
||||
|
|
@ -860,6 +878,8 @@ if cmd in ("diff", "diff-u"):
|
|||
print("diff %s %s" % (fn1, fn2), file=sys.stderr)
|
||||
data1 = list(sorted(lines2datas(data1)))
|
||||
data2 = list(sorted(lines2datas(data2)))
|
||||
if fn2 == fname:
|
||||
data2 = _maybe_dynamic_uptime(data2)
|
||||
hosts = _ui_int(len(data2))
|
||||
updates = _ui_int(sum(d.rpms for d in data2))
|
||||
ul = len(updates)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue