Daniel Veillard | 9955d2b | 2004-04-08 14:41:42 +0000 | [diff] [blame] | 1 | #!/usr/bin/python -u |
| 2 | # |
| 3 | # Processing of the queries results |
| 4 | # |
| 5 | import sys |
| 6 | import index |
| 7 | import time |
| 8 | import traceback |
| 9 | import string |
| 10 | |
| 11 | if index.openMySQL(verbose = 0) < 0: |
| 12 | print "Failed to connect to the MySQL database" |
| 13 | sys.exit(1) |
| 14 | |
| 15 | DB = index.DB |
| 16 | |
| 17 | def getTopQueriesDB(base = "Queries", number = 50): |
| 18 | global DB |
| 19 | |
| 20 | try: |
| 21 | import os |
| 22 | os.mkdir("searches") |
| 23 | except: |
| 24 | pass |
| 25 | |
| 26 | date = time.strftime("%Y%m%d") |
| 27 | f = open("searches/%s-%s.xml" % (base, date), "w") |
| 28 | c = DB.cursor() |
| 29 | try: |
| 30 | ret = c.execute("""select sum(Count) from %s""" % (base)) |
| 31 | row = c.fetchone() |
| 32 | total = int(row[0]) |
| 33 | ret = c.execute("""select count(*) from %s""" % (base)) |
| 34 | row = c.fetchone() |
| 35 | uniq = int(row[0]) |
| 36 | ret = c.execute( |
| 37 | """select * from %s ORDER BY Count DESC LIMIT %d""" % (base, number)) |
| 38 | i = 0; |
| 39 | f.write("<queries total='%d' uniq='%d' nr='%d' date='%s'>\n" % ( |
| 40 | total, uniq, number, date)) |
| 41 | while i < ret: |
| 42 | row = c.fetchone() |
| 43 | f.write(" <query count='%d'>%s</query>\n" % (int(row[2]), row[1])) |
| 44 | i = i + 1 |
| 45 | f.write("</queries>\n") |
| 46 | except: |
| 47 | print "getTopQueries %s %d failed\n" % (base, number) |
| 48 | print sys.exc_type, sys.exc_value |
| 49 | return -1 |
| 50 | f.close() |
| 51 | |
| 52 | def getTopQueries(number = 50): |
| 53 | return getTopQueriesDB(base = "Queries", number = number) |
| 54 | |
| 55 | def getAllTopQueries(number = 50): |
| 56 | return getTopQueriesDB(base = "AllQueries", number = number) |
| 57 | |
| 58 | def increaseTotalCount(Value, count): |
| 59 | global DB |
| 60 | |
| 61 | c = DB.cursor() |
| 62 | try: |
| 63 | ret = c.execute("""select ID,Count from AllQueries where Value='%s'""" % |
| 64 | (Value)) |
| 65 | row = c.fetchone() |
| 66 | id = row[0] |
| 67 | cnt = int(row[1]) + count |
| 68 | ret = c.execute("""UPDATE AllQueries SET Count = %d where ID = %d""" % |
| 69 | (cnt, id)) |
| 70 | except: |
| 71 | ret = c.execute( |
| 72 | """INSERT INTO AllQueries (Value, Count) VALUES ('%s', %d)""" % |
| 73 | (Value, count)) |
| 74 | |
| 75 | |
| 76 | def checkString(str): |
| 77 | if string.find(str, "'") != -1 or \ |
| 78 | string.find(str, '"') != -1 or \ |
| 79 | string.find(str, "\\") != -1 or \ |
| 80 | string.find(str, " ") != -1 or \ |
| 81 | string.find(str, "\t") != -1 or \ |
| 82 | string.find(str, "\n") != -1 or \ |
| 83 | string.find(str, "\r") != -1: |
| 84 | return 0 |
| 85 | return 1 |
| 86 | def addCounts(frmtable): |
| 87 | global DB |
| 88 | |
| 89 | i = 0 |
| 90 | c = DB.cursor() |
| 91 | entries=[] |
| 92 | try: |
| 93 | ret = c.execute("""select Value,Count from %s""" % (frmtable)) |
| 94 | while i < ret: |
| 95 | i = i + 1 |
| 96 | row = c.fetchone() |
| 97 | if checkString(row[0]): |
| 98 | entries.append((row[0], int(row[1]))) |
| 99 | else: |
| 100 | entries.append((None, int(row[1]))) |
| 101 | |
| 102 | for row in entries: |
| 103 | if row[0] != None: |
| 104 | increaseTotalCount(row[0], row[1]) |
| 105 | except: |
| 106 | print "addCounts %s failed" % (frmtable) |
| 107 | print sys.exc_type, sys.exc_value |
| 108 | traceback.print_exc(file=sys.stdout) |
| 109 | |
| 110 | try: |
| 111 | c.execute("""DELETE from %s""" % (frmtable)) |
| 112 | except: |
| 113 | pass |
| 114 | |
| 115 | |
| 116 | |
| 117 | getTopQueries() |
| 118 | addCounts('Queries') |
| 119 | getAllTopQueries() |