def WriteClientSnapshot(self, snapshot, cursor=None):
    """Write new client snapshot."""
    insert_history_query = (
        "INSERT INTO client_snapshot_history(client_id, timestamp, "
        "client_snapshot) VALUES (%s, FROM_UNIXTIME(%s), %s)")
    insert_startup_query = (
        "INSERT INTO client_startup_history(client_id, timestamp, "
        "startup_info) VALUES(%s, FROM_UNIXTIME(%s), %s)")

    now = rdfvalue.RDFDatetime.Now()

    client_platform = snapshot.knowledge_base.os
    current_timestamp = mysql_utils.RDFDatetimeToTimestamp(now)
    client_info = {
        "last_snapshot_timestamp": current_timestamp,
        "last_startup_timestamp": current_timestamp,
        "last_version_string": snapshot.GetGRRVersionString(),
        "last_platform_release": snapshot.Uname(),
    }
    update_clauses = [
        "last_snapshot_timestamp = FROM_UNIXTIME(%(last_snapshot_timestamp)s)",
        "last_startup_timestamp = FROM_UNIXTIME(%(last_startup_timestamp)s)",
        "last_version_string = %(last_version_string)s",
        "last_platform_release = %(last_platform_release)s",
    ]
    if client_platform:
      client_info["last_platform"] = client_platform
      update_clauses.append("last_platform = %(last_platform)s")

    update_query = (
        "UPDATE clients SET {} WHERE client_id = %(client_id)s".format(
            ", ".join(update_clauses)))

    int_client_id = db_utils.ClientIDToInt(snapshot.client_id)
    client_info["client_id"] = int_client_id

    startup_info = snapshot.startup_info
    snapshot.startup_info = None
    try:
      cursor.execute(
          insert_history_query,
          (int_client_id, current_timestamp, snapshot.SerializeToString()))
      cursor.execute(
          insert_startup_query,
          (int_client_id, current_timestamp, startup_info.SerializeToString()))
      cursor.execute(update_query, client_info)
    except MySQLdb.IntegrityError as e:
      raise db.UnknownClientError(snapshot.client_id, cause=e)
    finally:
      snapshot.startup_info = startup_info
def WriteClientSnapshot ( self , snapshot , cursor = None ) : insert_history_query = ( "INSERT INTO client_snapshot_history(client_id, timestamp, " "client_snapshot) VALUES (%s, FROM_UNIXTIME(%s), %s)" ) insert_startup_query = ( "INSERT INTO client_startup_history(client_id, timestamp, " "startup_info) VALUES(%s, FROM_UNIXTIME(%s), %s)" ) now = rdfvalue . RDFDatetime . Now ( ) client_platform = snapshot . knowledge_base . os current_timestamp = mysql_utils . RDFDatetimeToTimestamp ( now ) client_info = { "last_snapshot_timestamp" : current_timestamp , "last_startup_timestamp" : current_timestamp , "last_version_string" : snapshot . GetGRRVersionString ( ) , "last_platform_release" : snapshot . Uname ( ) , } update_clauses = [ "last_snapshot_timestamp = FROM_UNIXTIME(%(last_snapshot_timestamp)s)" , "last_startup_timestamp = FROM_UNIXTIME(%(last_startup_timestamp)s)" , "last_version_string = %(last_version_string)s" , "last_platform_release = %(last_platform_release)s" , ] if client_platform : client_info [ "last_platform" ] = client_platform update_clauses . append ( "last_platform = %(last_platform)s" ) update_query = ( "UPDATE clients SET {} WHERE client_id = %(client_id)s" . format ( ", " . join ( update_clauses ) ) ) int_client_id = db_utils . ClientIDToInt ( snapshot . client_id ) client_info [ "client_id" ] = int_client_id startup_info = snapshot . startup_info snapshot . startup_info = None try : cursor . execute ( insert_history_query , ( int_client_id , current_timestamp , snapshot . SerializeToString ( ) ) ) cursor . execute ( insert_startup_query , ( int_client_id , current_timestamp , startup_info . SerializeToString ( ) ) ) cursor . execute ( update_query , client_info ) except MySQLdb . IntegrityError as e : raise db . UnknownClientError ( snapshot . client_id , cause = e ) finally : snapshot . startup_info = startup_info
Write new client snapshot.