You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

108 lines
3.8 KiB

import logging
from splunk import entity
from splunk import setupSplunkLogger
from splunk.clilib.bundle_paths import make_splunkhome_path
import splunk.rest as rest
import json
def setup_logging(log_name, logger_name, logger=None, level=logging.INFO, is_console_header=False,
log_format='%(asctime)s %(levelname)s [%(name)s] [%(module)s] [%(funcName)s] %(message)s', is_propagate=False):
'''Setup logging
@param log_name: log file name
@param logger_name: logger name (if logger specified then we ignore this argument)
@param logger: logger object
@param level: logging level
@param is_console_header: set to true if console logging is required
@param log_format: log message format
@param is_propagate: set to true if you want to propagate log to higher level
@return: logger
'''
if log_name is None or logger_name is None:
raise ValueError("log_name or logger_name is not specified")
if logger is None:
# Logger is singleton so if logger is already defined it will return old handler
logger = logging.getLogger(logger_name)
logger.propagate = is_propagate # Prevent the log messages from being duplicated in the python.log file
logger.setLevel(level)
if len(logger.handlers) == 0:
file_handler = logging.handlers.RotatingFileHandler(make_splunkhome_path(['var', 'log', 'splunk', log_name]),
maxBytes=2500000, backupCount=5)
formatter = logging.Formatter(log_format)
file_handler.setFormatter(formatter)
logger.handlers = []
logger.addHandler(file_handler)
# Console stream handler
if is_console_header:
console_handler = logging.StreamHandler()
console_handler.setFormatter(logging.Formatter(log_format))
logger.addHandler(console_handler)
# Read logging level information from log.cfg so it will overwrite log
# Note if logger level is specified on that file then it will overwrite log level
LOGGING_DEFAULT_CONFIG_FILE = make_splunkhome_path(['etc', 'log.cfg'])
LOGGING_LOCAL_CONFIG_FILE = make_splunkhome_path(['etc', 'log-local.cfg'])
LOGGING_STANZA_NAME = 'python'
setupSplunkLogger(
logger,
LOGGING_DEFAULT_CONFIG_FILE,
LOGGING_LOCAL_CONFIG_FILE,
LOGGING_STANZA_NAME,
verbose=False
)
return logger
def get_user_capabilities(user=None):
"""
Obtains a list of capabilities in an list for the given user.
Arguments:
user -- The user to get capabilities for (as a string)
"""
roles = []
capabilities = []
# Get user info
if user is not None:
userEntities = entity.getEntities('authentication/users/%s' % user, count=-1)
for stanza, settings in userEntities.items():
if stanza == user:
for key, val in settings.items():
if key == 'roles':
roles = val
# Get capabilities
for role in roles:
roleEntities = entity.getEntities('authorization/roles/%s' % role.replace('/', '%2F'), count=-1)
for stanza, settings in roleEntities.items():
if stanza == role:
for key, val in settings.items():
if key == 'capabilities' or key == 'imported_capabilities':
capabilities.extend(val)
return capabilities
def get_conf_stanza(session_key, conf_name, stanza_name, app='SA-ITSI-MetricAD'):
getargs = {'output_mode': 'json'}
uri = '/servicesNS/nobody/' + app + '/properties/' + conf_name + '/' + stanza_name
response, content = rest.simpleRequest(
uri,
method='GET',
getargs=getargs,
sessionKey=session_key,
raiseAllErrors=False
)
return response, json.loads(content)