Revision: 14335
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at May 31, 2009 05:03 by atr000
Initial Code
Python Handlers This is the python script that handles requests to the endpoints defined above. This file is located at $SPLUNK_HOME/etc/apps/WebSkunk/rest/webskunkhandlers.py. # # http request handlers # from splunk import auth, search import splunk.rest import utils import logging as logger import splunk.bundle as bundle import httplib2, urllib, os, time import telnetlib # set our path to this particular application directory (which is suppose to be <appname>/bin) app_dir = os.path.dirname(os.path.abspath(__file__)) # define the web content directory (needs to be <appname>/web directory) web_dir = app_dir + "/web" class main(splunk.rest.BaseRestHandler): ''' Main endpoint ''' def handle_GET(self): # set output params self.response.setStatus(200) self.response.setHeader('content-type', 'text/html') self.response.write('Main: this is webskunk') # listen to all verbs handle_POST = handle_DELETE = handle_PUT = handle_VIEW = handle_GET class status(splunk.rest.BaseRestHandler): ''' Status endpoint ''' def handle_GET(self): # set output params self.response.setStatus(200) self.response.setHeader('content-type', 'text/html') self.response.write('<html><head><title>webskunk</title></head><body>') self.response.write('<h1>Status: webskunk is online</h1><br><br>') self.response.write('<b>Active endpoints:</b><br>') self.response.write(utils.getHrefs(self.pathParts[1])) self.response.write('</body></html>') # listen to all verbs handle_POST = handle_DELETE = handle_PUT = handle_VIEW = handle_GET class web(splunk.rest.BaseRestHandler): ''' Main endpoint ''' def handle_GET(self): files = [] logger.debug('scanning %s' % web_dir) # do a scan of the application directory's web directory for root, dirs, file_list in os.walk(web_dir): cur_dir = root.replace(web_dir, '') for file in file_list: full_name = os.path.join(cur_dir, file) files.append(full_name) # extract the last segment of the URL passed to splunkd and use it to load a file last_segment = self.pathParts[len(self.pathParts)-1] # check the requested file exists in the web directory - if not, we return a 404 if last_segment in files: f = open(web_dir + '/' + last_segment, 'rb') content = f.read() f.close() # basic checking of file extension to set a mime type if ".html" in last_segment: self.response.setHeader('content-type', 'text/html') elif ".js" in last_segment: self.response.setHeader('content-type', 'application/x-javascript') elif ".css" in last_segment: self.response.setHeader('content-type', 'text/css') elif ".jpg" in last_segment: # this won't work for now - leaving here for a reminder self.response.setHeader('content-type', 'image/jpeg') content_length = "%d" % len(content) self.response.setHeader('Content-Length', content_length) self.response.setStatus(200) else: self.response.setStatus(404) content = "404 - not found!" self.response.write(content) class receiver(splunk.rest.BaseRestHandler): def handle_POST(self): host="localhost" tn = telnetlib.Telnet(host, 9998) try: content = self.args['splunkdata'] tn.write(content) self.response.write("AWESOME!") except Exception, e: logger.exception(e) self.response.write(e) # listen to all verbs handle_GET = handle_DELETE = handle_PUT = handle_VIEW = handle_POST
Initial URL
Initial Description
Initial Title
python: handler for http post
Initial Tags
http, post, python
Initial Language
Python