Source code for djangoaddicts.hostutils.views.gui

import datetime

import psutil
from dateutil.relativedelta import relativedelta
from django.shortcuts import render
from django.views.generic import View

# import forms


[docs] class ShowHost(View): """Display dashboard like page showing an overview of host data""" template_name = "hostutils/bs5/detail/detail_host.html" title = "Host Dashboard"
[docs] def get(self, request, *args, **kwargs): """allow get method""" now = datetime.datetime.now() context = {} context["title"] = self.title context["subtitle"] = psutil.os.uname()[1] context["cpu_count"] = psutil.cpu_count(logical=False) context["memory"] = psutil.virtual_memory() context["disk_usage"] = psutil.disk_usage("/") context["disk_io_counters"] = psutil.disk_io_counters() context["network"] = psutil.net_connections() context["pids"] = psutil.pids() boot_time = psutil.boot_time() diff = relativedelta(now, datetime.datetime.fromtimestamp(boot_time)) context["times"] = {} context["times"]["boot_time"] = datetime.datetime.fromtimestamp(boot_time) context["times"]["up_time"] = ( f"{diff.days} days, {diff.hours} hours, {diff.minutes} minutes, " f"{diff.seconds} seconds" ) context["platform"] = psutil.os.uname() return render(request, self.template_name, context=context)
[docs] class ShowHostCpu(View): """Display dashboard like page showing host cpu data""" template_name = "hostutils/bs5/detail/cpu.html" title = "CPU Dashboard"
[docs] def get(self, request, *args, **kwargs): """CPU Dashboard""" context = {} context["title"] = self.title context["subtitle"] = psutil.os.uname()[1] context["stats"] = psutil.cpu_stats() context["physical_count"] = psutil.cpu_count(logical=False) context["logical_count"] = psutil.cpu_count(logical=True) context["percent"] = psutil.cpu_percent(interval=None) context["times_list"] = psutil.cpu_times(percpu=True) context["times_percent_list"] = psutil.cpu_times_percent(percpu=True) context["percent_list"] = psutil.cpu_percent(interval=None, percpu=True) context["frequency_list"] = psutil.cpu_freq(percpu=True) context["cpu_range"] = list(range(psutil.cpu_count(logical=True))) cpu_data = {} for i in range(context["logical_count"]): cpu_data[i] = { "times": context["times_list"][i], "time_percent": context["times_percent_list"][i], "percent": context["percent_list"][i], "frequency": context["frequency_list"][i], } context["cpu_data"] = cpu_data context["load_avg_1"], context["load_avg_5"], context["load_avg_15"] = [ round(x / psutil.cpu_count() * 100, 2) for x in psutil.getloadavg() ] return render(request, self.template_name, context=context)
[docs] class ShowHostDisk(View): """Display dashboard like page showing host disk data""" template_name = "hostutils/bs5/detail/disk.html" title = "Disk Dashboard"
[docs] def get(self, request, *args, **kwargs): """allow get method""" context = {} context["title"] = self.title context["subtitle"] = psutil.os.uname()[1] context["usage"] = psutil.disk_usage("/") context["io_counters"] = psutil.disk_io_counters() context["partition_lists"] = psutil.disk_partitions() return render(request, self.template_name, context=context)
[docs] class ShowHostMemory(View): """Display dashboard like page showing host memory data""" template_name = "hostutils/bs5/detail/memory.html" title = "Memory Dashboard"
[docs] def get(self, request, *args, **kwargs): """allow get method""" context = {} context["title"] = self.title context["subtitle"] = psutil.os.uname()[1] context["virtual"] = psutil.virtual_memory() context["swap"] = psutil.swap_memory() return render(request, self.template_name, context=context)
[docs] class ShowHostNetwork(View): """Display dashboard like page showing host network data""" template_name = "hostutils/bs5/detail/network.html" title = "Network Dashboard"
[docs] def get(self, request, *args, **kwargs): """allow get method""" context = {} context["title"] = self.title context["subtitle"] = psutil.os.uname()[1] context["connection_list"] = psutil.net_connections() context["interface_list"] = psutil.net_if_addrs() context["stats_list"] = psutil.net_if_stats() context["counters"] = psutil.net_io_counters() return render(request, self.template_name, context=context)
[docs] class ShowHostProcesses(View): """Display dashboard like page showing host process data""" template_name = "hostutils/bs5/detail/processes.html" title = "Process Dashboard"
[docs] def get(self, request, *args, **kwargs): """allow get method""" context = {} context["title"] = self.title context["now"] = datetime.datetime.now() context["subtitle"] = psutil.os.uname()[1] counts = {"running": 0, "sleeping": 0, "idle": 0, "stopped": 0, "zombie": 0, "dead": 0, "disk-sleep": 0} process_list = [] for process in psutil.process_iter(): try: counts[process.status()] += 1 process_list.append( { "pid": process.pid, "name": process.name(), "status": process.status(), "started_at": process.create_time(), } ) except (psutil.NoSuchProcess, psutil.AccessDenied): pass context["counts"] = counts context["process_list"] = process_list return render(request, self.template_name, context=context)