예제 #1
0
파일: varz.py 프로젝트: xianxu/pants
 def __init__(self, period=None):
     self._metrics = RootMetrics()
     if period is not None:
         self._monitor = MetricSampler(self._metrics, period)
     else:
         self._monitor = MetricSampler(self._metrics)
     self._monitor.start()
예제 #2
0
파일: varz.py 프로젝트: CodeWarltz/commons
 def __init__(self, period=None):
   self._metrics = RootMetrics()
   if period is not None:
     self._monitor = MetricSampler(self._metrics, period)
   else:
     self._monitor = MetricSampler(self._metrics)
   self._monitor.start()
예제 #3
0
파일: varz.py 프로젝트: xianxu/pants
class VarsEndpoint(object):
    """
    Wrap a MetricSampler to export the /vars endpoint for applications that register
    exported variables.
  """
    def __init__(self, period=None):
        self._metrics = RootMetrics()
        if period is not None:
            self._monitor = MetricSampler(self._metrics, period)
        else:
            self._monitor = MetricSampler(self._metrics)
        self._monitor.start()

    @HttpServer.route("/vars")
    @HttpServer.route("/vars/:var")
    def handle_vars(self, var=None):
        HttpServer.set_content_type('text/plain; charset=iso-8859-1')
        samples = self._monitor.sample()

        if var is None:
            return '\n'.join('%s %s' % (key, val)
                             for key, val in sorted(samples.items()))
        else:
            if var in samples:
                return samples[var]
            else:
                HttpServer.abort(404, 'Unknown exported variable')

    @HttpServer.route("/vars.json")
    def handle_vars_json(self, var=None, value=None):
        return self._monitor.sample()

    def shutdown(self):
        self._monitor.shutdown()
        self._monitor.join()
예제 #4
0
class VarsEndpoint(object):
    """
    Wrap a MetricSampler to export the /vars endpoint for applications that register
    exported variables.
  """
    def __init__(self, period=None):
        self._metrics = RootMetrics()
        if period is not None:
            self._monitor = MetricSampler(self._metrics, period)
        else:
            self._monitor = MetricSampler(self._metrics)
        self._monitor.start()

    @HttpServer.route("/vars")
    @HttpServer.route("/vars/:var")
    def handle_vars(self, var=None):
        samples = self._monitor.sample()

        if var is None:
            body = '<br>'.join('%s %s' % (key, val)
                               for key, val in samples.items())
            return '<html><body><pre>%s</pre></body></html>' % body
        else:
            if var in samples:
                return samples[var]
            else:
                HttpServer.abort(404, 'Unknown exported variable')

    @HttpServer.route("/vars.json")
    def handle_vars_json(self, var=None, value=None):
        return self._monitor.sample()

    def shutdown(self):
        self._monitor.shutdown()
        self._monitor.join()
예제 #5
0
파일: varz.py 프로젝트: wcauchois/commons-1
class VarsEndpoint(object):
    """
    Wrap a MetricSampler to export the /vars endpoint for applications that register
    exported variables.
  """
    def __init__(self, period=None, stats_filter=None):
        self._metrics = RootMetrics()
        self._stats_filter = stats_filter
        if period is not None:
            self._monitor = MetricSampler(self._metrics, period)
        else:
            self._monitor = MetricSampler(self._metrics)
        self._monitor.start()

    @HttpServer.route("/vars")
    @HttpServer.route("/vars/:var")
    def handle_vars(self, var=None):
        HttpServer.set_content_type('text/plain; charset=iso-8859-1')
        filtered = self._parse_filtered_arg()
        samples = self._monitor.sample()

        if var is None and filtered and self._stats_filter:
            return '\n'.join('%s %s' % (key, val)
                             for key, val in sorted(samples.items())
                             if not self._stats_filter.match(key))
        elif var is None:
            return '\n'.join('%s %s' % (key, val)
                             for key, val in sorted(samples.items()))
        else:
            if var in samples:
                return samples[var]
            else:
                HttpServer.abort(404, 'Unknown exported variable')

    @HttpServer.route("/vars.json")
    def handle_vars_json(self, var=None, value=None):
        filtered = self._parse_filtered_arg()
        sample = self._monitor.sample()
        if filtered and self._stats_filter:
            return dict((key, val) for key, val in sample.items()
                        if not self._stats_filter.match(key))
        else:
            return sample

    def shutdown(self):
        self._monitor.shutdown()
        self._monitor.join()

    def _parse_filtered_arg(self):
        return request.GET.get('filtered', '') in ('true', '1')
예제 #6
0
class VarsEndpoint(object):
  """
    Wrap a MetricSampler to export the /vars endpoint for applications that register
    exported variables.
  """

  def __init__(self, period=None, stats_filter=None):
    self._metrics = RootMetrics()
    self._stats_filter = stats_filter
    if period is not None:
      self._monitor = MetricSampler(self._metrics, period)
    else:
      self._monitor = MetricSampler(self._metrics)
    self._monitor.start()

  @HttpServer.route("/vars")
  @HttpServer.route("/vars/:var")
  def handle_vars(self, var=None):
    HttpServer.set_content_type('text/plain; charset=iso-8859-1')
    filtered = self._parse_filtered_arg()
    samples = self._monitor.sample()

    if var is None and filtered and self._stats_filter:
      return '\n'.join(
          '%s %s' % (key, val) for key, val in sorted(samples.items())
          if not self._stats_filter.match(key))
    elif var is None:
      return '\n'.join(
          '%s %s' % (key, val) for key, val in sorted(samples.items()))
    else:
      if var in samples:
        return samples[var]
      else:
        HttpServer.abort(404, 'Unknown exported variable')

  @HttpServer.route("/vars.json")
  def handle_vars_json(self, var=None, value=None):
    filtered = self._parse_filtered_arg()
    sample = self._monitor.sample()
    if filtered and self._stats_filter:
      return dict((key, val) for key, val in sample.items() if not self._stats_filter.match(key))
    else:
      return sample

  def shutdown(self):
    self._monitor.shutdown()
    self._monitor.join()

  def _parse_filtered_arg(self):
    return request.GET.get('filtered', '') in ('true', '1')
예제 #7
0
파일: varz.py 프로젝트: CodeWarltz/commons
class VarsEndpoint(object):
  """
    Wrap a MetricSampler to export the /vars endpoint for applications that register
    exported variables.
  """

  def __init__(self, period=None):
    self._metrics = RootMetrics()
    if period is not None:
      self._monitor = MetricSampler(self._metrics, period)
    else:
      self._monitor = MetricSampler(self._metrics)
    self._monitor.start()

  @HttpServer.route("/vars")
  @HttpServer.route("/vars/:var")
  def handle_vars(self, var=None):
    HttpServer.set_content_type('text/plain; charset=iso-8859-1')
    samples = self._monitor.sample()

    if var is None:
      return '\n'.join(
        '%s %s' % (key, val) for key, val in sorted(samples.items()))
    else:
      if var in samples:
        return samples[var]
      else:
        HttpServer.abort(404, 'Unknown exported variable')

  @HttpServer.route("/vars.json")
  def handle_vars_json(self, var=None, value=None):
    return self._monitor.sample()

  def shutdown(self):
    self._monitor.shutdown()
    self._monitor.join()
예제 #8
0
파일: varz.py 프로젝트: billwei/commons
class VarsEndpoint(object):
  """
    Wrap a MetricSampler to export the /vars endpoint for applications that register
    exported variables.
  """

  def __init__(self, period=None):
    self._metrics = RootMetrics()
    if period is not None:
      self._monitor = MetricSampler(self._metrics, period)
    else:
      self._monitor = MetricSampler(self._metrics)
    self._monitor.start()

  @HttpServer.route("/vars")
  @HttpServer.route("/vars/:var")
  def handle_vars(self, var = None):
    samples = self._monitor.sample()

    if var is None:
      body='<br>'.join(
        '%s %s' % (key, val) for key, val in samples.iteritems())
      return '<html><body><pre>%s</pre></body></html>' % body
    else:
      if var in samples:
        return samples[var]
      else:
        HttpServer.abort(404, 'Unknown exported variable')

  @HttpServer.route("/vars.json")
  def handle_vars_json(self, var = None, value = None):
    return self._monitor.sample()

  def shutdown(self):
    self._monitor.shutdown()
    self._monitor.join()
예제 #9
0
  def main(args, options):
    log.info("Options in use: %s", options)

    if not options.api_port:
      app.error('Must specify --port')

    if not options.mesos_master:
      app.error('Must specify --mesos_master')

    if not options.framework_user:
      app.error('Must specify --framework_user')

    if not options.executor_uri:
      app.error('Must specify --executor_uri')

    if not options.executor_cmd:
      app.error('Must specify --executor_cmd')

    if not options.zk_url:
      app.error('Must specify --zk_url')

    if not options.admin_keypath:
      app.error('Must specify --admin_keypath')

    if not options.scheduler_keypath:
      app.error('Must specify --scheduler_keypath')

    if options.verbose:
      LogOptions.set_stderr_log_level('google:DEBUG')

    try:
      election_timeout = parse_time(options.election_timeout)
      framework_failover_timeout = parse_time(options.framework_failover_timeout)
    except InvalidTime as e:
      app.error(e.message)

    try:
      _, zk_servers, zk_root = zookeeper.parse(options.zk_url)
    except Exception as e:
      app.error("Invalid --zk_url: %s" % e.message)

    web_assets_dir = os.path.join(options.work_dir, "web")
    pkgutil.unpack_assets(web_assets_dir, MYSOS_MODULE, ASSET_RELPATH)
    log.info("Extracted web assets into %s" % options.work_dir)

    fw_principal = None
    fw_secret = None
    if options.framework_authentication_file:
      try:
        with open(options.framework_authentication_file, "r") as f:
          cred = yaml.load(f)
        fw_principal = cred["principal"]
        fw_secret = cred["secret"]
        log.info("Loaded credential (principal=%s) for framework authentication" % fw_principal)
      except IOError as e:
        app.error("Unable to read the framework authentication key file: %s" % e)
      except (KeyError, yaml.YAMLError) as e:
        app.error("Invalid framework authentication key file format %s" % e)

    scheduler_key = None
    try:
      with open(options.scheduler_keypath, 'rb') as f:
        scheduler_key = f.read().strip()
        if not scheduler_key:
          raise ValueError("The key file is empty")
    except Exception as e:
      app.error("Cannot read --scheduler_keypath: %s" % e)

    log.info("Starting Mysos scheduler")

    kazoo = KazooClient(zk_servers)
    kazoo.start()

    if options.state_storage == 'zk':
      log.info("Using ZooKeeper (path: %s) for state storage" % zk_root)
      state_provider = ZooKeeperStateProvider(kazoo, zk_root)
    else:
      log.info("Using local disk for state storage")
      state_provider = LocalStateProvider(options.work_dir)

    try:
      state = state_provider.load_scheduler_state()
    except StateProvider.Error as e:
      app.error(e.message)

    if state:
      log.info("Successfully restored scheduler state")
      framework_info = state.framework_info
      if framework_info.HasField('id'):
        log.info("Recovered scheduler's FrameworkID is %s" % framework_info.id.value)
    else:
      log.info("No scheduler state to restore")
      framework_info = FrameworkInfo(
          user=options.framework_user,
          name=FRAMEWORK_NAME,
          checkpoint=True,
          failover_timeout=framework_failover_timeout.as_(Time.SECONDS),
          role=options.framework_role,
          hostname=options.hostname,
          webui_url="http://%s:%s/" % (options.hostname, options.api_port))
      if fw_principal:
        framework_info.principal = fw_principal
      state = Scheduler(framework_info)
      state_provider.dump_scheduler_state(state)

    scheduler = MysosScheduler(
        state,
        state_provider,
        options.framework_user,
        options.executor_uri,
        options.executor_cmd,
        kazoo,
        options.zk_url,
        election_timeout,
        options.admin_keypath,
        scheduler_key,
        installer_args=options.installer_args,
        backup_store_args=options.backup_store_args,
        executor_environ=options.executor_environ,
        executor_source_prefix=options.executor_source_prefix,
        docker_image=options.docker_image,
        framework_role=options.framework_role)

    RootMetrics().register_observable('scheduler', scheduler)

    if fw_principal and fw_secret:
      cred = Credential(principal=fw_principal, secret=fw_secret)
      scheduler_driver = mesos.native.MesosSchedulerDriver(
          scheduler,
          framework_info,
          options.mesos_master,
          cred)
    else:
      scheduler_driver = mesos.native.MesosSchedulerDriver(
          scheduler,
          framework_info,
          options.mesos_master)

    scheduler_driver.start()

    metric_sampler = MetricSampler(RootMetrics())
    metric_sampler.start()

    server = HttpServer()
    server.mount_routes(MysosServer(scheduler, web_assets_dir, metric_sampler))

    et = ExceptionalThread(
        target=server.run, args=('0.0.0.0', options.api_port, 'cherrypy'))
    et.daemon = True
    et.start()

    try:
      # Wait for the scheduler to stop.
      # The use of 'stopped' event instead of scheduler_driver.join() is necessary to stop the
      # process with SIGINT.
      while not scheduler.stopped.wait(timeout=0.5):
        pass
    except KeyboardInterrupt:
      log.info('Interrupted, exiting.')
    else:
      log.info('Scheduler exited.')

    app.shutdown(1)  # Mysos scheduler is supposed to be long-running thus the use of exit status 1.
예제 #10
0
 def setUp(self):
     self._scheduler = FakeScheduler()
     self._app = TestApp(
         MysosServer(self._scheduler, self.web_assets_dir,
                     MetricSampler(RootMetrics())).app)