Пример #1
0
    "n",
    "node",
    "Check if a specified node is up. Used with `nodeup` action. (default: celery.ubuntu)",
    default="celery.ubuntu")
check_api.add_option("l",
                     "limit",
                     "Number of tasks in the past to check. (default: 1000)",
                     default=1000)

check_api.enable_status("warning")
check_api.enable_status("critical")

check_api.start()

if check_api.options.action not in ("nodeup", "health"):
    check_api.unknown_error("unknown action specified %s." %
                            check_api.options.action)

response = requests.get("%s:%d/api/workers" %
                        (check_api.options.host, int(check_api.options.port)))

try:
    response.raise_for_status()
except Exception as e:
    print "Status Critical, flower API not reachable"
    sys.exit(2)

try:
    content = json.loads(response.content)
except Exception as e:
    check_api.unknown_error("%s health check response was malformed: %s" %
                            (check_api.options.action, e))
check_api = Plugin("Used to determine the status of a Celery worker.", "1.0")

check_api.add_option("p", "port", "Port of the Celery host machine serving the Celerymon API. (default: 8989)", default=8989)
check_api.add_option("h", "host", "Host of the Celery worker instance. (default: http://localhost)", default="http://localhost")
check_api.add_option("a", "action", "The status check to perform. (nodeup, health)", default="health")
check_api.add_option("n", "node", "Check if a specified node is up. Used with `nodeup` action. (default: celery.ubuntu)", default="celery.ubuntu")
check_api.add_option("l", "limit", "Number of tasks in the past to check. (default: 100)", default=100)

check_api.enable_status("warning")
check_api.enable_status("critical")

check_api.start()

if check_api.options.action not in ("nodeup", "health"):
    check_api.unknown_error("unknown action specified %s." % check_api.options.action)

response = requests.get("%s:%d/api/worker/" % (check_api.options.host, int(check_api.options.port)))

try:
    response.raise_for_status()
except Exception as e:
    print "Status Critical, celerymon API not reachable"
    sys.exit(2)

try:
    content = json.loads(response.content)
except Exception as e:
    check_api.unknown_error("%s health check response was malformed: %s" % (check_api.options.action, e))

if len(content) == 0:
Пример #3
0
                               gmetad_port=plugin.options.gmetad_port,
                               gmetad_timeout=plugin.options.gmetad_timeout,
                               cache_path=plugin.options.cache_path,
                               cache_ttl=plugin.options.cache_ttl,
                               cache_ttl_splay=plugin.options.cache_ttl_splay,
                               cache_grace=plugin.options.cache_grace,
                               metrics_max_age=plugin.options.metrics_max_age,
                               debug_level=plugin.options.verbose).get_value(
                                   metric_host=plugin.options.metric_host,
                                   metric_name=plugin.options.metric_name)

        plugin.set_status_message(
            '%s = %s %s' % (value['title'], value['value'], value['units']))

        if value['units'].upper() in ('B', 'KB', 'MB', 'GB', 'TB') or \
           value['units'].lower() in ('s', 'ms', 'us', 'ns', '%'):
            plugin.set_value(plugin.options.metric_name,
                             value['value'],
                             scale=value['units'])
        else:
            plugin.set_value(plugin.options.metric_name, value['value'])

    except (GangliaMetrics.MetricNotFoundError), e:
        plugin.unknown_error(str(e))
    except (Exception), e:
        print(e)
        sys.exit(2)

    # Print results
    plugin.finish()
Пример #4
0
                               gmetad_port=plugin.options.gmetad_port,
                               gmetad_timeout=plugin.options.gmetad_timeout,
                               cache_path=plugin.options.cache_path,
                               cache_ttl=plugin.options.cache_ttl,
                               cache_ttl_splay=plugin.options.cache_ttl_splay,
                               cache_grace=plugin.options.cache_grace,
                               metrics_max_age=plugin.options.metrics_max_age,
                               debug_level=plugin.options.verbose).get_value(
                                  metric_host=plugin.options.metric_host,
                                  metric_name=plugin.options.metric_name)

        plugin.set_status_message('%s = %s %s' % (value['title'],
                                                  value['value'],
                                                  value['units']))

        if value['units'].upper() in ('B', 'KB', 'MB', 'GB', 'TB') or \
           value['units'].lower() in ('s', 'ms', 'us', 'ns', '%'):
            plugin.set_value(plugin.options.metric_name, value['value'],
                             scale=value['units'])
        else:
            plugin.set_value(plugin.options.metric_name, value['value'])

    except (GangliaMetrics.MetricNotFoundError), e:
         plugin.unknown_error(str(e))
    except (Exception), e:
        print(e)
        sys.exit(2)

    # Print results
    plugin.finish()
Пример #5
0
# FIXME: http vs https support, user auth?
g.add_option('t', 'target', 'Graphite Target', required=True)
g.add_option('h', 'host',   'Graphite Host', required=True)
g.add_option('w', 'window', 'Time Window', default='-5minutes')
g.add_option('u', 'units',  'Metric units', default='percent')

g.enable_status('critical')
g.enable_status('warning')

g.start()

# Bounds checking on crit and warn
if g.options.raw_critical < g.options.raw_warning:
    g.unknown_error("ERROR: Critical level (%s) is set LOWER than Warning level (%s)" % (
        g.options.raw_critical,
        g.options.raw_warning,
        ))

# Build url
# FIXME: pickle seems efficient, but maybe harder to debug?
url = 'http://%s/render?from=%s&target=%s&format=pickle' % (
    g.options.host, 
    g.options.window,
    g.options.target,
    )
if debug: print 'DEBUG URL:',url

value=get_value(url)
if debug: print 'DEBUG VALUE:', value

# Error parsing
Пример #6
0
url = graphite.options.url
if not url:
    url = ''.join([
        'http://localhost/render?format=raw',
        '&from=-', graphite.options.minute, 'minutes',
        '&target=servers.', graphite.options.hostMafia.replace('.', '_'),
            '_9400.', graphite.options.keyMafia,
        ])

try:
    usock = urllib2.urlopen(url)
    data = usock.read()
    usock.close()
    assert data

    pieces = data.split("|")
    counter = pieces[0].split(",")[0]
    values = pieces[1].split(",")[:-1]
    values = map(lambda x: 0.0 if x == 'None' else float(x), values)
    assert not any(map(math.isnan, values))
    avg = sum(values)/len(values);

    graphite.set_value(counter, avg)
    graphite.set_status_message("Avg value of %s was %f" % (counter, avg))

    graphite.finish()
except Exception, e:
    graphite.unknown_error("Error: %s" % e)