def check(self, instance): if 'lighttpd_status_url' not in instance: raise Exception("Missing 'lighttpd_status_url' variable in Lighttpd config") url = self.assumed_url.get(instance['lighttpd_status_url'], instance['lighttpd_status_url']) dimensions = instance.get('dimensions', {}) self.log.debug("Connecting to %s" % url) req = urllib2.Request(url, None, headers(self.agent_config)) if 'user' in instance and 'password' in instance: add_basic_auth(req, instance['user'], instance['password']) request = urllib2.urlopen(req) headers_resp = request.info().headers server_version = self._get_server_version(headers_resp) response = request.read() metric_count = 0 # Loop through and extract the numerical values for line in response.split('\n'): values = line.split(': ') if len(values) == 2: # match metric, value = values try: value = float(value) except ValueError: continue # Special case: kBytes => bytes if metric == 'Total kBytes': value *= 1024 # Send metric as a gauge, if applicable if metric in self.GAUGES: metric_count += 1 metric_name = self.GAUGES[metric] self.gauge(metric_name, value, dimensions=dimensions) # Send metric as a rate, if applicable if metric in self.RATES: metric_count += 1 metric_name = self.RATES[metric] self.rate(metric_name, value, dimensions=dimensions) # Send metric as a counter, if applicable if metric in self.COUNTERS: metric_count += 1 metric_name = self.COUNTERS[metric] self.increment(metric_name, value, dimensions=dimensions) if metric_count == 0: url_suffix = self.URL_SUFFIX_PER_VERSION[server_version] if self.assumed_url.get( instance['lighttpd_status_url'], None) is None and url[-len(url_suffix):] != url_suffix: self.assumed_url[instance['lighttpd_status_url']] = '%s%s' % (url, url_suffix) self.warning( "Assuming url was not correct. Trying to add %s suffix to the url" % url_suffix) self.check(instance) else: raise Exception("No metrics were fetched for this instance. Make sure that %s is the proper url." % instance[ 'lighttpd_status_url'])
def _get_data(self, instance): url = instance.get('nginx_status_url') req = urllib2.Request(url, None, headers(self.agent_config)) if 'user' in instance and 'password' in instance: add_basic_auth(req, instance['user'], instance['password']) request = urllib2.urlopen(req) return request.read()
def _get_stats(self, url): "Hit a given URL and return the parsed json" self.log.debug('Fetching Couchdb stats at url: %s' % url) req = urllib2.Request(url, None, headers(self.agent_config)) # Do the request, log any errors request = urllib2.urlopen(req) response = request.read() return json.loads(response)
def _get_data(self, url, auth=None): """ Hit a given URL and return the parsed json `auth` is a tuple of (username, password) or None """ req = urllib2.Request(url, None, headers(self.agent_config)) if auth: add_basic_auth(req, *auth) request = urllib2.urlopen(req) response = request.read() return json.loads(response)
def check(self, instance): if 'apache_status_url' not in instance: raise Exception("Missing 'apache_status_url' in Apache config") url = self.assumed_url.get(instance['apache_status_url'], instance['apache_status_url']) dimensions = instance.get('dimensions', {}) req = urllib2.Request(url, None, headers(self.agent_config)) if 'apache_user' in instance and 'apache_password' in instance: add_basic_auth(req, instance['apache_user'], instance['apache_password']) request = urllib2.urlopen(req) response = request.read() metric_count = 0 # Loop through and extract the numerical values for line in response.split('\n'): values = line.split(': ') if len(values) == 2: # match metric, value = values try: value = float(value) except ValueError: continue # Special case: kBytes => bytes if metric == 'Total kBytes': value *= 1024 # Send metric as a gauge, if applicable if metric in self.GAUGES: metric_count += 1 metric_name = self.GAUGES[metric] self.gauge(metric_name, value, dimensions=dimensions) # Send metric as a rate, if applicable if metric in self.RATES: metric_count += 1 metric_name = self.RATES[metric] self.rate(metric_name, value, dimensions=dimensions) if metric_count == 0: if self.assumed_url.get(instance['apache_status_url'], None) is None and url[-5:] != '?auto': self.assumed_url[ instance['apache_status_url']] = '%s?auto' % url self.warning( "Assuming url was not correct. Trying to add ?auto suffix to the url" ) self.check(instance) else: raise Exception( "No metrics were fetched for this instance. Make sure that %s is the proper url." % instance['apache_status_url'])
def _get_data(self, url, auth=None): """Hit a given URL and return the parsed json `auth` is a tuple of (username, password) or None """ req = urllib2.Request(url, None, headers(self.agent_config)) if auth: add_basic_auth(req, *auth) request = urllib2.urlopen(req) response = request.read() return json.loads(response)
def _get_stats(self, url): """Hit a given URL and return the parsed json. """ self.log.debug('Fetching Couchdb stats at url: %s' % url) req = urllib2.Request(url, None, headers(self.agent_config)) # Do the request, log any errors request = urllib2.urlopen(req) response = request.read() return json.loads(response)
def check(self, instance): if 'apache_status_url' not in instance: raise Exception("Missing 'apache_status_url' in Apache config") url = self.assumed_url.get(instance['apache_status_url'], instance['apache_status_url']) dimensions = instance.get('dimensions', {}) req = urllib2.Request(url, None, headers(self.agent_config)) if 'apache_user' in instance and 'apache_password' in instance: add_basic_auth(req, instance['apache_user'], instance['apache_password']) request = urllib2.urlopen(req) response = request.read() metric_count = 0 # Loop through and extract the numerical values for line in response.split('\n'): values = line.split(': ') if len(values) == 2: # match metric, value = values try: value = float(value) except ValueError: continue # Special case: kBytes => bytes if metric == 'Total kBytes': value *= 1024 # Send metric as a gauge, if applicable if metric in self.GAUGES: metric_count += 1 metric_name = self.GAUGES[metric] self.gauge(metric_name, value, dimensions=dimensions) # Send metric as a rate, if applicable if metric in self.RATES: metric_count += 1 metric_name = self.RATES[metric] self.rate(metric_name, value, dimensions=dimensions) if metric_count == 0: if self.assumed_url.get( instance['apache_status_url'], None) is None and url[-5:] != '?auto': self.assumed_url[instance['apache_status_url']] = '%s?auto' % url self.warning("Assuming url was not correct. Trying to add ?auto suffix to the url") self.check(instance) else: raise Exception("No metrics were fetched for this instance. Make sure that %s is the proper url." % instance['apache_status_url'])
def _get_stats(self, url, instance): "Hit a given URL and return the parsed json" self.log.debug('Fetching Couchbase stats at url: %s' % url) req = urllib2.Request(url, None, headers(self.agent_config)) if 'user' in instance and 'password' in instance: add_basic_auth(req, instance['user'], instance['password']) if instance['is_recent_python']: timeout = instance.get('timeout', DEFAULT_TIMEOUT) request = urllib2.urlopen(req, timeout=timeout) else: request = urllib2.urlopen(req) response = request.read() return json.loads(response)
def _get_stats(self, url, instance): """Hit a given URL and return the parsed json. """ self.log.debug('Fetching Couchbase stats at url: %s' % url) req = urllib2.Request(url, None, headers(self.agent_config)) if 'user' in instance and 'password' in instance: add_basic_auth(req, instance['user'], instance['password']) if instance['is_recent_python']: timeout = instance.get('timeout', DEFAULT_TIMEOUT) request = urllib2.urlopen(req, timeout=timeout) else: request = urllib2.urlopen(req) response = request.read() return json.loads(response)
def _fetch_data(self, url, username, password): ''' Hit a given URL and return the parsed json ''' # Try to fetch data from the stats URL passman = urllib2.HTTPPasswordMgrWithDefaultRealm() passman.add_password(None, url, username, password) authhandler = urllib2.HTTPBasicAuthHandler(passman) opener = urllib2.build_opener(authhandler) urllib2.install_opener(opener) url = "%s%s" % (url, STATS_URL) self.log.debug("HAProxy Fetching haproxy search data from: %s" % url) req = urllib2.Request(url, None, headers(self.agent_config)) request = urllib2.urlopen(req) response = request.read() # Split the data by line return response.split('\n')
def _get_primary_addr(self, url, node_name, auth): """ Returns a list of primary interface addresses as seen by ES. Used in ES < 0.19 """ req = urllib2.Request(url, None, headers(self.agent_config)) # Load basic authentication configuration, if available. if auth: add_basic_auth(req, *auth) request = urllib2.urlopen(req) response = request.read() data = json.loads(response) if node_name in data['nodes']: node = data['nodes'][node_name] if 'network' in node\ and 'primary_interface' in node['network']\ and 'address' in node['network']['primary_interface']: return node['network']['primary_interface']['address'] raise NodeNotFound()
def _fetch_data(self, url, username, password): """Hit a given URL and return the parsed json. """ # Try to fetch data from the stats URL passman = urllib2.HTTPPasswordMgrWithDefaultRealm() passman.add_password(None, url, username, password) authhandler = urllib2.HTTPBasicAuthHandler(passman) opener = urllib2.build_opener(authhandler) urllib2.install_opener(opener) url = "%s%s" % (url, STATS_URL) self.log.debug("HAProxy Fetching haproxy search data from: %s" % url) req = urllib2.Request(url, None, headers(self.agent_config)) request = urllib2.urlopen(req) response = request.read() # Split the data by line return response.split('\n')
def _get_primary_addr(self, url, node_name, auth): """Returns a list of primary interface addresses as seen by ES. Used in ES < 0.19 """ req = urllib2.Request(url, None, headers(self.agent_config)) # Load basic authentication configuration, if available. if auth: add_basic_auth(req, *auth) request = urllib2.urlopen(req) response = request.read() data = json.loads(response) if node_name in data['nodes']: node = data['nodes'][node_name] if 'network' in node\ and 'primary_interface' in node['network']\ and 'address' in node['network']['primary_interface']: return node['network']['primary_interface']['address'] raise NodeNotFound()
def check(self, instance): if 'lighttpd_status_url' not in instance: raise Exception( "Missing 'lighttpd_status_url' variable in Lighttpd config") url = self.assumed_url.get(instance['lighttpd_status_url'], instance['lighttpd_status_url']) dimensions = instance.get('dimensions', {}) self.log.debug("Connecting to %s" % url) req = urllib2.Request(url, None, headers(self.agent_config)) if 'user' in instance and 'password' in instance: add_basic_auth(req, instance['user'], instance['password']) request = urllib2.urlopen(req) headers_resp = request.info().headers server_version = self._get_server_version(headers_resp) response = request.read() metric_count = 0 # Loop through and extract the numerical values for line in response.split('\n'): values = line.split(': ') if len(values) == 2: # match metric, value = values try: value = float(value) except ValueError: continue # Special case: kBytes => bytes if metric == 'Total kBytes': value *= 1024 # Send metric as a gauge, if applicable if metric in self.GAUGES: metric_count += 1 metric_name = self.GAUGES[metric] self.gauge(metric_name, value, dimensions=dimensions) # Send metric as a rate, if applicable if metric in self.RATES: metric_count += 1 metric_name = self.RATES[metric] self.rate(metric_name, value, dimensions=dimensions) # Send metric as a counter, if applicable if metric in self.COUNTERS: metric_count += 1 metric_name = self.COUNTERS[metric] self.increment(metric_name, value, dimensions=dimensions) if metric_count == 0: url_suffix = self.URL_SUFFIX_PER_VERSION[server_version] if self.assumed_url.get( instance['lighttpd_status_url'], None) is None and url[-len(url_suffix):] != url_suffix: self.assumed_url[instance['lighttpd_status_url']] = '%s%s' % ( url, url_suffix) self.warning( "Assuming url was not correct. Trying to add %s suffix to the url" % url_suffix) self.check(instance) else: raise Exception( "No metrics were fetched for this instance. Make sure that %s is the proper url." % instance['lighttpd_status_url'])