Merge "Don't send http_check_check metric"

This commit is contained in:
Jenkins 2017-02-24 10:40:00 +00:00 committed by Gerrit Code Review
commit f984c73aac
3 changed files with 112 additions and 18 deletions

View File

@ -49,7 +49,8 @@ class Base(object):
MAX_IDENTIFIER_LENGTH = 63 MAX_IDENTIFIER_LENGTH = 63
def __init__(self, collectd, service_name=None, local_check=True): def __init__(self, collectd, service_name=None, local_check=True,
disable_check_metric=False):
self.debug = False self.debug = False
self.timeout = 5 self.timeout = 5
self.max_retries = 3 self.max_retries = 3
@ -63,11 +64,12 @@ class Base(object):
self.service_name = service_name self.service_name = service_name
self.local_check = local_check self.local_check = local_check
self.disable_check_metric = disable_check_metric
def config_callback(self, conf): def config_callback(self, conf):
for node in conf.children: for node in conf.children:
if node.key == "Debug": if node.key == "Debug":
if node.values[0] in ['True', 'true']: if node.values[0].lower() == 'true':
self.debug = True self.debug = True
elif node.key == "Timeout": elif node.key == "Timeout":
self.timeout = int(node.values[0]) self.timeout = int(node.values[0])
@ -75,6 +77,9 @@ class Base(object):
self.max_retries = int(node.values[0]) self.max_retries = int(node.values[0])
elif node.key == 'DependsOnResource': elif node.key == 'DependsOnResource':
self.depends_on_resource = node.values[0] self.depends_on_resource = node.values[0]
elif node.key == 'DisableCheckMetric':
if node.values[0].lower() == 'true':
self.disable_check_metric = True
@read_callback_wrapper @read_callback_wrapper
def conditional_read_callback(self): def conditional_read_callback(self):
@ -95,11 +100,17 @@ class Base(object):
else: else:
self.dispatch_check_metric(self.OK) self.dispatch_check_metric(self.OK)
def dispatch_check_metric(self, check, failure=None): def dispatch_check_metric(self, value, failure=None):
"""Send a check metric reporting whether or not the plugin succeeded
"""
if self.disable_check_metric:
return
metric = { metric = {
'meta': {'service_check': self.service_name or self.plugin, 'meta': {'service_check': self.service_name or self.plugin,
'local_check': self.local_check}, 'local_check': self.local_check},
'values': check, 'values': value,
} }
if failure is not None: if failure is not None:

View File

@ -0,0 +1,73 @@
#!/usr/bin/python
# Copyright 2015 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import logging
import os
log_level = logging.INFO
if os.getenv('COLLECTD_DEBUG', '') == '1':
log_level = logging.DEBUG
logging.basicConfig(level=log_level)
class Values(object):
def __init__(self, type=None, values=None, plugin_instance=None,
type_instance=None, plugin=None, host=None, time=None,
meta=None, interval=None):
self._type = type
self._values = values
self._plugin_instance = plugin_instance
self._type_instance = type_instance
self._plugin = plugin
self._host = host
self._time = time
self._meta = meta
self._interval = interval
def dispatch(self, type=None, values=None, plugin_instance=None,
type_instance=None, plugin=None, host=None, time=None,
meta=None, interval=None):
info("plugin={plugin} plugin_instance={plugin_instance} "
"type={type} type_instance={type_instance} "
"values={values} meta={meta}".format(
plugin=plugin or self._plugin,
plugin_instance=plugin_instance or self._plugin_instance,
type=type or self._type,
type_instance=type_instance or self._type_instance,
values=values or self._values,
meta=meta or self._meta,
))
def error(msg):
logging.error(msg)
def warning(msg):
logging.warning(msg)
def notice(msg):
logging.notice(msg)
def info(msg):
logging.info(msg)
def debug(msg):
logging.debug(msg)

View File

@ -13,7 +13,11 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
import collectd try:
import collectd
except ImportError:
import collectd_fake as collectd
import requests import requests
import collectd_base as base import collectd_base as base
@ -68,23 +72,29 @@ class HTTPCheckPlugin(base.Base):
yield {'type_instance': name, 'values': self.FAIL} yield {'type_instance': name, 'values': self.FAIL}
else: else:
self.logger.debug( self.logger.debug(
"Got response from {}: '{}'".format(url, r.text)) "Got response from {}: '{}'".format(url, r.content))
yield {'type_instance': name, 'values': self.OK} yield {'type_instance': name, 'values': self.OK}
plugin = HTTPCheckPlugin(collectd)
plugin = HTTPCheckPlugin(collectd, disable_check_metric=True)
def config_callback(conf): if __name__ == '__main__':
plugin.config_callback(conf) plugin.urls['google_ok'] = 'https://www.google.com'
plugin.urls['google_fail'] = 'https://www.google.com/not_found'
plugin.expected_codes['google_ok'] = 200
plugin.expected_codes['github_fail'] = 200
plugin.read_callback()
else:
def config_callback(conf):
plugin.config_callback(conf)
def notification_callback(notification):
plugin.notification_callback(notification)
def notification_callback(notification): def read_callback():
plugin.notification_callback(notification) plugin.conditional_read_callback()
collectd.register_config(config_callback)
def read_callback(): collectd.register_notification(notification_callback)
plugin.conditional_read_callback() collectd.register_read(read_callback, base.INTERVAL)
collectd.register_config(config_callback)
collectd.register_notification(notification_callback)
collectd.register_read(read_callback, base.INTERVAL)