From: Razvan Deaconescu Date: Mon, 22 Aug 2011 09:55:53 +0000 (+0300) Subject: ppf: Full implementation of add_* for SQLite. X-Git-Url: http://p2p-next.cs.pub.ro/gitweb/?a=commitdiff_plain;h=2e27002bc101ef24c86a5336ec9a6d686d2a5ddc;p=cs-p2p-next.git ppf: Full implementation of add_* for SQLite. --- diff --git a/ppf/new/storage.py b/ppf/new/storage.py index 2bbc257..a14de4e 100644 --- a/ppf/new/storage.py +++ b/ppf/new/storage.py @@ -421,21 +421,116 @@ class SQLiteDatabaseAccess(DatabaseAccess): def connect(self): self.conn = sqlite3.connect(self.database) self.cursor = self.conn.cursor() + # Use foreign key support if available. + self.cursor.execute("PRAGMA foreign_keys = ON") + self.conn.commit() + + def reset_query(self): + self.columns = "" + self.values = "" + + def append_to_insert_query(self, data_name, data_value): + if data_value is not None: + self.columns = self.columns + data_name + ", " + self.values = self.values + "'" + str(data_value) + "'" + ", " def add_swarm(self, swarm): - pass + self.reset_query() + self.append_to_insert_query("torrent_filename", swarm.torrent_filename) + self.append_to_insert_query("data_size", swarm.data_size) + self.append_to_insert_query("description", swarm.description) + + self.columns = re.sub(',\s*$', '', self.columns) + self.values = re.sub(',\s*$', '', self.values) + insert_query = "INSERT INTO swarms(" + self.columns +")" + \ + " VALUES(" + self.values + ")" + self.cursor.execute(insert_query) + self.conn.commit() def add_client_session(self, session): - pass + self.reset_query() + self.append_to_insert_query("swarm_id", session.swarm_id) + # TODO: search database for client ID + self.append_to_insert_query("btclient_id", + bittorrent_clients[session.btclient]['id']) + self.append_to_insert_query("system_os", session.system_os) + self.append_to_insert_query("system_os_version", session.system_os_version) + self.append_to_insert_query("system_ram", session.system_ram) + self.append_to_insert_query("system_cpu", session.system_cpu) + self.append_to_insert_query("public_ip", session.public_ip) + self.append_to_insert_query("public_port", session.public_port) + self.append_to_insert_query("ds_limit", session.ds_limit) + self.append_to_insert_query("us_limit", session.us_limit) + self.append_to_insert_query("start_time", session.start_time) + self.append_to_insert_query("dht_enabled", session.dht_enabled) + self.append_to_insert_query("pxe_enabled", session.pxe_enabled) + self.append_to_insert_query("streaming_enabled", session.streaming_enabled) + self.append_to_insert_query("features", session.features) + self.append_to_insert_query("description", session.description) + + self.columns = re.sub(',\s*$', '', self.columns) + self.values = re.sub(',\s*$', '', self.values) + insert_query = "INSERT INTO client_sessions(" + self.columns +")" + \ + " VALUES(" + self.values + ")" + self.cursor.execute(insert_query) + self.conn.commit() def add_peer_status_message(self, msg): - pass + self.reset_query() + self.append_to_insert_query("client_session_id", msg.client_session_id) + self.append_to_insert_query("timestamp", msg.timestamp) + self.append_to_insert_query("peer_ip", msg.peer_ip) + self.append_to_insert_query("peer_port", msg.peer_port) + self.append_to_insert_query("download_speed", msg.download_speed) + self.append_to_insert_query("upload_speed", msg.upload_speed) + + self.columns = re.sub(',\s*$', '', self.columns) + self.values = re.sub(',\s*$', '', self.values) + insert_query = "INSERT INTO peer_status_messages(" + \ + self.columns +")" + " VALUES(" + self.values + ")" + self.cursor.execute(insert_query) + self.conn.commit() def add_status_message(self, msg): - pass + self.reset_query() + self.append_to_insert_query("client_session_id", msg.client_session_id) + self.append_to_insert_query("timestamp", msg.timestamp) + self.append_to_insert_query("num_peers", msg.num_peers) + self.append_to_insert_query("num_dht_peers", msg.num_dht_peers) + self.append_to_insert_query("download_speed", msg.download_speed) + self.append_to_insert_query("upload_speed", msg.upload_speed) + self.append_to_insert_query("download_size", msg.download_size) + self.append_to_insert_query("upload_size", msg.upload_size) + self.append_to_insert_query("eta", msg.eta) + + self.columns = re.sub(',\s*$', '', self.columns) + self.values = re.sub(',\s*$', '', self.values) + insert_query = "INSERT INTO status_messages(" + self.columns +")" + \ + " VALUES(" + self.values + ")" + self.cursor.execute(insert_query) + self.conn.commit() def add_verbose_message(self, msg): - pass + self.reset_query() + self.append_to_insert_query("client_session_id", msg.client_session_id) + self.append_to_insert_query("timestamp", msg.timestamp) + self.append_to_insert_query("transfer_direction_id", + transfer_directions[msg.transfer_direction]) + self.append_to_insert_query("peer_ip", msg.peer_ip) + self.append_to_insert_query("peer_port", msg.peer_port) + self.append_to_insert_query("message_type_id", + message_types[msg.message_type]['id']) + self.append_to_insert_query("index", msg.index) + self.append_to_insert_query("begin", msg.begin) + self.append_to_insert_query("length", msg.length) + self.append_to_insert_query("listen_port", msg.listen_port) + + self.columns = re.sub(',\s*$', '', self.columns) + self.values = re.sub(',\s*$', '', self.values) + insert_query = "INSERT INTO verbose_messages(" + self.columns +")" + \ + " VALUES(" + self.values + ")" + self.cursor.execute(insert_query) + self.conn.commit() class MySQLDatabaseAccess(DatabaseAccess): def __init___(self, database):