add debug_gui_notifications; use encode instead of cache

This commit is contained in:
Alexey Avramov 2019-07-14 01:30:29 +09:00
parent 1ade5ca49f
commit f70a65c8f0
3 changed files with 57 additions and 51 deletions

40
nohang
View File

@ -16,6 +16,15 @@ from signal import signal, SIGKILL, SIGTERM, SIGINT, SIGQUIT, SIGHUP
# define functions
def encoder(string):
"""
"""
encoded = ''
for i in string:
encoded += str(ord(i)) + ':'
return encoded[:-1]
def get_swap_threshold_tuple(string):
# re (Num %, True) or (Num KiB, False)
"""Returns KiB value if abs val was set in config, or tuple with %"""
@ -867,26 +876,13 @@ def send_notify_etc(pid, name, command):
def send_notification(title, body):
"""
"""
split_by = '#' * 16
cmd = '{} "--euid={}" "--debug={}" "--title={}" "--body={}" &'.format(
notify_helper_path,
self_uid,
debug_gui_notifications,
title,
encoder(body))
t000 = time()
path_to_cache = '/dev/shm/nohang_notify_cache_uid{}_time{}'.format(
str(self_uid), t000
)
text = '{}{}{}'.format(title, split_by, body)
try:
with open(path_to_cache, 'w') as f:
f.write(text)
os.chmod(path_to_cache, 0o600)
except OSError:
log('OSError while send notification '
'(No space left on device: /dev/shm)')
return None
cmd = '{} --uid {} --time {} &'.format(notify_helper_path, self_uid, t000)
exe(cmd)
@ -2414,6 +2410,7 @@ gui_notifications = conf_parse_bool('gui_notifications')
decrease_oom_score_adj = conf_parse_bool('decrease_oom_score_adj')
ignore_psi = conf_parse_bool('ignore_psi')
ignore_zram = conf_parse_bool('ignore_zram')
debug_gui_notifications = conf_parse_bool('debug_gui_notifications')
(mem_min_sigterm_kb, mem_min_sigterm_mb, mem_min_sigterm_percent
@ -2937,6 +2934,8 @@ if print_config:
log(' min_badness: {}'.format(min_badness))
log(' min_delay_after_sigterm: {} sec'.format(min_delay_after_sigterm))
log(' post_zombie_delay: {} sec'.format(post_zombie_delay))
log(' victim_cache_time: {} sec'.format(victim_cache_time))
log(' decrease_oom_score_adj: {}'.format(decrease_oom_score_adj))
log(' oom_score_adj_max: {}'.format(oom_score_adj_max))
@ -2998,7 +2997,7 @@ if print_config:
else:
log(' (not set)')
log('6. Customize corrective actions.')
log('6. Customize corrective actions')
if len(soft_actions_list) > 0:
log(' Match by: regexp: command: ')
@ -3033,6 +3032,7 @@ if print_config:
log(' print_victim_info: {}'.format(print_victim_info))
log(' print_victim_cmdline: {}'.format(print_victim_cmdline))
log(' max_ancestry_depth: {}'.format(max_ancestry_depth))
log(' debug_gui_notifications: {}'.format(debug_gui_notifications))
log(' separate_log: {}'.format(separate_log))
log(' psi_debug: {}'.format(psi_debug))

View File

@ -267,12 +267,12 @@ oom_score_adj_max = 0
- OOM prevention results and
- low memory warnings
gui_notifications = False
gui_notifications = True
Enable GUI notifications about the low level of available memory.
Valid values are True and False.
gui_low_memory_warnings = False
gui_low_memory_warnings = True
Execute the command instead of sending GUI notifications if the value is
not empty line. For example:
@ -305,7 +305,7 @@ min_time_between_warnings = 20
Display the configuration when the program starts.
Valid values are True and False.
print_config = False
print_config = True
Print memory check results.
Valid values are True and False.
@ -337,7 +337,9 @@ print_victim_info = True
print_victim_cmdline = False
max_ancestry_depth = 5
max_ancestry_depth = 4
debug_gui_notifications = False
separate_log = False

View File

@ -2,7 +2,15 @@
# print('Starting nohang_notify_helper')
debug = True
def decoder(string):
"""
"""
decoded = ''
for i in string.split(':'):
decoded += chr(int(i))
return decoded
def write(path, string):
"""
@ -118,9 +126,24 @@ except OSError:
exit(1)
_, uid, debug, title, body = argv
uid = uid.partition('--euid=')[2]
debug = debug.partition('--debug=')[2]
if debug == 'True':
debug = True
else:
debug = False
title = title.partition('--title=')[2]
body = decoder(body.partition('--body=')[2])
if len(argv) != 5:
print('nohang_notify_helper: invalid input')
exit()
exit(1)
with open('/proc/meminfo') as f:
@ -132,29 +155,10 @@ with open('/proc/meminfo') as f:
else:
wait_time = 2
if debug:
print('nohang_notify_helper: wait_time:', wait_time)
print('nohang_notify_helper: wait_time:', wait_time, 'sec')
split_by = '#' * 16
uid = argv[2]
timestamp = argv[4]
path_to_cache = '/dev/shm/nohang_notify_cache_uid{}_time{}'.format(
uid, timestamp
)
try:
title, body = rfile(path_to_cache).split(split_by)
except FileNotFoundError:
print('nohang_notify_helper: FileNotFoundError')
exit(1)
remove(path_to_cache)
if uid != '0':
cmd = ['notify-send', '--icon=dialog-warning', title, body]
@ -182,10 +186,10 @@ if list_len > 0:
for i in list_with_envs:
if debug:
print('Send a GUI notification:\n ',
'title: ', [title],
'\n body: ', [body],
'\n user/env:', i
)
'title: ', [title],
'\n body: ', [body],
'\n user/env:', i
)
# iterating over logged-in users
for i in list_with_envs: