Matt Hart | 1306d82 | 2013-08-09 12:08:22 +0100 | [diff] [blame^] | 1 | import SocketServer |
| 2 | import sqlite3 |
| 3 | import logging |
| 4 | |
| 5 | logging.basicConfig(level=logging.DEBUG) |
| 6 | log = logging.getLogger(__name__) |
| 7 | conn=sqlite3.connect('pdu.db', check_same_thread = False) |
| 8 | c=conn.cursor() |
| 9 | |
| 10 | class ListenerServer(): |
| 11 | HOST='0.0.0.0' |
| 12 | PORT=16421 |
| 13 | |
| 14 | def __init__(self): |
| 15 | ### read loglevel here |
| 16 | self.server = TCPServer((self.HOST, self.PORT), TCPRequestHandler) |
| 17 | log.info("listening on %s:%s" % (self.HOST, self.PORT)) |
| 18 | self.create_db() |
| 19 | |
| 20 | def create_db(self): |
| 21 | sql = "create table if not exists pdu_queue (id integer primary key, hostname text, port int, request text)" |
| 22 | log.debug("Creating pdu_queue table: %s" % sql) |
| 23 | c.execute(sql) |
| 24 | conn.commit() |
| 25 | |
| 26 | def start(self): |
| 27 | print("Starting the ListenerServer") |
| 28 | self.server.serve_forever() |
| 29 | |
| 30 | class TCPRequestHandler(SocketServer.BaseRequestHandler): |
| 31 | "One instance per connection. Override handle(self) to customize action." |
| 32 | def insert_request(self, data): |
| 33 | array = data.split(" ") |
| 34 | hostname = array[0] |
| 35 | port = int(array[1]) |
| 36 | request = array[2] |
| 37 | sql = "insert into pdu_queue values (NULL,'%s',%i,'%s')" % (hostname,port,request) |
| 38 | log.debug("executing sql: %s" % sql) |
| 39 | c.execute(sql) |
| 40 | conn.commit() |
| 41 | |
| 42 | def handle(self): |
| 43 | data = self.request.recv(4096).strip() |
| 44 | #write to sql db here |
| 45 | log.debug("got request: %s" % data) |
| 46 | self.insert_request(data) |
| 47 | self.request.sendall("ack\n") |
| 48 | self.request.close() |
| 49 | |
| 50 | class TCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer): |
| 51 | allow_reuse_address = True |
| 52 | daemon_threads = True |
| 53 | pass |
| 54 | |
| 55 | if __name__ == "__main__": |
| 56 | ss = ListenerServer() |
| 57 | ss.start() |