diff options
Diffstat (limited to 'bin/sql_db.py')
| -rw-r--r-- | bin/sql_db.py | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/bin/sql_db.py b/bin/sql_db.py index 550ed14555e..4973aaa221e 100644 --- a/bin/sql_db.py +++ b/bin/sql_db.py @@ -54,10 +54,12 @@ from mx import DateTime as mdt re_from = re.compile('.* from "?([a-zA-Z_0-9]+)"? .*$'); re_into = re.compile('.* into "?([a-zA-Z_0-9]+)"? .*$'); -def log(msg, lvl=netsvc.LOG_DEBUG): +def log(msg, lvl=netsvc.LOG_DEBUG2): logger = netsvc.Logger() logger.notifyChannel('sql', lvl, msg) +sql_counter = 0 + class Cursor(object): IN_MAX = 1000 sql_from_log = {} @@ -71,7 +73,7 @@ class Cursor(object): @wraps(f) def wrapper(self, *args, **kwargs): if self.__closed: - raise psycopg2.ProgrammingError('Unable to use the cursor after having closing it') + raise psycopg2.ProgrammingError('Unable to use the cursor after having closed it') return f(self, *args, **kwargs) return wrapper @@ -107,7 +109,7 @@ class Cursor(object): self.count+=1 if '%d' in query or '%f' in query: log(query, netsvc.LOG_WARNING) - log("SQL queries mustn't contain %d or %f anymore. Use only %s", netsvc.LOG_WARNING) + log("SQL queries cannot contain %d or %f anymore. Use only %s", netsvc.LOG_WARNING) if params: query = query.replace('%d', '%s').replace('%f', '%s') @@ -117,10 +119,14 @@ class Cursor(object): try: params = params or None res = self._obj.execute(query, params) + except psycopg2.ProgrammingError, pe: + logger= netsvc.Logger() + logger.notifyChannel('sql_db', netsvc.LOG_ERROR, "Programming error: %s, in query %s" % (pe, query)) + raise except Exception, e: log("bad query: %s" % self._obj.query) log(e) - raise + raise if self.sql_log: log("query: %s" % self._obj.query) @@ -138,19 +144,20 @@ class Cursor(object): return res def print_log(self): + global sql_counter + sql_counter += self.count def process(type): sqllogs = {'from':self.sql_from_log, 'into':self.sql_into_log} - if not sqllogs[type]: - return - sqllogitems = sqllogs[type].items() - sqllogitems.sort(key=lambda k: k[1][1]) sum = 0 - log("SQL LOG %s:" % (type,)) - for r in sqllogitems: - log("table: %s: %s/%s" %(r[0], str(r[1][1]), r[1][0])) - sum+= r[1][1] - log("SUM:%s/%d" % (sum, self.count)) - sqllogs[type].clear() + if sqllogs[type]: + sqllogitems = sqllogs[type].items() + sqllogitems.sort(key=lambda k: k[1][1]) + log("SQL LOG %s:" % (type,)) + for r in sqllogitems: + log("table: %s: %s/%s" %(r[0], str(r[1][1]), r[1][0])) + sum+= r[1][1] + sqllogs[type].clear() + log("SUM %s:%s/%d [%d]" % (type, sum, self.count,sql_counter)) process('from') process('into') self.count = 0 |
