blob: dc667a6056bfcee1fe41138a035f6ca8a9bc3b68 [file] [log] [blame]
Matt Hart1306d822013-08-09 12:08:22 +01001import SocketServer
2import sqlite3
3import logging
4
Matt Hart1306d822013-08-09 12:08:22 +01005
Matt Hart1499bd42013-08-20 11:35:46 +01006class DBHandler(object):
7 db_file = "pdu.db"
Matt Hart1306d822013-08-09 12:08:22 +01008
Matt Hart63ed9112013-08-20 13:31:50 +01009 def __init__(self, db_file="pdu.db"):
10 self.db_file = db_file
Matt Hart1499bd42013-08-20 11:35:46 +010011 logging.debug("Creating new DBHandler: %s" % self.db_file)
Matt Hart40d6c312013-08-20 14:47:31 +010012 logging.getLogger().name = "DBHandler"
Matt Hart1499bd42013-08-20 11:35:46 +010013 self.conn = sqlite3.connect(self.db_file, check_same_thread = False)
14 self.cursor = self.conn.cursor()
15
16 def do_sql(self, sql):
17 logging.debug("executing sql: %s" % sql)
18 self.cursor.execute(sql)
19 self.conn.commit()
20
Matt Hart63ed9112013-08-20 13:31:50 +010021 def get_res(self, sql):
22 return self.cursor.execute(sql)
23
24 def get_one(self, sql):
25 res = self.get_res(sql)
26 return res.fetchone()
27
Matt Hart1499bd42013-08-20 11:35:46 +010028 def close(self):
29 self.cursor.close()
30 self.conn.close()
31
32
33class ListenerServer(object):
34# conn = sqlite3.connect("/var/lib/lava-pdu/pdu.db", check_same_thread = False)
35# cursor = conn.cursor()
Matt Hart1499bd42013-08-20 11:35:46 +010036
37 def __init__(self, config):
38 self.server = TCPServer((config["hostname"], config["port"]), TCPRequestHandler)
Matt Hart40d6c312013-08-20 14:47:31 +010039 logging.getLogger().name = "ListenerServer"
Matt Hart7d670612013-08-20 16:47:52 +010040 logging.getLogger().setLevel(config["logging_level"])
Matt Hart1499bd42013-08-20 11:35:46 +010041 logging.info("listening on %s:%s" % (config["hostname"], config["port"]))
Matt Hart63ed9112013-08-20 13:31:50 +010042 self.db = DBHandler(config["dbfile"])
Matt Hart1306d822013-08-09 12:08:22 +010043 self.create_db()
Matt Hart63ed9112013-08-20 13:31:50 +010044 self.server.db = self.db
Matt Hart1306d822013-08-09 12:08:22 +010045
46 def create_db(self):
47 sql = "create table if not exists pdu_queue (id integer primary key, hostname text, port int, request text)"
Matt Hart1499bd42013-08-20 11:35:46 +010048 self.db.do_sql(sql)
Matt Hart1306d822013-08-09 12:08:22 +010049
50 def start(self):
Matt Hart1499bd42013-08-20 11:35:46 +010051 logging.info("Starting the ListenerServer")
Matt Hart1306d822013-08-09 12:08:22 +010052 self.server.serve_forever()
53
Matt Hart1499bd42013-08-20 11:35:46 +010054
Matt Hart1306d822013-08-09 12:08:22 +010055class TCPRequestHandler(SocketServer.BaseRequestHandler):
Matt Hart1499bd42013-08-20 11:35:46 +010056 #"One instance per connection. Override handle(self) to customize action."
Matt Hart1306d822013-08-09 12:08:22 +010057 def insert_request(self, data):
58 array = data.split(" ")
59 hostname = array[0]
60 port = int(array[1])
61 request = array[2]
Matt Hart63ed9112013-08-20 13:31:50 +010062 db = self.server.db
Matt Hart1306d822013-08-09 12:08:22 +010063 sql = "insert into pdu_queue values (NULL,'%s',%i,'%s')" % (hostname,port,request)
Matt Hart1499bd42013-08-20 11:35:46 +010064 db.do_sql(sql)
Matt Hart63ed9112013-08-20 13:31:50 +010065 #db.close()
Matt Hart1306d822013-08-09 12:08:22 +010066
67 def handle(self):
Matt Hart40d6c312013-08-20 14:47:31 +010068 logging.getLogger().name = "TCPRequestHandler"
69 try:
70 data = self.request.recv(4096).strip()
71 logging.debug("got request: %s" % data)
72 self.insert_request(data)
73 self.request.sendall("ack\n")
74 except:
75 self.request.sendall("nack\n")
Matt Hart1306d822013-08-09 12:08:22 +010076 self.request.close()
77
78class TCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
79 allow_reuse_address = True
80 daemon_threads = True
81 pass
82
83if __name__ == "__main__":
Matt Hart1499bd42013-08-20 11:35:46 +010084 logging.basicConfig(level=logging.DEBUG)
Matt Hart63ed9112013-08-20 13:31:50 +010085 logging.getLogger().setLevel(logging.DEBUG)
Matt Hart1499bd42013-08-20 11:35:46 +010086 logging.debug("Executing from __main__")
87 starter = {"hostname": "0.0.0.0",
Matt Hart63ed9112013-08-20 13:31:50 +010088 "port":16421,
89 "dbfile": "/var/lib/lava-pdu/pdu.db"}
Matt Hart1499bd42013-08-20 11:35:46 +010090 ss = ListenerServer(starter)
Matt Hart1306d822013-08-09 12:08:22 +010091 ss.start()