fix notify helper

This commit is contained in:
Alexey Avramov 2019-06-22 12:37:55 +09:00
parent c5c2d65ede
commit 1a234bb087
2 changed files with 68 additions and 64 deletions

View File

@ -267,7 +267,7 @@ 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.

View File

@ -1,6 +1,5 @@
#!/usr/bin/env python3
# print('Starting nohang_notify_helper')
@ -11,20 +10,6 @@ def write(path, string):
f.write(string)
try:
write('/proc/self/oom_score_adj', '0')
except Exception:
pass
try:
from os import listdir, path, remove
from subprocess import Popen, TimeoutExpired
from sys import argv
except OSError:
exit(1)
def rline1(path):
"""read 1st line from path."""
try:
@ -41,52 +26,6 @@ def rfile(path):
return f.read()
with open('/proc/meminfo') as f:
for line in f:
if line.startswith('SwapTotal'):
swap_total = int(line.split(':')[1][:-4])
if swap_total > 0:
wait_time = 8
else:
wait_time = 2
print('nohang_notify_helper: wait_time:', wait_time)
# print(argv)
# print(len(argv))
split_by = '#' * 16
uid = argv[2]
t000 = argv[4]
display_env = 'DISPLAY='
dbus_env = 'DBUS_SESSION_BUS_ADDRESS='
user_env = 'USER='
path_to_cache = '/dev/shm/nohang_notify_cache_uid{}_time{}'.format(
uid, t000
)
try:
title, body = rfile(path_to_cache).split(split_by)
except FileNotFoundError:
print('nohang_notify_helper: FileNotFoundError')
exit(1)
remove(path_to_cache)
def re_pid_environ(pid):
"""
read environ of 1 process
@ -118,7 +57,7 @@ def re_pid_environ(pid):
if i.startswith('HOME='):
# exclude Display Manager's user
if i.startswith('HOME=/var') or i.startswith('HOME=/root'):
if i.startswith('HOME=/var'):
return None
try:
@ -164,10 +103,75 @@ def root_notify_env():
return new_env
try:
write('/proc/self/oom_score_adj', '0')
except Exception:
pass
try:
from os import listdir, path, remove
from subprocess import Popen, TimeoutExpired
from sys import argv
except OSError:
exit(1)
if len(argv) != 5:
print('nohang_notify_helper: invalid input')
exit()
with open('/proc/meminfo') as f:
for line in f:
if line.startswith('SwapTotal'):
swap_total = int(line.split(':')[1][:-4])
if swap_total > 0:
wait_time = 10
else:
wait_time = 2
print('nohang_notify_helper: wait_time:', wait_time)
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]
print('nohang_notify_helper: run cmd:', cmd)
with Popen(cmd) as proc:
try:
proc.wait(timeout=wait_time)
except TimeoutExpired:
proc.kill()
print('nohang_notify_helper: TimeoutExpired')
exit()
display_env = 'DISPLAY='
dbus_env = 'DBUS_SESSION_BUS_ADDRESS='
user_env = 'USER='
list_with_envs = root_notify_env()
list_len = len(list_with_envs)
# if somebody logged in with GUI
if list_len > 0: