from __future__ import print_function
import os
import sys
import logging
import json
import splunk.search as se

dashboards_with_customjs_search = r"""
| rest splunk_server=local /servicesNS/-/-/data/ui/views search="rootNode=form OR rootNode=dashboard" count=0
| rename eai:data as xml
  title as view_name
  eai:acl.app as app
  eai:acl.owner as owner
| search owner=* app=*
| regex xml="^<(dashboard|form)(.|\n)*script[ ]*=[ ]*(?:\\'|\\").*\.js(?:\\'|\\")(.|\n)*>(.|\n)*"
| regex xml!="^<(dashboard|form)(.|\n)*version[ ]*=[ ]*(?:\\'|\\")1.1(?:\\'|\\")(.|\n)*>(.|\n)*"
| table view_name, owner, app
| join type=inner app
	[ | rest splunk_server=local /servicesNS/-/-/apps/local count=0
	| rename title as app label as app_label
	| table app app_label]
"""

html_dashboard_search = """
| rest splunk_server=local /servicesNS/-/-/data/ui/views search="eai:type=html" count=0
| rename title as view_name eai:acl.app as app eai:acl.owner as owner
| search owner=* app=*
| table view_name, app
| join type=inner app
	[ | rest splunk_server=local /servicesNS/-/-/apps/local count=0
	| rename title as app label as app_label
	| table app app_label]
"""

def setup_logger():
    sh = logging.StreamHandler()
    sh.setFormatter(logging.Formatter("%(levelname)s %(message)s"))
    logger = logging.getLogger()
    logger.setLevel(logging.WARN)
    logger.addHandler(sh)
    return logger

def log_dashboards_data(search_job, logger, log_message):
    if (len(search_job) > 0):
        data = []
        for result in search_job:
            row_data = {}
            for column in result:
                row_data[column] = str(result[column])
            data.append(row_data)
        logger.warning('%s: %s' % (log_message, json.dumps(data)))

def run():
    logger = setup_logger()
    session_key = sys.stdin.read()
    try:
        dashboards_with_customjs_search_job = se.searchAll(dashboards_with_customjs_search, sessionKey=session_key)
        html_dashboard_search_job = se.searchAll(html_dashboard_search, sessionKey=session_key)

        log_dashboards_data(dashboards_with_customjs_search_job, logger, 'Dashboards with CustomJS')
        log_dashboards_data(html_dashboard_search_job, logger, 'HTML Dashboards')
    except Exception as e:
        logger.error('Unexpected error during execution of jquery_upgrade.py: %s' % str(e))

if __name__ == '__main__':
    run()