def __init__(self): self.session_key = self._get_session_key() self.logger = log.Logs().get_logger(self._get_log_file()) self.snow_account = self._get_service_now_account() loglevel = self.snow_account.get("loglevel", "INFO") log.Logs().set_level(loglevel) self.subcommand = "create" self.sys_id = None
def run(): """ Main loop. Run this TA for ever """ try: snow_conf = snow_config.SnowConfig() except Exception as ex: _LOGGER.error("Failed to setup config for Snow TA: %s", ex.message) _LOGGER.error(traceback.format_exc()) raise if snow_conf.stanza_configs: loglevel = snow_conf.default_configs.get("loglevel", "INFO") if loglevel != "INFO": log.Logs().set_level(loglevel) else: _LOGGER.info("No data collection for Snow is found in the " "inputs.conf. Do nothing and Quit the TA") return if not all(snow_conf.default_configs[k] for k in ("url", "username", "password")): _LOGGER.info("No ServiceNow account is configured, exiting...") return snow_config.handle_modinput_checkpoint(snow_conf.meta_configs, snow_conf.stanza_configs) data_loader = dl.GlobalDataLoader.get_data_loader(snow_conf.meta_configs, snow_conf.stanza_configs, jf.JobFactory()) _setup_signal_handler(data_loader) conf_monitor = snow_config.SnowConfMonitor(data_loader) data_loader.add_timer(conf_monitor.check_changes, time.time(), 60) checker = opm.OrphanProcessChecker(data_loader.tear_down) data_loader.add_timer(checker.check_orphan, time.time(), 2) data_loader.run()
""" Create scheduling jobs """ import socket import framework.log as log import snow_consts as sc from snow_data_loader import Snow _LOGGER = log.Logs().get_logger("main") __all__ = ["JobFactory"] class _CollectionJob(object): def __init__(self, config, endpoint, data_collect_func): self._config = config self._func = data_collect_func self._endpoint = endpoint if config.get("exclude", None): excludes = config["exclude"].lower().split(",") excludes = [ex.strip() for ex in excludes] else: excludes = () self.excludes = excludes if not config.get("host", None): config["host"] = socket.gethostname() def __call__(self):
import urllib import json from traceback import format_exc import sys import os.path as op sys.path.insert(0, op.dirname(op.dirname(op.abspath(__file__)))) import framework.utils as utils from httplib2 import (socks, ProxyInfo, Http) import framework.log as log import framework.ta_consts as c _LOGGER = log.Logs().get_logger(c.ta_util) def splunkd_request(splunkd_uri, session_key, method="GET", headers=None, data=None, timeout=30, retry=1): """ @return: httplib2.Response and content """ headers = headers if headers is not None else {} headers["Authorization"] = "Splunk {0}".format(session_key) content_type = headers.get("Content-Type")
import json import traceback import re import splunk.clilib.cli_common as scc import splunk.admin as admin from framework import utils from framework import credentials as cred from framework import configure as conf import framework.log as log import snow_config as sc utils.remove_http_proxy_env_vars() _LOGGER = log.Logs().get_logger("setup") class SetupRestHandler(admin.MConfigHandler): snow_args = ("url", "username", "password", "collection_interval", "since_when", "loglevel", "proxy_url", "proxy_port", "proxy_username", "proxy_password", "proxy_enabled", "proxy_rdns", "proxy_type") encrypted = "<encrypted>" userpass_sep = "``" dummy = "dummy" def setup(self): """ Set up supported arguments """
import os import threading import time import traceback import framework.log as log _LOGGER = log.Logs().get_logger("util") class OrphanProcessChecker(object): def __init__(self, callback=None): """ Only work for Linux platform. On Windows platform, is_orphan is always False """ if os.name == "nt": self._ppid = 0 else: self._ppid = os.getppid() self._callback = callback def is_orphan(self): if os.name == "nt": return False res = self._ppid != os.getppid() if res: _LOGGER.warn("Process=%s has become orphan", os.getpid()) return res