You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

112 lines
5.3 KiB
Python

from jinja2 import Environment, FileSystemLoader
import subprocess
from datetime import datetime, timedelta
import os
import fnmatch
10 months ago
#create the log directory
10 months ago
path = "/home/xpub/www/html/tl-dr/log-books"
10 months ago
if not os.path.exists(path):
os.makedirs(path)
# TODO: check sorting of these files (should be chronological)
# Getting the dynamic variables
10 months ago
log_files = fnmatch.filter(os.listdir(path), '*.epub')
now = datetime.today()
next_report = now + timedelta(hours=3)
10 months ago
log_file_name = "TL;DR_" + now.strftime("%B %dth %Y")
def create_all_logs_file():
10 months ago
list_logs = subprocess.run(["ls", "/home/xpub/www/html/tl-dr/log-books"], capture_output=True)
10 months ago
with open("/home/xpub/www/html/tl-dr/log-books/all.txt", "w") as f:
print(list_logs.stdout.decode('UTF-8').strip(), file=f)
# Execute a command on the command line. Based = used for piped commands
def run_command(command, based = False):
result = subprocess.run(command, capture_output=True, input=based)
result.check_returncode()
stripped = result.stdout.decode('UTF-8').strip()
if "No entries" in stripped:
return ""
else:
return stripped
# Run all the commands for getting the logs, and assign to variables
print("start running the log commands");
last_user_added = subprocess.run(["sudo", "journalctl","_COMM=useradd","-r","-n", "1" , "--output-fields=MESSAGE"], capture_output=True)
last_user_added_name = run_command(['grep', '-Po', "(?<=name)\W*\K[^ ]*"], based=last_user_added.stdout)
users_created_today = run_command(["sudo", "journalctl", "-S","today","_COMM=useradd","-r","--output-fields=MESSAGE"]).splitlines()
since_last_boot = run_command(["uptime","-s"])
slb_date = datetime.strptime(since_last_boot, "%Y-%m-%d %H:%M:%S")
time_since_last_boot = now - slb_date
10 months ago
dpkg_date = now.strftime("%Y-%m-%d")
list_package_installs = subprocess.run(["grep","-E", dpkg_date + '.*install|install.*' + dpkg_date, "/var/log/dpkg.log"], capture_output=True).stdout.decode('UTF-8').splitlines()
10 months ago
list_package_upgrade = subprocess.run(["grep","-E", dpkg_date + '.*upgrade|upgrade.*' + dpkg_date, "/var/log/dpkg.log"], capture_output=True).stdout.decode('UTF-8').splitlines()
list_package_remove = subprocess.run(["grep","-E", dpkg_date + '.*remove|remove.*' + dpkg_date, "/var/log/dpkg.log"], capture_output=True).stdout.decode('UTF-8').splitlines()
device_info_grab = subprocess.run(["grep", 'Model' , "/proc/cpuinfo"], check=True, capture_output=True)
device_info = run_command(['awk', '-F:', '{ print $2}'], based=device_info_grab.stdout)
ip_address_show = subprocess.run(["ip", "addr", "show", "end0"], check=True, capture_output=True)
ip_address = run_command(['awk', '$1 == "inet" {gsub(/\/.*$/, "", $2); print $2}' ], based=ip_address_show.stdout)
print("start running the service commands, this sometimes takes longer");
logins_today_log = subprocess.run(["sudo", "journalctl","_COMM=systemd-logind","-r" , "--output-fields=MESSAGE", "-S", "today", "-g", "'New session'" ], capture_output=True)
logins_today = run_command(['grep', '-v', "'Boot'"], based=logins_today_log.stdout)
kitchen_services = run_command(["sudo", "journalctl", "-S", "today", "-u", "kitchen-stove.service", "-u", "kitchen-bin.service", "-u", "kitchen-fridge.service", "-r", "-n"]).splitlines()
# loading the jinja template environment
print("Filling the template");
10 months ago
env = Environment(loader=FileSystemLoader("/home/xpub/www/html/tl-dr/templates"))
# loading the template (use template.jinja when generating the html webview)
template = env.get_template("book.jinja")
# rendering the template and storing the resultant text in variable output
output = template.render(
now = now.strftime("%B %dth %Y"),
next_report = next_report,
log_files = log_files,
last_user_added=last_user_added.stdout.decode('UTF-8'),
last_user_added_name=last_user_added_name,
users_created_today=users_created_today,
since_last_boot=since_last_boot,
10 months ago
list_package_installs=list_package_installs,
list_package_upgrade=list_package_upgrade,
list_package_remove=list_package_remove,
device_info=device_info,
days_since_last_boot = time_since_last_boot.days,
kitchen_services = kitchen_services,
ip_address = ip_address,
logins_today = logins_today,
list_groups = run_command(["getent","group"]).splitlines(),
list_active_services = run_command(["sudo", "service", "--status-all"]).splitlines(),
debian_version = run_command(["cat", "/etc/debian_version"]),
kernel_version = run_command(["uname","-a"]),
hostname = run_command(["hostname","-i"]),
groups_created = run_command(["sudo", "journalctl", "-S","today","_COMM=groupadd","-r"]).splitlines(),
groups_removed = run_command(["sudo", "journalctl", "-S","today","_COMM=groupremove","-r"]).splitlines(),
user_modified = run_command(["sudo", "journalctl", "-S","today","_COMM=usermod","-r"]).splitlines(),
user_deleted = run_command(["sudo", "journalctl", "-S","today","_COMM=userdel","-r"]).splitlines(),
)
print("Output the files");
# Export the html as book.html, which is used as an input for pandoc
10 months ago
with open("/home/xpub/www/html/tl-dr/book.html", "w") as f:
print(output, file=f)
print("execute the bash script now to create the books");
10 months ago
subprocess.run(['sh', 'create_book.sh'])
print("Finished");
# At the moment, we are not storing logs in the log folder anymore
# with open(log_file_name, "w") as f:
# print(output, file=f)
10 months ago