def modular_input_should_run(session_key, logger=None): """ Determine if a modular input should run or not. Run if and only if: 1. Node is not a SHC member 2. Node is an SHC member and is Captain @return True if condition satisfies, False otherwise """ if any([ not isinstance(session_key, basestring), isinstance(session_key, basestring) and not session_key.strip() ]): raise ValueError('Invalid session key') info = ServerInfo(session_key, port=getDefault('port')) logger = log.getLogger() if not logger else logger if not info.is_shc_member(): return True timeout = 300 # 5 minutes while timeout > 0: try: # captain election can take time on a rolling restart. if info.is_captain_ready(): break except HTTPError as e: if e.status == 503: logger.warning( 'SHC may be initializing on node `%s`. Captain is not ready. Will try again.', info.server_name) else: logger.exception('Unexpected exception on node `%s`', info.server_name) raise time.sleep(5) timeout -= 5 # we can fairly be certain that even after 5 minutes if `is_captain_ready` # is false, there is a problem if not info.is_captain_ready(): raise Exception( ('Error. Captain is not ready even after 5 minutes. node=`%s`.'), info.server_name) return info.is_captain()
def do_additional_setup(self): log_level = self.inputs.get('job').get('log_level', 'INFO') self.logger = log.getLogger(logger_name=self.name, log_level=log_level) self.check_kvstore_readiness() self.session_key = session['authtoken'] self.dry_run = self.inputs.get('job').get('dry_run', '').lower() in ('1', 'true') server_uri = em_common.get_server_uri() self.splunkd_service = Service( port=getDefault('port'), token=self.session_key, owner='nobody', app=em_constants.APP_NAME, ) self.app_conf_manager = ConfManager(conf_file=APP_CONF_FILE, server_uri=server_uri, session_key=self.session_key, app=em_constants.APP_NAME) self.migration_metadata = MigrationMetadata.get() self.current_version = self.migration_metadata.latest_migrated_version self.new_version = self.app_conf_manager.get_stanza( 'launcher')['entry'][0]['content']['version'] self.data_inputs_controller = NonMigrationDataInputsController() self.savedsearch_controller = SavedsearchController()
'bin'])) # noqa import em_path_inject # noqa from logging_utils import log import rest_handler.rest_interface_splunkd as rest_interface_splunkd from rest_handler.rest_interface_splunkd import route from rest_handler.session import session from rest_handler.hooks import before_handle_hooks from rest_handler.exception import BaseRestException from em_migration.migration_before_handle_hook import MigrationStatusCheckHook from authentication_before_rest_hook import AuthenticationRestHook from em_rest_notifications_impl import EmVictorOpsInterfaceImpl, EmWebhookInterfaceImpl, EmSlackInterfaceImpl import http.client logger = log.getLogger() class NotificationAuthorizationException(BaseRestException): def __init__(self, msg): super(NotificationAuthorizationException, self).__init__(http.client.UNAUTHORIZED, msg) @before_handle_hooks([MigrationStatusCheckHook, AuthenticationRestHook]) class EmNotificationsInterface(rest_interface_splunkd.BaseRestInterfaceSplunkd ): def _check_power_or_greater(self): roles = session['roles'] if ('admin' not in roles and 'sc_admin' not in roles and 'power' not in roles):
import em_path_inject # noqa from splunk import getDefault from splunklib.client import Service from solnlib.utils import retry, is_true from rest_handler.session import session from logging_utils.log import getLogger from storage_mixins import KVStoreMixin import em_constants from em_base_persistent_object import EMBasePersistentObject from future.moves.urllib.error import HTTPError import time logger = getLogger() class ProcessControlInternalException(Exception): pass class MigrationProcessControlCheckpoint(EMBasePersistentObject, KVStoreMixin): """ MigrationProcessControlCheckpiont - a checkpoint record where the changes made to processes are recorded and persisted to disk to avoid information loss upon migration process crash. """ STORE_MIGRATION_PROCESS_CONTROL_RECORD = 'em_migration_process_control_checkpoint' def __init__(self, key, mutated_savedsearches=None):