Beispiel #1
0
 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
Beispiel #2
0
 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
Beispiel #3
0
    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])
Beispiel #4
0
    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
Beispiel #5
0
 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
Beispiel #6
0
  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