Esempio n. 1
0
  def _StopLegacy(self, reason=None):
    super(GenericHunt, self).Stop(reason=reason)

    started_flows = grr_collections.RDFUrnCollection(
        self.started_flows_collection_urn)

    num_terminated_flows = 0
    self.Log("Hunt stop. Terminating all the started flows.")

    # Delete hunt flows states.
    for flows_batch in collection.Batch(started_flows,
                                        self.__class__.STOP_BATCH_SIZE):
      with queue_manager.QueueManager(token=self.token) as manager:
        manager.MultiDestroyFlowStates(flows_batch)

      with data_store.DB.GetMutationPool() as mutation_pool:
        for f in flows_batch:
          flow.GRRFlow.MarkForTermination(
              f, reason="Parent hunt stopped.", mutation_pool=mutation_pool)

      num_terminated_flows += len(flows_batch)

    # Delete hunt's requests and responses to ensure no more
    # processing is going to occur.
    with queue_manager.QueueManager(token=self.token) as manager:
      manager.DestroyFlowStates(self.session_id)

    self.Log("%d flows terminated.", num_terminated_flows)
Esempio n. 2
0
  def _StopRelational(self, reason=None):
    super(GenericHunt, self).Stop(reason=reason)
    started_flows = grr_collections.RDFUrnCollection(
        self.started_flows_collection_urn)

    client_id_flow_id_pairs = []
    for flow_urn in started_flows:
      components = flow_urn.Split()
      client_id_flow_id_pairs.append((components[0], components[2]))

    data_store.REL_DB.UpdateFlows(
        client_id_flow_id_pairs,
        pending_termination=rdf_flow_objects.PendingFlowTermination(
            reason="Parent hunt stopped."))