Superquickpronto change to use postgres as the backend datastore
diff --git a/MANIFEST.in b/MANIFEST.in
index 148b2a2..9f951a3 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -1,6 +1,4 @@
-include etc/lavapdu-listener.conf
-include etc/lavapdu-runner.conf
+include etc/lavapdu.conf
 include etc/lavapdu-runner.init
 include etc/lavapdu-listen.init
-include etc/lavapdulogrotate
-include var/lib/lavapdu/pdu.db
\ No newline at end of file
+include etc/lavapdulogrotate
\ No newline at end of file
diff --git a/etc/lavapdu-listener.conf b/etc/lavapdu-listener.conf
deleted file mode 100644
index aa9b61a..0000000
--- a/etc/lavapdu-listener.conf
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-    "hostname": "0.0.0.0",
-    "port": 16421,
-    "dbfile": "/var/lib/lavapdu/pdu.db"
-}
\ No newline at end of file
diff --git a/etc/lavapdu-runner.conf b/etc/lavapdu-runner.conf
deleted file mode 100644
index c6978d9..0000000
--- a/etc/lavapdu-runner.conf
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-    "dbfile": "/var/lib/lavapdu/pdu.db"
-}
\ No newline at end of file
diff --git a/etc/lavapdu.conf b/etc/lavapdu.conf
new file mode 100644
index 0000000..fba2a26
--- /dev/null
+++ b/etc/lavapdu.conf
@@ -0,0 +1,8 @@
+{
+    "hostname": "0.0.0.0",
+    "port": 16421,
+    "dbhost": "127.0.0.1",
+    "dbuser": "pdudaemon",
+    "dbpass": "pdudaemon",
+    "dbname": "lavapdu"
+}
\ No newline at end of file
diff --git a/lavapdu-listen b/lavapdu-listen
index d781358..331a708 100755
--- a/lavapdu-listen
+++ b/lavapdu-listen
@@ -48,7 +48,8 @@
     """
     Read settings from config file, to listen to all hosts, hostname should be 0.0.0.0
     """
-    settings = {"port": 16421, "hostname": "0.0.0.0", "dbfile":"/var/lib/lava-pdu/pdu.db"}
+    settings = {"port": 16421, "hostname": "0.0.0.0", "dbuser": "pdudaemon",
+                "dbpass": "pdudaemon", "dbname": "pdu_queue", "dbhost": "127.0.0.1"}
     with open(filename) as stream:
         jobdata = stream.read()
         json_default = json.loads(jobdata)
@@ -56,8 +57,14 @@
         settings['port'] = json_default['port']
     if "hostname" in json_default:
         settings['hostname'] = json_default['hostname']
-    if "dbfile" in json_default:
-        settings['dbfile'] = json_default['dbfile']
+    if "dbuser" in json_default:
+        settings['dbuser'] = json_default['dbuser']
+    if "dbpass" in json_default:
+        settings['dbpass'] = json_default['dbpass']
+    if "dbname" in json_default:
+        settings['dbname'] = json_default['dbname']
+    if "dbhost" in json_default:
+        settings['dbhost'] = json_default['dbhost']
     return settings
 
 if __name__ == '__main__':
@@ -65,7 +72,7 @@
     # not necessarily per-instance, so use the command line and a default conf file.
     pidfile = "/var/run/lavapdu-listen.pid"
     logfile = "/var/log/lavapdu-listener.log"
-    conffile = "/etc/lavapdu-listener.conf"
+    conffile = "/etc/lavapdu.conf"
     settings = readSettings(conffile)
     usage = "Usage: %prog [--logfile] --[loglevel]"
     description = "LAVA PDU request listener server, host and port are handled in %s" % conffile
@@ -88,7 +95,8 @@
         level = logging.WARNING
     if options.loglevel == "ERROR":
         level = logging.ERROR
-    client_logger, watched_file_handler = getDaemonLogger(logfile, loglevel=level)
+    client_logger, watched_file_handler = getDaemonLogger(logfile, loglevel=level,
+                                                          log_format='%(asctime)s:%(levelname)s:%(name)s:%(message)s')
     if isinstance(client_logger, Exception):
         print("Fatal error creating client_logger: " + str(client_logger))
         sys.exit(os.EX_OSERR)
@@ -106,7 +114,10 @@
     starter = {"logging_level": level,
                "hostname": settings['hostname'],
                "port": settings['port'],
-               "dbfile": settings['dbfile']}
+               "dbhost": settings["dbhost"],
+               "dbuser": settings["dbuser"],
+               "dbpass": settings["dbpass"],
+               "dbname": settings["dbname"]}
     with context:
         logging.info("Running LAVA PDU Listener %s %s %d."
                      % (logfile, settings['hostname'], settings['port']))
diff --git a/lavapdu-runner b/lavapdu-runner
index 278a998..19ee5cc 100755
--- a/lavapdu-runner
+++ b/lavapdu-runner
@@ -48,12 +48,18 @@
     """
     Read settings from config file, to listen to all hosts, hostname should be 0.0.0.0
     """
-    settings = {"dbfile":"/var/lib/lavapdu/pdu.db"}
+    settings = {"dbuser": "pdudaemon", "dbpass": "pdudaemon", "dbname": "pdu_queue", "dbhost": "127.0.0.1"}
     with open(filename) as stream:
         jobdata = stream.read()
         json_default = json.loads(jobdata)
-    if "dbfile" in json_default:
-        settings['dbfile'] = json_default['dbfile']
+    if "dbuser" in json_default:
+        settings['dbuser'] = json_default['dbuser']
+    if "dbpass" in json_default:
+        settings['dbpass'] = json_default['dbpass']
+    if "dbname" in json_default:
+        settings['dbname'] = json_default['dbname']
+    if "dbhost" in json_default:
+        settings['dbhost'] = json_default['dbhost']
     return settings
 
 if __name__ == '__main__':
@@ -61,7 +67,7 @@
     # not necessarily per-instance, so use the command line and a default conf file.
     pidfile = "/var/run/lavapdu-runner.pid"
     logfile = "/var/log/lavapdu-runner.log"
-    conffile = "/etc/lavapdu-runner.conf"
+    conffile = "/etc/lavapdu.conf"
     settings = readSettings(conffile)
     usage = "Usage: %prog [--logfile] --[loglevel]"
     description = "LAVA PDU request listener server, host and port are handled in %s" % conffile
@@ -84,7 +90,8 @@
         level = logging.WARNING
     if options.loglevel == "ERROR":
         level = logging.ERROR
-    client_logger, watched_file_handler = getDaemonLogger(logfile, loglevel=level)
+    client_logger, watched_file_handler = getDaemonLogger(logfile, loglevel=level,
+                                                          log_format='%(asctime)s:%(levelname)s:%(name)s:%(message)s')
     if isinstance(client_logger, Exception):
         print("Fatal error creating client_logger: " + str(client_logger))
         sys.exit(os.EX_OSERR)
@@ -100,9 +107,12 @@
         stderr=watched_file_handler.stream,
         stdout=watched_file_handler.stream)
     starter = {"logging_level": level,
-               "dbfile": settings["dbfile"]}
+               "dbhost": settings["dbhost"],
+               "dbuser": settings["dbuser"],
+               "dbpass": settings["dbpass"],
+               "dbname": settings["dbname"]}
     with context:
-        logging.info("Running LAVA PDU Runner %s %s"
-                     % (logfile, settings["dbfile"]))
+        logging.info("Running LAVA PDU Runner %s dbhost: %s"
+                     % (logfile, settings["dbhost"]))
         p = PDURunner(starter)
         p.run_me()
diff --git a/lavapdu/pdurunner.py b/lavapdu/pdurunner.py
index 9533a5d..3c1ed29 100644
--- a/lavapdu/pdurunner.py
+++ b/lavapdu/pdurunner.py
@@ -29,26 +29,23 @@
         logging.basicConfig(level=config["logging_level"])
         logging.getLogger().setLevel(config["logging_level"])
         logging.getLogger().name = "PDURunner"
-        self.db = DBHandler(config["dbfile"])
+        self.config = config
 
-    def get_one(self):
-        res = self.db.get_one("SELECT * FROM pdu_queue ORDER BY id asc limit 1")
-        if res:
-            id,hostname,port,request = res
-            logging.debug("Processing queue item: (%s %s) on hostname: %s" % (request, port, hostname))
+    def get_one(self, db):
+        job = db.get_next_job()
+        if job:
+            job_id,hostname,port,request = job
+            logging.info("Processing queue item: (%s %s) on hostname: %s" % (request, port, hostname))
             #logging.debug(id, hostname, request, port)
             res = self.do_job(hostname,port,request)
-            self.delete_row(id)
-
-    def delete_row(self, id):
-        logging.debug("deleting row %i" % id)
-        self.db.do_sql("delete from pdu_queue where id=%i" % id)
+            db.delete_row(job_id)
+        else:
+            logging.debug("Found nothing to do in database")
 
     def do_job(self, hostname, port, request):
         retries = 5
         while retries > 0:
             try:
-                logging.debug("creating a new PDUEngine")
                 pe = PDUEngine(hostname, 23)
                 if request == "reboot":
                     pe.driver.port_reboot(port)
@@ -70,13 +67,19 @@
 
 
     def run_me(self):
-        print("Starting up the PDURunner")
+        logging.info("Starting up the PDURunner")
         while 1:
-            self.get_one()
-            time.sleep(1)
+            db = DBHandler(self.config)
+            self.get_one(db)
+            db.close()
+            del(db)
+            time.sleep(2)
 
 if __name__ == "__main__":
-    starter = {"logging_level": logging.DEBUG,
-               "dbfile": "/var/lib/lavapdu/pdu.db"}
+    starter = {"dbhost":"127.0.0.1",
+               "dbuser":"pdudaemon",
+               "dbpass":"pdudaemon",
+               "dbname":"lavapdu",
+               "logging_level": logging.DEBUG}
     p = PDURunner(starter)
     p.run_me()
\ No newline at end of file
diff --git a/lavapdu/socketserver.py b/lavapdu/socketserver.py
index 4c9e128..3eb190f 100644
--- a/lavapdu/socketserver.py
+++ b/lavapdu/socketserver.py
@@ -19,18 +19,17 @@
 #  MA 02110-1301, USA.
 
 import SocketServer
-import sqlite3
+#import sqlite3
+import psycopg2
 import logging
-
+import socket
 
 class DBHandler(object):
-    db_file = "pdu.db"
-
-    def __init__(self, db_file="pdu.db"):
-        self.db_file = db_file
-        logging.debug("Creating new DBHandler: %s" % self.db_file)
+    def __init__(self, config):
+        logging.debug("Creating new DBHandler: %s" % config["dbhost"])
         logging.getLogger().name = "DBHandler"
-        self.conn = sqlite3.connect(self.db_file, check_same_thread = False)
+        self.conn = psycopg2.connect(database=config["dbname"], user=config["dbuser"],
+                                     password=config["dbpass"], host=config["dbhost"])
         self.cursor = self.conn.cursor()
 
     def do_sql(self, sql):
@@ -38,14 +37,26 @@
         self.cursor.execute(sql)
         self.conn.commit()
 
+    def do_sql_with_fetch(self, sql):
+        logging.debug("executing sql: %s" % sql)
+        self.cursor.execute(sql)
+        row = self.cursor.fetchone()
+        self.conn.commit()
+        return row
+
+    def delete_row(self, row_id):
+        logging.debug("deleting row %i" % row_id)
+        self.do_sql("delete from pdu_queue where id=%i" % row_id)
+
     def get_res(self, sql):
         return self.cursor.execute(sql)
 
-    def get_one(self, sql):
-        res = self.get_res(sql)
-        return res.fetchone()
+    def get_next_job(self):
+        row = self.do_sql_with_fetch("select * from pdu_queue order by id asc limit 1")
+        return row
 
     def close(self):
+        logging.debug("Closing DBHandler")
         self.cursor.close()
         self.conn.close()
 
@@ -59,12 +70,15 @@
         logging.getLogger().name = "ListenerServer"
         logging.getLogger().setLevel(config["logging_level"])
         logging.info("listening on %s:%s" % (config["hostname"], config["port"]))
-        self.db = DBHandler(config["dbfile"])
+        self.server.config = config
+        self.db = DBHandler(config)
         self.create_db()
-        self.server.db = self.db
+        self.db.close()
+        del(self.db)
+        #self.server.db = self.db
 
     def create_db(self):
-        sql = "create table if not exists pdu_queue (id integer primary key, hostname text, port int, request text)"
+        sql = "create table if not exists pdu_queue (id serial, hostname text, port int, request text)"
         self.db.do_sql(sql)
 
     def start(self):
@@ -86,19 +100,24 @@
         if not (request in ["reboot","on","off","delayed"]):
             logging.info("Unknown request: %s" % request)
             raise Exception("Unknown request: %s" % request)
-        db = self.server.db
-        sql = "insert into pdu_queue values (NULL,'%s',%i,'%s')" % (hostname,port,request)
+        #db = self.server.db
+        db = DBHandler(self.server.config)
+        sql = "insert into pdu_queue (hostname,port,request) values ('%s',%i,'%s')" % (hostname,port,request)
         db.do_sql(sql)
-        #db.close()
+        db.close()
+        del(db)
 
     def handle(self):
         logging.getLogger().name = "TCPRequestHandler"
         try:
             data = self.request.recv(4096).strip()
-            logging.debug("got request: %s" % data)
+            socket.setdefaulttimeout(2)
+            request_host = socket.gethostbyaddr(self.client_address[0])[0]
+            logging.info("Received a request from %s: '%s'" % (request_host, data))
             self.insert_request(data)
             self.request.sendall("ack\n")
-        except:
+        except Exception as e:
+            logging.debug(e)
             self.request.sendall("nack\n")
         self.request.close()
 
@@ -113,7 +132,10 @@
     logging.debug("Executing from __main__")
     starter = {"hostname": "0.0.0.0",
                "port":16421,
-               "dbfile": "/var/lib/lavapdu/pdu.db",
+               "dbhost":"127.0.0.1",
+               "dbuser":"pdudaemon",
+               "dbpass":"pdudaemon",
+               "dbname":"lavapdu",
                "logging_level": logging.DEBUG}
     ss = ListenerServer(starter)
     ss.start()
\ No newline at end of file
diff --git a/setup.py b/setup.py
index 744e869..c2a6fd3 100644
--- a/setup.py
+++ b/setup.py
@@ -33,15 +33,13 @@
         "daemon",
         "lockfile",
         "pexpect",
-        "sqlite2"
+        "psycopg2"
     ],
     data_files=[
         ("/etc/init.d/", ["etc/lavapdu-runner.init"]),
         ("/etc/init.d/", ["etc/lavapdu-listen.init"]),
-        ("/etc/", ["etc/lavapdu-listener.conf"]),
-        ("/etc/", ["etc/lavapdu-runner.conf"]),
+        ("/etc/", ["etc/lavapdu.conf"]),
         ("/etc/logrotate.d/", ["etc/lavapdulogrotate"]),
-        ("/var/lib/lavapdu/", ["var/lib/lavapdu/pdu.db"])
     ],
     scripts=[
         'lavapdu-runner',