Switch to errdb error code lookup master
authorStefan Hajnoczi <stefanha@gmail.com>
Sat, 10 Jul 2010 16:47:31 +0000 (17:47 +0100)
committerStefan Hajnoczi <stefanha@gmail.com>
Sat, 10 Jul 2010 17:24:00 +0000 (18:24 +0100)
cmds.py
config.py
errdb.py [new file with mode: 0644]

diff --git a/cmds.py b/cmds.py
index 29426db..e70d45a 100644 (file)
--- a/cmds.py
+++ b/cmds.py
@@ -20,12 +20,7 @@ import time
 
 import config
 import utils
 
 import config
 import utils
-
-# For development an errcode database may not be available
-try:
-    import errcode
-except ImportError:
-    sys.stderr.write('running without errcode support\n')
+import errdb
 
 logs = {}
 commands = {}
 
 logs = {}
 commands = {}
@@ -94,13 +89,15 @@ ERRCODE_RE = re.compile(r'((?:0x)?[0-9a-fA-F]{8})')
 
 def errcode_command(who, _, replyto, words):
     '''Look up gPXE error code (errcode 0x12345678)'''
 
 def errcode_command(who, _, replyto, words):
     '''Look up gPXE error code (errcode 0x12345678)'''
-    msg = ' '.join(words)
-    m = ERRCODE_RE.search(msg)
-    if m:
+    errors = []
+    m = ERRCODE_RE.search(' '.join(words))
+    if config.ERRDBFILE and m:
         try:
         try:
-            return 'PRIVMSG', (replyto, str(errcode.Errcode(int(m.group(1), 16))))
+            errno = '%x' % int(m.group(1), 16)
+            errors = [('PRIVMSG', (replyto, '%s:%s: %s' % error)) for error in errdb.lookup(errno, dbfile=config.ERRDBFILE)]
         except ValueError:
             pass
         except ValueError:
             pass
+    return errors or ('PRIVMSG', (replyto, 'Error code not found'))
 commands['errcode'] = errcode_command
 commands['error'] = errcode_command
 
 commands['errcode'] = errcode_command
 commands['error'] = errcode_command
 
index ed6a7ad..b8b5d26 100644 (file)
--- a/config.py
+++ b/config.py
@@ -8,5 +8,6 @@ MTA = 'localhost'
 FROM_ADDRESS = 'gpxebot <stefanha@gmail.com>'
 RCFILE = 'gpxebotrc'
 NICFILE = None
 FROM_ADDRESS = 'gpxebot <stefanha@gmail.com>'
 RCFILE = 'gpxebotrc'
 NICFILE = None
+ERRDBFILE = None
 FIFO = 'cmdfifo'
 DEBUG = False
 FIFO = 'cmdfifo'
 DEBUG = False
diff --git a/errdb.py b/errdb.py
new file mode 100644 (file)
index 0000000..a83e8d1
--- /dev/null
+++ b/errdb.py
@@ -0,0 +1,18 @@
+#!/usr/bin/env python
+import sys
+import sqlite3
+
+def lookup(errno, dbfile='errors.db'):
+    conn = sqlite3.connect(dbfile)
+    cursor = conn.cursor()
+    cursor.execute('select filename, line, description from errors inner join xrefs on errors.errno=xrefs.errno where errors.errno=?', (errno, ))
+    results = cursor.fetchall()
+    conn.close()
+    return results
+
+if __name__ == '__main__':
+    if len(sys.argv) != 2:
+        sys.stderr.write('\n')
+        sys.exit(1)
+    for filename, line, description in lookup(sys.argv[1]):
+        print '%s:%s: %s' % (filename, line, description)