# -*- coding: utf-8 -*- import sqlite3 import time import re import syslog import traceback DATABASE = '/var/log/activity.sq3' # Activities LOG_CLEARED = 110 USER_CREATED = 100 USER_CHANGED = 101 USER_REMOVED = 102 GROUP_CREATED = 103 GROUP_CHANGED = 104 GROUP_REMOVED = 105 PERMISSION_CHANGED = 106 MEMBERSHIP_ADDED = 108 MEMBERSHIP_REMOVED = 109 TIME_CHANGED = 501 PASSWORD_CHANGED = 503 BMS_CHANGED = 504 BCOUNTER_CHANGED = 505 CHANNEL_CHANGED = 506 GUI_SETTINGS_CHANGED = 507 RESSRV_CHANGED = 508 RESFTP_CHANGED = 509 OPENPRT_CHANGED = 510 WLAN_CHANGED = 511 IPM_CHANGED = 512 FCC_CHANGED = 513 QCODE_CHANGED = 514 VW_XML_CHANGED = 515 SIGNALING_CHANGED = 516 AFOLIST_CHANGED = 517 SCANNER_CHANGED = 518 SECURITY_CHANGED = 519 ASSIGN_CHANGED = 520 RESULT_DB_REMOVED = 521 GUI_LASERWARNING_CHANGED = 522 NXSD_CHANGED = 523 HTTP_CHANGED = 524 NFS_CHANGED = 525 NOK_RESULT_ACKNOWLEDGED = 526 RESET_TO_FACTORY = 527 SYS_ERRORS_ACK = 600 SYS_ERRORS_DEL = 601 FILE_SAVED = 700 FILE_NEW = 701 FILE_DELETED = 702 DIRECTORY_NEW = 703 DIRECTORY_DELETED = 704 PATH_RENAMED = 705 FILE_UPLOAD = 706 TORQUE_UNIT_CHANGED = 707 PRG_CREATED = 800 PRG_CHANGED = 801 PRG_REMOVED = 802 JOB_CREATED = 803 JOB_CHANGED = 804 JOB_REMOVED = 805 MASTERJOB_CHANGED = 806 TYPEPLATE_CHANGED = 900 FIRMWARE_CHANGED = 901 RE_SINGLE_QUOTE = re.compile("'") conn = sqlite3.connect(DATABASE) c = conn.cursor() c.execute("select name from sqlite_master where type = 'table'") if not c.fetchall(): c.execute("CREATE TABLE activity (id INTEGER PRIMARY KEY, timestamp NUMERIC, user NUMERIC, code NUMERIC, value1 TEXT, value2 TEXT, value3 TEXT, value4 TEXT);") conn.commit() def _doubleQuotes(val): if not isinstance(val, unicode): if not isinstance(val, str): val = str(val) return val.replace("'", "''") def LOG(session, code, *args): timestamp = int(time.time()) if session.auth: user = session.auth.user.id else: user = -1 value1 = args[0] if len(args) > 0 else '' value2 = args[1] if len(args) > 1 else '' value3 = args[2] if len(args) > 2 else '' value4 = args[3] if len(args) > 3 else '' try: value1 = _doubleQuotes(value1) value2 = _doubleQuotes(value2) value3 = _doubleQuotes(value3) value4 = _doubleQuotes(value4) value1 = unicode(value1, "utf-8") if not isinstance(value1, unicode) else value1 value2 = unicode(value2, "utf-8") if not isinstance(value2, unicode) else value2 value3 = unicode(value3, "utf-8") if not isinstance(value3, unicode) else value3 value4 = unicode(value4, "utf-8") if not isinstance(value4, unicode) else value4 except: syslog.syslog(syslog.LOG_ERR, traceback.format_exc()) conn = sqlite3.connect(DATABASE) c = conn.cursor() c.execute("INSERT INTO activity (timestamp,user,code,value1,value2,value3,value4) VALUES (?, ?, ?, ?, ?, ?, ?)", (timestamp, user, code, value1, value2, value3, value4)) #sqlStr = unicode("INSERT INTO activity (timestamp,user,code,value1,value2,value3,value4) VALUES ({0}, {1}, {2}, '{3}', '{4}', '{5}', '{6}')").format(timestamp, user, code, value1.decode('utf-8'), value2.decode('utf-8'), value3.decode('utf-8'), value4.decode('utf-8')) #sqlStr = sqlStr.encode("utf-8") #c.execute(sqlStr) conn.commit() conn.close() def getEntries(): conn = sqlite3.connect(DATABASE) c = conn.cursor() c.execute("DELETE FROM activity WHERE id IN (SELECT id FROM activity ORDER BY timestamp DESC LIMIT -1 OFFSET 500)") conn.commit() c.execute("SELECT id,timestamp,user,code,value1,value2,value3,value4 FROM activity") data = c.fetchall() conn.close() res = [] for d in data: res.append({'id':d[0], 'timestamp':d[1], 'user':d[2], 'code':d[3], 'value1':d[4], 'value2':d[5], 'value3':d[6], 'value4':d[7]}) return res def clearLog(session): conn = sqlite3.connect(DATABASE) c = conn.cursor() c.execute("DELETE FROM activity WHERE id>0") conn.commit() conn.close() LOG(session, LOG_CLEARED)