ppf: Full implementation of add_* for SQLite.
authorRazvan Deaconescu <razvan.deaconescu@cs.pub.ro>
Mon, 22 Aug 2011 09:55:53 +0000 (12:55 +0300)
committerRazvan Deaconescu <razvan.deaconescu@cs.pub.ro>
Mon, 22 Aug 2011 09:55:53 +0000 (12:55 +0300)
ppf/new/storage.py

index 2bbc257..a14de4e 100644 (file)
@@ -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):