1
0
Fork 0
dotfiles/files/.local/bin/motd

156 lines
4.3 KiB
Plaintext
Raw Normal View History

2018-05-14 19:12:06 +00:00
#!/usr/bin/env python3
import math
import shutil
import sys
import os
import re
from subprocess import check_call, DEVNULL, CalledProcessError
try:
import psutil
except:
pass
2018-05-14 19:12:06 +00:00
try:
from pyfiglet import figlet_format
except ImportError:
def figlet_format(string, *args, **kwargs):
return string + '\n'
term_r, term_c = os.popen('stty size', 'r').read().split()
class Termutils:
BLACK = '\33[30m'
RED = '\33[31m'
GREEN = '\33[32m'
YELLOW = '\33[33m'
BLUE = '\33[34m'
MAGENTA = '\33[35m'
CYAN = '\33[36m'
WHITE = '\33[37m'
GREY = '\33[30;1m'
DISABLE = '\033[0m'
2018-10-25 22:08:31 +00:00
HOSTNAME_COLOR = '\033[38;5;%sm' % os.environ.get('ZSH_THEME_HOSTNAME_COLOR', '004')
2018-05-14 19:12:06 +00:00
PADDING = ' '
@staticmethod
def print_padded(*arg, **kwarg):
print(Termutils.PADDING, end='')
print(*arg, **kwarg)
@staticmethod
def print_progress_bar(percent, label='', length=60):
percent_color = Termutils.GREEN
bar = '['
for i in range(0, length):
if i >= math.ceil(percent * length):
bar += Termutils.GREY
elif i == 0:
bar += Termutils.GREEN
elif i == math.ceil(length * 0.6):
bar += Termutils.YELLOW
percent_color = Termutils.YELLOW
2018-05-14 20:06:59 +00:00
elif i == math.ceil(length * 0.9):
2018-05-14 19:12:06 +00:00
bar += Termutils.RED
percent_color = Termutils.RED
bar += '='
bar += '{}]{}{:7.2%}{} {}'.format(
Termutils.DISABLE,
percent_color,
percent,
Termutils.DISABLE,
label
)
Termutils.print_padded(bar)
def to_gb(bytes_count):
return bytes_count/1024/1024/1024
def print_hostname():
print(
2018-10-25 22:08:31 +00:00
Termutils.HOSTNAME_COLOR
2018-05-14 19:12:06 +00:00
+ figlet_format(os.uname()[1], 'slant')
+ Termutils.DISABLE
+ '\n'
+ os.popen('uptime').read().strip()
+ '\n'
)
def print_services():
if 'MOTD_SERVICES' in os.environ:
print('Services:')
2018-05-14 21:18:32 +00:00
services = list(set(os.environ['MOTD_SERVICES'].split()))
services.sort()
for service in services:
2018-05-14 19:12:06 +00:00
Termutils.print_padded('{:<15.15}'.format(service), end='')
try:
check_call(['systemctl', 'is-active', service], stdout=DEVNULL, stderr=DEVNULL)
2018-05-14 20:06:59 +00:00
print('{} ● active{}'.format(Termutils.GREEN, Termutils.DISABLE))
2018-05-14 19:12:06 +00:00
except CalledProcessError:
2018-05-14 20:06:59 +00:00
print('{} ● inactive{}'.format(Termutils.RED, Termutils.DISABLE))
2018-05-14 19:12:06 +00:00
print('')
def print_mem():
try:
memory = psutil.virtual_memory()
print('{:<18} {:6.2f}G used {:6.2f}G free {:6.2f}G total'.format(
'Memory:',
to_gb(memory.used),
to_gb(memory.free),
to_gb(memory.total)
))
Termutils.print_progress_bar(memory.used / memory.total)
print('')
except NameError:
pass
2018-05-14 19:12:06 +00:00
def print_fs():
print('Filesystems:')
with open('/etc/mtab') as mtab:
for line in mtab:
line = line.strip()
if line.startswith('/'):
mount_point = line.split()[1]
usage = shutil.disk_usage(mount_point)
Termutils.print_padded('{:<15.15} {:7.2f}G used {:7.2f}G free {:7.2f}G total'.format(
mount_point,
to_gb(usage.used),
to_gb(usage.free),
to_gb(usage.total)
))
Termutils.print_progress_bar(
percent=(usage.used / usage.total)
)
print('')
2018-05-14 20:06:59 +00:00
def print_tmux():
try:
check_call(['tmux', 'info'], stdout=DEVNULL, stderr=DEVNULL)
print('tmux:')
tmux_session = os.popen('tmux display-message -p "#S"', 'r').read().strip()
with os.popen('tmux list-sessions', 'r') as tmux_ls:
for line in tmux_ls:
line = line.strip()
if line.startswith(tmux_session) and 'TMUX' in os.environ:
print(Termutils.GREEN, end='')
Termutils.print_padded(
line
+ Termutils.DISABLE)
print('')
except CalledProcessError:
pass
2018-05-14 19:12:06 +00:00
print_hostname()
print_services()
print_mem()
print_fs()
2018-05-14 20:06:59 +00:00
print_tmux()