def get_system_state(self, path, params): """Get an overview of the system state""" system_state = SystemState() self._populate_versions(system_state.versions) system_state.peer_controller_url = self._get_peer_controller_url() system_state.summary_sources.CopyFrom(self._get_system_summary(path)) system_state.site_name = self._config.get('site', {}).get('name', 'unknown') system_state.controller_name = self._get_controller_name() self._distill_summary(system_state.summary_sources, system_state) return system_state
def test_config_error_detail(self): """Test config detail for config errors""" summaries = SystemState.SummarySources() self._forchestrator._faucet_events = Mock() self._forchestrator._get_controller_state = MagicMock(return_value=(2, 'test_detail')) self._forchestrator._forch_config_errors['static_behavior_file'] = 'File error' _, detail = self._forchestrator._get_combined_summary(summaries) self.assertTrue('forch' in detail)
def _get_system_summary(self, path): states = SystemState.SummarySources() states.cpn_state.CopyFrom(self._cpn_collector.get_cpn_summary()) states.process_state.CopyFrom(self._local_collector.get_process_summary()) states.dataplane_state.CopyFrom(self._faucet_collector.get_dataplane_summary()) states.switch_state.CopyFrom(self._faucet_collector.get_switch_summary()) states.list_hosts.CopyFrom(self._faucet_collector.get_host_summary()) url_base = self._extract_url_base(path) for field, value in states.ListFields(): value.detail_url = f'{url_base}/?{field.name}' return states
def __init__(self, config): self._config = config self._structural_config_file = None self._behavioral_config_file = None self._forch_config_dir = None self._faucet_config_dir = None self._gauge_config_file = None self._segments_vlans_file = None self._faucet_events = None self._start_time = datetime.fromtimestamp(time.time()).isoformat() self._faucet_prom_endpoint = None self._gauge_prom_endpoint = None self._behavioral_config = None self._faucet_collector = None self._local_collector = None self._cpn_collector = None self._varz_collector = None self._faucetizer = None self._authenticator = None self._faucetize_scheduler = None self._config_file_watcher = None self._faucet_state_scheduler = None self._gauge_metrics_scheduler = None self._device_report_handler = None self._port_state_manager = None self._initialized = False self._active_state = State.initializing self._active_state_lock = threading.Lock() self._should_enable_faucetizer = False self._should_ignore_static_behavior = False self._should_ignore_auth_result = False self._forch_config_errors = {} self._system_errors = {} self._faucet_config_summary = SystemState.FaucetConfigSummary() self._metrics = None self._varz_proxy = None self._last_faucet_config_writing_time = None self._last_received_faucet_config_hash = None self._config_hash_verification_timeout_sec = ( self._config.event_client.config_hash_verification_timeout_sec or _DEFAULT_CONFIG_HASH_VERIFICATION_TIMEOUT_SEC) self._states_lock = threading.Lock() self._timer_lock = threading.Lock() self._logger = get_logger('forch')
def _get_faucet_config(self): try: (new_conf_hashes, _, new_dps, top_conf) = config_parser.dp_parser( self._behavioral_config_file, 'fconfig') config_hash_info = self._get_faucet_config_hash_info(new_conf_hashes) self._faucet_config_summary = SystemState.ConfigSummary() for file_name, file_hash in new_conf_hashes.items(): LOGGER.info('Loaded conf %s as %s', file_name, file_hash) self._faucet_config_summary.hashes[file_name] = file_hash for warning, message in self._validate_config(top_conf): LOGGER.warning('Config warning %s: %s', warning, message) self._faucet_config_summary.warnings[warning] = message return config_hash_info, new_dps, top_conf except Exception as e: LOGGER.error('Cannot read faucet config: %s', e) raise
def get_system_state(self, path, params): """Get an overview of the system state""" system_state = SystemState() self._populate_versions(system_state.versions) system_state.peer_controller_url = self._get_peer_controller_url() system_state.summary_sources.CopyFrom(self._get_system_summary(path)) system_state.site_name = self._config.site.name or 'unknown' system_state.controller_name = self._get_controller_name() system_state.authentication_mode = self._get_sys_auth_mode() system_state.config_summary.CopyFrom(self._get_config_summary()) self._distill_summary(system_state.summary_sources, system_state) return system_state
def _get_config_summary(self): config_summary = SystemState.ConfigSummary() config_summary.faucet_config.CopyFrom(self._faucet_config_summary) config_summary.forch_config.errors.update(self._forch_config_errors) return config_summary