You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
119 lines
2.9 KiB
119 lines
2.9 KiB
#!/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()
|
|
|