From 3b3f188e1558987a8a14dc303912e208f77c7b60 Mon Sep 17 00:00:00 2001 From: François Schmidts Date: Fri, 31 Jul 2015 13:15:16 +0200 Subject: adding munin probes --- scripts/__init__.py | 0 scripts/probes.py | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 scripts/__init__.py create mode 100644 scripts/probes.py (limited to 'scripts') diff --git a/scripts/__init__.py b/scripts/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/probes.py b/scripts/probes.py new file mode 100644 index 00000000..bfad4e6e --- /dev/null +++ b/scripts/probes.py @@ -0,0 +1,72 @@ +#!/usr/bin/python3 +import sys +from datetime import datetime, timedelta +from flask.ext.script import Command, Option + +from pyaggr3g470r.controllers \ + import UserController, FeedController, ArticleController +DEFAULT_HEADERS = {'Content-Type': 'application/json', 'User-Agent': 'munin'} +LATE_AFTER = 60 +FETCH_RATE = 3 + + +class AbstractMuninPlugin(Command): + urn = None + + def execute(self): + raise NotImplementedError() + + def config(self): + raise NotImplementedError() + + def get_options(self): + if sys.argv[-1] == 'config': + return [Option(dest='config', default=sys.argv[-1] == 'config')] + return [] + + def run(self, config=False): + if config: + self.config() + else: + self.execute() + + +class FeedProbe(AbstractMuninPlugin): + + def config(self): + print("graph_title PyAgg - Feeds counts") + print("graph_vlabel feeds") + print("feeds.label Late feeds") + print("feeds_total.label Total feeds") + print("feeds.warning 15") + print("feeds.critical 30") + print("graph_category web") + print("graph_scale yes") + + def execute(self): + delta = datetime.now() - timedelta(minutes=LATE_AFTER + FETCH_RATE + 1) + + print("feeds.value %d" % len(FeedController().list_late(delta))) + print("feeds_total.value %d" % FeedController().read().count()) + + +class ArticleProbe(AbstractMuninPlugin): + + def config(self): + print("graph_title Pyagg - Articles adding rate") + print("graph_vlabel Articles per sec") + print("articles.label Overall rate") + print("articles.type DERIVE") + print("articles.min 0") + for id_ in sorted(user.id for user in UserController().read()): + print("articles_user_%s.label Rate for user %s" % (id_, id_)) + print("articles_user_%s.type DERIVE" % id_) + print("articles_user_%s.min 0" % id_) + print("graph_category web") + print("graph_scale yes") + + def execute(self): + counts = ArticleController().count_by_user_id() + print("articles.value %s" % sum(counts.values())) + for user, count in counts.items(): + print("articles_user_%s.value %s" % (user, count)) -- cgit From 0caffceec8b58bc3f78c0d8ea36d2f7e9da668ec Mon Sep 17 00:00:00 2001 From: François Schmidts Date: Mon, 3 Aug 2015 14:36:13 +0200 Subject: sqlalchemy was requesting icons everytime feed where listed so i choosed to move the icons into their own table --- scripts/probes.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'scripts') diff --git a/scripts/probes.py b/scripts/probes.py index bfad4e6e..4c632184 100644 --- a/scripts/probes.py +++ b/scripts/probes.py @@ -45,8 +45,10 @@ class FeedProbe(AbstractMuninPlugin): def execute(self): delta = datetime.now() - timedelta(minutes=LATE_AFTER + FETCH_RATE + 1) + total = FeedController().read().count() - print("feeds.value %d" % len(FeedController().list_late(delta))) + print("feeds.value %d" + % len(FeedController().list_late(delta, limit=total))) print("feeds_total.value %d" % FeedController().read().count()) -- cgit