blob: 38d4dce9138acf27649ba03c82fcda3cc3682615 [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 Hart1499bd42013-08-20 11:35:46 +010040 logging.info("listening on %s:%s" % (config["hostname"], config["port"]))
Matt Hart63ed9112013-08-20 13:31:50 +010041 self.db = DBHandler(config["dbfile"])
Matt Hart1306d822013-08-09 12:08:22 +010042 self.create_db()
Matt Hart63ed9112013-08-20 13:31:50 +010043 self.server.db = self.db
Matt Hart1306d822013-08-09 12:08:22 +010044
45 def create_db(self):
46 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 +010047 self.db.do_sql(sql)
Matt Hart1306d822013-08-09 12:08:22 +010048
49 def start(self):
Matt Hart1499bd42013-08-20 11:35:46 +010050 logging.info("Starting the ListenerServer")
Matt Hart1306d822013-08-09 12:08:22 +010051 self.server.serve_forever()
52
Matt Hart1499bd42013-08-20 11:35:46 +010053
Matt Hart1306d822013-08-09 12:08:22 +010054class TCPRequestHandler(SocketServer.BaseRequestHandler):
Matt Hart1499bd42013-08-20 11:35:46 +010055 #"One instance per connection. Override handle(self) to customize action."
Matt Hart1306d822013-08-09 12:08:22 +010056 def insert_request(self, data):
57 array = data.split(" ")
58 hostname = array[0]
59 port = int(array[1])
60 request = array[2]
Matt Hart63ed9112013-08-20 13:31:50 +010061 db = self.server.db
Matt Hart1306d822013-08-09 12:08:22 +010062 sql = "insert into pdu_queue values (NULL,'%s',%i,'%s')" % (hostname,port,request)
Matt Hart1499bd42013-08-20 11:35:46 +010063 db.do_sql(sql)
Matt Hart63ed9112013-08-20 13:31:50 +010064 #db.close()
Matt Hart1306d822013-08-09 12:08:22 +010065
66 def handle(self):
Matt Hart40d6c312013-08-20 14:47:31 +010067 logging.getLogger().name = "TCPRequestHandler"
68 try:
69 data = self.request.recv(4096).strip()
70 logging.debug("got request: %s" % data)
71 self.insert_request(data)
72 self.request.sendall("ack\n")
73 except:
74 self.request.sendall("nack\n")
Matt Hart1306d822013-08-09 12:08:22 +010075 self.request.close()
76
77class TCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
78 allow_reuse_address = True
79 daemon_threads = True
80 pass
81
82if __name__ == "__main__":
Matt Hart1499bd42013-08-20 11:35:46 +010083 logging.basicConfig(level=logging.DEBUG)
Matt Hart63ed9112013-08-20 13:31:50 +010084 logging.getLogger().setLevel(logging.DEBUG)
Matt Hart1499bd42013-08-20 11:35:46 +010085 logging.debug("Executing from __main__")
86 starter = {"hostname": "0.0.0.0",
Matt Hart63ed9112013-08-20 13:31:50 +010087 "port":16421,
88 "dbfile": "/var/lib/lava-pdu/pdu.db"}
Matt Hart1499bd42013-08-20 11:35:46 +010089 ss = ListenerServer(starter)
Matt Hart1306d822013-08-09 12:08:22 +010090 ss.start()