This repository was archived by the owner on Sep 24, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathSplunkTAforPuppetEnterprise.aob_meta
1 lines (1 loc) · 45.9 KB
/
SplunkTAforPuppetEnterprise.aob_meta
1
{"alert_action_builder": {"modular_alerts": [{"code": "# encoding = utf-8\nimport json\nimport urllib2\nimport sys\ndef process_event(helper, *args, **kwargs):\n \"\"\"\n # IMPORTANT\n # Do not remove the anchor macro:start and macro:end lines.\n # These lines are used to generate sample code. If they are\n # removed, the sample code will not be updated when configurations\n # are updated.\n\n [sample_code_macro:start]\n\n # The following example gets and sets the log level\n helper.set_log_level(helper.log_level)\n\n # The following example gets the setup parameters and prints them to the log\n victor_ops_token = helper.get_global_setting(\"victor_ops_token\")\n helper.log_info(\"victor_ops_token={}\".format(victor_ops_token))\n\n # The following example gets the alert action parameters and prints them to the log\n dropdown_list = helper.get_param(\"dropdown_list\")\n helper.log_info(\"dropdown_list={}\".format(dropdown_list))\n\n alert_entity_id = helper.get_param(\"alert_entity_id\")\n helper.log_info(\"alert_entity_id={}\".format(alert_entity_id))\n\n state_message = helper.get_param(\"state_message\")\n helper.log_info(\"state_message={}\".format(state_message))\n\n\n # The following example adds two sample events (\"hello\", \"world\")\n # and writes them to Splunk\n # NOTE: Call helper.writeevents() only once after all events\n # have been added\n helper.addevent(\"hello\", sourcetype=\"sample_sourcetype\")\n helper.addevent(\"world\", sourcetype=\"sample_sourcetype\")\n helper.writeevents(index=\"summary\", host=\"localhost\", source=\"localhost\")\n\n # The following example gets the events that trigger the alert\n events = helper.get_events()\n for event in events:\n helper.log_info(\"event={}\".format(event))\n\n # helper.settings is a dict that includes environment configuration\n # Example usage: helper.settings[\"server_uri\"]\n helper.log_info(\"server_uri={}\".format(helper.settings[\"server_uri\"]))\n [sample_code_macro:end]\n \"\"\"\n \n victor_ops_token = helper.get_global_setting(\"victor_ops_token\")\n alert_entity_id = helper.get_param(\"alert_entity_id\")\n dropdown_list = helper.get_param(\"dropdown_list\")\n state_message = helper.get_param(\"state_message\")\n view_report = helper.get_param(\"dropdown_list\")\n \n url = \"https://alert.victorops.com/integrations/generic/20131114/alert/\" + victor_ops_token + \"\"\n \n search_name = helper.get_events()\n entity_id = \"Puppet Enterprise Alert: %s\" % search_name\n \n view_report = helper.get_param('results_link')\n \n helper.log_info(\"Alert action Puppet Enterprise VictorOps Alert Action started.\")\n \n data = dict(\n message_type=dropdown_list,\n monitoring_tool='Puppet Enterprise',\n state_message=state_message,\n entity_id=alert_entity_id,\n view_report=view_report\n )\n \n body = json.dumps(data)\n \n req = urllib2.Request(url, body, {\"Content-Type\": \"application/json\"})\n \n try:\n res = urllib2.urlopen(req)\n body = res.read()\n print >> sys.stderr, \"INFO VictorOps server responded with HTTP status=%d\" % res.code\n print >> sys.stderr, \"DEBUG VictorOps server response: %s\" % json.dumps(body)\n return 200 <= res.code < 300\n except urllib2.HTTPError, e:\n print >> sys.stderr, \"ERROR Error sending message: %s (%s)\" % (e, str(dir(e)))\n print >> sys.stderr, \"ERROR Server response: %s\" % e.read()\n return False\n \n \n\n # TODO: Implement your alert action logic here\n return 0\n", "label": "Puppet Enterprise VictorOps Integration", "description": "Direct Integrations to VictorOps", "largeIcon": "iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAYAAABV7bNHAAADBklEQVR4Xu2cv2sUQRTHv+9uLyiJxmhCkgObIFY2VtYWikj8cQqHhQi21vYRFLQRLPwRRexEi8QgYiHqv6AoFiJKROQSPdBGJZq9fZI1SJDdnZ3ZXWfu9l27897efPh+3/xgZgkGP749OIT+6oBBaHzI1y9tOomlXHPmkIxMcvBc/QoYp0xiY2M4mKSjiw9zzZlDMgGkgCiABFA2n4mCREGioGwE/r+C+AKoczPyvexdAjAZ/awswzwFp6mxeDEKAt+r3wFwTAAJoISZtCgISFxqCCABpBw2kxerwRSWvl+NTLJu4DpAR8pdpJV4YxrIal5BTgCpAOENOp191Pw0byrCIuLcWayu9I75OTp0mJqtD0V01iSnW4BCSHiHza0dtNuN7Vf3AP1R0mt0gv0u2M0Q0PhZBDhhItkwhrAJoI2J8Y7YzQiQMZjVQL4/sg2+9xJE65Mh2bebFUChi2ZGd4Gqj0AYVCjJqt2sAQoh3R3ejr7aE4C2umo3q4BCSGntBnwEcAuEwNjiy63z1MQvnXjrgLTsptOzqLb+8gZqtr/ppHECkJbddHr3b9tuBqRpNzNM3Q6ocLv1AqC/dqvVnoGo30wqMVG9AiiENDu+AKIxARRDQAAppCGABFC26iEKEgWJgrIREAVl4yc1SBRkriCeHZ0AKi9AlO9h9V5YavDMyE5UvKcADZkj7tG1mMbuohm7blbQqq0eg2jCrPcporoVUKG2WsutGwFp2Kp8m/apbcX8Cp7foEPttymMlGsTa5v2qW3FPA/P32sDzgppK4BS28qBkx5GgHhubApB5bixlglbACTPcyzaam2/DAEVcONw7b+ybCu3ATlgK3cBOWIrRwHxe1T9PbZGq7h66k4NkmPAqg2g8twXOwPma9E4KtMANSKflUZBcttHbvsoJ8hyX0xVT5O+3SEWE4tlsxjzOVR/3ohMEvRdBioHyz2KKfHGNCjNMC+AFDVIAAkgpQbkE11Z5kFKvFKkzRD11Cj2oD4M30++56WLyfu8QAfwQzes6Pa/AUhKlWd3R9gsAAAAAElFTkSuQmCC", "parameters": [{"type": "", "label": "Dropdown List", "value": "INFO", "format_type": "dropdownlist", "help_string": "", "required": true, "name": "dropdown_list", "default_value": "", "possible_values": {"INFO": "INFO", "ACKNOWLEDGEMENT": "ACKNOWLEDGEMENT", "CRITICAL": "CRITICAL"}}, {"type": "", "label": "Alert Entity ID", "value": "Puppet Enterprise Alert Issues Host: automate01", "format_type": "text", "help_string": "", "required": true, "name": "alert_entity_id", "default_value": ""}, {"type": "", "label": "State Message", "value": "This is a testing alert.", "format_type": "text", "help_string": "", "required": true, "name": "state_message", "default_value": ""}], "smallIcon": "iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAACC0lEQVRYR+2YTWsTURiFz0lnmiYoYrRpK0oX/RWiSJduRE1DJaIrd4L/pTtXioJFCaYVBEEouNEfUAqlGzeKtYmlXZQaDc49kpREG3JzJ01ipphZDu9973PP+3E/CMunQuo86GcgxGw2jf+VIM/c9qbTLoQBrUDLk7MwXAE54vQjXObc5genXQiDYwwklQAEtUUSPsCzjQUPRCG/PM1ru5+qECqkL4He+yHQoaSOnELSI8SwVwuTdA6IzQ82ZO1K1gS3mS0+D1HVTpPelD20B5kM54orzhkdBj0CqoYRZfDXRWZKq91A2YHeII5KKg2Mtfb/o5LAqL8A4CrAAz/SdyjIMFt6e1QoK1AYh1o6eQY6UQBxpQFVDR90DzL2vS3QR85/22o1R1dAdYd6OfUOMc6GWcRBpzf3eXPrYf+A8pPj8Pj0UPja0fUbqJY+y+kZGG8NRMKp1D8BepW6ABPfAJgcArVSQEOFHImhF+kZ+BFJai2eOo2x5GMQ1/80yDYr6HeVRaYx1pRJJBeb9rN9UA9gaN86vJ/rvLHzuaNOrTxGgfGUVfgRLw5goSlMZZjgFrPF185eZDE4RsePji6K2odMrhtl6oL1RiGju8x+fXbUMP09LjxQ5A75kbsGDYGaMlLNVSZ8AVR/bIgDnGgMGchjQ7sS+j+BClPTIO5ACvGkV3nCXOu9qdPe9BvCCFQ0gPAA5gAAAABJRU5ErkJggg==", "short_name": "puppet_enterprise_victorops_integration", "uuid": "79e7c10965bf410fba915a79aa32c7ce"}]}, "basic_builder": {"small_icon": "iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAABBElEQVRYR+2XPQ7CMAyFbU5BuQnXoBMbC6diYWNqz8FF+LlEZVQQVZumjqOYphLuGsv6+p7zkiAwH1XFiVv/rmH5OErqJDXIAtUbEjXZ3dk+kh7dzxlQQC6xZejYQj073bUYi9xaAwqpJ1YIEM6DZgSHbmfYLgvpDABagy23bCaopISlumgAcNVnTVUqCagF6eeRxpAnA01BsQ4TbrG8XX01KkAfqLF9k1BzAEUpZUChiDCFTCGPAlQVDeAwtbNte19aZwvGRR0dPpt+erjGWpEK09qsdh/SgFED0oKJA1raJd8eir4g457L2Z/SXPLmGWqG6I+BqvUldLV5Z0f53EvqJDUvIRnAJSEBe/gAAAAASUVORK5CYII=", "friendly_name": "Splunk Add-on for Puppet Enterprise", "version": "2.0.1", "theme": "#000000", "author": "Puppet, Inc.", "appname": "SplunkTAforPuppetEnterprise", "tab_build_no": "12", "description": "The Splunk Add-on for Puppet Enterprise collects machine data from the use of the Puppet API. Add-on was tested with an HF installed on the Puppet Enterprise Server to collect metrics in near real-time fashion. Add-on can be used on a single Splunk instance and on a separate HF. The default port is 8080 for Puppet Enterprise, please make sure you have it open to your Splunk environment.", "tab_version": "2.2.0", "build_no": 6, "visible": true, "large_icon": "iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAYAAABV7bNHAAACI0lEQVR4Xu2cQU7DMBBFZ6oC6h4WjbgQy7YSJ2DJJdhwAVYsuEAlWHOicAMoEcIooYWoUE88rms7+d3W48Yv/0/siV0mfKwEWMPHPBZ3xHStid0Z82Eu+PLlea997qEzABIgAhAA+fkMCoKCoCA/AgdXENMVz8qH/37XPBUGj3kAIrJOFAEIgMSkBwUJiAAIgH4IYCZ98HmQmMF2NEC5Q/ItrXhRTrR8Q8WlY7H1CHleqq5pMIDIUMWL8iTUgF37Vd2tICXX9pWbdOyWJqCE7KYC5CrT7fZmScc0Lt7FfhKwWxRANRizPJ/Q+PO1A6SoT7dogL4h1UqavhHxSAIV6+kWFdAvpG52oxHdSiBt3/OsvHGNjw7IyW6uo9tqr1FhEoBc7abllDUgJ7spCWUPKLTdegEopJJ6A6iBZHtFNGSLbcYOQFJ5CAqyE4KCoCBlJl2HQUFQEBTkRwAK8uOHHGThZ+7piM6Kyg/x3+heLDU616sV9LIHFBJOzTNrQI2tTqcrYrk+rRBPE5ItoNDK2QDNElBnOIaqwRXtXWyluftaK7bjohXtOyuHqOJ5vM0MUQB1hpPrq+fguzvWGo9lK2+LHQBQVFulDSgBWyUNKAVbpQooGVulCQjbgIVp22AA4TgUjkOJSxic9pEK6ra/poDFYDFYrEVAtZpHDvLJQaL+djQYzDwIgIQkDUAAJGogSMEMOQiLVVF51gZ9UpAfibyivwCmHthYPUjiJAAAAABJRU5ErkJggg=="}, "validation": {"validation_id": "v_1537542903_22", "status": "job_finished", "progress": 1.0, "validators": ["best_practice_validation", "data_model_mapping_validation", "field_extract_validation", "app_cert_validation"]}, "data_input_builder": {"datainputs": [{"customized_options": [{"value": "automate01", "name": "puppet_enterprise_server_"}, {"value": "https://10.20.20.77", "name": "server_"}, {"value": "8081", "name": "port_"}], "type": "customized", "data_inputs_options": [{"required_on_create": true, "type": "customized_var", "title": "Token:", "description": "curl -k -X POST -H 'Content-Type: application/json' -d '{\"login\": \"\", \"password\": \"\",\"lifetime\": \"9y\" }' https://$:4433/rbac-api/v1/auth/token", "format_type": "password", "placeholder": "", "required_on_edit": false, "name": "token_", "default_value": ""}, {"required_on_create": false, "type": "customized_var", "title": "Puppet Enterprise Server:", "description": "Put in your FQDN of your Puppet Enterprise Server so the links backs on the dashboards work correctly. ", "format_type": "text", "placeholder": "automate01", "required_on_edit": false, "name": "puppet_enterprise_server_", "default_value": ""}, {"required_on_create": true, "type": "customized_var", "title": "Server:", "description": "Input your Puppet Enterprise Server address.", "format_type": "text", "placeholder": "https://localhost", "required_on_edit": false, "name": "server_", "default_value": ""}, {"required_on_create": true, "type": "customized_var", "title": "Port:", "description": "Input your Puppet Enterprise DB Port (HTTPS 8081, HTTP: 8080)", "format_type": "text", "placeholder": "", "required_on_edit": false, "name": "port_", "default_value": "8081"}], "index": "default", "description": "Puppet Enterprise event details pulled by Aggregate Details Pulled by start and end date.", "parameters": [{"type": "password", "label": "Token:", "value": "0Jm_jYisHbWe3oK5tYjxwjTxyOwjsuLnUPH-iPg-2Uz0", "format_type": "password", "placeholder": "", "required": true, "help_string": "curl -k -X POST -H 'Content-Type: application/json' -d '{\"login\": \"\", \"password\": \"\",\"lifetime\": \"9y\" }' https://$:4433/rbac-api/v1/auth/token", "default_value": "", "name": "token_"}, {"type": "text", "label": "Puppet Enterprise Server:", "value": "automate01", "format_type": "text", "placeholder": "automate01", "required": false, "help_string": "Put in your FQDN of your Puppet Enterprise Server so the links backs on the dashboards work correctly. ", "default_value": "", "name": "puppet_enterprise_server_"}, {"type": "text", "label": "Server:", "value": "https://10.20.20.77", "format_type": "text", "placeholder": "https://localhost", "required": true, "help_string": "Input your Puppet Enterprise Server address.", "default_value": "", "name": "server_"}, {"type": "text", "label": "Port:", "value": "8081", "format_type": "text", "placeholder": "", "required": true, "help_string": "Input your Puppet Enterprise DB Port (HTTPS 8081, HTTP: 8080)", "default_value": "8081", "name": "port_"}], "code": "\n# encoding = utf-8\n\nimport os\nimport sys\nimport time\nimport datetime\nimport json\nimport jsonpath_rw\nfrom datetime import datetime\n\ndef validate_input(helper, definition):\n \"\"\"Implement your own validation logic to validate the input stanza configurations\"\"\"\n # This example accesses the modular input variable\n # server = definition.parameters.get('server', None)\n # port = definition.parameters.get('port', None)\n pass\n\ndef validate_input(helper, definition):\n \"\"\"Implement your own validation logic to validate the input stanza configurations\"\"\"\n # This example accesses the modular input variable\n # server = definition.parameters.get('server', None)\n # port = definition.parameters.get('port', None)\n pass\n\ndef collect_events(helper, ew):\n \n import datetime\n import json\n import jsonpath_rw\n \n method = 'GET'\n api_request = 'application/json' \n \n server = helper.get_arg('server_')\n pe_server = helper.get_arg('puppet_enterprise_server_')\n port = helper.get_arg('port_')\n pe_token = helper.get_arg('token_')\n \n if pe_token:\n input_source = pe_server\n else:\n input_source = pe_server\n \n #get current time\n now = datetime.datetime.now()\n \n #get checkpoint value\n ckpt = \"start_time\"\n ckpt_value = helper.get_check_point(ckpt)\n\n #if there is no checkpoint value - that means its an initial load - set start time to now - 5 Minute\n if ckpt_value == None:\n old = now - datetime.timedelta(minutes=5)\n #format the time\n # This is a timestamp in UTC-based ISO-8601 format (YYYY-MM-DDThh:mm:ssZ) \n start_time = old.strftime(\"%Y-%m-%dT%H:%M:%SZ\") \n #if it does exist then checkpoint value is start time\n else:\n start_time=ckpt_value\n\n end_time=now.strftime(\"%Y-%m-%dT%H:%M:%SZ\") \n\n \n url = server + \":\" + port + \"/pdb/query/v4/events?query=[\\\"and\\\", [\\\"<\\\", \\\"timestamp\\\", \\\"\" + end_time + \"\\\"], [\\\">\\\", \\\"timestamp\\\", \\\"\" + start_time + \"\\\"]]\"\n \n headers = {\n 'X-Authentication': pe_token, \n 'Content-type': api_request\n }\n \n response = helper.send_http_request(url, \n method, \n parameters=None, \n payload=None,\n headers=headers, \n cookies=None, \n verify=False, \n cert=None,\n timeout=None, \n use_proxy=True)\n \n r_status = response.status_code\n response.raise_for_status()\n helper.log_error (response.text) \n \n r= response.json()\n \n \n input_type = helper.get_input_type()\n for stanza_name in helper.get_input_stanza_names():\n \n for one_dict in r:\n data = json.dumps(one_dict,sort_keys=False)\n \n event = helper.new_event(source=input_source, index=helper.get_output_index(stanza_name), sourcetype=helper .get_sourcetype(stanza_name), data=data)\n helper.log_error (response.text) \n try:\n ew.write_event(event)\n helper.log_error (response.text) \n except Exception as e:\n raise e\n return;\n \n #save checkpoint value to end_time which is data collection time\n ckpt_value = helper.save_check_point(ckpt, end_time)", "title": "Puppet Enterprise Extended Details", "sample_count": "1158", "sourcetype": "pe:events:extdetails", "use_external_validation": true, "streaming_mode_xml": true, "interval": "60", "name": "puppet_enterprise_extended_details", "uuid": "ef8ab0c69fd340788ddf8f2b610d7cf6"}, {"customized_options": [{"value": "automate01", "name": "puppet_enterprise_server_"}, {"value": "https://10.20.20.77", "name": "server_"}, {"value": "8081", "name": "port_"}], "type": "customized", "data_inputs_options": [{"required_on_create": true, "type": "customized_var", "title": "Token:", "description": "curl -k -X POST -H 'Content-Type: application/json' -d '{\"login\": \"\", \"password\": \"\",\"lifetime\": \"9y\" }' https://$:4433/rbac-api/v1/auth/token", "format_type": "password", "placeholder": "", "required_on_edit": false, "name": "token_", "default_value": ""}, {"required_on_create": false, "type": "customized_var", "title": "Puppet Enterprise Server:", "description": "Put in your FQDN of your Puppet Enterprise Server so the links backs on the dashboards work correctly. ", "format_type": "text", "placeholder": "", "required_on_edit": false, "name": "puppet_enterprise_server_", "default_value": ""}, {"required_on_create": true, "type": "customized_var", "title": "Server:", "description": "Input your Puppet Enterprise Server address.", "format_type": "text", "placeholder": "https://localhost", "required_on_edit": false, "name": "server_", "default_value": ""}, {"required_on_create": true, "type": "customized_var", "title": "Port:", "description": "Input your Puppet Enterprise DB Port (HTTPS 8081, HTTP: 8080)\n", "format_type": "text", "placeholder": "", "required_on_edit": false, "name": "port_", "default_value": ""}], "index": "default", "description": "Puppet Enterprise Metrics for MQ", "parameters": [{"type": "password", "label": "Token:", "value": "0Jm_jYisHbWe3oK5tYjxwjTxyOwjsuLnUPH-iPg-2Uz0", "format_type": "password", "placeholder": "", "required": true, "help_string": "curl -k -X POST -H 'Content-Type: application/json' -d '{\"login\": \"\", \"password\": \"\",\"lifetime\": \"9y\" }' https://$:4433/rbac-api/v1/auth/token", "default_value": "", "name": "token_"}, {"type": "text", "label": "Puppet Enterprise Server:", "value": "automate01", "format_type": "text", "placeholder": "", "required": false, "help_string": "Put in your FQDN of your Puppet Enterprise Server so the links backs on the dashboards work correctly. ", "default_value": "", "name": "puppet_enterprise_server_"}, {"type": "text", "label": "Server:", "value": "https://10.20.20.77", "format_type": "text", "placeholder": "https://localhost", "required": true, "help_string": "Input your Puppet Enterprise Server address.", "default_value": "", "name": "server_"}, {"type": "text", "label": "Port:", "value": "8081", "format_type": "text", "placeholder": "", "required": true, "help_string": "Input your Puppet Enterprise DB Port (HTTPS 8081, HTTP: 8080)\n", "default_value": "", "name": "port_"}], "code": "\n# encoding = utf-8\n\nimport os\nimport sys\nimport time\nimport datetime\nimport json\nimport jsonpath_rw\nfrom datetime import datetime\n\ndef validate_input(helper, definition):\n \"\"\"Implement your own validation logic to validate the input stanza configurations\"\"\"\n # This example accesses the modular input variable\n # server = definition.parameters.get('server', None)\n # port = definition.parameters.get('port', None)\n pass\n\ndef validate_input(helper, definition):\n \"\"\"Implement your own validation logic to validate the input stanza configurations\"\"\"\n # This example accesses the modular input variable\n # server = definition.parameters.get('server', None)\n # port = definition.parameters.get('port', None)\n pass\n\ndef collect_events(helper, ew):\n \n import datetime\n import json\n import jsonpath_rw\n \n method = 'GET'\n api_request = 'application/json' \n \n api_token = helper.get_global_setting(\"token_\")\n server = helper.get_arg('server_')\n port = helper.get_arg('port_')\n pe_token = helper.get_arg('token_')\n pe_link = helper.get_arg('puppet_enterprise_server_')\n\n \n url = server + \":\" + port + \"/metrics/v1/mbeans/puppetlabs.puppetdb.mq%3Aname%3Dglobal.processing-time\"\n \n if pe_link:\n input_source = pe_link\n else:\n input_source = pe_link\n \n \n headers = {\n 'X-Authentication': pe_token, \n 'Content-type': api_request\n }\n \n response = helper.send_http_request(url, \n method, \n parameters=None, \n payload=None,\n headers=headers, \n cookies=None, \n verify=False, \n cert=None,\n timeout=None, \n use_proxy=True)\n \n r_status = response.status_code\n response.raise_for_status()\n helper.log_error (response.text) \n \n r= response.json()\n \n input_type = helper.get_input_type()\n \n for stanza_name in helper.get_input_stanza_names():\n \n data = json.dumps(r, sort_keys=False)\n \n event = helper.new_event(source=input_source, index=helper.get_output_index(stanza_name), sourcetype=helper .get_sourcetype(stanza_name), data=data)\n helper.log_error (response.text) \n try:\n ew.write_event(event)\n helper.log_error (response.text) \n except Exception as e:\n raise e\n return;", "title": "Puppet Enterprise Metrics", "sample_count": "259", "sourcetype": "pe:metrics", "use_external_validation": true, "streaming_mode_xml": true, "interval": "30", "name": "puppet_enterprise_metrics", "uuid": "8fe0816f9cd4427f8b91c3e9a9335c0f"}, {"customized_options": [{"value": "automate01", "name": "puppet_enterprise_server_"}, {"value": "https://10.20.20.77", "name": "server_"}, {"value": "8081", "name": "port_"}], "type": "customized", "data_inputs_options": [{"required_on_create": true, "type": "customized_var", "title": "Puppet Enterprise Server:", "description": "Put in your FQDN of your Puppet Enterprise Server so the links backs on the dashboards work correctly. ", "format_type": "text", "placeholder": "automate01", "required_on_edit": false, "name": "puppet_enterprise_server_", "default_value": ""}, {"required_on_create": true, "type": "customized_var", "title": "Server:", "description": "Input your Puppet Enterprise Server address.", "format_type": "text", "placeholder": "https://localhost", "required_on_edit": false, "name": "server_", "default_value": ""}, {"required_on_create": true, "type": "customized_var", "title": "Token:", "description": "curl -k -X POST -H 'Content-Type: application/json' -d '{\"login\": \"\", \"password\": \"\",\"lifetime\": \"9y\" }' https://$:4433/rbac-api/v1/auth/token", "format_type": "password", "placeholder": "", "required_on_edit": false, "name": "token_", "default_value": ""}, {"required_on_create": true, "type": "customized_var", "title": "Port:", "description": "Input your Puppet Enterprise DB Port (HTTPS 8081, HTTP: 8080)", "format_type": "text", "placeholder": "", "required_on_edit": false, "name": "port_", "default_value": ""}], "index": "default", "description": "Puppet Enterprise Enforcement Overview for Nodes Status and Compliance.", "parameters": [{"type": "text", "label": "Puppet Enterprise Server:", "value": "automate01", "format_type": "text", "placeholder": "automate01", "required": true, "help_string": "Put in your FQDN of your Puppet Enterprise Server so the links backs on the dashboards work correctly. ", "default_value": "", "name": "puppet_enterprise_server_"}, {"type": "text", "label": "Server:", "value": "https://10.20.20.77", "format_type": "text", "placeholder": "https://localhost", "required": true, "help_string": "Input your Puppet Enterprise Server address.", "default_value": "", "name": "server_"}, {"type": "password", "label": "Token:", "value": "0Jm_jYisHbWe3oK5tYjxwjTxyOwjsuLnUPH-iPg-2Uz0", "format_type": "password", "placeholder": "", "required": true, "help_string": "curl -k -X POST -H 'Content-Type: application/json' -d '{\"login\": \"\", \"password\": \"\",\"lifetime\": \"9y\" }' https://$:4433/rbac-api/v1/auth/token", "default_value": "", "name": "token_"}, {"type": "text", "label": "Port:", "value": "8081", "format_type": "text", "placeholder": "", "required": true, "help_string": "Input your Puppet Enterprise DB Port (HTTPS 8081, HTTP: 8080)", "default_value": "", "name": "port_"}], "code": "\n# encoding = utf-8\n\nimport os\nimport sys\nimport time\nimport datetime\nimport json\nimport jsonpath_rw\nfrom datetime import datetime\n\ndef validate_input(helper, definition):\n \"\"\"Implement your own validation logic to validate the input stanza configurations\"\"\"\n # This example accesses the modular input variable\n # server = definition.parameters.get('server', None)\n # port = definition.parameters.get('port', None)\n pass\n\ndef validate_input(helper, definition):\n \"\"\"Implement your own validation logic to validate the input stanza configurations\"\"\"\n # This example accesses the modular input variable\n # server = definition.parameters.get('server', None)\n # port = definition.parameters.get('port', None)\n pass\n\ndef collect_events(helper, ew):\n \n import datetime\n import json\n import jsonpath_rw\n \n method = 'GET'\n api_request = 'application/json' \n \n api_token = helper.get_global_setting(\"token_\")\n server = helper.get_arg('server_')\n port = helper.get_arg('port_')\n pe_token = helper.get_arg('token_')\n pe_server = helper.get_arg('puppet_enterprise_server_')\n\n if pe_server:\n input_source = pe_server\n else:\n input_source = pe_server\n \n #get current time\n now = datetime.datetime.now()\n \n #get checkpoint value\n ckpt = \"start_time\"\n ckpt_value = helper.get_check_point(ckpt)\n\n #if there is no checkpoint value - that means its an initial load - set start time to now - 5 Minute\n if ckpt_value == None:\n old = now - datetime.timedelta(minutes=5)\n #format the time\n # This is a timestamp in UTC-based ISO-8601 format (YYYY-MM-DDThh:mm:ssZ) \n start_time = old.strftime(\"%Y-%m-%dT%H:%M:%SZ\") \n #if it does exist then checkpoint value is start time\n else:\n start_time=ckpt_value\n\n end_time=now.strftime(\"%Y-%m-%dT%H:%M:%SZ\") \n \n url = server + \":\" + port + \"/pdb/query/v4/nodes?order_by=[{\\\"field\\\":\\\"report_timestamp\\\",\\\"order\\\":\\\"desc\\\"}]&limit=50&offset=0&include_total=true&query=[\\\"extract\\\",[\\\"certname\\\",\\\"report_environment\\\",\\\"report_timestamp\\\",\\\"latest_report_hash\\\",\\\"latest_report_status\\\",\\\"latest_report_noop\\\",\\\"latest_report_noop_pending\\\",\\\"latest_report_corrective_change\\\",\\\"latest_report_job_id\\\"],null]\"\n \n headers = {\n 'X-Authentication': pe_token, \n 'Content-type': api_request\n }\n \n response = helper.send_http_request(url, \n method, \n parameters=None, \n payload=None,\n headers=headers, \n cookies=None, \n verify=False, \n cert=None,\n timeout=None, \n use_proxy=True)\n \n r_status = response.status_code\n response.raise_for_status()\n helper.log_error (response.text) \n \n r= response.json()\n \n input_type = helper.get_input_type()\n for stanza_name in helper.get_input_stanza_names():\n \n for one_dict in r:\n data = json.dumps(one_dict,sort_keys=False)\n \n event = helper.new_event(source=input_source, index=helper.get_output_index(stanza_name), sourcetype=helper .get_sourcetype(stanza_name), data=data)\n helper.log_error (response.text) \n try:\n ew.write_event(event)\n helper.log_error (response.text) \n except Exception as e:\n raise e\n return;\n \n #save checkpoint value to end_time which is data collection time\n ckpt_value = helper.save_check_point(ckpt, end_time)", "title": "Puppet Enterprise Overview Enforcement", "sample_count": "1981", "sourcetype": "pe:overview:enforcement", "use_external_validation": true, "streaming_mode_xml": true, "interval": "300", "name": "puppet_enterprise_overview_enforcement", "uuid": "56d32e93a165496ea2ae1658227eceda"}, {"customized_options": [{"value": "automate01", "name": "puppet_enterprise_server_"}, {"value": "https://10.20.20.77", "name": "server_"}, {"value": "8081", "name": "port_"}], "type": "customized", "data_inputs_options": [{"required_on_create": true, "type": "customized_var", "title": "Puppet Enterprise Server:", "description": "Put in your FQDN of your Puppet Enterprise Server so the links backs on the dashboards work correctly. ", "format_type": "text", "placeholder": "", "required_on_edit": false, "name": "puppet_enterprise_server_", "default_value": ""}, {"required_on_create": true, "type": "customized_var", "title": "Server:", "description": "Input your Puppet Enterprise Server address.", "format_type": "text", "placeholder": "", "required_on_edit": false, "name": "server_", "default_value": ""}, {"required_on_create": true, "type": "customized_var", "title": "Token:", "description": "curl -k -X POST -H 'Content-Type: application/json' -d '{\"login\": \"\", \"password\": \"\",\"lifetime\": \"9y\" }' https://$:4433/rbac-api/v1/auth/token", "format_type": "password", "placeholder": "", "required_on_edit": false, "name": "token_", "default_value": ""}, {"required_on_create": true, "type": "customized_var", "title": "Port:", "description": "Input your Puppet Enterprise DB Port (HTTPS 8081, HTTP: 8080)", "format_type": "text", "placeholder": "", "required_on_edit": false, "name": "port_", "default_value": ""}], "index": "default", "description": "Puppet Enterprise Status Overview", "parameters": [{"type": "text", "label": "Puppet Enterprise Server:", "value": "automate01", "format_type": "text", "placeholder": "", "required": true, "help_string": "Put in your FQDN of your Puppet Enterprise Server so the links backs on the dashboards work correctly. ", "default_value": "", "name": "puppet_enterprise_server_"}, {"type": "text", "label": "Server:", "value": "https://10.20.20.77", "format_type": "text", "placeholder": "", "required": true, "help_string": "Input your Puppet Enterprise Server address.", "default_value": "", "name": "server_"}, {"type": "password", "label": "Token:", "value": "0Jm_jYisHbWe3oK5tYjxwjTxyOwjsuLnUPH-iPg-2Uz0", "format_type": "password", "placeholder": "", "required": true, "help_string": "curl -k -X POST -H 'Content-Type: application/json' -d '{\"login\": \"\", \"password\": \"\",\"lifetime\": \"9y\" }' https://$:4433/rbac-api/v1/auth/token", "default_value": "", "name": "token_"}, {"type": "text", "label": "Port:", "value": "8081", "format_type": "text", "placeholder": "", "required": true, "help_string": "Input your Puppet Enterprise DB Port (HTTPS 8081, HTTP: 8080)", "default_value": "", "name": "port_"}], "code": "\n# encoding = utf-8\n\nimport os\nimport sys\nimport time\nimport datetime\nimport json\nimport jsonpath_rw\nfrom datetime import datetime\n\ndef validate_input(helper, definition):\n \"\"\"Implement your own validation logic to validate the input stanza configurations\"\"\"\n # This example accesses the modular input variable\n # server = definition.parameters.get('server', None)\n # port = definition.parameters.get('port', None)\n pass\n\ndef validate_input(helper, definition):\n \"\"\"Implement your own validation logic to validate the input stanza configurations\"\"\"\n # This example accesses the modular input variable\n # server = definition.parameters.get('server', None)\n # port = definition.parameters.get('port', None)\n pass\n\ndef collect_events(helper, ew):\n \n import datetime\n import json\n import jsonpath_rw\n \n method = 'GET'\n api_request = 'application/json' \n \n api_token = helper.get_global_setting(\"token_\")\n server = helper.get_arg('server_')\n port = helper.get_arg('port_')\n pe_token = helper.get_arg('token_')\n pe_link = helper.get_arg('puppet_enterprise_server_')\n\n \n url = server + \":\" + port + \"/status/v1/services\"\n \n if pe_link:\n input_source = pe_link\n else:\n input_source = pe_link\n \n \n headers = {\n 'X-Authentication': pe_token, \n 'Content-type': api_request\n }\n \n response = helper.send_http_request(url, \n method, \n parameters=None, \n payload=None,\n headers=headers, \n cookies=None, \n verify=False, \n cert=None,\n timeout=None, \n use_proxy=True)\n \n r_status = response.status_code\n response.raise_for_status()\n helper.log_error (response.text) \n \n r= response.json()\n \n input_type = helper.get_input_type()\n \n for stanza_name in helper.get_input_stanza_names():\n \n data = json.dumps(r, sort_keys=False)\n \n event = helper.new_event(source=input_source, index=helper.get_output_index(stanza_name), sourcetype=helper .get_sourcetype(stanza_name), data=data)\n helper.log_error (response.text) \n try:\n ew.write_event(event)\n helper.log_error (response.text) \n except Exception as e:\n raise e\n return;", "title": "Puppet Enterprise Status Overview", "sample_count": "574", "sourcetype": "pe:status:overview", "use_external_validation": true, "streaming_mode_xml": true, "interval": "300", "name": "puppet_enterprise_status_overview", "uuid": "c0bfd8d0c5a74fae8643a078429549a9"}, {"customized_options": [{"value": "01/01/01", "name": "token_generation_date_"}, {"value": "https://10.20.20.77", "name": "server_"}, {"value": "automate01", "name": "puppet_enterprise_server_"}, {"value": "8081", "name": "port_"}, {"value": "production", "name": "environment"}], "type": "customized", "data_inputs_options": [{"required_on_create": true, "type": "customized_var", "title": "Token:", "description": "curl -k -X POST -H 'Content-Type: application/json' -d '{\"login\": \"\", \"password\": \"\",\"lifetime\": \"9y\" }' https://$:4433/rbac-api/v1/auth/token", "format_type": "password", "placeholder": "", "required_on_edit": false, "name": "token_", "default_value": ""}, {"required_on_create": true, "type": "customized_var", "title": "Token Generation Date:", "description": "Input the date when you generated your token.", "format_type": "text", "placeholder": "01/01/11", "required_on_edit": false, "name": "token_generation_date_", "default_value": ""}, {"required_on_create": true, "type": "customized_var", "title": "Server:", "description": "Input your Puppet Enterprise Server address.", "format_type": "text", "placeholder": "https://localhost", "required_on_edit": false, "name": "server_", "default_value": ""}, {"required_on_create": true, "type": "customized_var", "title": "Puppet Enterprise Server:", "description": "Input your Puppet Enterprise Server", "format_type": "text", "placeholder": "automate01", "required_on_edit": false, "name": "puppet_enterprise_server_", "default_value": ""}, {"required_on_create": true, "type": "customized_var", "title": "Port:", "description": "Input your Puppet Enterprise DB Port (HTTPS 8081, HTTP: 8080)", "format_type": "text", "placeholder": "8081", "required_on_edit": false, "name": "port_", "default_value": "8081"}, {"required_on_create": true, "type": "customized_var", "title": "Environment", "description": "Puppet Enterprise Environment you want to monitor.", "format_type": "text", "placeholder": "production", "required_on_edit": false, "name": "environment", "default_value": "production"}], "index": "default", "description": "Puppet Enterprise Facts from Puppet DB collected from Puppet Agents to Primary Puppet Master.", "parameters": [{"type": "password", "label": "Token:", "value": "0Jm_jYisHbWe3oK5tYjxwjTxyOwjsuLnUPH-iPg-2Uz0", "format_type": "password", "placeholder": "", "required": true, "help_string": "curl -k -X POST -H 'Content-Type: application/json' -d '{\"login\": \"\", \"password\": \"\",\"lifetime\": \"9y\" }' https://$:4433/rbac-api/v1/auth/token", "default_value": "", "name": "token_"}, {"type": "text", "label": "Token Generation Date:", "value": "01/01/01", "format_type": "text", "placeholder": "01/01/11", "required": true, "help_string": "Input the date when you generated your token.", "default_value": "", "name": "token_generation_date_"}, {"type": "text", "label": "Server:", "value": "https://10.20.20.77", "format_type": "text", "placeholder": "https://localhost", "required": true, "help_string": "Input your Puppet Enterprise Server address.", "default_value": "", "name": "server_"}, {"type": "text", "label": "Puppet Enterprise Server:", "value": "automate01", "format_type": "text", "placeholder": "automate01", "required": true, "help_string": "Input your Puppet Enterprise Server", "default_value": "", "name": "puppet_enterprise_server_"}, {"type": "text", "label": "Port:", "value": "8081", "format_type": "text", "placeholder": "8081", "required": true, "help_string": "Input your Puppet Enterprise DB Port (HTTPS 8081, HTTP: 8080)", "default_value": "8081", "name": "port_"}, {"type": "text", "label": "Environment", "value": "production", "format_type": "text", "placeholder": "production", "required": true, "help_string": "Puppet Enterprise Environment you want to monitor.", "default_value": "production", "name": "environment"}], "code": "\n# encoding = utf-8\n\nimport os\nimport sys\nimport time\nimport datetime\nimport json\nimport jsonpath_rw\nfrom datetime import datetime\n\ndef validate_input(helper, definition):\n \"\"\"Implement your own validation logic to validate the input stanza configurations\"\"\"\n # This example accesses the modular input variable\n # server = definition.parameters.get('server', None)\n # port = definition.parameters.get('port', None)\n pass\n\ndef validate_input(helper, definition):\n \"\"\"Implement your own validation logic to validate the input stanza configurations\"\"\"\n # This example accesses the modular input variable\n # server = definition.parameters.get('server', None)\n # port = definition.parameters.get('port', None)\n pass\n\n\ndef merge_dicts(dict1, dict2):\n for k in set(dict1.keys()).union(dict2.keys()):\n if k in dict1 and k in dict2:\n if isinstance(dict1[k], dict) and isinstance(dict2[k], dict):\n yield (k, dict(merge_dicts(dict1[k], dict2[k])))\n else:\n # If one of the values is not a dict, you can't continue merging it.\n # Value from second dict overrides one in first and we move on.\n yield (k, dict2[k])\n # Alternatively, replace this with exception raiser to alert you of value conflicts\n elif k in dict1:\n yield (k, dict1[k])\n else:\n yield (k, dict2[k])\n\ndef collect_events(helper, ew):\n \n import datetime\n import json\n import jsonpath_rw\n \n method = 'GET'\n api_request = 'application/json'\n \n api_token = helper.get_global_setting(\"token_\")\n server = helper.get_arg('server_')\n port = helper.get_arg('port_')\n type_of_environment = helper.get_arg('environment')\n pe_server_url = helper.get_arg('puppet_enterprise_server_')\n pe_token = helper.get_arg('token_')\n pe_expiration = helper.get_arg('token_generation_date_')\n \n input_source = helper.get_input_stanza_names()\n \n url = server + \":\" + port + \"/pdb/query/v4/inventory?query= [\\\"=\\\",\\\"environment\\\",\\\"\" + type_of_environment + \"\\\"]\"\n \n if pe_server_url:\n input_source = pe_server_url\n else:\n input_source = pe_server_url\n \n headers = {\n 'X-Authentication': pe_token, \n 'Content-type': api_request\n }\n \n response = helper.send_http_request(url, \n method, \n parameters=None, \n payload=None,\n headers=headers, \n cookies=None, \n verify=False, \n cert=None,\n timeout=None, \n use_proxy=True)\n \n r_status = response.status_code\n response.raise_for_status()\n helper.log_error (response.text) \n \n r= response.json()\n \n input_type = helper.get_input_type()\n for stanza_name in helper.get_input_stanza_names():\n \n for one_dict in r:\n temp_one_dict1 = one_dict['facts']['trusted']\n temp_one_dict2 = one_dict['facts']['ruby']\n\n # temp_one_dict = merge_dicts(temp_one_dict1, temp_one_dict2)\n \n for key, value in temp_one_dict1.iteritems():\n temp_one_dict2[key] = value\n temp_one_dict2['hostname'] = one_dict['facts']['hostname']\n temp_one_dict2['aio_agent_build'] = one_dict['facts']['aio_agent_build']\n temp_one_dict2['aio_agent_version'] = one_dict['facts']['aio_agent_version']\n temp_one_dict2['clientversion'] = one_dict['facts']['clientversion']\n temp_one_dict2['architecture'] = one_dict['facts']['architecture']\n temp_one_dict2['bios_release_date'] = one_dict['facts']['bios_release_date']\n temp_one_dict2['bios_vendor'] = one_dict['facts']['bios_vendor']\n temp_one_dict2['hostname'] = one_dict['facts']['hostname']\n temp_one_dict2['macaddress'] = one_dict['facts']['macaddress']\n temp_one_dict2['facterversion'] = one_dict['facts']['facterversion']\n temp_one_dict2['filesystems'] = one_dict['facts']['filesystems']\n temp_one_dict2['osfamily'] = one_dict['facts']['osfamily']\n temp_one_dict2['operatingsystem'] = one_dict['facts']['operatingsystem']\n temp_one_dict2['operatingsystemmajrelease'] = one_dict['facts']['operatingsystemmajrelease']\n temp_one_dict2['operatingsystemrelease'] = one_dict['facts']['operatingsystemrelease']\n temp_one_dict2['selinux'] = one_dict['facts']['selinux']\n temp_one_dict2['fqdn'] = one_dict['facts']['fqdn']\n temp_one_dict2['ipaddress'] = one_dict['facts']['ipaddress']\n temp_one_dict2['ipaddress6'] = one_dict['facts']['ipaddress6']\n temp_one_dict2['is_virtual'] = one_dict['facts']['is_virtual']\n temp_one_dict2['puppetversion'] = one_dict['facts']['puppetversion']\n temp_one_dict2['processorcount'] = one_dict['facts']['processorcount']\n temp_one_dict2['processors'] = one_dict['facts']['processors']\n temp_one_dict2['kernel'] = one_dict['facts']['kernel']\n temp_one_dict2['kernelmajversion'] = one_dict['facts']['kernelmajversion']\n temp_one_dict2['kernelrelease'] = one_dict['facts']['kernelrelease']\n temp_one_dict2['selinux'] = one_dict['facts']['selinux']\n temp_one_dict2['serialnumber'] = one_dict['facts']['serialnumber']\n temp_one_dict2['uptime'] = one_dict['facts']['uptime']\n temp_one_dict2['uptime_days'] = one_dict['facts']['uptime_days']\n temp_one_dict2['uptime_hours'] = one_dict['facts']['uptime_hours']\n temp_one_dict2['uptime_seconds'] = one_dict['facts']['uptime_seconds']\n temp_one_dict2['uuid'] = one_dict['facts']['uuid']\n temp_one_dict2['virtual'] = one_dict['facts']['virtual']\n temp_one_dict2['uptime'] = one_dict['facts']['uptime']\n temp_one_dict2['pe_server_url_'] = pe_server_url\n temp_one_dict2['expiration'] = pe_expiration\n \n one_dict = temp_one_dict2\n \n data = json.dumps(one_dict,sort_keys=True)\n\n event = helper.new_event(source=input_source, index=helper.get_output_index(stanza_name), sourcetype=helper .get_sourcetype(stanza_name), data=data)\n helper.log_error (response.text) \n try:\n ew.write_event(event)\n helper.log_error (response.text) \n except Exception as e:\n raise e\n return;\n \n #save checkpoint value to end_time which is data collection time\n ckpt_value = helper.save_check_point(ckpt, end_time)\n \n \n", "title": "Puppet Enterprise Factors", "sample_count": "17864", "sourcetype": "pe:factors", "use_external_validation": true, "streaming_mode_xml": true, "interval": "60", "name": "puppet_enterprise_factors", "uuid": "56804fce92274f6d9d9fc7a4ff4bb4ea"}]}, "field_extraction_builder": {"pe:overview:enforcement": {"is_parsed": true, "data_format": "json"}, "pe:factors": {"is_parsed": true, "data_format": "json"}, "pe:metrics": {"is_parsed": true, "data_format": "json"}, "pe:status:overview": {"data_format": "json"}, "pe:status": {"is_parsed": true, "data_format": "json"}, "pe:events:extdetails": {"is_parsed": true, "data_format": "json"}}, "sourcetype_builder": {"pe:overview:enforcement": {"metadata": {"event_count": 0, "cims_count": 0, "data_input_name": "puppet_enterprise_overview_enforcement", "extractions_count": 0}}, "pe:factors": {"metadata": {"event_count": 0, "cims_count": 0, "data_input_name": "puppet_enterprise_factors", "extractions_count": 0}}, "pe:metrics": {"metadata": {"event_count": 0, "cims_count": 0, "data_input_name": "puppet_enterprise_metrics", "extractions_count": 0}}, "pe:status:overview": {"metadata": {"event_count": 0, "cims_count": 0, "data_input_name": "puppet_enterprise_status_overview", "extractions_count": 0}}, "pe:status": {"metadata": {"event_count": 0, "cims_count": 0, "data_input_name": null, "extractions_count": 0}}, "pe:events:extdetails": {"metadata": {"event_count": 0, "cims_count": 0, "data_input_name": "puppet_enterprise_extended_details", "extractions_count": 0}}}, "global_settings_builder": {"global_settings": {"customized_settings": [{"internal_name": "", "type": "password", "label": "Victor Ops Token", "value": "", "format_type": "password", "help_string": "", "required": true, "name": "victor_ops_token", "default_value": ""}], "log_settings": {"log_level": "DEBUG"}}}}