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.
52 lines
1.8 KiB
52 lines
1.8 KiB
import splunk.admin as admin
|
|
import splunklib.results as results
|
|
import cp_aws_bin.utils.app_util as util
|
|
import json
|
|
from cp_aws_bin.utils.local_manager import LocalServiceManager
|
|
from program_timer import ProgramTimer
|
|
|
|
logger = util.get_logger()
|
|
UNLIMITED = -1
|
|
|
|
|
|
class UsageHandler(admin.MConfigHandler):
|
|
def setup(self):
|
|
pass
|
|
|
|
@classmethod
|
|
def _get_index_volume_by_sourcetype(cls, splunk_service):
|
|
index_volume_by_sourcetype = 'search `cp-aws-dashboards-summary-index` earliest=-7d@d latest=@d report=aws_indexed_data_volume | timechart span=1d useother=f max(sum_mb) as volume by series | fillnull value=0 | eval time = strftime(_time, "%F") | fields - _time, _span, _spandays'
|
|
search_results = splunk_service.jobs.oneshot(index_volume_by_sourcetype)
|
|
reader = results.ResultsReader(search_results)
|
|
|
|
return list(reader)
|
|
|
|
def handleList(self, conf_info):
|
|
self._log_request()
|
|
pt = ProgramTimer("collect usage data")
|
|
|
|
service_manager = LocalServiceManager(app=self.appName, owner=self.userName, session_key=self.getSessionKey())
|
|
local_service = service_manager.get_local_service()
|
|
|
|
data_ingested = self._get_index_volume_by_sourcetype(local_service)
|
|
|
|
usages = []
|
|
for data_per_day in data_ingested:
|
|
usage = dict()
|
|
usage['time'] = data_per_day.pop('time')
|
|
usage['volumes'] = data_per_day
|
|
usages.append(usage)
|
|
|
|
all_usage = dict()
|
|
all_usage['usage'] = usages
|
|
|
|
conf_info['default']['value'] = json.dumps(all_usage)
|
|
|
|
pt.stop()
|
|
return
|
|
|
|
def _log_request(self):
|
|
logger.info('action %s name %s args %s' % (self.requestedAction, self.callerArgs.id, self.callerArgs))
|
|
|
|
|
|
admin.init(UsageHandler, admin.CONTEXT_APP_ONLY) |