#!/usr/bin/env python3
import sys
import psutil
from datetime import datetime
import shutil
from pathlib import Path
import sh
import os
import re
import getpass
# ANSI-коды для цветов
COLOR_GREY = "\033[1;90m"
COLOR_REDLIGHT = "\033[1;91m"
COLOR_IP = "\033[1;34m"
COLOR_TIME = "\033[1;32m"
COLOR_RED = "\033[1;31m"
COLOR_RESET = "\033[0m"
# Получаем информацию о последнем входе
last_login_info = os.popen(f"last -n 1 {getpass.getuser()}").readline().strip()
try:
# Убираем `still logged in`, если он есть
cleaned_login_info = last_login_info.replace("still logged in", "").strip()
# Проверяем IP-адрес через `last`
ip_match = re.search(r"(\d+\.\d+\.\d+\.\d+)", cleaned_login_info)
if ip_match:
ip_address = ip_match.group(1)
else:
# Если IP не найден, проверяем переменную окружения $SSH_CLIENT
ssh_client = os.environ.get("SSH_CLIENT", "").split()
ip_address = ssh_client[0] if ssh_client else "Unknown IP"
# Извлекаем дату и время
date_match = re.search(r"(\w{3}) (\w{3})\s+(\d{1,2})\s+(\d{2}:\d{2})", cleaned_login_info)
if date_match:
month_abbr, day, time = date_match.group(2), date_match.group(3), date_match.group(4)
year = datetime.now().year # Используем текущий год
last_login_time = datetime.strptime(f"{month_abbr} {day} {year} {time}", "%b %d %Y %H:%M")
formatted_date = last_login_time.strftime("%d/%m/%Y %H:%M:%S")
else:
formatted_date = "Unknown Date"
except Exception:
formatted_date = "Unknown Date"
ip_address = "Unknown IP"
# Вывод результата
print(f"{COLOR_GREY}Last login.....{COLOR_RESET}: {COLOR_RED}{formatted_date}{COLOR_RESET} {COLOR_GREY}from{COLOR_RESET} {COLOR_IP}{ip_address}{COLOR_RESET}")
# Дополнительная информация
uptime = sh.uptime('-p')
lastboot = datetime.fromtimestamp(psutil.boot_time())
vmem = psutil.virtual_memory()
drv = Path('~').expanduser().anchor
du = shutil.disk_usage(drv)
swap = psutil.swap_memory()
# Исправленный вывод с цветами
print(f"{COLOR_GREY}Last Boot......{COLOR_RESET}: {COLOR_TIME}{lastboot.strftime('%d/%m/%Y %H:%M:%S')}{COLOR_RESET}")
print(f"{COLOR_GREY}Memory.........{COLOR_RESET}: {vmem.available // 1000000} MB (Free) / {vmem.total // 1000000} MB (Total)")
print(f"{COLOR_GREY}Disk Space.....{COLOR_RESET}: {du.free // 1000000000} GB of {du.total // 1000000000} GB on {drv}")
print(f"{COLOR_GREY}Swap Space.....{COLOR_RESET}: {swap.free // 1000000} MB (Free) / {swap.total // 1000000} MB (Total)")
print(f"{COLOR_GREY}Uptime.........{COLOR_RESET}: {COLOR_TIME}{uptime.strip()}{COLOR_RESET}")