Exemple #1
0
  def __init__(self, sender_queue):
    """Constructor.

    Args:
      sender_queue: Queue.Queue
    """
    self._sender_queue = sender_queue
    self.nanny_controller = client_utils.NannyController()
Exemple #2
0
    def SyncTransactionLog(self):
        """This flushes the transaction log.

    This function should be called by the client before performing
    potential dangerous actions so the server can get notified in case
    the whole machine crashes.
    """

        if self.nanny_controller is None:
            self.nanny_controller = client_utils.NannyController()
        self.nanny_controller.SyncTransactionLog()
Exemple #3
0
    def Progress(self):
        """Indicate progress of the client action.

    This function should be called periodically during client actions that do
    not finish instantly. It will notify the nanny that the action is not stuck
    and avoid the timeout and it will also check if the action has reached its
    cpu limit.

    Raises:
      CPUExceededError: CPU limit exceeded.
    """
        now = time.time()
        if now - self.last_progress_time <= 2:
            return

        self.last_progress_time = now

        # Prevent the machine from sleeping while the action is running.
        client_utils.KeepAlive()

        if self.nanny_controller is None:
            self.nanny_controller = client_utils.NannyController()

        self.nanny_controller.Heartbeat()

        user_start = self.cpu_start.user
        system_start = self.cpu_start.system
        cpu_times = self.proc.cpu_times()
        user_end = cpu_times.user
        system_end = cpu_times.system

        used_cpu = user_end - user_start + system_end - system_start

        if used_cpu > self.cpu_limit:
            self.grr_worker.SendClientAlert("Cpu limit exceeded.")
            raise CPUExceededError("Action exceeded cpu limit.")
Exemple #4
0
 def StartNanny(self):
     # Deliberatley no call to StartNanny()
     self.nanny_controller = client_utils.NannyController()
Exemple #5
0
 def StartNanny(self):
   # Use this to control the nanny transaction log.
   self.nanny_controller = client_utils.NannyController()
   self.nanny_controller.StartNanny()