def test_scoped_registration_uses_references(): mg = MutatorGauge('name', 'brian') rm = RootMetrics() rm.scope('earth').register(mg) rm.scope('pluto').register(mg) assert rm.sample() == {'earth.name': 'brian', 'pluto.name': 'brian'} mg.write('zargon') assert rm.sample() == {'earth.name': 'zargon', 'pluto.name': 'zargon'} rm.clear()
def test_scoped_registration_uses_references(): mg = MutatorGauge("name", "brian") rm = RootMetrics() rm.scope("earth").register(mg) rm.scope("pluto").register(mg) assert rm.sample() == {"earth.name": "brian", "pluto.name": "brian"} mg.write("zargon") assert rm.sample() == {"earth.name": "zargon", "pluto.name": "zargon"} rm.clear()
def test_scoped_registration_uses_references(): mg = MutatorGauge('name', 'brian') rm = RootMetrics() rm.scope('earth').register(mg) rm.scope('pluto').register(mg) assert rm.sample() == { 'earth.name': 'brian', 'pluto.name': 'brian' } mg.write('zargon') assert rm.sample() == { 'earth.name': 'zargon', 'pluto.name': 'zargon' } rm.clear()
def _setup_metrics(self): self._metrics = self.Metrics() self._metrics.cluster_count = self.metrics.register( AtomicGauge('cluster_count', 0)) # Total resources requested by the scheduler's clients. When a cluster is created its resources # are added to the total; when it's deleted its resources are subtracted from the total. # NOTE: These are 'requested' resources that are independent of resources offered by Mesos or # allocated to or used by Mysos tasks running on Mesos cluster. self._metrics.total_requested_cpus = self.metrics.register( MutatorGauge('total_requested_cpus', 0.)) self._metrics.total_requested_mem_mb = self.metrics.register( MutatorGauge('total_requested_mem_mb', 0.)) self._metrics.total_requested_disk_mb = self.metrics.register( MutatorGauge('total_requested_disk_mb', 0.)) # 1: registered; 0: not registered. self._metrics.framework_registered = self.metrics.register( MutatorGauge('framework_registered', 0)) self._startup_time = datetime.utcnow() self._metrics.uptime = self.metrics.register( LambdaGauge( 'uptime', lambda: (datetime.utcnow() - self._startup_time).total_seconds())) # Counters for tasks in terminal states. self._metrics.tasks_lost = self.metrics.register( AtomicGauge('tasks_lost', 0)) self._metrics.tasks_finished = self.metrics.register( AtomicGauge('tasks_finished', 0)) self._metrics.tasks_failed = self.metrics.register( AtomicGauge('tasks_failed', 0)) self._metrics.tasks_killed = self.metrics.register( AtomicGauge('tasks_killed', 0)) self._metrics.resource_offers = self.metrics.register( AtomicGauge('resource_offers', 0)) self._metrics.offers_incompatible_role = self.metrics.register( AtomicGauge('offers_incompatible_role', 0)) self._metrics.tasks_launched = self.metrics.register( AtomicGauge('tasks_launched', 0)) # 'offers_unused' are due to idle scheduler or resources don't fit, i.e., # 'resource_offers' - 'tasks_launched' - 'offers_incompatible_role'. self._metrics.offers_unused = self.metrics.register( AtomicGauge('offers_unused', 0))
def test_named_gauge_types(): with pytest.raises(TypeError): ag = AtomicGauge(0) with pytest.raises(TypeError): ag = AtomicGauge(None) with pytest.raises(TypeError): lb = Label(None, 3) with pytest.raises(TypeError): mg = MutatorGauge({})
def __init__(self, clock=time): self._clock = clock self._self = psutil.Process(os.getpid()) self._orphan = False self.metrics.register(LambdaGauge('orphan', lambda: int(self._orphan))) self._metrics = dict((metric, MutatorGauge(metric, 0)) for metric in self.MUTATOR_METRICS) for metric in self._metrics.values(): self.metrics.register(metric) ExceptionalThread.__init__(self) self.daemon = True
def __init__(self, clock=time): self._clock = clock self._self = psutil.Process(os.getpid()) try: self._version = self.get_release_from_binary( os.path.join(self._self.cwd(), self._self.cmdline()[1])) except (IndexError, psutil.Error): self._version = 'UNKNOWN' self.metrics.register(NamedGauge('version', self._version)) self._orphan = False self.metrics.register(LambdaGauge('orphan', lambda: int(self._orphan))) self._metrics = dict((metric, MutatorGauge(metric, 0)) for metric in self.MUTATOR_METRICS) for metric in self._metrics.values(): self.metrics.register(metric) ExceptionalThread.__init__(self) self.daemon = True
def test_basic_mutable_gauge(): mg = MutatorGauge('a') assert mg.name() == 'a' assert mg.read() == None mg = MutatorGauge('a', 'b') assert mg.name() == 'a' assert mg.read() == 'b' mg.write('c') assert mg.name() == 'a' assert mg.read() == 'c' mg.write(None) assert mg.read() == None
def __init__(self, state, state_provider, framework_user, executor_uri, executor_cmd, kazoo, zk_url, election_timeout, admin_keypath, scheduler_key, installer_args=None, backup_store_args=None, executor_environ=None, executor_source_prefix=None, framework_role='*'): """ :param state: The Scheduler object. :param state_provider: The StateProvider instance that the scheduler should use to restore/persist states. :param framework_user: See flags. :param executor_uri: See flags. :param executor_cmd: See flags. :param framework_role: See flags. :param election_timeout: See flags. :param admin_keypath: See flags. :param scheduler_key: Scheduler uses it to encrypt cluster passwords. :param installer_args: See flags. :param backup_store_args: See flags. :param executor_environ: See flags. :param executor_source_prefix: See flags. :param kazoo: The Kazoo client for communicating MySQL cluster information between the scheduler and the executors. :param zk_url: ZooKeeper URL for used by the scheduler and the executors to access ZooKeeper. """ self._lock = threading.Lock() if not isinstance(state, Scheduler): raise TypeError("'state' should be an instance of Scheduler") self._state = state if not isinstance(state_provider, StateProvider): raise TypeError( "'state_provider' should be an instance of StateProvider") self._state_provider = state_provider self._framework_user = framework_user self._executor_uri = executor_uri self._executor_cmd = executor_cmd self._framework_role = framework_role self._election_timeout = election_timeout self._admin_keypath = admin_keypath self._installer_args = installer_args self._backup_store_args = backup_store_args self._executor_environ = executor_environ self._executor_source_prefix = executor_source_prefix self._driver = None # Will be set by registered(). # Use a subdir to avoid name collision with the state storage. self._discover_zk_url = posixpath.join(zk_url, "discover") self._kazoo = kazoo self._scheduler_key = scheduler_key self._password_box = PasswordBox(scheduler_key) self._tasks = {} # {Task ID: cluster name} mappings. self._launchers = OrderedDict( ) # Order-preserving {cluster name : MySQLClusterLauncher} # mappings so cluster requests are fulfilled on a first come, # first serve (FCFS) basis. self.stopped = threading.Event( ) # An event set when the scheduler is stopped. self.connected = threading.Event( ) # An event set when the scheduler is first connected to # Mesos. The scheduler tolerates later disconnections. self._cluster_count = self.metrics.register( AtomicGauge('cluster_count', 0)) # Total resources requested by the scheduler's clients. When a cluster is created its resources # are added to the total; when it's deleted its resources are subtracted from the total. # NOTE: These are 'requested' resources that are independent of resources offered by Mesos or # allocated to or used by Mysos tasks running on Mesos cluster. self._total_requested_cpus = self.metrics.register( MutatorGauge('total_requested_cpus', 0.)) self._total_requested_mem_mb = self.metrics.register( MutatorGauge('total_requested_mem_mb', 0.)) self._total_requested_disk_mb = self.metrics.register( MutatorGauge('total_requested_disk_mb', 0.))