def ReadClientMetadatas(self, client_ids): """Reads ClientMetadata records for a list of clients.""" ids = [_ClientIDToInt(client_id) for client_id in client_ids] query = ( "SELECT client_id, fleetspeak_enabled, certificate, last_ping, " "last_clock, last_ip, last_foreman, last_crash, first_seen FROM " "clients WHERE client_id IN ({})").format(", ".join(["%s"] * len(ids))) con = self.pool.get() cursor = con.cursor() ret = {} try: cursor.execute(query, ids) while True: row = cursor.fetchone() if not row: break cid, fs, crt, ping, clk, ip, foreman, crash, first = row ret[_IntToClientID(cid)] = objects.ClientMetadata( certificate=crt, fleetspeak_enabled=fs, first_seen=_MysqlToRDFDatetime(first), ping=_MysqlToRDFDatetime(ping), clock=_MysqlToRDFDatetime(clk), ip=_StringToRDFProto(rdf_client.NetworkAddress, ip), last_foreman_time=_MysqlToRDFDatetime(foreman), last_crash=_StringToRDFProto(rdf_client.ClientCrash, crash)) finally: cursor.close() con.close() return ret
def MultiReadClientMetadata(self, client_ids, cursor=None): """Reads ClientMetadata records for a list of clients.""" ids = [_ClientIDToInt(client_id) for client_id in client_ids] query = ("SELECT client_id, fleetspeak_enabled, certificate, last_ping, " "last_clock, last_ip, last_foreman, first_seen, " "last_crash_timestamp, last_startup_timestamp FROM " "clients WHERE client_id IN ({})").format(", ".join( ["%s"] * len(ids))) ret = {} cursor.execute(query, ids) while True: row = cursor.fetchone() if not row: break cid, fs, crt, ping, clk, ip, foreman, first, lct, lst = row ret[_IntToClientID(cid)] = objects.ClientMetadata( certificate=crt, fleetspeak_enabled=fs, first_seen=_MysqlToRDFDatetime(first), ping=_MysqlToRDFDatetime(ping), clock=_MysqlToRDFDatetime(clk), ip=_StringToRDFProto(rdf_client.NetworkAddress, ip), last_foreman_time=_MysqlToRDFDatetime(foreman), startup_info_timestamp=_MysqlToRDFDatetime(lst), last_crash_timestamp=_MysqlToRDFDatetime(lct)) return ret
def testWriteClientSnapshotHistoryRaiseTypeError(self): client = objects.ClientMetadata() client.os_version = "16.04" client.timestamp = rdfvalue.RDFDatetime.FromHumanReadable("2010-04-10") with self.assertRaisesRegexp(TypeError, "client instance"): self.db.WriteClientSnapshotHistory([client])
def _ResponseToClientsFullInfo(self, response): c_full_info = None prev_cid = None for row in response: (cid, fs, crt, ping, clk, ip, foreman, first, last_client_ts, last_crash_ts, last_startup_ts, client_obj, client_startup_obj, last_startup_obj, label_owner, label_name) = row if cid != prev_cid: if c_full_info: yield _IntToClientID(prev_cid), c_full_info metadata = objects.ClientMetadata( certificate=crt, fleetspeak_enabled=fs, first_seen=_MysqlToRDFDatetime(first), ping=_MysqlToRDFDatetime(ping), clock=_MysqlToRDFDatetime(clk), ip=_StringToRDFProto(rdf_client.NetworkAddress, ip), last_foreman_time=_MysqlToRDFDatetime(foreman), startup_info_timestamp=_MysqlToRDFDatetime( last_startup_ts), last_crash_timestamp=_MysqlToRDFDatetime(last_crash_ts)) if client_obj is not None: l_snapshot = objects.ClientSnapshot.FromSerializedString( client_obj) l_snapshot.timestamp = _MysqlToRDFDatetime(last_client_ts) l_snapshot.startup_info = rdf_client.StartupInfo.FromSerializedString( client_startup_obj) l_snapshot.startup_info.timestamp = l_snapshot.timestamp else: l_snapshot = objects.ClientSnapshot( client_id=_IntToClientID(cid)) if last_startup_obj is not None: startup_info = rdf_client.StartupInfo.FromSerializedString( last_startup_obj) startup_info.timestamp = _MysqlToRDFDatetime( last_startup_ts) else: startup_info = None prev_cid = cid c_full_info = objects.ClientFullInfo( metadata=metadata, labels=[], last_snapshot=l_snapshot, last_startup_info=startup_info) if label_owner and label_name: c_full_info.labels.append( objects.ClientLabel(name=label_name, owner=label_owner)) if c_full_info: yield _IntToClientID(prev_cid), c_full_info
def ReadClientMetadatas(self, client_ids): """Reads ClientMetadata records for a list of clients.""" res = {} for client_id in client_ids: md = self.metadatas.get(client_id, {}) res[client_id] = objects.ClientMetadata( certificate=md.get("certificate"), fleetspeak_enabled=md.get("fleetspeak_enabled"), ping=md.get("ping"), clock=md.get("clock"), ip=md.get("ip"), last_foreman_time=md.get("last_foreman_time"), last_crash=md.get("last_crash")) return res
def MultiReadClientMetadata(self, client_ids): """Reads ClientMetadata records for a list of clients.""" res = {} for client_id in client_ids: self._ValidateClientId(client_id) md = self.metadatas.get(client_id, {}) res[client_id] = objects.ClientMetadata( certificate=md.get("certificate"), fleetspeak_enabled=md.get("fleetspeak_enabled"), first_seen=md.get("first_seen"), ping=md.get("ping"), clock=md.get("clock"), ip=md.get("ip"), last_foreman_time=md.get("last_foreman_time"), last_crash_timestamp=md.get("last_crash_timestamp"), startup_info_timestamp=md.get("startup_info_timestamp")) return res