diff --git a/README.MD b/README.MD new file mode 100644 index 0000000..c3c9d55 --- /dev/null +++ b/README.MD @@ -0,0 +1,3 @@ +In config.py sind die Datenbank-Zugriffsdaten anzugeben. + +In prozessliste.txt werden je Zeile ein Suchstring angegeben. Groß- und Kleinschreibung werden ignoriert. \ No newline at end of file diff --git a/config.py b/config.py new file mode 100644 index 0000000..10ad935 --- /dev/null +++ b/config.py @@ -0,0 +1,6 @@ +DBHOST = "ocs" +DBPORT="3307" +DBUSER = "autodesk" +DBPWD = "*******" +DB = "test" +TABLE = "autodesklog" \ No newline at end of file diff --git a/main.py b/main.py new file mode 100644 index 0000000..8df93ac --- /dev/null +++ b/main.py @@ -0,0 +1,63 @@ +import psutil +import socket +import mysql.connector +import time +from config import * + +# Datenbank-Objekt anlegen +try: + mydb = mysql.connector.connect( + host=DBHOST, + port = DBPORT, + user=DBUSER, + password=DBPWD, + database=DB + ) +except: + print("Datenbankverbindung nicht erfolgreich") + exit() + +mycursor = mydb.cursor() + +# Computername in Date schreiben +host = socket.gethostname() + +# Zu überwachende Prozesse aus Datei einkesen +fobj = open("prozessliste.txt", "r") +prozessListeCheck = [procMon.strip() for procMon in fobj] +fobj.close() + +# Liste der laufenden Prozesse erzeugen +prozessliste = [prozess for prozess in psutil.process_iter(['pid','name','username'])] + +# Schleife über die zu monitorenden Prozesse +for monProc in prozessListeCheck: + # Überwachungsvariable ob Prozess läuft wird zunächst auf False gesetzt + laeuft=False + #Schleife über laufende Prozesse + for proc in prozessliste: + # Vergleich ob der Prozess in einem der Prozesse aufgeführt ist + # um Fehler durch Rechtschreibugn auszuschließen werden beide String in Kleinbuchstaben umgewandelt + if monProc.lower() in str(proc.name()).lower(): + # Wenn der Prozess in der Prozessliste vorhanden ist wird ein Datensatz in die DB geschrieben + + # Wenn Prozess unter anderem Benutzernamen läuft, wird eine Exception geworfen. + # Damit das Skript dennoch weiterläuft, wird ein Dummy Username geschrieben + try: + uname = proc.username() + except: + uname = "_Zugriff verweigert_" + pname = proc.name() + print(pname, " is running") + # SQL Statement um in Datenbank zu schreiben + sql = "INSERT INTO "+TABLE+" (time, host, username, proc, cputime) VALUES (%s, %s, %s, %s, %s)" + val = (time.time(), + host, + uname, + pname, + proc.cpu_times().user + ) + mycursor.execute(sql, val) + mydb.commit() + + diff --git a/prozessliste.txt b/prozessliste.txt new file mode 100644 index 0000000..68550c7 --- /dev/null +++ b/prozessliste.txt @@ -0,0 +1,3 @@ +EXCEL.EXE +ted.exe +chrome \ No newline at end of file diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..9094b51 --- /dev/null +++ b/setup.py @@ -0,0 +1,17 @@ +import sys +from cx_Freeze import setup, Executable + +build_exe_options = {'packages': ["psutil","socket","mysql.connector","time"], + 'excludes': ["tkinter"] + } + +base = None +if sys.platform == "win32": + base = "Win32GUI" + +setup(name = "ProcessMonitor", + version = "0.2", + description = "Logt ausgewählte Prozesse in MySQL-DB", + options = {"build.exe": build_exe_options}, + executables = [Executable("main.py", base = base)] + )