Exemple #1
0
    def run_server(reporting_queue):
      def report_launch(actual_port):
        reporting_queue.put(
          'Launching server with pid %d at http://localhost:%d' % (os.getpid(), actual_port))

      def done_reporting():
        reporting_queue.put(DONE)

      try:
        # We mustn't block in the child, because the multiprocessing module enforces that the
        # parent either kills or joins to it. Instead we fork a grandchild that inherits the queue
        # but is allowed to block indefinitely on the server loop.
        if not os.fork():
          # Child process.
          info_dir = RunInfo.dir(self.context.config)
          # If these are specified explicitly in the config, use those. Otherwise
          # they will be None, and we'll use the ones baked into this package.
          template_dir = self.context.config.get('reporting', 'reports_template_dir')
          assets_dir = self.context.config.get('reporting', 'reports_assets_dir')
          settings = ReportingServer.Settings(info_dir=info_dir, template_dir=template_dir,
                                              assets_dir=assets_dir, root=get_buildroot(),
                                              allowed_clients=self.context.options.allowed_clients)
          server = ReportingServer(self.context.options.port, settings)
          actual_port = server.server_port()
          ReportingServerManager.save_current_server_port(actual_port)
          report_launch(actual_port)
          done_reporting()
          # Block forever here.
          server.start()
      except socket.error:
        done_reporting()
        raise
Exemple #2
0
    def run_server(reporting_queue):
      def report_launch(actual_port):
        reporting_queue.put(
          'Launching server with pid %d at http://localhost:%d' % (os.getpid(), actual_port))

      def done_reporting():
        reporting_queue.put(DONE)

      try:
        # We mustn't block in the child, because the multiprocessing module enforces that the
        # parent either kills or joins to it. Instead we fork a grandchild that inherits the queue
        # but is allowed to block indefinitely on the server loop.
        if not os.fork():
          # Child process.
          info_dir = RunInfo.dir(self.context.config)
          # If these are specified explicitly in the config, use those. Otherwise
          # they will be None, and we'll use the ones baked into this package.
          template_dir = self.context.config.get('reporting', 'reports_template_dir')
          assets_dir = self.context.config.get('reporting', 'reports_assets_dir')
          settings = ReportingServer.Settings(info_dir=info_dir, template_dir=template_dir,
                                              assets_dir=assets_dir, root=get_buildroot(),
                                              allowed_clients=self.context.options.allowed_clients)
          server = ReportingServer(self.context.options.port, settings)
          actual_port = server.server_port()
          ReportingServerManager.save_current_server_port(actual_port)
          report_launch(actual_port)
          done_reporting()
          # Block forever here.
          server.start()
      except socket.error:
        done_reporting()
        raise
Exemple #3
0
 def from_config(cls, config):
   if not isinstance(config, Config):
     raise ValueError('Expected a Config object, given %s of type %s' % (config, type(config)))
   info_dir = RunInfo.dir(config)
   stats_upload_url = config.getdefault('stats_upload_url', default=None)
   num_foreground_workers = config.getdefault('num_foreground_workers', default=8)
   num_background_workers = config.getdefault('num_background_workers', default=8)
   return cls(info_dir,
              stats_upload_url=stats_upload_url,
              num_foreground_workers=num_foreground_workers,
              num_background_workers=num_background_workers)
Exemple #4
0
 def from_config(cls, config):
   if not isinstance(config, Config):
     raise ValueError('Expected a Config object, given %s of type %s' % (config, type(config)))
   info_dir = RunInfo.dir(config)
   stats_upload_url = config.getdefault('stats_upload_url', default=None)
   stats_upload_timeout = config.getdefault('stats_upload_timeout', default=2)
   num_foreground_workers = config.getdefault('num_foreground_workers', default=8)
   num_background_workers = config.getdefault('num_background_workers', default=8)
   return cls(info_dir,
              stats_upload_url=stats_upload_url,
              num_foreground_workers=num_foreground_workers,
              num_background_workers=num_background_workers)