Advertisement
Guest User

prototypev.1

a guest
Mar 18th, 2019
210
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 56.59 KB | None | 0 0
  1. # imports
  2. from functools import partial
  3. from tkinter import *
  4. from tkinter import messagebox
  5. from multiprocessing import Process, Queue
  6. import tkinter.ttk
  7. import pymysql
  8. import time
  9. import traceback
  10. from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
  11. from matplotlib.figure import Figure
  12. import threading
  13. import pythoncom
  14. import sys
  15. import psutil
  16. import os
  17. import math
  18. import win32event, win32api, winerror, win32con
  19. import win32gui
  20. import re
  21. import datetime, time
  22. import ctypes
  23. import pymysql
  24. import io
  25. import traceback
  26. import PyHook3
  27.  
  28. global database
  29. database = "testdb2"
  30.  
  31.  
  32. def relax(m_relax):
  33.     m_relax = 1
  34.     messagebox.showinfo("Message", "Now you in relax mode" + str(m_relax))
  35.  
  36.  
  37. class Relaxmode(Frame):
  38.  
  39.     def __init__(self, master=None):
  40.         super().__init__(master)
  41.         self.toggle1 = tkinter.ttk.Button(text="Off",
  42.                                           command=lambda *args: self.toggle(self.toggle1))
  43.         self.toggle1.pack(padx=5, pady=5)
  44.         self.toggle2 = tkinter.ttk.Button(text="Off", style="Toolbutton",
  45.                                           command=lambda *args: self.toggle(self.toggle2))
  46.         self.toggle2.pack(padx=5, pady=5)
  47.         self.toggle3 = tkinter.ttk.Button(text="Off",
  48.                                           command=lambda *args: self.toggle(self.toggle3))
  49.         self.toggle3.pack(padx=5, pady=5)
  50.         style = tkinter.ttk.Style()
  51.         style.configure("Toggle.TButton")
  52.         style.map("Toggle.TButton", relief=[("pressed", "sunken"),
  53.                                             ("selected", "sunken"), ("!selected", "raised")])
  54.         self.toggle3.config(style="Toggle.TButton")
  55.         tkinter.ttk.Button(text="Quit",
  56.                            command=self.master.destroy).pack(padx=5, pady=5)
  57.         self.pack()
  58.  
  59.     def toggle(self, button):
  60.         if button.instate(("!selected",)):
  61.             button.state(("selected",))
  62.             button.config(text="On")
  63.         else:
  64.             button.state(("!selected",))
  65.             button.config(text="Off")
  66.  
  67.  
  68. class Clock(Label):
  69.     """ Class that contains the clock widget and clock refresh """
  70.  
  71.     def __init__(self, parent=None, seconds=True, colon=False):
  72.         """
  73.        Create and place the clock widget into the parent element
  74.        It's an ordinary Label element with two additional features.
  75.        """
  76.         Label.__init__(self, parent)
  77.  
  78.         self.display_seconds = seconds
  79.         if self.display_seconds:
  80.             self.time = time.strftime('%H:%M:%S')
  81.         else:
  82.             self.time = time.strftime('%I:%M %p').lstrip('0')
  83.         self.display_time = self.time
  84.         self.configure(text=self.display_time)
  85.  
  86.         if colon:
  87.             self.blink_colon()
  88.  
  89.         self.after(200, self.tick)
  90.  
  91.     def tick(self):
  92.         """ Updates the display clock every 200 milliseconds """
  93.         if self.display_seconds:
  94.             new_time = time.strftime('%H:%M:%S')
  95.         else:
  96.             new_time = time.strftime('%I:%M %p').lstrip('0')
  97.         if new_time != self.time:
  98.             self.time = new_time
  99.             self.display_time = self.time
  100.             self.configure(text=self.display_time)
  101.         self.after(200, self.tick)
  102.  
  103.     def blink_colon(self):
  104.         """ Blink the colon every second """
  105.         if ':' in self.display_time:
  106.             self.display_time = self.display_time.replace(':', ' ')
  107.         else:
  108.             self.display_time = self.display_time.replace(' ', ':', 1)
  109.         self.config(text=self.display_time)
  110.         self.after(1000, self.blink_colon)
  111.  
  112.  
  113. class Aboutscreen(Frame):
  114.     def __init__(self, parent):
  115.         Frame.__init__(self, parent)
  116.         Lfont = ('helvetica', 14)
  117.         l1 = Label(self, text="A Personal Assistant Program for Monitoring Computer Usages", font=Lfont)
  118.         l2 = Label(self, text="CPE KMUTT COMPANY", font=Lfont)
  119.         l3 = Label(self, text="Contact", font=Lfont)
  120.         l4 = Label(self, text="Mr. Pubodee Kamonmasmatakul    Tel. 0123456789", font=Lfont)
  121.         l5 = Label(self, text="Mr. Tanasit Tuangcharoentip    Tel. 0123456789", font=Lfont)
  122.         l1.grid(row=1, column=1)
  123.         l2.grid(row=2, column=1)
  124.         l3.grid(row=3, column=1)
  125.         l4.grid(row=4, column=1)
  126.         l5.grid(row=5, column=1)
  127.  
  128.         self.grid_rowconfigure(0, weight=1)
  129.         self.grid_rowconfigure(6, weight=1)
  130.         self.grid_columnconfigure(0, weight=1)
  131.         self.grid_columnconfigure(6, weight=1)
  132.  
  133. # main Class
  134. class UI:
  135.  
  136.     def __init__(self, master):
  137.         # Window
  138.         self.master = master
  139.         # Some Usefull variables
  140.         self.database = 'testdb2'
  141.         self.username = StringVar()
  142.         self.password = StringVar()
  143.         self.n_username = StringVar()
  144.         self.n_password = StringVar()
  145.         self.n_firstname = StringVar()
  146.         self.n_lastname = StringVar()
  147.         self.n_age = IntVar()
  148.         self.n_gender = StringVar()
  149.         self.c_id = IntVar()
  150.         self.status = IntVar()
  151.         self.minrating = IntVar()
  152.         self.maxrating = IntVar()
  153.         self.worktime = IntVar()
  154.         self.m_relax = IntVar()
  155.         self.screen_w = root.winfo_screenmmwidth()
  156.         self.screen_h = root.winfo_screenmmheight()
  157.         self.date = StringVar()
  158.         self.logintime = StringVar()
  159.  
  160.         # Create Widgets
  161.         self.widgets()
  162.  
  163.         menu = Menu(self.master)
  164.         self.master.config(menu=menu)
  165.  
  166.         file = Menu(menu)
  167.         file.add_command(label="Exit", command=self.client_exit)
  168.         menu.add_cascade(label="File", menu=file)
  169.  
  170.         edit = Menu(menu)
  171.         edit.add_command(label="Undo")
  172.         menu.add_cascade(label="Edit", menu=edit)
  173.  
  174.         help = Menu(menu)
  175.         help.add_command(label="About", command=self.about)
  176.         menu.add_cascade(label="Help", menu=help)
  177.  
  178.     def client_exit(self):
  179.         exit()
  180.  
  181.     def close_tab(self, window):
  182.         window.destroy()
  183.  
  184.     def dashboard(self):
  185.         global x1
  186.         global x2
  187.         global x3
  188.         self.logintime = StringVar()
  189.         self.logofftime = StringVar()
  190.         # x1 = float(entry1.get())
  191.         # x2 = float(entry2.get())
  192.         # x3 = float(entry3.get())
  193.         db = pymysql.connect(
  194.             host='localhost',
  195.             user='root',
  196.             password='',
  197.             db=self.database,
  198.             use_unicode=True,
  199.             charset='utf8')
  200.  
  201.         c = db.cursor()
  202.         find_avr = ('SELECT * FROM avrdata WHERE id = %s and date = %s')
  203.         c.execute(find_avr, (self.c_id, '2019-02-23'))
  204.         result = c.fetchall()
  205.         self.logofftime.set('')
  206.         self.logintime.set('')
  207.         for row in result:
  208.             self.logintime = row[3]
  209.             self.logofftime = row[4]
  210.         x1 = 1
  211.         x2 = 2
  212.         x3 = 3
  213.  
  214.         db.close()
  215.  
  216.         window = Toplevel(root)
  217.         window.title("Dashboard")
  218.         width_value = root.winfo_screenwidth()
  219.         height_value = root.winfo_screenheight()
  220.         window.geometry('%dx%d+0+0' % (width_value, height_value))
  221.         window.configure(padx=10, pady=10)
  222.  
  223.         # scrollbar = Scrollbar(window, orient="vertical")
  224.         # scrollbar.pack(side=RIGHT, fill=Y)
  225.  
  226.         wframe = Canvas(window, width=1920, height=1080)
  227.  
  228.         topframe = Frame(wframe, bd=1, relief="solid")
  229.         topframe.pack(fill=X, anchor=W, padx=10, pady=10)
  230.  
  231.         botframe = Frame(wframe, width=1920, height=2000, bd=1, relief="solid")
  232.         bbtn = Button(botframe, text="Show more", font=('', 15))
  233.         bbtn.pack()
  234.         botframe.pack(padx=10, pady=10, fill=X)
  235.  
  236.         time = Frame(topframe, padx=100, pady=10, bg="white")
  237.         time.pack(side=LEFT, anchor=NW, padx=10, pady=30)
  238.  
  239.         toptime = Frame(time, bg="white")
  240.         toptime.pack(anchor=W, padx=10, pady=30)
  241.  
  242.         bottime = Frame(time, bg="white")
  243.         bottime.pack(anchor=W, padx=10, pady=30)
  244.  
  245.         atime = Frame(toptime, padx=10, pady=10, bg="white", bd=1, relief="solid")
  246.         atime.pack(side=LEFT, anchor=W, padx=10, pady=30)
  247.         Label(atime, text="Arrive time", font=('', 20), pady=5, padx=5, bg="white").grid(sticky="W", row=0, column=0)
  248.         Label(atime, text=self.logintime, font=('', 40), pady=5, padx=5, bg="white", fg="green").grid(sticky=W, \
  249.                                                                                                       row=1, column=0)
  250.  
  251.         ltime = Frame(toptime, padx=10, pady=10, bg="white", bd=1, relief="solid")
  252.         ltime.pack(side=LEFT, anchor=W, padx=10, pady=30)
  253.         Label(ltime, text="Left time", font=('', 20), pady=5, padx=5, bg="white").grid(sticky=W, row=0, column=0)
  254.         Label(ltime, text=self.logofftime, font=('', 40), pady=5, padx=5, bg="white", fg="green").grid(sticky=W, \
  255.                                                                                                        row=1, column=0)
  256.  
  257.         ttime = Frame(bottime, padx=10, pady=10, bg="white", bd=1, relief="solid")
  258.         ttime.pack(side=LEFT, anchor=W, padx=10, pady=30)
  259.         Label(ttime, text="Total time", font=('', 20), pady=5, padx=5, bg="white").grid(sticky=W, row=0, column=0)
  260.         Label(ttime, text="9.00 hr.", font=('', 40), pady=5, padx=5, bg="white", fg="green").grid(sticky=W, \
  261.                                                                                                   row=1, column=0)
  262.  
  263.         figure2 = Figure(figsize=(5, 4))
  264.         subplot2 = figure2.add_subplot(111)
  265.         labels2 = 'Relax', 'Hard Work', 'Working'
  266.         pieSizes = [float(x1), float(x2), float(x3)]
  267.         explode2 = (0, 0.1, 0)
  268.         subplot2.pie(pieSizes, explode=explode2, labels=labels2, autopct='%1.1f%%', shadow=True, startangle=90)
  269.         subplot2.axis('equal')
  270.         pie2 = FigureCanvasTkAgg(figure2, master=topframe)
  271.         pie2.get_tk_widget().pack(anchor=E, padx=10, pady=30, fill=BOTH)
  272.  
  273.         figure1 = Figure(figsize=(5, 4), dpi=100)
  274.         subplot1 = figure1.add_subplot(111)
  275.         xAxis = [float(x1), float(x2), float(x3)]
  276.         yAxis = [float(x1), float(x2), float(x3)]
  277.         subplot1.bar(xAxis, yAxis, color='g')
  278.         bar1 = FigureCanvasTkAgg(figure1, master=botframe)
  279.         # bar1.get_tk_widget().pack(fill=BOTH, expand=TRUE)
  280.  
  281.         # wframe.configure(yscrollcommand=scrollbar.set)
  282.         # scrollbar.configure(command=wframe.yview)
  283.         wframe.pack(fill=BOTH)
  284.         # print(self.logintime)
  285.         # print(self.logofftime)
  286.  
  287.     # Login Function
  288.     def login(self):
  289.         # Establish Connection
  290.         # Open database connection
  291.         db = pymysql.connect(
  292.             host='localhost',
  293.             user='root',
  294.             password='',
  295.             db=self.database,
  296.             use_unicode=True,
  297.             charset='utf8')
  298.         c = db.cursor()
  299.         # Find user If there is any take proper action
  300.         find_user = ('SELECT * FROM employee WHERE uname = %s and password = %s')
  301.         find_avr = ('SELECT * FROM avrdatahour WHERE id = %s and date = %s')
  302.         timestamp = ("INSERT INTO avrdatahour(ID,date,starttime) VALUES(%s,%s,%s)")
  303.         c.execute(find_user, [(self.username.get()), (self.password.get())])
  304.         result = c.fetchall()
  305.         if result:
  306.             for row in result:
  307.                 # save current id and stamp login time
  308.                 self.c_id = row[0]
  309.             # Get Date
  310.             self.date = time.strftime('%Y-%m-%d')
  311.             self.logintime = time.strftime('%H:%M:%S')
  312.             showtime = time.strftime('%I:%M %p').lstrip('0')
  313.             messagebox.showinfo("Message",
  314.                                 "You log in when " + str(self.date) + " " + str(showtime) + " with user " + str(
  315.                                     self.username.get()))
  316.             c.execute(find_avr, (self.c_id, self.date))
  317.             result1 = c.fetchall()
  318.             if not result1:
  319.                 c.execute(timestamp, (self.c_id, self.date, self.logintime))
  320.                 db.commit()
  321.             else:
  322.                 traceback.print_exc()
  323.                 db.rollback()
  324.  
  325.             # self.head['pady'] = 150
  326.             db.close()
  327.             self.home()
  328.         else:
  329.             messagebox.showerror('Oops!', 'Username Not Found.')
  330.  
  331.     def new_user(self):
  332.         # Establish Connection
  333.         db = pymysql.connect(
  334.             host='localhost',
  335.             user='root',
  336.             password='',
  337.             db=self.database,
  338.             use_unicode=True,
  339.             charset='utf8')
  340.         c = db.cursor()
  341.  
  342.         # Find Existing username if any take proper action
  343.         find_user = ('SELECT * FROM employee WHERE uname = %s')
  344.         c.execute(find_user, [(self.n_username.get())])
  345.         if c.fetchall():
  346.             messagebox.showerror('Error!', 'Username Taken Try a Diffrent One.')
  347.         else:
  348.             messagebox.showinfo('Success!', 'Account Created!')
  349.             self.log()
  350.         # Create New Account
  351.         insert = ('INSERT INTO employee(uname,password,fname,lname,gender,age) VALUES(%s,%s,%s,%s,%s,%s)')
  352.         c.execute(insert, (
  353.             (self.n_username.get()), (self.n_password.get()), (self.n_firstname.get()), (self.n_lastname.get()),
  354.             (self.n_gender.get()), (self.n_age.get())))
  355.         db.commit()
  356.  
  357.     # Frame Packing Methods
  358.     def log(self):
  359.         root.geometry("")
  360.         self.username.set('')
  361.         self.password.set('')
  362.         self.crf.pack_forget()
  363.         self.logf.pack()
  364.  
  365.     def relog(self):
  366.         if (messagebox.askokcancel("Log Out", "Are you sure to log out ?")):
  367.  
  368.             db = pymysql.connect(
  369.                 host='localhost',
  370.                 user='root',
  371.                 password='',
  372.                 db=self.database,
  373.                 use_unicode=True,
  374.                 charset='utf8')
  375.  
  376.             c = db.cursor()
  377.             self.topFrame.pack_forget()
  378.             self.clock2.pack_forget()
  379.             self.homef.pack_forget()
  380.             # self.username = StringVar()
  381.             # self.password = StringVar()
  382.             # self.username.set('')
  383.             # self.password.set('')
  384.             logofftime = time.strftime('%H:%M:%S')
  385.             showtime = time.strftime('%I:%M %p').lstrip('0')
  386.             timestamp = ("UPDATE avrdatahour SET endtime = %s WHERE ID = %s and date = %s")
  387.             # self.logf.pack_forget()
  388.             try:
  389.                 c.execute(timestamp, (logofftime, self.c_id, self.date))
  390.                 db.commit()
  391.                 messagebox.showinfo("Message", "You log off when " + str(self.date) + " " + str(showtime))
  392.             except:
  393.                 traceback.print_exc()
  394.                 db.rollback()
  395.  
  396.             # exit()
  397.             self.log()
  398.  
  399.     def cr(self):
  400.         self.n_username.set('')
  401.         self.n_password.set('')
  402.         self.n_firstname.set('')
  403.         self.n_lastname.set('')
  404.         self.n_age.set(0)
  405.         self.n_gender.set('Male')
  406.         self.logf.pack_forget()
  407.         # self.head['text'] = 'Create Account'
  408.         self.crf.pack()
  409.  
  410.     def home(self):
  411.         root.geometry("500x320")
  412.         root.title("Home")
  413.         self.p1 = Process(target=Tracking)
  414.         self.p1.start()
  415.         self.m_relax.set(0)
  416.         self.logf.pack_forget()
  417.         self.topFrame = Frame(self.master, padx=10, pady=10)
  418.         self.topFrame.pack(fill=X)
  419.         self.lFrame = Frame(self.topFrame)
  420.         self.lFrame.pack(side=LEFT)
  421.         self.rFrame = Frame(self.topFrame)
  422.         self.rFrame.pack(side=RIGHT)
  423.         Checkbutton(self.lFrame, text="Relax Mode", font=("", 20), variable=self.m_relax, onvalue=1, offvalue=0,
  424.                     command=lambda: relax(self.m_relax)).grid(sticky=W)
  425.         Label(self.rFrame, textvariable=self.username, font=('', 20), pady=5, padx=5).grid(row=0, column=1, sticky=E)
  426.         Button(self.rFrame, text='Log Out ', bd=3, font=('', 15), padx=5, pady=5, command=self.relog).grid(row=0,
  427.                                                                                                            column=2,
  428.                                                                                                            sticky=E)
  429.         self.clock2 = Clock(seconds=False, colon=True)
  430.         self.clock2.pack(pady=20)
  431.         self.clock2.configure(bg='black', fg='lightgreen', font=("", 20))
  432.         self.homef.pack()
  433.  
  434.     def about(self):
  435.         window = Toplevel(root)
  436.         window_w = 600
  437.         window_h = 300
  438.         window.title("about")
  439.         window.geometry("%dx%d" % (window_w, window_h))
  440.         Aboutscreen(window).grid(sticky="nsew")
  441.         window.grid_rowconfigure(0, weight=1)
  442.         window.grid_columnconfigure(0, weight=1)
  443.  
  444.     def set(self):
  445.         window = Toplevel(root)
  446.         window.configure(padx=10, pady=10)
  447.         Label(window, text='Min Rating: ', font=('', 20), pady=5, padx=5).grid(sticky=W)
  448.         Entry(window, textvariable=self.n_username, bd=5, font=('', 15)).grid(row=0, column=1)
  449.         Label(window, text='Max Rating: ', font=('', 20), pady=5, padx=5).grid(sticky=W)
  450.         Entry(window, textvariable=self.n_password, bd=5, font=('', 15), show='*').grid(row=1, column=1)
  451.         Label(window, text='Work Time: ', font=('', 20), pady=5, padx=5).grid(sticky=W)
  452.         Entry(window, textvariable=self.n_username, bd=5, font=('', 15)).grid(row=2, column=1)
  453.         Button(window, text='Save', bd=3, font=('', 15), padx=5, pady=5, command=partial(self.close_tab, window)).grid(
  454.             sticky=W + E + N + S)
  455.         Button(window, text='Add Program List', bd=3, font=('', 15), padx=5, pady=5, command=self.close_tab).grid(row=3,
  456.                                                                                                                   column=1,
  457.                                                                                                                   sticky=E)
  458.  
  459.     # Draw Widgets
  460.     def widgets(self):
  461.         # self.head = Label(self.master, text='LOGIN', font=('', 35), pady=10)
  462.         # self.head = Label(self.master, text='HOME', font=('', 35), pady=10)
  463.         # self.head.pack()
  464.         self.logf = Frame(self.master, padx=10, pady=10)
  465.         Label(self.logf, text='Username: ', font=('', 20), pady=5, padx=5).grid(sticky=W)
  466.         Entry(self.logf, textvariable=self.username, bd=5, font=('', 15)).grid(row=0, column=1)
  467.         Label(self.logf, text='Password: ', font=('', 20), pady=5, padx=5).grid(sticky=W)
  468.         Entry(self.logf, textvariable=self.password, bd=5, font=('', 15), show='*').grid(row=1, column=1)
  469.         Button(self.logf, text=' Login ', bd=3, font=('', 15), padx=5, pady=5, command=self.login).grid(
  470.             sticky=W + E + N + S)
  471.         Button(self.logf, text=' Create Account ', bd=3, font=('', 15), padx=5, pady=5, command=self.cr).grid(row=2,
  472.                                                                                                               column=1,
  473.                                                                                                               sticky=E)
  474.         self.logf.pack()
  475.  
  476.         self.crf = Frame(self.master, padx=10, pady=10)
  477.         Label(self.crf, text='Username: ', font=('', 20), pady=5, padx=5).grid(sticky=W)
  478.         Entry(self.crf, textvariable=self.n_username, bd=5, font=('', 15)).grid(row=0, column=1)
  479.         Label(self.crf, text='Password: ', font=('', 20), pady=5, padx=5).grid(sticky=W)
  480.         Entry(self.crf, textvariable=self.n_password, bd=5, font=('', 15), show='*').grid(row=1, column=1)
  481.         Label(self.crf, text='Firstname: ', font=('', 20), pady=5, padx=5).grid(sticky=W)
  482.         Entry(self.crf, textvariable=self.n_firstname, bd=5, font=('', 15)).grid(row=2, column=1)
  483.         Label(self.crf, text='Lastname: ', font=('', 20), pady=5, padx=5).grid(sticky=W)
  484.         Entry(self.crf, textvariable=self.n_lastname, bd=5, font=('', 15)).grid(row=3, column=1)
  485.         Label(self.crf, text='Age: ', font=('', 20), pady=5, padx=5).grid(sticky=W)
  486.         Entry(self.crf, textvariable=self.n_age, bd=5, font=('', 15)).grid(row=4, column=1)
  487.         Label(self.crf, text='Gender: ', font=('', 20), pady=5, padx=5).grid(sticky=W)
  488.         Radiobutton(self.crf, text='Male', variable=self.n_gender, value='Male', font=('', 20)).grid(row=5, column=1)
  489.         Radiobutton(self.crf, text='Female', variable=self.n_gender, value='Female', font=('', 20)).grid(row=5,
  490.                                                                                                          column=2)
  491.         Button(self.crf, text='Create Account', bd=3, font=('', 15), padx=5, pady=5, command=self.new_user).grid()
  492.         Button(self.crf, text='Go to Login', bd=3, font=('', 15), padx=5, pady=5, command=self.log).grid(row=6,
  493.                                                                                                          column=1)
  494.         self.homef = Frame(self.master, padx=10, pady=10)
  495.         Button(self.homef, text='Dashboard', bd=3, font=('', 15), padx=5, pady=5, command=self.dashboard).grid()
  496.         Button(self.homef, text='Setting', bd=3, font=('', 15), padx=5, pady=5, command=self.set).grid(row=0,
  497.                                                                                                        column=1)
  498.  
  499.         # self.home()
  500.         # self.homef.pack()
  501.  
  502. def Tracking():
  503.  
  504.     global database
  505.     database = "testdb2"
  506.  
  507.     thread1 = threading.Thread(target=mouse_key)
  508.     thread2 = threading.Thread(target=Timetracking)
  509.     thread3 = threading.Thread(target=Apptracking)
  510.  
  511.     thread1.start()
  512.     thread2.start()
  513.     thread3.start()
  514.  
  515.  
  516. def Apptracking():
  517.     global database
  518.     print("Apptrack")
  519.  
  520.     def addAppandTime(applist, timelist):
  521.         myString = ",".join(applist)
  522.         myTime = ",".join(map(str, timelist))
  523.  
  524.         connection = pymysql.connect(
  525.             host='localhost',
  526.             user='root',
  527.             password='',
  528.             db=database,
  529.             use_unicode=True,
  530.             charset='utf8')
  531.  
  532.         try:
  533.             with connection.cursor() as cursor:
  534.                 sql = "INSERT INTO applicationlist (`ID`, `applist`, `timelist`) VALUES (%s,%s,%s)"
  535.                 try:
  536.                     cursor.execute(sql, (1, myString, myTime))
  537.                     print("AppandTime List added successfully")
  538.                 except:
  539.                     traceback.print_exc()
  540.                     connection.rollback()
  541.                     print("Oops! Something wrong with adding appandtimelist")
  542.  
  543.             connection.commit()
  544.         finally:
  545.             connection.close()
  546.  
  547.     def uploadAppandTime(applist, timelist):
  548.         myString = ",".join(applist)
  549.         myTime = ",".join(map(str, timelist))
  550.  
  551.         connection = pymysql.connect(
  552.             host='localhost',
  553.             user='root',
  554.             password='',
  555.             db=database,
  556.             use_unicode=True,
  557.             charset='utf8')
  558.  
  559.         try:
  560.             with connection.cursor() as cursor:
  561.                 sql = "UPDATE applicationlist SET `applist`= %s , `timelist`= %s WHERE `id` = %s"
  562.                 try:
  563.                     cursor.execute(sql, (myString, myTime, 1))
  564.                     print("AppandTime List updated successfully")
  565.                 except:
  566.                     traceback.print_exc()
  567.                     connection.rollback()
  568.                     print("Oops! Something wrong with updating appandtimelist")
  569.  
  570.             connection.commit()
  571.         finally:
  572.             connection.close()
  573.  
  574.     num = []  # int
  575.     relaxlist = []
  576.     i = 0
  577.     check = 0
  578.     record = []
  579.     titles = []
  580.     count = []
  581.  
  582.     # get text from active window
  583.     def enumWindowsProc(hwnd, lParam):
  584.         if win32gui.IsWindowVisible(hwnd):
  585.             text = win32gui.GetWindowText(hwnd)
  586.             text = re.sub(r" ?\([^)]+\)", "", text)
  587.             # text = text.decode("utf-8")
  588.             program = text.rsplit('- ', 2)
  589.             program.reverse()
  590.             if text.find("Google Chrome") >= 0:
  591.                 program[1] = program[1].strip()
  592.                 titles.append(program[0] + "||" + program[1])
  593.             else:
  594.                 titles.append(program[0])
  595.  
  596.     def readData():
  597.         record = []
  598.         count = []
  599.         relaxlist = []
  600.         connection = pymysql.connect(
  601.             host='localhost',
  602.             user='root',
  603.             password='',
  604.             db=database,
  605.             use_unicode=True,
  606.             charset='utf8')
  607.  
  608.         try:
  609.             with connection.cursor() as cursor:
  610.                 sql = "SELECT `applist`, `timelist` FROM applicationlist WHERE `id` = %s"
  611.                 sqlrelax = "SELECT `relaxlist` FROM setting WHERE `id` = %s"
  612.                 try:
  613.                     cursor.execute(sql, (1))
  614.                     result = cursor.fetchall()
  615.                     for row in result:
  616.                         record = row[0]
  617.                         print(record)
  618.                         count = row[1]
  619.                         print(count)
  620.                     cursor.execute(sqlrelax, (1))
  621.                     result = cursor.fetchall()
  622.                     for row in result:
  623.                         relaxlist = row[0]
  624.  
  625.                 except:
  626.                     traceback.print_exc()
  627.                     connection.rollback()
  628.                     print("Oops! Something wrong can't read")
  629.  
  630.             connection.commit()
  631.         finally:
  632.             connection.close()
  633.             if not record:
  634.                 check = 0
  635.             else:
  636.                 check = 1
  637.  
  638.             return record, count, relaxlist, check
  639.  
  640.     # record to applog.txt
  641.     open('applog.txt', 'w').close()
  642.     record, count, relaxlist, check = readData()
  643.     if relaxlist:
  644.         relaxlist = relaxlist.split(",")
  645.  
  646.     while True:
  647.         time.sleep(60)
  648.         # read file as number
  649.         # file = open("setting.txt", "r")
  650.         # data = file.readline()
  651.         # data = data.rstrip("\n")
  652.         # while data != "":
  653.         #    data = int(data)
  654.         #    num.append(data)
  655.         #    data = file.readline()
  656.         # file.close()
  657.         # relax = num[3]
  658.         relax = UI.m_relax
  659.  
  660.         win32gui.EnumWindows(enumWindowsProc, 0)
  661.         timecheck = time.ctime()
  662.         while '' in titles:
  663.             titles.remove('')
  664.  
  665.         if check == 0:
  666.             record = titles
  667.             for i in range(len(record)):
  668.                 count.append(0)
  669.         elif check == 1:
  670.             record = record.split(",")
  671.             count = count.split(",")
  672.             count = list(map(int, count))
  673.  
  674.         titles = list(dict.fromkeys(titles))
  675.         record = list(dict.fromkeys(record))
  676.  
  677.         for i in range(len(titles)):
  678.             for j in range(len(record)):
  679.                 if (titles[i] == record[j]):
  680.                     count[j] += 1
  681.                     break
  682.                 if (titles[i] != record[j] and j == len(record) - 1):
  683.                     record.append(titles[i])
  684.                     count.append(1)
  685.                     print("List Added")
  686.  
  687.         while 0 in count:
  688.             count.remove(0)
  689.  
  690.         fp = io.open("applog.txt", "a+", encoding='utf-8')
  691.         fp.write(repr(timecheck) + "\n")
  692.  
  693.         fp.write("Record" + "\n" + "\n")
  694.         for j in range(len(record)):
  695.             fp.write("%s" % record[j])
  696.             fp.write(" minutes used = " + repr(count[j]) + "\n")
  697.  
  698.         fp.write("\n" + "Titles" + "\n" + "\n")
  699.         for i in range(len(titles)):
  700.             fp.write(repr(titles[i]) + "\n")
  701.  
  702.         # check relaxlist with current active programs
  703.         if relax == 0:
  704.             for i in range(len(relaxlist)):
  705.                 for j in range(len(titles)):
  706.                     re.findall(relaxlist[i], titles[j])
  707.                     if re.findall(relaxlist[i], titles[j]):
  708.                         fp.write("Found = " + repr(titles[j]) + "\n")
  709.                         ctypes.windll.user32.MessageBoxW(0, titles[j], "Match Program Detected", 0)
  710.         # finish
  711.         fp.write("\n")
  712.         fp.close()
  713.         if check == 0:
  714.             addAppandTime(record, count)
  715.             check = 2
  716.         else:
  717.             uploadAppandTime(record, count)
  718.             check = 2
  719.         titles.clear()
  720.  
  721.  
  722. def Timetracking():
  723.     global database
  724.     record = []  # int
  725.     print("TimeTrack")
  726.     # Establish Connection
  727.     # Open database connection
  728.     connection = pymysql.connect(
  729.         host='localhost',
  730.         user='root',
  731.         password='',
  732.         db=database,
  733.         use_unicode=True,
  734.         charset='utf8')
  735.  
  736.     c = connection.cursor()
  737.     # Find user If there is any take proper action
  738.     find_user = ('SELECT * FROM setting WHERE ID = 1')
  739.     c.execute(find_user)
  740.     result = c.fetchall()
  741.     if result:
  742.         for row in result:
  743.             for count in range(0, len(row)):
  744.                 record.append(row[count])
  745.  
  746.     connection.close()
  747.  
  748.     global id
  749.     global number
  750.     global minute
  751.     global actualminute
  752.     global currentround
  753.     global rating
  754.     global key
  755.     global mouseclick
  756.     global mousetravel
  757.     global mousescroll
  758.     global total_cpu
  759.     global total_memory
  760.     global total_disk
  761.     global relax_count
  762.     global work_count
  763.     global hard_count
  764.     global hour_cpu
  765.     global hour_memory
  766.     global hour_disk
  767.     global hour_key
  768.     global hour_mouseclick
  769.     global hour_mousetravel
  770.     global hour_mousescroll
  771.     global hour_rating
  772.     global hour_count
  773.     global check
  774.     global checkstatuslastround
  775.     global lowerthreshold
  776.     global higherthreshold
  777.     global limit
  778.     global relax_streak
  779.     global start
  780.     global last_minute
  781.     global workingdate
  782.     global timecheckbefore
  783.     global oldx, oldy
  784.  
  785.     id = 1
  786.     number = 0
  787.     minute = 1
  788.     actualminute = 0
  789.     currentround = 0
  790.     rating = 0
  791.     key = 0
  792.     mouseclick = 0
  793.     mousetravel = 0
  794.     mousescroll = 0
  795.     total_cpu = 0
  796.     total_memory = 0
  797.     total_disk = 0
  798.     relax_count = 0
  799.     work_count = 0
  800.     hard_count = 0
  801.     hour_cpu = 0
  802.     hour_memory = 0
  803.     hour_disk = 0
  804.     hour_key = 0
  805.     hour_mouseclick = 0
  806.     hour_mousetravel = 0
  807.     hour_mousescroll = 0
  808.     hour_rating = 0
  809.     hour_count = 0
  810.     check = 0
  811.     checkstatuslastround = 0
  812.     lowerthreshold = 2000
  813.     higherthreshold = 4000
  814.     limit = record[1]
  815.     relax_streak = 0
  816.     start = time.time()
  817.     last_minute = 0
  818.     workingdate = 0
  819.     # workingdate = time.strftime('%Y-%m-%d')
  820.     timecheckbefore = 0
  821.     oldx, oldy = win32api.GetCursorPos()
  822.  
  823.     def showwarning(count):  # warn at 90 and 10 relax streak
  824.         global check
  825.         global relax_streak
  826.         global limit
  827.  
  828.         if relax_streak == 10:
  829.             result = ctypes.windll.user32.MessageBoxW(0,
  830.                                                       "You have been relaxing for 10 minutes. Do you want to stop using the computer?",
  831.                                                       "Lack of usage detected", 4)
  832.             if result == 6:
  833.                 check = 1
  834.             elif result == 7:
  835.                 check = 0
  836.                 relax_streak = 0
  837.  
  838.         if count == limit:
  839.             result = ctypes.windll.user32.MessageBoxW(0,
  840.                                                       "You have been using computer for %d minutes. Do you want to rest right now?" % limit,
  841.                                                       "Health Warning", 4)
  842.             if result == 6:
  843.                 check = 1
  844.             elif result == 7:
  845.                 check = 2
  846.         elif check != 0:
  847.             ctypes.windll.user32.MessageBoxW(0, "Your computer will lock itself in 1 minute.", "Time Warning", 0)
  848.  
  849.     def readData():
  850.         global actualminute
  851.         global hour_cpu
  852.         global hour_memory
  853.         global hour_disk
  854.         global hour_key
  855.         global hour_mouseclick
  856.         global hour_mousetravel
  857.         global hour_mousescroll
  858.         global hour_rating
  859.         global hour_count
  860.         global relax_count
  861.         global work_count
  862.         global hard_count
  863.         global timecheckbefore
  864.         global workingdate
  865.         global id
  866.  
  867.         connection = pymysql.connect(
  868.             host='localhost',
  869.             user='root',
  870.             password='',
  871.             db=database,
  872.             use_unicode=True,
  873.             charset='utf8')
  874.  
  875.         try:
  876.             with connection.cursor() as cursor:
  877.                 sql = "SELECT `date`, `starttime`, `totaltime`, `avrkey_p`, `avrmouse_clk`, `avrmouse_trav`, " \
  878.                       "`avrmouse_scr`, `avrcpu`, `avrmem`, `avrdisk`, `avrrating`, `relaxcount` , `workcount` , " \
  879.                       "`hardcount` FROM avrdatahour WHERE `id` = %s "
  880.                 try:
  881.                     cursor.execute(sql, (id,))
  882.                     result = cursor.fetchall()
  883.                     for row in result:
  884.                         workingdate = row[0]
  885.                         timecheckbefore = row[1]
  886.                         actualminute = int(row[2])
  887.                         hour_key = int(row[3]) * actualminute
  888.                         hour_mouseclick = int(row[4]) * actualminute
  889.                         hour_mousetravel = int(row[5]) * actualminute
  890.                         hour_mousescroll = int(row[6]) * actualminute
  891.                         hour_cpu = int(row[7]) * actualminute
  892.                         hour_memory = int(row[8]) * actualminute
  893.                         hour_disk = int(row[9]) * actualminute
  894.                         hour_rating = int(row[10]) * actualminute
  895.                         relax_count = int(row[11])
  896.                         work_count = int(row[12])
  897.                         hard_count = int(row[13])
  898.                         hour_count += 1
  899.                     print("Current total time is %d" % actualminute)
  900.                     print("Current hour is %d" % hour_count)
  901.                     timecheckbefore = (datetime.datetime.min + timecheckbefore).time()
  902.                     timecheckbefore = datetime.datetime.combine(workingdate, timecheckbefore)
  903.                 except:
  904.                     traceback.print_exc()
  905.                     connection.rollback()
  906.                     print("No data yet!")
  907.  
  908.             connection.commit()
  909.         finally:
  910.             connection.close()
  911.  
  912.     def addData(timecheckbefore, timecheckafter, average_key, average_mouseclick, average_mousetravel,
  913.                 average_mousescroll, average_cpu, average_memory, average_disk, average_rating, relax_count,
  914.                 work_count,
  915.                 hard_count):
  916.         global id
  917.         global hour_count
  918.  
  919.         connection = pymysql.connect(
  920.             host='localhost',
  921.             user='root',
  922.             password='',
  923.             db=database,
  924.             use_unicode=True,
  925.             charset='utf8')
  926.  
  927.         if hour_count == 0:
  928.             hour_count = 1
  929.  
  930.         number = ((id * 24) - 24) + hour_count
  931.         datetoday = timecheckbefore.strftime("%Y-%m-%d")
  932.         timebefore = timecheckbefore.strftime("%H:%M:%S")
  933.         timenow = timecheckafter.strftime("%H:%M:%S")
  934.  
  935.         try:
  936.             with connection.cursor() as cursor:
  937.                 sql = "INSERT INTO avrdatahour (`No`, `ID`, `date`, `starttime`, `endtime`, `totaltime`, `avrkey_p`, `avrmouse_clk`, `avrmouse_trav`, `avrmouse_scr`, `avrcpu`, `avrmem`, `avrdisk`, `avrrating`, `relaxcount`, `workcount`, `hardcount`) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"
  938.                 try:
  939.                     cursor.execute(sql, (
  940.                         number, id, datetoday, timebefore, timenow, 1, average_key, average_mouseclick,
  941.                         average_mousetravel,
  942.                         average_mousescroll, average_cpu, average_memory, average_disk, average_rating, relax_count,
  943.                         work_count, hard_count))
  944.                     print("Task added successfully")
  945.                 except:
  946.                     traceback.print_exc()
  947.                     connection.rollback()
  948.                     print("Oops! Something wrong with adding data")
  949.  
  950.             connection.commit()
  951.         except:
  952.             traceback.print_exc()
  953.             connection.rollback()
  954.         finally:
  955.             connection.close()
  956.  
  957.     def updateData(timecheckafter, average_key, average_mouseclick, average_mousetravel, average_mousescroll,
  958.                    average_cpu, average_memory, average_disk, average_rating, relax_count, work_count, hard_count,
  959.                    actualminute):
  960.         global id
  961.         global hour_count
  962.  
  963.         connection = pymysql.connect(
  964.             host='localhost',
  965.             user='root',
  966.             password='',
  967.             db=database,
  968.             use_unicode=True,
  969.             charset='utf8')
  970.  
  971.         number = ((id * 24) - 24) + hour_count
  972.         timenow = timecheckafter.strftime("%H:%M:%S")
  973.  
  974.         try:
  975.             with connection.cursor() as cursor:
  976.                 sql = "UPDATE avrdatahour SET `endtime`= %s, `totaltime`= %s, `avrkey_p`= %s, `avrmouse_clk`= %s, `avrmouse_trav`= %s, `avrmouse_scr`= %s, `avrcpu`= %s, `avrmem`= %s, `avrdisk`= %s, `avrrating`= %s, `relaxcount`= %s, `workcount`= %s, `hardcount`= %s WHERE `No` = %s"
  977.                 try:
  978.                     cursor.execute(sql, (
  979.                         timenow, actualminute, average_key, average_mouseclick, average_mousetravel,
  980.                         average_mousescroll,
  981.                         average_cpu, average_memory, average_disk, average_rating, relax_count, work_count,
  982.                         hard_count,
  983.                         number))
  984.                     print("Updated successfully")
  985.                 except:
  986.                     traceback.print_exc()
  987.                     connection.rollback()
  988.                     print("Oops! Something wrong with updating data")
  989.  
  990.             connection.commit()
  991.         finally:
  992.             connection.close()
  993.  
  994.     def replaceData(numread, numreplace):
  995.  
  996.         connection = pymysql.connect(
  997.             host='localhost',
  998.             user='root',
  999.             password='',
  1000.             db=database,
  1001.             use_unicode=True,
  1002.             charset='utf8')
  1003.  
  1004.         try:
  1005.             with connection.cursor() as cursor:
  1006.                 sql = "SELECT `starttime`, `endtime`, `totaltime`, `avrkey_p`, `avrmouse_clk`, `avrmouse_trav`, `avrmouse_scr`, `avrcpu`, `avrmem`, `avrdisk`, `avrrating`, `relaxcount` , `workcount` , `hardcount` FROM avrdatahour WHERE `No` = %s"
  1007.                 sqlr = "UPDATE avrdatahour SET `starttime`= %s, `endtime`= %s, `totaltime`= %s, `avrkey_p`= %s, `avrmouse_clk`= %s, `avrmouse_trav`= %s, `avrmouse_scr`= %s, `avrcpu`= %s, `avrmem`= %s, `avrdisk`= %s, `avrrating`= %s, `relaxcount`= %s, `workcount`= %s, `hardcount`= %s WHERE `No` = %s"
  1008.                 try:
  1009.                     cursor.execute(sql, (numread,))
  1010.                     result = cursor.fetchall()
  1011.                     for row in result:
  1012.                         restime = row[0]
  1013.                         reetime = row[1]
  1014.                         reminute = int(row[2])
  1015.                         rekey = int(row[3])
  1016.                         remouseclick = int(row[4])
  1017.                         remousetravel = int(row[5])
  1018.                         remousescroll = int(row[6])
  1019.                         recpu = int(row[7])
  1020.                         rememory = int(row[8])
  1021.                         redisk = int(row[9])
  1022.                         rerating = int(row[10])
  1023.                         rerelaxcount = int(row[11])
  1024.                         reworkcount = int(row[12])
  1025.                         rehardcount = int(row[13])
  1026.                     cursor.execute(sqlr, (
  1027.                         restime, reetime, reminute, rekey, remouseclick, remousetravel, remousescroll, recpu,
  1028.                         rememory,
  1029.                         redisk, rerating, rerelaxcount, reworkcount, rehardcount, numreplace))
  1030.                     print("Replaced successfully")
  1031.                 except:
  1032.                     traceback.print_exc()
  1033.                     connection.rollback()
  1034.                     print("replace error!")
  1035.             connection.commit()
  1036.         finally:
  1037.             connection.close()
  1038.  
  1039.     def deleteData(numdelete):
  1040.  
  1041.         connection = pymysql.connect(
  1042.             host='localhost',
  1043.             user='root',
  1044.             password='',
  1045.             db=database,
  1046.             use_unicode=True,
  1047.             charset='utf8')
  1048.  
  1049.         try:
  1050.             with connection.cursor() as cursor:
  1051.                 sql = "DELETE FROM avrdatahour WHERE No = %s"
  1052.                 try:
  1053.                     cursor.execute(sql, (numdelete))
  1054.                     print("Successfully Deleted...")
  1055.                 except:
  1056.                     traceback.print_exc()
  1057.                     connection.rollback()
  1058.                     print("Oops! Something wrong with updating data")
  1059.  
  1060.             connection.commit()
  1061.         finally:
  1062.             connection.close()
  1063.  
  1064.     def truncateData():
  1065.  
  1066.         connection = pymysql.connect(
  1067.             host='localhost',
  1068.             user='root',
  1069.             password='',
  1070.             db=database,
  1071.             use_unicode=True,
  1072.             charset='utf8')
  1073.  
  1074.         try:
  1075.             with connection.cursor() as cursor:
  1076.                 sql = "TRUNCATE TABLE avrdatahour"
  1077.                 try:
  1078.                     cursor.execute(sql, ())
  1079.                     print("Successfully Deleted...")
  1080.                 except:
  1081.                     traceback.print_exc()
  1082.                     connection.rollback()
  1083.                     print("Oops! Something wrong with truncating data")
  1084.  
  1085.             connection.commit()
  1086.         finally:
  1087.             connection.close()
  1088.  
  1089.     def averageallData():
  1090.         global id
  1091.  
  1092.         timedaybefore = 0
  1093.         timedayafter = 0
  1094.         actualminute = 0
  1095.         day_key = 0
  1096.         day_mouseclick = 0
  1097.         day_mousetravel = 0
  1098.         day_mousescroll = 0
  1099.         day_cpu = 0
  1100.         day_memory = 0
  1101.         day_disk = 0
  1102.         day_rating = 0
  1103.         day_relax_count = 0
  1104.         day_work_count = 0
  1105.         day_hard_count = 0
  1106.         hour_count = 0
  1107.  
  1108.         connection = pymysql.connect(
  1109.             host='localhost',
  1110.             user='root',
  1111.             password='',
  1112.             db=database,
  1113.             use_unicode=True,
  1114.             charset='utf8')
  1115.  
  1116.         try:
  1117.             with connection.cursor() as cursor:
  1118.                 sql = "SELECT `date`, `starttime`, `endtime`, `totaltime`, `avrkey_p`, `avrmouse_clk`, `avrmouse_trav`, " \
  1119.                       "`avrmouse_scr`, `avrcpu`, `avrmem`, `avrdisk`, `avrrating`, `relaxcount` , `workcount` , " \
  1120.                       "`hardcount` FROM avrdatahour WHERE `id` = %s "
  1121.                 sqlday = "INSERT INTO avrdataday (`ID`, `date`, `logintime`, `logouttime`, `avrkey_p`, `avrmouse_clk`, `avrmouse_trav`, `avrmouse_scr`, `avrcpu`, `avrmem`, `avrdisk`, `avrrating`, `relaxcount`, `workcount`, `hardcount`) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"
  1122.                 try:
  1123.                     cursor.execute(sql, (id,))
  1124.                     result = cursor.fetchall()
  1125.                     for row in result:
  1126.                         yesterday = row[0]
  1127.                         if hour_count == 0:
  1128.                             timedaybefore = row[1]
  1129.                         timedayafter = row[2]
  1130.                         actualminute += int(row[3])
  1131.                         day_key += int(row[4])
  1132.                         day_mouseclick += int(row[5])
  1133.                         day_mousetravel += int(row[6])
  1134.                         day_mousescroll += int(row[7])
  1135.                         day_cpu += int(row[8])
  1136.                         day_memory += int(row[9])
  1137.                         day_disk += int(row[10])
  1138.                         day_rating += int(row[11])
  1139.                         day_relax_count += int(row[12])
  1140.                         day_work_count += int(row[13])
  1141.                         day_hard_count += int(row[14])
  1142.                         hour_count += 1
  1143.  
  1144.                     actualminute = actualminute / hour_count
  1145.                     day_key = day_key / hour_count
  1146.                     day_mouseclick = day_mouseclick / hour_count
  1147.                     day_mousetravel = day_mousetravel / hour_count
  1148.                     day_mousescroll = day_mousescroll / hour_count
  1149.                     day_cpu = day_cpu / hour_count
  1150.                     day_memory = day_memory / hour_count
  1151.                     day_disk = day_disk / hour_count
  1152.                     day_rating = day_rating / hour_count
  1153.  
  1154.                     cursor.execute(sqlday, (
  1155.                         id, yesterday, timedaybefore, timedayafter, day_key, day_mouseclick, day_mousetravel,
  1156.                         day_mousescroll, day_cpu, day_memory, day_disk, day_rating, day_relax_count, day_work_count,
  1157.                         day_hard_count))
  1158.                     print("Updated day data successfully")
  1159.  
  1160.                 except:
  1161.                     traceback.print_exc()
  1162.                     connection.rollback()
  1163.                     print("No data calculate the average!")
  1164.  
  1165.             connection.commit()
  1166.         finally:
  1167.             connection.close()
  1168.  
  1169.     def TimeTrack(count):
  1170.         global total_cpu
  1171.         global total_memory
  1172.         global total_disk
  1173.         global keypress
  1174.         global mouseclick
  1175.         global mousetravel
  1176.         global mousescroll
  1177.         global rating
  1178.         global start
  1179.         global oldx, oldy
  1180.         global relax_count
  1181.         global work_count
  1182.         global hard_count
  1183.         global lowerthreshold
  1184.         global higherthreshold
  1185.         global relax_streak
  1186.         global timecheckbefore
  1187.         global last_minute
  1188.         global workingdate
  1189.         global checkstatuslastround
  1190.  
  1191.         if timecheckbefore == 0:
  1192.             timecheckbefore = datetime.datetime.now()
  1193.             print("Time check updated")
  1194.  
  1195.         last_minute = datetime.datetime.now()
  1196.  
  1197.         while True:
  1198.             ''' Resource tracker '''
  1199.             cpu_percent = psutil.cpu_percent(interval=0.1)
  1200.             memory_percent = psutil.virtual_memory()[2]
  1201.             disk_percent = psutil.disk_usage('/')[3]
  1202.             total_cpu += cpu_percent
  1203.             total_memory += memory_percent
  1204.             total_disk += disk_percent
  1205.  
  1206.             ''' Mouse tracker '''
  1207.             x, y = win32api.GetCursorPos()
  1208.  
  1209.             if x - oldx != 0:
  1210.                 diffx = x - oldx
  1211.                 oldx = x
  1212.             else:
  1213.                 diffx = 0
  1214.             if y - oldy != 0:
  1215.                 diffy = y - oldy
  1216.                 oldy = y
  1217.             else:
  1218.                 diffy = 0
  1219.  
  1220.             dis = math.pow(diffx, 2) + math.pow(diffy, 2)
  1221.             mousetravel += math.sqrt(dis) * 0.1
  1222.  
  1223.             if time.time() > start + (60 * count): break
  1224.  
  1225.         rating += keypress * 100
  1226.         rating += mouseclick * 50
  1227.         rating += mousescroll * 10
  1228.         mousetravel = round(mousetravel)
  1229.         rating += mousetravel
  1230.  
  1231.         average_cpu = total_cpu / 600
  1232.         average_memory = total_memory / 600
  1233.         average_disk = total_disk / 600
  1234.  
  1235.         average_cpu = round(average_cpu)
  1236.         average_memory = round(average_memory)
  1237.         average_disk = round(average_disk)
  1238.         rating += average_cpu + average_memory + average_disk
  1239.  
  1240.         if rating < lowerthreshold:
  1241.             wstate = 'Relax'
  1242.             relax_count += 1
  1243.             relax_streak += 1
  1244.             checkstatuslastround = 0
  1245.  
  1246.         elif rating < higherthreshold:
  1247.             wstate = 'Working'
  1248.             work_count += 1
  1249.             relax_streak = 0
  1250.             checkstatuslastround = 1
  1251.  
  1252.         else:
  1253.             wstate = 'Hard Working'
  1254.             hard_count += 1
  1255.             relax_streak = 0
  1256.             checkstatuslastround = 2
  1257.  
  1258.         rating = round(rating)
  1259.  
  1260.         fp = open("log.txt", "a+")
  1261.         fp.write(repr(timecheckbefore) + "\n")
  1262.         fp.write("Keyboard Press = " + repr(keypress) + "\n")
  1263.         fp.write("Mouse Click = " + repr(mouseclick) + "\n")
  1264.         fp.write("Mouse Travel = " + repr(mousetravel) + "\n")
  1265.         fp.write("Mouse Scroll = " + repr(mousescroll) + "\n")
  1266.         fp.write("Average CPU Usage = " + repr(average_cpu) + "\n")
  1267.         fp.write("Average Memory Usage = " + repr(average_memory) + "\n")
  1268.         fp.write("Average Disk Usage = " + repr(average_disk) + "\n")
  1269.         fp.write("Rating = " + repr(rating) + "\n")
  1270.         fp.write("State = " + repr(wstate) + "\n" + "\n")
  1271.         fp.close()
  1272.  
  1273.     # put in database
  1274.     def average(minute):  # hourly
  1275.         global id
  1276.         global actualminute
  1277.         global total_cpu
  1278.         global total_memory
  1279.         global total_disk
  1280.         global keypress
  1281.         global mouseclick
  1282.         global mousetravel
  1283.         global mousescroll
  1284.         global rating
  1285.         global relax_count
  1286.         global work_count
  1287.         global hard_count
  1288.         global hour_cpu
  1289.         global hour_memory
  1290.         global hour_disk
  1291.         global hour_key
  1292.         global hour_mouseclick
  1293.         global hour_mousetravel
  1294.         global hour_mousescroll
  1295.         global hour_rating
  1296.         global hour_count
  1297.         global timecheckbefore
  1298.         global workingdate
  1299.         global last_minute
  1300.         global currentround
  1301.         global checkstatuslastround
  1302.  
  1303.         letskip = 0
  1304.         timecheckafter = datetime.datetime.now()
  1305.         if actualminute == 0:
  1306.             actualminute = 1
  1307.  
  1308.         currentround += 1
  1309.  
  1310.         count = actualminute + currentround
  1311.         tdelta = timecheckafter - timecheckbefore
  1312.         tdeltaday = timecheckafter.day - timecheckbefore.day
  1313.  
  1314.         print(tdelta.seconds)
  1315.  
  1316.         if count > 60 or tdeltaday > 0 or tdelta.seconds > 3600:  # when passed one hour or a day, set this round as the first round of the next hour --> letskip = 1
  1317.             hour_cpu = 0
  1318.             hour_memory = 0
  1319.             hour_disk = 0
  1320.             hour_key = 0
  1321.             hour_mouseclick = 0
  1322.             hour_mousetravel = 0
  1323.             hour_mousescroll = 0
  1324.             hour_rating = 0
  1325.             count = 1
  1326.             letskip = 1
  1327.             if tdeltaday > 0:
  1328.                 print("we made it next day!")
  1329.                 averageallData()
  1330.                 truncateData()
  1331.         # average data
  1332.         hour_cpu = hour_cpu + (total_cpu / 600)
  1333.         hour_memory = hour_memory + (total_memory / 600)
  1334.         hour_disk = hour_memory + (total_disk / 600)
  1335.         hour_key = hour_key + keypress
  1336.         hour_mouseclick = hour_mouseclick + mouseclick
  1337.         hour_mousetravel = hour_mousetravel + mousetravel
  1338.         hour_mousescroll = hour_mousescroll + mousescroll
  1339.         hour_rating = hour_rating + rating
  1340.  
  1341.         average_cpu = round(hour_cpu / count)
  1342.         average_memory = round(hour_memory / count)
  1343.         average_disk = round(hour_disk / count)
  1344.         average_key = round(hour_key / count)
  1345.         average_mouseclick = round(hour_mouseclick / count)
  1346.         average_mousetravel = round(hour_mousetravel / count)
  1347.         average_mousescroll = round(hour_mousescroll / count)
  1348.         average_rating = round(hour_rating / count)
  1349.  
  1350.         wstate = 'Relax'
  1351.         if work_count > relax_count:
  1352.             wstate = 'Working'
  1353.             if hard_count > work_count:
  1354.                 wstate = 'Hard Working'
  1355.             elif work_count == hard_count:
  1356.                 wstate = 'Balanced(Working,Hard Working)'
  1357.         elif hard_count > relax_count:
  1358.             wstate = 'Hard Working'
  1359.             if work_count > hard_count:
  1360.                 wstate = 'Working'
  1361.             elif work_count == hard_count:
  1362.                 wstate = 'Balanced(Working,Hard Working)'
  1363.         elif work_count == relax_count:
  1364.             wstate = 'Balanced(Relax,Working)'
  1365.             if hard_count > relax_count:
  1366.                 wstate = 'Hard Working'
  1367.             elif work_count == hard_count:
  1368.                 wstate = 'Balanced(All)'
  1369.         elif hard_count == relax_count:
  1370.             wstate = 'Balanced(Relax,Hard Working)'
  1371.             if work_count > relax_count:
  1372.                 wstate = 'Working'
  1373.             elif work_count == hard_count:
  1374.                 wstate = 'Balanced(All)'
  1375.         # first minute without any data
  1376.         if hour_count == 0:
  1377.             currentround = 0
  1378.             addData(timecheckbefore, timecheckafter, average_key, average_mouseclick, average_mousetravel,
  1379.                     average_mousescroll, average_cpu, average_memory, average_disk, average_rating, relax_count,
  1380.                     work_count, hard_count)
  1381.         elif letskip == 1:  # add new line in database
  1382.             # next hour
  1383.             if tdeltaday > 0:
  1384.                 hour_count = 0
  1385.             timecheckbefore = datetime.datetime.now()
  1386.             hour_cpu = 0
  1387.             hour_memory = 0
  1388.             hour_disk = 0
  1389.             hour_key = 0
  1390.             hour_mouseclick = 0
  1391.             hour_mousetravel = 0
  1392.             hour_mousescroll = 0
  1393.             hour_rating = 0
  1394.             actualminute = 0
  1395.             currentround = 0
  1396.             relax_count = 0
  1397.             work_count = 0
  1398.             hard_count = 0
  1399.  
  1400.             if checkstatuslastround == 0:
  1401.                 relax_count += 1
  1402.                 print("I have added relax count by one from compensation!")
  1403.             elif checkstatuslastround == 1:
  1404.                 work_count += 1
  1405.                 print("I have added work count by one from compensation!")
  1406.             elif checkstatuslastround == 2:
  1407.                 hard_count += 1
  1408.                 print("I have added hard count by one from compensation!")
  1409.  
  1410.             fp = open("log.txt", "a+")
  1411.             fp.write("Average to next line" + "\n")
  1412.             fp.write("Total time = " + repr(count) + "\n")
  1413.             fp.write("Keyboard Press = " + repr(average_key) + "\n")
  1414.             fp.write("Mouse Click = " + repr(average_mouseclick) + "\n")
  1415.             fp.write("Mouse Travel = " + repr(average_mousetravel) + "\n")
  1416.             fp.write("Mouse Scroll = " + repr(average_mousescroll) + "\n")
  1417.             fp.write("Average CPU Usage = " + repr(average_cpu) + "\n")
  1418.             fp.write("Average Memory Usage = " + repr(average_memory) + "\n")
  1419.             fp.write("Average Disk Usage = " + repr(average_disk) + "\n")
  1420.             fp.write("Rating = " + repr(average_rating) + "\n" + "\n")
  1421.             fp.write("Relax = " + repr(relax_count) + "\n")
  1422.             fp.write("Working = " + repr(work_count) + "\n")
  1423.             fp.write("Hard-work = " + repr(hard_count) + "\n" + "\n")
  1424.             fp.write("Most Used = " + repr(wstate) + "\n" + "\n")
  1425.             fp.close()
  1426.  
  1427.             if hour_count < 24:
  1428.                 hour_count += 1
  1429.                 addData(last_minute, timecheckafter, average_key, average_mouseclick, average_mousetravel,
  1430.                         average_mousescroll, average_cpu, average_memory, average_disk, average_rating, relax_count,
  1431.                         work_count, hard_count)
  1432.             else:
  1433.                 num = id * 24
  1434.                 deleteData(num)
  1435.                 addData(last_minute, timecheckafter, average_key, average_mouseclick, average_mousetravel,
  1436.                         average_mousescroll, average_cpu, average_memory, average_disk, average_rating, relax_count,
  1437.                         work_count, hard_count)
  1438.         else:
  1439.             updateData(timecheckafter, average_key, average_mouseclick, average_mousetravel, average_mousescroll,
  1440.                        average_cpu, average_memory, average_disk, average_rating, relax_count, work_count,
  1441.                        hard_count,
  1442.                        count)
  1443.         # reset per round
  1444.         rating = 0
  1445.         keypress = 0
  1446.         mouseclick = 0
  1447.         mousetravel = 0
  1448.         mousescroll = 0
  1449.         total_cpu = 0
  1450.         total_memory = 0
  1451.         total_disk = 0
  1452.  
  1453.     readData()
  1454.     print(limit)
  1455.     open('log.txt', 'w').close()
  1456.     while check == 0:
  1457.         TimeTrack(minute)
  1458.         average(minute)
  1459.         showwarning(minute)
  1460.         minute += 1
  1461.  
  1462.     minute = minute - 1
  1463.  
  1464.     if check == 1:
  1465.         ctypes.windll.user32.LockWorkStation()
  1466.     else:
  1467.         for i in range(minute, minute + 11):
  1468.             TimeTrack(i)
  1469.             average(i)
  1470.             if i == minute + 9:
  1471.                 showwarning(i)
  1472.         ctypes.windll.user32.LockWorkStation()
  1473.  
  1474.  
  1475. def mouse_key():
  1476.     print("Moue_key")
  1477.  
  1478.     def OnMouseEvent(event):
  1479.  
  1480.         global mouseclick
  1481.         global mousescroll
  1482.  
  1483.         if (event.Message == 514) or (event.Message == 517) or (event.Message == 520):
  1484.             mouseclick += 1
  1485.         if (event.Wheel):
  1486.             mousescroll += 1
  1487.         return True
  1488.  
  1489.     def OnKeyboardEvent(event):
  1490.  
  1491.         global keypress
  1492.         keypress += 1
  1493.         return True
  1494.  
  1495.     global mouseclick
  1496.     global mousescroll
  1497.     global keypress
  1498.  
  1499.     mousescroll = 0
  1500.     mouseclick = 0
  1501.     keypress = 0
  1502.  
  1503.     # hm = pyHook.HookManager()
  1504.     hm = PyHook3.HookManager()
  1505.     hm.MouseAll = OnMouseEvent
  1506.     hm.HookMouse()
  1507.     hm.KeyDown = OnKeyboardEvent
  1508.     hm.HookKeyboard()
  1509.     pythoncom.PumpMessages()
  1510.     hm.UnhookMouse()
  1511.     hm.UnHookKeyboard()
  1512.  
  1513. if __name__ == '__main__':
  1514.     # create window and application object
  1515.     root = Tk()
  1516.     # root.title("Login Form")
  1517.     UI(root)
  1518.     root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement