-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.py
119 lines (89 loc) · 4.12 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import psutil
import time
from flask import Flask, jsonify, request
from threading import Thread
import mysql.connector
import yaml
import time
# how often to update the database in seconds
UPDATE_INTERVAL = 30
if __name__ == "__main__":
db_keys = yaml.load(open("db.yaml"),Loader=yaml.FullLoader)
# connect to db
db = mysql.connector.connect(
host=db_keys['mysql_host'],
user=db_keys['mysql_user'],
password=db_keys['mysql_password'],
port="3306",
database="tracker"
)
# try and debug if anything works here lol
mycursor = db.cursor()
# create first table
create_table_command = """CREATE TABLE IF NOT EXISTS tracking (
T datetime NOT NULL,
Upload_speed float,
Download_speed float,
Memory_usage float,
Cpu_usage float,
Uptime int,
Readtime float,
Writetime float);"""
# create database table if it doesn't exist with the following columns (id, timestamp, upload, download, upload_speed, download_speed)
mycursor.execute(create_table_command)
mycursor.execute("commit")
# create table if it doesn't exist which records processes and their cpu usage and memory usage over time
create_table_command = """CREATE TABLE IF NOT EXISTS processes (
T datetime NOT NULL,
Name varchar(255),
Memory_usage float,
Cpu_usage float);"""
mycursor.execute(create_table_command)
mycursor.execute("commit")
# counter for io
io = psutil.net_io_counters()
bytes_sent, bytes_recv = io.bytes_sent, io.bytes_recv
while True:
time.sleep(UPDATE_INTERVAL)
# get current datetime
current_time = time.strftime('%Y-%m-%d %H:%M:%S')
# get network usage
io_2 = psutil.net_io_counters()
us, ds = io_2.bytes_sent - bytes_sent, io_2.bytes_recv - bytes_recv
bytes_sent, bytes_recv = io_2.bytes_sent, io_2.bytes_recv
# get memory percentage
memory_percent = psutil.virtual_memory().percent
# get cpu usage
cpu_percent = psutil.cpu_percent(interval=1)
# get uptime
boot_time_timestamp = psutil.boot_time()
current_time_timestamp = time.time()
uptime_seconds = current_time_timestamp - boot_time_timestamp
# get readtime and writetime
io_counters = psutil.disk_io_counters()
readtime = io_counters.read_time
writetime = io_counters.write_time
# string to insert values into database
sql = """INSERT INTO tracking
(T, Download_speed, Upload_speed, Memory_usage, Cpu_usage, Uptime, Readtime, Writetime)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s)"""
values = (current_time, (ds / UPDATE_INTERVAL), (us / UPDATE_INTERVAL), memory_percent, cpu_percent, uptime_seconds, readtime, writetime)
mycursor.execute(sql, values)
mycursor.execute("commit")
# get processes
processes = psutil.process_iter()
# loop through processes
for process in processes:
# get process name
name = process.name()
# get process memory usage
memory_usage = process.memory_percent()
# get process cpu usage
cpu_usage = process.cpu_percent()
# string to insert values into database
sql_2 = """INSERT INTO processes
(T, Name, Memory_usage, Cpu_usage)
VALUES (%s, %s, %s, %s)"""
values_2 = (current_time, name, memory_usage, cpu_usage)
mycursor.execute(sql_2, values_2)
mycursor.execute("commit")