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.
102 lines
2.5 KiB
102 lines
2.5 KiB
import sys
|
|
import splunk.Intersplunk as si
|
|
import logging, logging.handlers
|
|
import os
|
|
|
|
class Usage(Exception):
|
|
def __init__(self, value):
|
|
self.value = value
|
|
def __str__(self):
|
|
return repr(self.value)
|
|
|
|
(isgetinfo, sys.argv) = si.isGetInfo(sys.argv)
|
|
if isgetinfo:
|
|
#outputInfo(streaming, generating, retevs, reqsop, preop, timeorder=False):
|
|
si.outputInfo(True, False, True, False, None, False)
|
|
sys.exit(0)
|
|
|
|
#results = si.readResults(None, None, True)
|
|
results,dummyresults,settings = si.getOrganizedResults()
|
|
|
|
def setup_logger():
|
|
"""
|
|
Setup a logger for the search command
|
|
"""
|
|
|
|
logger = logging.getLogger('gaugetable')
|
|
logger.setLevel(logging.DEBUG)
|
|
|
|
file_handler = logging.handlers.RotatingFileHandler(os.environ['SPLUNK_HOME'] + '/var/log/splunk/gaugetable.log' )
|
|
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
|
|
file_handler.setFormatter(formatter)
|
|
|
|
logger.addHandler(file_handler)
|
|
|
|
return logger
|
|
|
|
def isNumber(s):
|
|
"""
|
|
Take in a string return whether or not it is a number
|
|
"""
|
|
try:
|
|
val = float(s)
|
|
return True
|
|
except ValueError:
|
|
return False
|
|
|
|
if __name__ == '__main__':
|
|
try:
|
|
logger = setup_logger()
|
|
|
|
if len(sys.argv) < 3:
|
|
raise Usage(len(sys.argv))
|
|
|
|
logger.debug(sys.argv)
|
|
|
|
x = sys.argv[1];
|
|
yList = sys.argv[2:]
|
|
logger.debug(x)
|
|
logger.debug(yList)
|
|
|
|
#we don't need to run these checks everytime, especially if there are a lot of strings
|
|
xBool = isNumber(x)
|
|
yBoolList = []
|
|
for y in yList:
|
|
yBoolList.append(isNumber(y))
|
|
|
|
for r in results:
|
|
if xBool:
|
|
#this is dumb, but they set everything to a set value
|
|
r["x"] = x
|
|
else:
|
|
#put the actual value to the x field
|
|
if r.get(x):
|
|
r["x"] = r[x]
|
|
else:
|
|
#if it doesn't exist default to 0
|
|
r["x"] = 0
|
|
for ii in range(len(yList)):
|
|
if yBoolList[ii]:
|
|
#set to a set number
|
|
r["y"+str(ii+1)] = yList[ii]
|
|
else:
|
|
#put in field value or default to 0
|
|
if r.get(yList[ii]):
|
|
r["y"+str(ii+1)] = r[yList[ii]]
|
|
else:
|
|
#default to 0
|
|
r["y"+str(ii+1)] = 0
|
|
|
|
si.outputResults(results)
|
|
|
|
except Usage as e:
|
|
results = si.generateErrorResults("Received '%s' arguments. Usage: gaugetable valueField y1,y2,y3..." % e)
|
|
si.outputResults(results)
|
|
|
|
except Exception as e:
|
|
import traceback
|
|
stack = traceback.format_exc()
|
|
logger.error("Error '%s'" % stack)
|
|
results = si.generateErrorResults("Error occurred while running custom command: '%s'. See gaugetable.log for more details." % str(e))
|
|
si.outputResults(results)
|