def MultiReadClientFullInfo(self, client_ids, min_last_ping=None,
                              cursor=None):
    """Reads full client information for a list of clients."""
    if not client_ids:
      return {}

    query = (
        "SELECT "
        "c.client_id, c.fleetspeak_enabled, c.certificate, "
        "UNIX_TIMESTAMP(c.last_ping), UNIX_TIMESTAMP(c.last_clock), "
        "c.last_ip, UNIX_TIMESTAMP(c.last_foreman), "
        "UNIX_TIMESTAMP(c.first_seen), "
        "UNIX_TIMESTAMP(c.last_snapshot_timestamp), "
        "UNIX_TIMESTAMP(c.last_crash_timestamp), "
        "UNIX_TIMESTAMP(c.last_startup_timestamp), "
        "h.client_snapshot, s.startup_info, s_last.startup_info, "
        "l.owner_username, l.label "
        "FROM clients as c "
        "FORCE INDEX (PRIMARY) "
        "LEFT JOIN client_snapshot_history as h FORCE INDEX (PRIMARY) ON ( "
        "c.client_id = h.client_id AND "
        "h.timestamp = c.last_snapshot_timestamp) "
        "LEFT JOIN client_startup_history as s FORCE INDEX (PRIMARY) ON ( "
        "c.client_id = s.client_id AND "
        "s.timestamp = c.last_snapshot_timestamp) "
        "LEFT JOIN client_startup_history as s_last FORCE INDEX (PRIMARY) ON ( "
        "c.client_id = s_last.client_id "
        "AND s_last.timestamp = c.last_startup_timestamp) "
        "LEFT JOIN client_labels AS l FORCE INDEX (PRIMARY) "
        "ON (c.client_id = l.client_id) ")

    query += "WHERE c.client_id IN (%s) " % ", ".join(["%s"] * len(client_ids))

    values = [db_utils.ClientIDToInt(cid) for cid in client_ids]
    if min_last_ping is not None:
      query += "AND c.last_ping >= FROM_UNIXTIME(%s)"
      values.append(mysql_utils.RDFDatetimeToTimestamp(min_last_ping))

    cursor.execute(query, values)
    return dict(self._ResponseToClientsFullInfo(cursor.fetchall()))
def MultiReadClientFullInfo ( self , client_ids , min_last_ping = None , cursor = None ) : if not client_ids : return { } query = ( "SELECT " "c.client_id, c.fleetspeak_enabled, c.certificate, " "UNIX_TIMESTAMP(c.last_ping), UNIX_TIMESTAMP(c.last_clock), " "c.last_ip, UNIX_TIMESTAMP(c.last_foreman), " "UNIX_TIMESTAMP(c.first_seen), " "UNIX_TIMESTAMP(c.last_snapshot_timestamp), " "UNIX_TIMESTAMP(c.last_crash_timestamp), " "UNIX_TIMESTAMP(c.last_startup_timestamp), " "h.client_snapshot, s.startup_info, s_last.startup_info, " "l.owner_username, l.label " "FROM clients as c " "FORCE INDEX (PRIMARY) " "LEFT JOIN client_snapshot_history as h FORCE INDEX (PRIMARY) ON ( " "c.client_id = h.client_id AND " "h.timestamp = c.last_snapshot_timestamp) " "LEFT JOIN client_startup_history as s FORCE INDEX (PRIMARY) ON ( " "c.client_id = s.client_id AND " "s.timestamp = c.last_snapshot_timestamp) " "LEFT JOIN client_startup_history as s_last FORCE INDEX (PRIMARY) ON ( " "c.client_id = s_last.client_id " "AND s_last.timestamp = c.last_startup_timestamp) " "LEFT JOIN client_labels AS l FORCE INDEX (PRIMARY) " "ON (c.client_id = l.client_id) " ) query += "WHERE c.client_id IN (%s) " % ", " . join ( [ "%s" ] * len ( client_ids ) ) values = [ db_utils . ClientIDToInt ( cid ) for cid in client_ids ] if min_last_ping is not None : query += "AND c.last_ping >= FROM_UNIXTIME(%s)" values . append ( mysql_utils . RDFDatetimeToTimestamp ( min_last_ping ) ) cursor . execute ( query , values ) return dict ( self . _ResponseToClientsFullInfo ( cursor . fetchall ( ) ) )
Reads full client information for a list of clients.