diff --git a/cpu_stats.py b/cpu_stats.py new file mode 100644 index 00000000..39838b51 --- /dev/null +++ b/cpu_stats.py @@ -0,0 +1,353 @@ +import argparse + +import os + +import matplotlib.pyplot as plt + +import datetime + +import base64 + +import logging + +import threading + +import time + + + +fh = '' + +fh_1 = '' + + + + + +def cpu_percent(cmd): + + global fh + + + + fh = os.popen(cmd) + + + + + +def memory_percent(cmd): + + global fh_1 + + + + fh_1 = os.popen(cmd) + + + + + +def htmlimage(data_4, data): + + html = open("log.html", 'w') + + + + img = data_4 + " " + data + + + + html.write(img) + + + + + +def main(): + + global duration + + + + parser = argparse.ArgumentParser() + + + + parser.add_argument("-t", "--duration", type=int, help="Enter the Time for which you want to run test (in minutes)") + + + + try: + + + + args = parser.parse_args() + + + + if (args.duration is not None): + + duration = args.duration + + + + except Exception as e: + + + + logging.exception(e) + + + + exit(2) + + + + endTime = datetime.datetime.now() + datetime.timedelta(seconds=duration) + + + + now = datetime.datetime.now() + + + + starttime = datetime.datetime(now.year, now.month, now.day, now.hour, now.minute, now.second) + + + + delta = datetime.timedelta(seconds=10) + + + + cpu_stats_data = {"system": [], "kernel": []} + + memory_stats_data = {"Total": [], "Used": []} + + + + iterations = duration * 60 + + + + cmd_1 = "top -bn1 -d 1 -n " + str(iterations) + " | grep '%Cpu(s)' " + + cmd_2 = "top -bn1 -d 1 -n " + str(iterations) + " | grep 'MiB Mem'" + + + + t1 = threading.Thread(target=cpu_percent, args=(cmd_1,)) + + t2 = threading.Thread(target=memory_percent, args=(cmd_2,)) + + t1.start() + + t2.start() + + + + t1.join() + + t2.join() + + + + time.sleep(10) + + + + output = fh.read() + fh.readline() + + output_1 = fh_1.read() + fh_1.readline() + + + + data = output.split('\n') + + data_1 = output_1.split('\n') + + + + for i in data: + + + + # print(i.split(',')) + + + + if len(i) > 3: + + cpu_stats_data["system"].append(float(i.split(',')[0].split()[1])) + + + + cpu_stats_data["kernel"].append(float(i.split(',')[1].split()[0])) + + + + # print(cpu_stats_data) + + + + for i in data_1: + + if len(i) > 3: + + memory_stats_data["Total"].append(float(i.split(',')[0].split()[3])) + + memory_stats_data["Used"].append(float(i.split(',')[2].split()[0])) + + + + # print(memory_stats_data) + + + + sample_times = [starttime + i * delta for i in range(len(cpu_stats_data["system"]))] + + + + label_locations = [d for d in sample_times if d.minute % 1 == 0] + + + + labels = [d.strftime('%Y-%m-%d %H:%M:%S') for d in label_locations] + + + + # print(labels) + + # print(sample_times) + + # thread creation + + + + # graphs + + #plot1 + + fig = plt.figure() + + ax = fig.add_subplot(1, 1, 1) + + ax.plot(sample_times, cpu_stats_data['system'], '-', lw=1, color='r', label="system cpu%") + + ax.plot(sample_times, cpu_stats_data['kernel'], '-', lw=1, color='b', label="kernel cpu%") + + ax.set_ylabel('CPU (%)', color='r') + + ax.set_xlabel('time (s)') + + plt.tight_layout() + + + + ax.set_ylim(0., max(cpu_stats_data['system']) + 20) + + plt.xticks(rotation='vertical') + + + + fig.legend(["System CPU Utilization", "Kernel CPU Utilization"], loc='upper center') + + ax.grid() + + fig.savefig("cpu.png") + + + + #plot2 + + fig_1 = plt.figure() + + ax_1 = fig_1.add_subplot(1, 1, 1) + + ax_1.plot(sample_times, memory_stats_data["Total"], '-', lw=1, color='r', label="Total MEMORY AVAILABLE") + + ax_1.plot(sample_times, memory_stats_data["Used"], '-', lw=1, color='b', label="Total MEMORY USED") + + ax_1.set_ylabel('Total available', color='r') + + ax_1.set_xlabel('time (s)') + + plt.tight_layout() + + + + ax_1.set_ylim(0., max(memory_stats_data["Total"]) + 2000) + + plt.xticks(rotation='vertical') + + + + + + fig_1.legend(["TOTAL MEMORY AVAILABLE", "TOTAL MEMORY USED"], loc='upper center') + + + + ax_1.grid() + + + + fig_1.savefig("MEMORY.png") + + + + + + cmd_1 = "timeout 2s journalctl -p err --since '24 hour ago' > syslog.txt" + + fh_2 = os.system(cmd_1) + + fi_open = open("syslog.txt", "r+") + + out = fi_open.read() + + + + data_3 = out.split(" ") + + + + data_uri = base64.b64encode(open('cpu.png', 'rb').read()).decode('utf-8') + + data_uri_1 = base64.b64encode(open('MEMORY.png', 'rb').read()).decode('utf-8') + + data_a = ''.format( + + data_uri) + " " + ''.format(data_uri_1) + + data_4 = "

" + data_a + "

" + + + + logs = " " + + for i in data_3: + + logs = logs + i + + + + data = "
" + logs + "
" + + htmlimage(data_4, data) + + + + + +if __name__ == '__main__': + + main() + + + + + + + +