From: Mariana Mărășoiu Date: Fri, 16 Sep 2011 01:35:02 +0000 (+0300) Subject: ppf/new: Fix date and time insertion in SQLite database. X-Git-Url: http://p2p-next.cs.pub.ro/gitweb/?a=commitdiff_plain;h=6c200338996ae9493329495967e79b163f420cd7;p=cs-p2p-next.git ppf/new: Fix date and time insertion in SQLite database. --- diff --git a/ppf/new/config.py b/ppf/new/config.py index bdc4dfd..655a6d1 100644 --- a/ppf/new/config.py +++ b/ppf/new/config.py @@ -8,6 +8,7 @@ import os import os.path import logging import ConfigParser +import datetime from StringIO import StringIO import storage @@ -121,6 +122,9 @@ class SessionEntry(object): """Return name of the session.""" session = self.data.sections()[0] cs_data = dict(self.data.items(session)) + dt = cs_data['start_time'].replace('EEST ', '') + ts = datetime.datetime.strptime(dt, "%a %b %d %H:%M:%S %Y") + cs_data['start_time'] = ts cs = storage.ClientSession( btclient = cs_data['bittorrent_client'], system_os = cs_data['system_os'], diff --git a/ppf/new/storage.py b/ppf/new/storage.py index 1453940..6f52b86 100644 --- a/ppf/new/storage.py +++ b/ppf/new/storage.py @@ -487,6 +487,13 @@ class SQLiteDatabaseAccess(DatabaseAccess): i = s.lower() in ("yes", "true", "t", "1") return int(i) + def get_string_timestamp(self, ts): + # Timestamp is Python Datatime. Convert it to string format and + # pass it to internal SQLITE julianday() function. + return "%d-%02d-%02d %02d:%02d:%02d.%d" \ + %(ts.year, ts.month, ts.day, ts.hour, ts.minute, ts.second, + 1000 * ts.microsecond) + def add_swarm(self, swarm): """Insert swarm in database. swarm type is Swarm.""" self.reset_query() @@ -520,7 +527,12 @@ class SQLiteDatabaseAccess(DatabaseAccess): 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) + + if session.start_time is not None: + timestamp_string = self.get_string_timestamp(session.start_time) + value = "julianday(" + "'" + timestamp_string + "'" + ")" + self.append_to_insert_query("start_time", value) + self.append_to_insert_query("dht_enabled", self.str2bool(session.dht_enabled)) self.append_to_insert_query("pxe_enabled", @@ -534,6 +546,11 @@ class SQLiteDatabaseAccess(DatabaseAccess): self.values = re.sub(',\s*$', '', self.values) insert_query = "INSERT INTO client_sessions(" + self.columns +")" + \ " VALUES(" + self.values + ")" + + # Remove single quote for before and after julianday() function + insert_query = insert_query.replace("\'julian", "julian") + insert_query = insert_query.replace(")'", ")") + self.cursor.execute(insert_query) self.conn.commit() self.cursor.execute("SELECT * FROM client_sessions " @@ -541,13 +558,6 @@ class SQLiteDatabaseAccess(DatabaseAccess): row = self.cursor.fetchone() return row[0] - def get_string_timestamp(self, ts): - # Timestamp is Python Datatime. Convert it to string format and - # pass it to internal SQLITE julianday() function. - return "%s-%s-%s %s:%s:%s.%s" \ - %(ts.year, ts.month, ts.day, ts.hour, ts.minute, ts.second, - 1000 * ts.microsecond) - def add_peer_status_message(self, msg): """Insert peer status message in database. msg type is PeerStatusMessage. @@ -557,10 +567,9 @@ class SQLiteDatabaseAccess(DatabaseAccess): # TODO: Check msg.timestamp is not None. Raise exception. timestamp_string = self.get_string_timestamp(msg.timestamp) - value = "julianday(" + timestamp_string + ")" + value = "julianday(" + "'" + timestamp_string + "'" + ")" self.append_to_insert_query("timestamp", value) - 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) @@ -570,6 +579,11 @@ class SQLiteDatabaseAccess(DatabaseAccess): self.values = re.sub(',\s*$', '', self.values) insert_query = "INSERT INTO peer_status_messages(" + \ self.columns +")" + " VALUES(" + self.values + ")" + + # Remove single quote for before and after julianday() function + insert_query = insert_query.replace("\'julian", "julian") + insert_query = insert_query.replace(")'", ")") + self.cursor.execute(insert_query) self.conn.commit() @@ -580,7 +594,7 @@ class SQLiteDatabaseAccess(DatabaseAccess): # TODO: Check msg.timestamp is not None. Raise exception. timestamp_string = self.get_string_timestamp(msg.timestamp) - value = "julianday(" + timestamp_string + ")" + value = "julianday(" + "'" + timestamp_string + "'" + ")" self.append_to_insert_query("timestamp", value) self.append_to_insert_query("num_peers", msg.num_peers) @@ -595,6 +609,11 @@ class SQLiteDatabaseAccess(DatabaseAccess): self.values = re.sub(',\s*$', '', self.values) insert_query = "INSERT INTO status_messages(" + self.columns +")" + \ " VALUES(" + self.values + ")" + + # Remove single quote for before and after julianday() function + insert_query = insert_query.replace("\'julian", "julian") + insert_query = insert_query.replace(")'", ")") + self.cursor.execute(insert_query) self.conn.commit() @@ -605,7 +624,7 @@ class SQLiteDatabaseAccess(DatabaseAccess): # TODO: Check msg.timestamp is not None. Raise exception. timestamp_string = self.get_string_timestamp(msg.timestamp) - value = "julianday(" + timestamp_string + ")" + value = "julianday(" + "'" + timestamp_string + "'" + ")" self.append_to_insert_query("timestamp", value) self.append_to_insert_query("transfer_direction_id", @@ -623,6 +642,11 @@ class SQLiteDatabaseAccess(DatabaseAccess): self.values = re.sub(',\s*$', '', self.values) insert_query = "INSERT INTO verbose_messages(" + self.columns +")" + \ " VALUES(" + self.values + ")" + + # Remove single quote for before and after julianday() function + insert_query = insert_query.replace("\'julian", "julian") + insert_query = insert_query.replace(")'", ")") + self.cursor.execute(insert_query) self.conn.commit()