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):