def initialize(self, result=None): self.rescan_sched = 0 # if we don't have a token, we need to get one if not self.masterLoginToken: log.info('Initializing opsview node %s' % self.name) d = self.loginMaster() return d.addCallback(self.initialize).addErrback(self.onInitErr) else: self.creds = {'X-Opsview-Username': self.login, 'X-Opsview-Token': self.masterLoginToken} d = rest_api.getInfo(self.uri, 'rest/status/service', headers=self.creds, timeout=loginTimeout) return d.addCallbacks(self.addServices,self.onInitErr)
def get_auth_tkt(result): def onTktSuccess(result, token_result): log.debug('got token result: %s' % token_result) log.debug('got auth_tkt response for %s: %s' % (self.name, cj)) return token_result, cj def onTktFail(reason, token_result): log.debug('got token result') log.debug(token_result) log.error('auth_tkt request failed') log.error(reason) return False, token_result token_result = result cj = {} headers = [] cj['auth_tkt'] = self._makeTicket(userid=username, remote_addr=local_ip) log.debug('requesting web auth with ticket: %s' % cj) #d = web_client.getPage(self.uri, headers, method='GET', cookies=cj) d = rest_api.getInfo(self.uri, '', headers, cookies=cj, timeout=loginTimeout) d.addCallback(onTktSuccess, token_result).addErrback(onTktFail, token_result) return d
def _fetchRestData(self, uri, api_tool, h_s_m, headers, cookies, timeout, reqStart, reqEnd, retry=0, returnData=True, missStart=None, missEnd=None): def onSuccess(result, reqStart, reqEnd): #we got back a result from our data fetch request - add it to our cache and set our timestamp #return the result to the calling function log.debug('got metric api request back') return self._cacheAndReturnData(result, reqStart, reqEnd, returnData) def onFailure(result, uri=None, api_tool=None, headers=None, cookies=None, reqStart=None, reqEnd=None, timeout=dataTimeout, retry=0, returnData=True, missStart=None, missEnd=None): #trap possible errors here l = result.trap(rest_api.ApiError, defer.CancelledError) if l == rest_api.ApiError: retry += 1 if uri: if retry < 3: log.debug('got api error, retrying') return self.fetchRestData(uri, api_tool, headers, cookies, reqStart, reqEnd, timeout, retry=retry, returnData=returnData, missStart=missStart, missEnd=missEnd) else: log.debug('too many retries') return result else: log.debug ('missing uri') return result elif l == defer.CancelledError: log.debug('got timeout error') return result else: log.debug('got error: %s' % result) return result if missStart is not None: fetchStart = missStart else: fetchStart = reqStart if missEnd is not None: fetchEnd = missEnd else: fetchEnd = reqEnd url = '%s?hsm=%s&start=%s&end=%s' % (api_tool, urllib.quote_plus(h_s_m), fetchStart, fetchEnd) log.debug('requesting %s from %s' % (url, uri)) d = rest_api.getInfo(uri, str(url), headers=headers, cookies=cookies, timeout=timeout) d.addCallback(onSuccess, reqStart, reqEnd).addErrback(onFailure, uri, api_tool, headers, cookies, reqStart, reqEnd, timeout, retry=retry, returnData=returnData, missStart=missStart, missEnd=missEnd) return d
def addServices(self, result=None): self.cred_time = int(time.time()) if not result: log.debug('No services to add') return 0 else: services = result service_list = services['list'] service_sum = services['summary'] host_count = 0 #remove the old children set log.debug("Reloading Domain %s" % self.host) self.initialized = False self.children = {} for item in service_list: host_count += 1 item_services = item['services'] host_name = item['name'] host_alias = item['alias'] if 'comments' in item: host_comments = item['comments'] else: host_comments = '' host = Host(host_alias, host_comments, item['current_check_attempt'], item['downtime'], item['icon'], item['last_check'], item['max_check_attempts'], host_name, item['num_interfaces'], item['num_services'], item['output']) self.addChild(host) for svc in item_services: svc_host = host_name svc_name = svc['name'] svc_current_check_attempt = svc['current_check_attempt'] svc_downtime = svc['downtime'] svc_last_check = svc['last_check'] svc_markdown = svc['markdown'] svc_max_check_attempts = svc['max_check_attempts'] svc_output = svc['output'] svc_perfdata_available = svc['perfdata_available'] svc_service_object_id = svc['service_object_id'] svc_state = svc['state'] svc_state_type = svc['state_type'] svc_state_duration = svc['state_duration'] svc_unhandled = svc['unhandled'] svc_obj = Service(svc_current_check_attempt, svc_downtime, svc_last_check, svc_markdown, svc_max_check_attempts, svc_name, svc_output, svc_perfdata_available, svc_service_object_id, svc_state, svc_state_type, svc_state_duration, svc_unhandled, svc_host) host.addChild(svc_obj) log.info('found %s hosts for node %s' % (host_count, self.name)) perfmetrics = rest_api.getInfo(self.uri, 'rest/runtime/performancemetric', headers=self.creds, timeout=dataTimeout) perfmetrics.addCallbacks(self.saveMetricData,self.onErr) return perfmetrics
for x,y in mList.items(): service[x] = y return returnList def errInfo(reason): log.error(reason) for section in cfg_sections: if section[:14] == 'opsview_server': server_name = utils.config.get(section, "name") server_host = utils.config.get(section, "host") server_login = utils.config.get(section, "login") server_password = utils.config.get(section, "password") server_tkt_shared = utils.config.get(section, "shared_secret") server_api_tool = utils.config.get(section, "api_tool") server_rescan = utils.config.get(section, "rescan") try: odw_host = utils.config.get(section, "odw_host") odw_db = utils.config.get(section, "odw_db") odw_user = utils.config.get(section, "odw_user") odw_pass = utils.config.get(section, "odw_pass") except: odw_host = odw_db = odw_user = odw_pass = None log.info('Found no or invalid odw data for node %s' % server_name) node = Domain(server_name, server_host, server_login, server_password, server_tkt_shared, server_api_tool, server_rescan, odw_host, odw_db, odw_user, odw_pass) node_list[server_name] = node node_uri = node_list[server_name].getUri() node_versions = rest_api.getInfo(node_uri, 'rest', timeout=dataTimeout) node_versions.addCallback(saveVersionInfo, node=node).addErrback(errInfo) node = None