Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiguel Gonzalez <migonzalvar@gmail.com>2013-07-12 16:54:32 (GMT)
committer Miguel Gonzalez <migonzalvar@gmail.com>2013-07-12 16:54:32 (GMT)
commit9bc24a6351061ccf4af9af073099aa59ac13fa02 (patch)
tree3ceaf16b210fe1f670d5ef7a9b42ef9216cc1f6b
parenta46e5e98fd0c2421046e4bd6257a8b9e595c6cff (diff)
Tab to spaces and trim lines
-rw-r--r--stats_consolidation/db.py812
1 files changed, 406 insertions, 406 deletions
diff --git a/stats_consolidation/db.py b/stats_consolidation/db.py
index 1ec9d1d..3276b5c 100644
--- a/stats_consolidation/db.py
+++ b/stats_consolidation/db.py
@@ -9,426 +9,426 @@ from stats_consolidation.rrd_files import *
log = logging.getLogger("stats-consolidation")
class DB_Stats:
- TABLES={}
-
- TABLES['Usages'] = (
- "CREATE TABLE `Usages` ("
- " `ts` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,"
- " `user_hash` CHAR(40) NOT NULL,"
- " `resource_name` CHAR(80),"
- " `start_date` TIMESTAMP NOT NULL,"
- " `data_type` CHAR (30) NOT NULL,"
- " `data` INTEGER NOT NULL,"
- " PRIMARY KEY (`user_hash`,`start_date`,`resource_name`, `data_type`)"
- " )")
-
- TABLES['Resources'] = (
- "CREATE TABLE Resources ("
- " `name` CHAR(250),"
- " PRIMARY KEY (name)"
- " )")
-
- TABLES['Users'] = (
- "CREATE TABLE Users("
- " `hash` CHAR (40) NOT NULL,"
- " `uuid` CHAR (32) NOT NULL,"
- " `machine_sn` CHAR(80),"
- " `age` INTEGER NOT NULL,"
- " `school` CHAR(80),"
- " `sw_version` CHAR (80),"
- " `ts` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,"
- " PRIMARY KEY (hash)"
- " )")
-
- TABLES['Runs'] = (
- "CREATE TABLE Runs("
- " `last_ts` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP "
- ")")
-
-
- def __init__(self, db_name, user, password):
- self.db_name = db_name
- self.user = user
- self.password = password
-
-
- def create_database(self, cursor):
- try:
- cursor.execute(
- "CREATE DATABASE {0} DEFAULT CHARACTER SET 'utf8'".format(self.db_name))
- except mysql.connector.Error as err:
- raise Exception ("Failed creating database: {0}".format(err))
-
- def create_tables(self, cursor):
- for name, ddl in self.TABLES.iteritems():
- try:
- log.info('Creating table %s:', name)
- cursor.execute(ddl)
- except mysql.connector.Error as err:
- if err.errno == errorcode.ER_TABLE_EXISTS_ERROR:
- log.warning('Table %s already exists.', name)
- else:
- raise Exception ("Error: {0}".format(err))
- else:
- log.info('Table %s crated', name)
-
- def create (self):
- self.cnx = mysql.connector.connect(user=self.user, password=self.password)
- cursor = self.cnx.cursor()
- """Try connect to db """
- try:
- self.cnx.database = self.db_name
- log.info('Data Base %s already created, will create tables', self.db_name)
- self.create_tables(cursor)
- except mysql.connector.Error as err:
- """If db not exist, then create"""
- if err.errno == errorcode.ER_BAD_DB_ERROR:
- self.create_database(cursor)
- self.cnx.database = self.db_name
- self.create_tables(cursor)
- else:
- raise Exception ("Error: {0}".format(err))
- cursor.close()
-
-
-
-
- def close (self):
- self.cnx.close()
-
- def connect (self):
- try:
- self.cnx = mysql.connector.connect(user=self.user, password=self.password)
- cursor = self.cnx.cursor()
- self.cnx.database = self.db_name
- cursor.close()
- except mysql.connector.Error as err:
- raise Exception ("Error: {0}".format(err))
+ TABLES={}
+
+ TABLES['Usages'] = (
+ "CREATE TABLE `Usages` ("
+ " `ts` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,"
+ " `user_hash` CHAR(40) NOT NULL,"
+ " `resource_name` CHAR(80),"
+ " `start_date` TIMESTAMP NOT NULL,"
+ " `data_type` CHAR (30) NOT NULL,"
+ " `data` INTEGER NOT NULL,"
+ " PRIMARY KEY (`user_hash`,`start_date`,`resource_name`, `data_type`)"
+ " )")
+
+ TABLES['Resources'] = (
+ "CREATE TABLE Resources ("
+ " `name` CHAR(250),"
+ " PRIMARY KEY (name)"
+ " )")
+
+ TABLES['Users'] = (
+ "CREATE TABLE Users("
+ " `hash` CHAR (40) NOT NULL,"
+ " `uuid` CHAR (32) NOT NULL,"
+ " `machine_sn` CHAR(80),"
+ " `age` INTEGER NOT NULL,"
+ " `school` CHAR(80),"
+ " `sw_version` CHAR (80),"
+ " `ts` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,"
+ " PRIMARY KEY (hash)"
+ " )")
+
+ TABLES['Runs'] = (
+ "CREATE TABLE Runs("
+ " `last_ts` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP "
+ ")")
+
+
+ def __init__(self, db_name, user, password):
+ self.db_name = db_name
+ self.user = user
+ self.password = password
+
+
+ def create_database(self, cursor):
+ try:
+ cursor.execute(
+ "CREATE DATABASE {0} DEFAULT CHARACTER SET 'utf8'".format(self.db_name))
+ except mysql.connector.Error as err:
+ raise Exception ("Failed creating database: {0}".format(err))
+
+ def create_tables(self, cursor):
+ for name, ddl in self.TABLES.iteritems():
+ try:
+ log.info('Creating table %s:', name)
+ cursor.execute(ddl)
+ except mysql.connector.Error as err:
+ if err.errno == errorcode.ER_TABLE_EXISTS_ERROR:
+ log.warning('Table %s already exists.', name)
+ else:
+ raise Exception ("Error: {0}".format(err))
+ else:
+ log.info('Table %s crated', name)
+
+ def create (self):
+ self.cnx = mysql.connector.connect(user=self.user, password=self.password)
+ cursor = self.cnx.cursor()
+ """Try connect to db """
+ try:
+ self.cnx.database = self.db_name
+ log.info('Data Base %s already created, will create tables', self.db_name)
+ self.create_tables(cursor)
+ except mysql.connector.Error as err:
+ """If db not exist, then create"""
+ if err.errno == errorcode.ER_BAD_DB_ERROR:
+ self.create_database(cursor)
+ self.cnx.database = self.db_name
+ self.create_tables(cursor)
+ else:
+ raise Exception ("Error: {0}".format(err))
+ cursor.close()
+
+
+
+
+ def close (self):
+ self.cnx.close()
+
+ def connect (self):
+ try:
+ self.cnx = mysql.connector.connect(user=self.user, password=self.password)
+ cursor = self.cnx.cursor()
+ self.cnx.database = self.db_name
+ cursor.close()
+ except mysql.connector.Error as err:
+ raise Exception ("Error: {0}".format(err))
#=========================================================================================================
-# Q U E R I E S S A V E M E T H O D S
+# Q U E R I E S S A V E M E T H O D S
#=========================================================================================================
-
- def store_activity_uptime (self, rrd):
- self.store_activity_time (rrd, 'uptime')
-
- def store_activity_focus_time (self, rrd):
- self.store_activity_time(rrd, 'active')
-
-
-
- def store_activity_time(self, rrd, data_type):
-
- self.store_resource(rrd.get_name())
- self.store_user(rrd)
-
- cursor = self.cnx.cursor()
- select = ("SELECT * FROM Usages WHERE "
- "user_hash = %s AND "
- "resource_name = %s AND "
- "start_date = %s AND "
- "data_type = %s")
- update = ("UPDATE Usages SET data = %s WHERE "
- "user_hash = %s AND "
- "resource_name = %s AND "
- "start_date = %s AND "
- "data_type = %s")
- insert = ("INSERT INTO Usages "
- "(user_hash, "
- "resource_name, "
- "start_date, "
- "data_type, "
- "data) "
- "VALUES (%s, %s, %s, %s ,%s) ")
-
- for d in rrd.get_last_value_by_interval(data_type):
- info_sel = (rrd.get_user_hash(), rrd.get_name() , datetime.fromtimestamp(float(d[0])), data_type)
- try:
- """Verify if this activity has an entry already at the same start_date"""
- cursor.execute (select, info_sel)
- result = cursor.fetchone()
-
- if result != None:
- log.info('Update %s \'%s\' entry for resource \'%s\' ', data_type, d[1], rrd.get_name())
- info_up = (d[1], rrd.get_user_hash(), rrd.get_name() , datetime.fromtimestamp(float(d[0])), data_type)
- cursor.execute(update, info_up)
- else:
- log.info('New %s \'%s\' entry for resource \'%s\'', data_type, d[1], rrd.get_name())
- info_ins = (rrd.get_user_hash(), rrd.get_name() , datetime.fromtimestamp(float(d[0])), data_type, d[1])
- cursor.execute(insert, info_ins)
-
- self.cnx.commit()
-
- except mysql.connector.Error as err:
- log.error('MySQL on store_activiy_time()%s: %s %s', data_type, cursor.statement, err)
- cursor.close()
-
-
- def store_resource(self, resource_name):
- cursor = self.cnx.cursor()
- op = ("SELECT name FROM Resources WHERE name = %s")
- params = (resource_name,)
- try:
- cursor.execute(op, params)
- result = cursor.fetchone()
- if result != None:
- log.debug('Resource %s already present in DB', resource_name)
- else:
- insert = ("INSERT INTO Resources (name) VALUES (%s)")
- info = (resource_name, )
- cursor.execute(insert, info)
- self.cnx.commit()
- log.info('New Resource %s stored in DB', resource_name)
- except mysql.connector.Error as err:
- log.error('MySQL on store_resource: %s %s', cursor.statement, err)
-
- cursor.close()
-
- def store_user (self, rrd):
- cursor = self.cnx.cursor()
- op = ("SELECT hash FROM Users WHERE hash = %s")
- params = (rrd.get_user_hash(), )
- try:
- cursor.execute(op, params)
- result = cursor.fetchone()
- if result != None:
- log.debug('User %s already in DB', rrd.user_hash)
- else:
- insert = ("INSERT INTO Users (hash, uuid, machine_sn, age, school, sw_version) VALUES (%s, %s, %s, %s, %s, %s)")
- params = (rrd.get_user_hash(), rrd.get_uuid(), rrd.get_sn(), rrd.get_age(), rrd.get_school(), "1.0.0")
- cursor.execute(insert, params)
- self.cnx.commit()
- log.debug('New User %s stored in DB', rrd.user_hash)
- except mysql.connector.Error as err:
- log.error('MySQL on store_user %s %s', cursor.statement, err)
-
- cursor.close()
-
-
-
- def update_last_record (self):
- cursor = self.cnx.cursor()
- res = 0
- op = ("SELECT * FROM Runs")
- try:
- cursor.execute(op)
- result = cursor.fetchone()
-
- if result != None:
- op = ("UPDATE Runs SET last_ts = CURRENT_TIMESTAMP")
- cursor.execute(op)
- self.cnx.commit()
- else:
- op = ("INSERT INTO Runs VALUES(CURRENT_TIMESTAMP)")
- cursor.execute(op)
- self.cnx.commit()
- log.info("Save last record");
- except mysql.connector.Error as err:
- log.error('MySQL on update_last_record: %s %s', cursor.statement, err)
- res = -1
-
- cursor.close()
- return res
-
- def get_date_last_record (self):
- cursor = self.cnx.cursor()
- op = ("SELECT UNIX_TIMESTAMP ((SELECT last_ts FROM Runs))")
- try:
- cursor.execute(op)
- result = cursor.fetchone()
- if result != None and result[0] != None:
- log.info('Last record: %s', str(datetime.fromtimestamp (float (result[0]))))
- return result[0]
- else:
- log.info('Last date record is None')
- return 0
- except mysql.connector.Error as err:
- log.error('MySQL on get_date_last_record: %s %s',cursor.statement, err)
- except Exception as e:
- raise Exception ("get_date_last_record: {0}".format(e))
- cursor.close()
+
+ def store_activity_uptime (self, rrd):
+ self.store_activity_time (rrd, 'uptime')
+
+ def store_activity_focus_time (self, rrd):
+ self.store_activity_time(rrd, 'active')
+
+
+
+ def store_activity_time(self, rrd, data_type):
+
+ self.store_resource(rrd.get_name())
+ self.store_user(rrd)
+
+ cursor = self.cnx.cursor()
+ select = ("SELECT * FROM Usages WHERE "
+ "user_hash = %s AND "
+ "resource_name = %s AND "
+ "start_date = %s AND "
+ "data_type = %s")
+ update = ("UPDATE Usages SET data = %s WHERE "
+ "user_hash = %s AND "
+ "resource_name = %s AND "
+ "start_date = %s AND "
+ "data_type = %s")
+ insert = ("INSERT INTO Usages "
+ "(user_hash, "
+ "resource_name, "
+ "start_date, "
+ "data_type, "
+ "data) "
+ "VALUES (%s, %s, %s, %s ,%s) ")
+
+ for d in rrd.get_last_value_by_interval(data_type):
+ info_sel = (rrd.get_user_hash(), rrd.get_name() , datetime.fromtimestamp(float(d[0])), data_type)
+ try:
+ """Verify if this activity has an entry already at the same start_date"""
+ cursor.execute (select, info_sel)
+ result = cursor.fetchone()
+
+ if result != None:
+ log.info('Update %s \'%s\' entry for resource \'%s\' ', data_type, d[1], rrd.get_name())
+ info_up = (d[1], rrd.get_user_hash(), rrd.get_name() , datetime.fromtimestamp(float(d[0])), data_type)
+ cursor.execute(update, info_up)
+ else:
+ log.info('New %s \'%s\' entry for resource \'%s\'', data_type, d[1], rrd.get_name())
+ info_ins = (rrd.get_user_hash(), rrd.get_name() , datetime.fromtimestamp(float(d[0])), data_type, d[1])
+ cursor.execute(insert, info_ins)
+
+ self.cnx.commit()
+
+ except mysql.connector.Error as err:
+ log.error('MySQL on store_activiy_time()%s: %s %s', data_type, cursor.statement, err)
+ cursor.close()
+
+
+ def store_resource(self, resource_name):
+ cursor = self.cnx.cursor()
+ op = ("SELECT name FROM Resources WHERE name = %s")
+ params = (resource_name,)
+ try:
+ cursor.execute(op, params)
+ result = cursor.fetchone()
+ if result != None:
+ log.debug('Resource %s already present in DB', resource_name)
+ else:
+ insert = ("INSERT INTO Resources (name) VALUES (%s)")
+ info = (resource_name, )
+ cursor.execute(insert, info)
+ self.cnx.commit()
+ log.info('New Resource %s stored in DB', resource_name)
+ except mysql.connector.Error as err:
+ log.error('MySQL on store_resource: %s %s', cursor.statement, err)
+
+ cursor.close()
+
+ def store_user (self, rrd):
+ cursor = self.cnx.cursor()
+ op = ("SELECT hash FROM Users WHERE hash = %s")
+ params = (rrd.get_user_hash(), )
+ try:
+ cursor.execute(op, params)
+ result = cursor.fetchone()
+ if result != None:
+ log.debug('User %s already in DB', rrd.user_hash)
+ else:
+ insert = ("INSERT INTO Users (hash, uuid, machine_sn, age, school, sw_version) VALUES (%s, %s, %s, %s, %s, %s)")
+ params = (rrd.get_user_hash(), rrd.get_uuid(), rrd.get_sn(), rrd.get_age(), rrd.get_school(), "1.0.0")
+ cursor.execute(insert, params)
+ self.cnx.commit()
+ log.debug('New User %s stored in DB', rrd.user_hash)
+ except mysql.connector.Error as err:
+ log.error('MySQL on store_user %s %s', cursor.statement, err)
+
+ cursor.close()
+
+
+
+ def update_last_record (self):
+ cursor = self.cnx.cursor()
+ res = 0
+ op = ("SELECT * FROM Runs")
+ try:
+ cursor.execute(op)
+ result = cursor.fetchone()
+
+ if result != None:
+ op = ("UPDATE Runs SET last_ts = CURRENT_TIMESTAMP")
+ cursor.execute(op)
+ self.cnx.commit()
+ else:
+ op = ("INSERT INTO Runs VALUES(CURRENT_TIMESTAMP)")
+ cursor.execute(op)
+ self.cnx.commit()
+ log.info("Save last record");
+ except mysql.connector.Error as err:
+ log.error('MySQL on update_last_record: %s %s', cursor.statement, err)
+ res = -1
+
+ cursor.close()
+ return res
+
+ def get_date_last_record (self):
+ cursor = self.cnx.cursor()
+ op = ("SELECT UNIX_TIMESTAMP ((SELECT last_ts FROM Runs))")
+ try:
+ cursor.execute(op)
+ result = cursor.fetchone()
+ if result != None and result[0] != None:
+ log.info('Last record: %s', str(datetime.fromtimestamp (float (result[0]))))
+ return result[0]
+ else:
+ log.info('Last date record is None')
+ return 0
+ except mysql.connector.Error as err:
+ log.error('MySQL on get_date_last_record: %s %s',cursor.statement, err)
+ except Exception as e:
+ raise Exception ("get_date_last_record: {0}".format(e))
+ cursor.close()
#=========================================================================================================
-# R E P O R T M E T H O D S
+# R E P O R T M E T H O D S
#=========================================================================================================
- def rep_activity_time (self, start, end, activity, school=None):
- uptime_last=0
- activity_name=''
- focus = 0
- uptime = 0
- ts_start = self.date_to_ts(start)
- ts_end = self.date_to_ts(end)
-
- cursor1 = self.cnx.cursor()
- cursor2 = self.cnx.cursor()
- try:
- if school != None:
- select_usage = "SELECT SUM(data) FROM Usages WHERE (resource_name = %s) AND (start_date > %s) AND (start_date < %s) AND (data_type = %s) AND (user_hash = %s)"
-
- log.debug('Activiy time by school: %s', school)
- """ Get user hash from a School"""
- cursor1.execute ("SELECT hash FROM Users WHERE school = %s", (school,))
- user_hashes = cursor1.fetchall()
- for user_hash in user_hashes:
- log.debug('user Hash: %s', user_hash[0])
- params_focus = (activity, ts_start, ts_end, 'active', user_hash[0])
- params_uptime = (activity, ts_start, ts_end, 'uptime', user_hash[0])
-
- cursor2.execute(select_usage, params_focus)
- focus = float (cursor2.fetchone()[0]) + focus
- cursor2.execute(select_usage, params_uptime)
- uptime = float (cursor2.fetchone()[0]) + uptime
-
- else:
- select_usage = "SELECT SUM(data) FROM Usages WHERE (resource_name = %s) AND (start_date > %s) AND (start_date < %s) AND (data_type = %s)"
- params_focus = (activity, ts_start, ts_end, 'active')
- params_uptime = (activity, ts_start, ts_end, 'uptime')
- cursor2.execute(select_usage, params_focus)
- focus = float(cursor2.fetchone()[0])
- cursor2.execute(select_usage, params_uptime)
- uptime = float(cursor2.fetchone()[0])
-
- log.debug('Times of (%s) from: %s -> %s: Uptime: %s, Focus: %s', activity, start, end, uptime, focus)
-
-
- cursor1.close()
- cursor2.close()
- return (uptime, focus)
- except mysql.connector.Error as err:
- log.error('MySQL on rep_activity_time %s', err)
- except Exception as e:
- log.error('MySQL on rep_activity_time : %s', e)
- return (None, None)
-
-
-
- def rep_get_activities (self, start, end, school=None, desktop='any'):
- res_list = list();
- cursor1 = self.cnx.cursor()
- cursor2 = self.cnx.cursor()
- cursor3 = self.cnx.cursor()
-
- if desktop == 'gnome':
- cursor2.execute("SELECT name FROM Resources WHERE name REGEXP 'application'")
- elif desktop == 'sugar':
- cursor2.execute("SELECT name FROM Resources WHERE name REGEXP 'activity'")
- else:
- cursor2.execute("SELECT name FROM Resources")
-
- resources = cursor2.fetchall()
-
- try:
- if school != None:
- log.debug('Most activiy used by school: %s', school)
- """ Get user hash from a School"""
- cursor1.execute ("SELECT hash FROM Users WHERE school = %s", (school,))
- user_hashes = cursor1.fetchall()
- """ Cursor for select resources from Uages table"""
- select_usage = "SELECT SUM(data) FROM Usages WHERE (resource_name = %s) AND (start_date > %s) AND (start_date < %s) AND (data_type = 'active') AND (user_hash = %s)"
- else:
- log.debug('Most activiy used')
- """ Cursor for select resources from Uages table"""
- select_usage = "SELECT SUM(data) FROM Usages WHERE (resource_name = %s) AND (start_date > %s) AND (start_date < %s) AND (data_type = 'active')"
-
-
-
- ts_start = self.date_to_ts(start)
- ts_end = self.date_to_ts(end)
-
-
- for resource in resources:
- log.debug('Resource: %s', resource[0])
- if self.is_an_activity (resource[0]):
- if school != None:
- for user_hash in user_hashes:
- log.debug('user Hash: %s', user_hash[0])
- cursor3.execute(select_usage, (resource[0], ts_start, ts_end, user_hash[0]))
- focus = cursor3.fetchone()[0]
- if focus == None: focus = 0
-
- log.debug('Focus time: %s', focus)
- res_list.append((resource[0], focus))
- else:
- cursor3.execute(select_usage, (resource[0], ts_start, ts_end))
- focus = cursor3.fetchone()[0]
- if focus == None: focus = 0
- log.debug('Focus time: %s', focus )
- res_list.append((resource[0], focus))
-
- except mysql.connector.Error as err:
- log.error('MySQL on most_activity_used %s', err)
- except Exception as e:
- log.error('most_activity_used Fail: %s', e)
- cursor1.close()
- cursor2.close()
- cursor3.close()
- log.debug ('Activities: %s', sorted(res_list, key=lambda x: x[1], reverse=True))
- return sorted(res_list, key=lambda x: x[1], reverse=True)
-
-
-
- def rep_frequency_usage (self, start, end, school=None):
- cursor1 = self.cnx.cursor()
- cursor2 = self.cnx.cursor()
- user_hashes=()
- time = 0
- try:
- ts_start = self.date_to_ts(start)
- ts_end = self.date_to_ts(end)
-
- if school != None:
- log.debug('Frequency usage by school: %s', school)
- """ Get user hash from a School"""
- cursor1.execute ("SELECT hash FROM Users WHERE school = %s", (school,))
- user_hashes = cursor1.fetchall()
-
- for user_hash in user_hashes:
- cursor2.execute("SELECT SUM(data) FROM Usages WHERE (resource_name = 'system') AND (start_date > %s) AND (start_date < %s) AND (data_type = 'uptime') AND (user_hash = %s)", (ts_start, ts_end, user_hash[0]))
- res = cursor2.fetchone()
- if res != None and res[0] != None:
- time = float (res[0]) + time
- else:
- log.debug('Frequency usage')
- cursor1.execute ("SELECT hash FROM Users")
- user_hashes = cursor1.fetchall()
- cursor2.execute("SELECT SUM(data) FROM Usages WHERE (resource_name = 'system') AND (start_date > %s) AND (start_date < %s) AND (data_type = 'uptime')", (ts_start, ts_end))
- time = cursor2.fetchone()[0]
-
- return (time, len(user_hashes))
-
-
- except mysql.connector.Error as err:
- log.error("MySQL on %s: %s", cursor.statement, err)
- cursor1.close()
- cursor2.close()
-
-
- def rep_update_school(self, machine_sn, school):
- cursor = self.cnx.cursor()
- try:
- log.debug("Set school name: %s to user with machine_sn: %s", school, machine_sn)
- cursor.execute ("UPDATE Users SET school = %s WHERE machine_sn = %s", (school, machine_sn))
- except mysql.connector.Error as err:
- log.error("MySQL on %s: %s", cursor.statement, err)
-
- cursor.close()
+ def rep_activity_time (self, start, end, activity, school=None):
+ uptime_last=0
+ activity_name=''
+ focus = 0
+ uptime = 0
+ ts_start = self.date_to_ts(start)
+ ts_end = self.date_to_ts(end)
+
+ cursor1 = self.cnx.cursor()
+ cursor2 = self.cnx.cursor()
+ try:
+ if school != None:
+ select_usage = "SELECT SUM(data) FROM Usages WHERE (resource_name = %s) AND (start_date > %s) AND (start_date < %s) AND (data_type = %s) AND (user_hash = %s)"
+
+ log.debug('Activiy time by school: %s', school)
+ """ Get user hash from a School"""
+ cursor1.execute ("SELECT hash FROM Users WHERE school = %s", (school,))
+ user_hashes = cursor1.fetchall()
+ for user_hash in user_hashes:
+ log.debug('user Hash: %s', user_hash[0])
+ params_focus = (activity, ts_start, ts_end, 'active', user_hash[0])
+ params_uptime = (activity, ts_start, ts_end, 'uptime', user_hash[0])
+
+ cursor2.execute(select_usage, params_focus)
+ focus = float (cursor2.fetchone()[0]) + focus
+ cursor2.execute(select_usage, params_uptime)
+ uptime = float (cursor2.fetchone()[0]) + uptime
+
+ else:
+ select_usage = "SELECT SUM(data) FROM Usages WHERE (resource_name = %s) AND (start_date > %s) AND (start_date < %s) AND (data_type = %s)"
+ params_focus = (activity, ts_start, ts_end, 'active')
+ params_uptime = (activity, ts_start, ts_end, 'uptime')
+ cursor2.execute(select_usage, params_focus)
+ focus = float(cursor2.fetchone()[0])
+ cursor2.execute(select_usage, params_uptime)
+ uptime = float(cursor2.fetchone()[0])
+
+ log.debug('Times of (%s) from: %s -> %s: Uptime: %s, Focus: %s', activity, start, end, uptime, focus)
+
+
+ cursor1.close()
+ cursor2.close()
+ return (uptime, focus)
+ except mysql.connector.Error as err:
+ log.error('MySQL on rep_activity_time %s', err)
+ except Exception as e:
+ log.error('MySQL on rep_activity_time : %s', e)
+ return (None, None)
+
+
+
+ def rep_get_activities (self, start, end, school=None, desktop='any'):
+ res_list = list();
+ cursor1 = self.cnx.cursor()
+ cursor2 = self.cnx.cursor()
+ cursor3 = self.cnx.cursor()
+
+ if desktop == 'gnome':
+ cursor2.execute("SELECT name FROM Resources WHERE name REGEXP 'application'")
+ elif desktop == 'sugar':
+ cursor2.execute("SELECT name FROM Resources WHERE name REGEXP 'activity'")
+ else:
+ cursor2.execute("SELECT name FROM Resources")
+
+ resources = cursor2.fetchall()
+
+ try:
+ if school != None:
+ log.debug('Most activiy used by school: %s', school)
+ """ Get user hash from a School"""
+ cursor1.execute ("SELECT hash FROM Users WHERE school = %s", (school,))
+ user_hashes = cursor1.fetchall()
+ """ Cursor for select resources from Uages table"""
+ select_usage = "SELECT SUM(data) FROM Usages WHERE (resource_name = %s) AND (start_date > %s) AND (start_date < %s) AND (data_type = 'active') AND (user_hash = %s)"
+ else:
+ log.debug('Most activiy used')
+ """ Cursor for select resources from Uages table"""
+ select_usage = "SELECT SUM(data) FROM Usages WHERE (resource_name = %s) AND (start_date > %s) AND (start_date < %s) AND (data_type = 'active')"
+
+
+
+ ts_start = self.date_to_ts(start)
+ ts_end = self.date_to_ts(end)
+
+
+ for resource in resources:
+ log.debug('Resource: %s', resource[0])
+ if self.is_an_activity (resource[0]):
+ if school != None:
+ for user_hash in user_hashes:
+ log.debug('user Hash: %s', user_hash[0])
+ cursor3.execute(select_usage, (resource[0], ts_start, ts_end, user_hash[0]))
+ focus = cursor3.fetchone()[0]
+ if focus == None: focus = 0
+
+ log.debug('Focus time: %s', focus)
+ res_list.append((resource[0], focus))
+ else:
+ cursor3.execute(select_usage, (resource[0], ts_start, ts_end))
+ focus = cursor3.fetchone()[0]
+ if focus == None: focus = 0
+ log.debug('Focus time: %s', focus )
+ res_list.append((resource[0], focus))
+
+ except mysql.connector.Error as err:
+ log.error('MySQL on most_activity_used %s', err)
+ except Exception as e:
+ log.error('most_activity_used Fail: %s', e)
+ cursor1.close()
+ cursor2.close()
+ cursor3.close()
+ log.debug ('Activities: %s', sorted(res_list, key=lambda x: x[1], reverse=True))
+ return sorted(res_list, key=lambda x: x[1], reverse=True)
+
+
+
+ def rep_frequency_usage (self, start, end, school=None):
+ cursor1 = self.cnx.cursor()
+ cursor2 = self.cnx.cursor()
+ user_hashes=()
+ time = 0
+ try:
+ ts_start = self.date_to_ts(start)
+ ts_end = self.date_to_ts(end)
+
+ if school != None:
+ log.debug('Frequency usage by school: %s', school)
+ """ Get user hash from a School"""
+ cursor1.execute ("SELECT hash FROM Users WHERE school = %s", (school,))
+ user_hashes = cursor1.fetchall()
+
+ for user_hash in user_hashes:
+ cursor2.execute("SELECT SUM(data) FROM Usages WHERE (resource_name = 'system') AND (start_date > %s) AND (start_date < %s) AND (data_type = 'uptime') AND (user_hash = %s)", (ts_start, ts_end, user_hash[0]))
+ res = cursor2.fetchone()
+ if res != None and res[0] != None:
+ time = float (res[0]) + time
+ else:
+ log.debug('Frequency usage')
+ cursor1.execute ("SELECT hash FROM Users")
+ user_hashes = cursor1.fetchall()
+ cursor2.execute("SELECT SUM(data) FROM Usages WHERE (resource_name = 'system') AND (start_date > %s) AND (start_date < %s) AND (data_type = 'uptime')", (ts_start, ts_end))
+ time = cursor2.fetchone()[0]
+
+ return (time, len(user_hashes))
+
+
+ except mysql.connector.Error as err:
+ log.error("MySQL on %s: %s", cursor.statement, err)
+ cursor1.close()
+ cursor2.close()
+
+
+ def rep_update_school(self, machine_sn, school):
+ cursor = self.cnx.cursor()
+ try:
+ log.debug("Set school name: %s to user with machine_sn: %s", school, machine_sn)
+ cursor.execute ("UPDATE Users SET school = %s WHERE machine_sn = %s", (school, machine_sn))
+ except mysql.connector.Error as err:
+ log.error("MySQL on %s: %s", cursor.statement, err)
+
+ cursor.close()
#=========================================================================================================
-# A U X I L I A R M E T H O D S
+# A U X I L I A R M E T H O D S
#=========================================================================================================
- def is_an_activity(self, name):
- if (name != 'system') and (name != 'journal') and (name != 'network') and (name != 'shell'):
- return True
- else:
- return False
+ def is_an_activity(self, name):
+ if (name != 'system') and (name != 'journal') and (name != 'network') and (name != 'shell'):
+ return True
+ else:
+ return False
+
+ def date_to_ts(self, date):
+ return datetime.strptime(date, "%Y-%m-%d")
- def date_to_ts(self, date):
- return datetime.strptime(date, "%Y-%m-%d")
-