| #!/usr/bin/python -u | |
| # | |
| # Processing of the queries results | |
| # | |
| import sys | |
| import index | |
| import time | |
| import traceback | |
| import string | |
| if index.openMySQL(verbose = 0) < 0: | |
| print "Failed to connect to the MySQL database" | |
| sys.exit(1) | |
| DB = index.DB | |
| def getTopQueriesDB(base = "Queries", number = 50): | |
| global DB | |
| try: | |
| import os | |
| os.mkdir("searches") | |
| except: | |
| pass | |
| date = time.strftime("%Y%m%d") | |
| f = open("searches/%s-%s.xml" % (base, date), "w") | |
| c = DB.cursor() | |
| try: | |
| ret = c.execute("""select sum(Count) from %s""" % (base)) | |
| row = c.fetchone() | |
| total = int(row[0]) | |
| ret = c.execute("""select count(*) from %s""" % (base)) | |
| row = c.fetchone() | |
| uniq = int(row[0]) | |
| ret = c.execute( | |
| """select * from %s ORDER BY Count DESC LIMIT %d""" % (base, number)) | |
| i = 0; | |
| f.write("<queries total='%d' uniq='%d' nr='%d' date='%s'>\n" % ( | |
| total, uniq, number, date)) | |
| while i < ret: | |
| row = c.fetchone() | |
| f.write(" <query count='%d'>%s</query>\n" % (int(row[2]), row[1])) | |
| i = i + 1 | |
| f.write("</queries>\n") | |
| except: | |
| print "getTopQueries %s %d failed\n" % (base, number) | |
| print sys.exc_type, sys.exc_value | |
| return -1 | |
| f.close() | |
| def getTopQueries(number = 50): | |
| return getTopQueriesDB(base = "Queries", number = number) | |
| def getAllTopQueries(number = 50): | |
| return getTopQueriesDB(base = "AllQueries", number = number) | |
| def increaseTotalCount(Value, count): | |
| global DB | |
| c = DB.cursor() | |
| try: | |
| ret = c.execute("""select ID,Count from AllQueries where Value='%s'""" % | |
| (Value)) | |
| row = c.fetchone() | |
| id = row[0] | |
| cnt = int(row[1]) + count | |
| ret = c.execute("""UPDATE AllQueries SET Count = %d where ID = %d""" % | |
| (cnt, id)) | |
| except: | |
| ret = c.execute( | |
| """INSERT INTO AllQueries (Value, Count) VALUES ('%s', %d)""" % | |
| (Value, count)) | |
| def checkString(str): | |
| if string.find(str, "'") != -1 or \ | |
| string.find(str, '"') != -1 or \ | |
| string.find(str, "\\") != -1 or \ | |
| string.find(str, " ") != -1 or \ | |
| string.find(str, "\t") != -1 or \ | |
| string.find(str, "\n") != -1 or \ | |
| string.find(str, "\r") != -1: | |
| return 0 | |
| return 1 | |
| def addCounts(frmtable): | |
| global DB | |
| i = 0 | |
| c = DB.cursor() | |
| entries=[] | |
| try: | |
| ret = c.execute("""select Value,Count from %s""" % (frmtable)) | |
| while i < ret: | |
| i = i + 1 | |
| row = c.fetchone() | |
| if checkString(row[0]): | |
| entries.append((row[0], int(row[1]))) | |
| else: | |
| entries.append((None, int(row[1]))) | |
| for row in entries: | |
| if row[0] != None: | |
| increaseTotalCount(row[0], row[1]) | |
| except: | |
| print "addCounts %s failed" % (frmtable) | |
| print sys.exc_type, sys.exc_value | |
| traceback.print_exc(file=sys.stdout) | |
| try: | |
| c.execute("""DELETE from %s""" % (frmtable)) | |
| except: | |
| pass | |
| getTopQueries() | |
| addCounts('Queries') | |
| getAllTopQueries() |