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.
94 lines
2.5 KiB
94 lines
2.5 KiB
#!/usr/bin/python
|
|
|
|
#
|
|
# Python binding for HTTP REST server script dispatch
|
|
#
|
|
# REST endpoints that have been assigned a python script handler will invoke
|
|
# this script by default, unless otherwise specified in the restmap.conf
|
|
# file.
|
|
#
|
|
# This handler is invoked as a standard program:
|
|
#
|
|
# python rest_handler.py <handlerClassName> <requestXml> <authInfo>
|
|
#
|
|
# handlerClassName: The name of the python class to dispatch. This is generally
|
|
# of the form: <module_name>.<class_name>
|
|
#
|
|
# requestInfo: String version of request XML document; see splunk/rest/selftest.py
|
|
#
|
|
# sessionKey: The current session key used by the client
|
|
#
|
|
#
|
|
# This script must be run in the Splunk python context (python2.5, PYTHONPATH)
|
|
|
|
import os, sys
|
|
import splunk
|
|
import splunk.rest
|
|
import splunk.Intersplunk
|
|
import splunk.mining.dcutils as dcu
|
|
import logging
|
|
import traceback
|
|
import datetime
|
|
import time
|
|
from splunk.clilib.bundle_paths import make_splunkhome_path
|
|
|
|
#SPL-18630
|
|
import __main__
|
|
|
|
#
|
|
# setup logging
|
|
#
|
|
|
|
# logging settings
|
|
BASE_LOG_PATH = os.path.join('var', 'log', 'splunk')
|
|
PYTHON_LOG_FILENAME = 'python.log'
|
|
#PYTHON_LOG_LEVEL = logging.INFO
|
|
PYTHON_LOG_LEVEL = logging.ERROR
|
|
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'
|
|
LOGGING_FORMAT = "%(asctime)s %(levelname)-s\t%(module)s:%(lineno)d - %(message)s"
|
|
logger = dcu.getLogger()
|
|
|
|
#
|
|
# read in argv's
|
|
#
|
|
|
|
#assert(len(sys.argv) > 2)
|
|
assert(len(sys.argv) > 1)
|
|
|
|
handlerClassName = sys.argv[1]
|
|
#SPL-18630
|
|
#make this backwards comp.
|
|
try:
|
|
sessionKey = getattr(__main__, "___sessionKey")
|
|
except AttributeError:
|
|
#fall back to the old behaviour
|
|
assert(len(sys.argv) > 2)
|
|
sessionKey = sys.argv[2]
|
|
|
|
if sys.version_info >= (3, 0):
|
|
request = sys.stdin.buffer.read()
|
|
def stdout_print(s):
|
|
if isinstance(s, str):
|
|
s = s.encode()
|
|
sys.stdout.buffer.write(s + b"\n")
|
|
else:
|
|
request = sys.stdin.read()
|
|
def stdout_print(s):
|
|
sys.stdout.write(s + "\n")
|
|
|
|
params = {
|
|
'handlerClassName': handlerClassName,
|
|
'requestInfo': request,
|
|
'sessionKey': sessionKey
|
|
}
|
|
|
|
try:
|
|
stdout_print(splunk.rest.dispatch(**params))
|
|
except Exception as e:
|
|
logger.exception(e)
|
|
# SPL-160673 - Print a user appropriate message.
|
|
#stdout_print("An exception was thrown while dispatching the python script handler." + str(e) + traceback.format_exc())
|
|
stdout_print("An exception was thrown while dispatching the python script handler.")
|