summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris St. Pierre <chris.a.st.pierre@gmail.com>2015-10-13 08:12:47 -0500
committerChris St. Pierre <chris.a.st.pierre@gmail.com>2015-10-13 08:12:47 -0500
commit64dc09e18b8a34d57c9ff6c64cc9656c1e65c29c (patch)
treee1084b87d752b8a2c7d1b8f7daeb500707069a99
parent470723f1c9eabbeec63bba154e6d5c6dc75153ac (diff)
parent6b1d1dca9d0a108158b25b5cc07399f534f54f09 (diff)
downloadbcfg2-64dc09e18b8a34d57c9ff6c64cc9656c1e65c29c.tar.gz
bcfg2-64dc09e18b8a34d57c9ff6c64cc9656c1e65c29c.tar.bz2
bcfg2-64dc09e18b8a34d57c9ff6c64cc9656c1e65c29c.zip
Merge pull request #309 from AlexanderS/fix/report-filters
Reporting: Do not fail, if no interactions found
-rwxr-xr-xsrc/lib/Bcfg2/Reporting/Reports.py43
1 files changed, 31 insertions, 12 deletions
diff --git a/src/lib/Bcfg2/Reporting/Reports.py b/src/lib/Bcfg2/Reporting/Reports.py
index ee3c27709..7ba0265ae 100755
--- a/src/lib/Bcfg2/Reporting/Reports.py
+++ b/src/lib/Bcfg2/Reporting/Reports.py
@@ -6,6 +6,7 @@ import argparse
import datetime
import django
import Bcfg2.DBSettings
+from django.core.exceptions import ObjectDoesNotExist
def print_entries(interaction, etype):
@@ -39,7 +40,10 @@ class _FlagsFilterMixin(object):
filter['only_important'] = False
from Bcfg2.Reporting.models import Interaction
- return Interaction.objects.filter(client=client, **filter).latest()
+ try:
+ return Interaction.objects.filter(client=client, **filter).latest()
+ except ObjectDoesNotExist:
+ return None
class _SingleHostCmd(Bcfg2.Options.Subcommand): # pylint: disable=W0223
@@ -71,12 +75,15 @@ class Show(_SingleHostCmd, _FlagsFilterMixin):
client = self.get_client(setup)
show_all = not setup.bad and not setup.extra and not setup.modified
interaction = self.get_interaction(client, setup)
- if setup.bad or show_all:
- print_entries(interaction, "bad")
- if setup.modified or show_all:
- print_entries(interaction, "modified")
- if setup.extra or show_all:
- print_entries(interaction, "extra")
+ if interaction is None:
+ print("No interactions found for host: %s" % client.name)
+ else:
+ if setup.bad or show_all:
+ print_entries(interaction, "bad")
+ if setup.modified or show_all:
+ print_entries(interaction, "modified")
+ if setup.extra or show_all:
+ print_entries(interaction, "extra")
class Total(_SingleHostCmd, _FlagsFilterMixin):
@@ -87,9 +94,12 @@ class Total(_SingleHostCmd, _FlagsFilterMixin):
def run(self, setup):
client = self.get_client(setup)
interaction = self.get_interaction(client, setup)
- managed = interaction.total_count
- good = interaction.good_count
- print("Total managed entries: %d (good: %d)" % (managed, good))
+ if interaction is None:
+ print("No interactions found for host: %s" % client.name)
+ else:
+ managed = interaction.total_count
+ good = interaction.good_count
+ print("Total managed entries: %d (good: %d)" % (managed, good))
class Expire(_SingleHostCmd):
@@ -194,6 +204,9 @@ class Clients(_ClientSelectCmd):
show_all = not setup.stale and not setup.clean and not setup.dirty
for client in self.get_clients():
interaction = self.get_interaction(client, setup)
+ if interaction is None:
+ continue
+
if (show_all or
(setup.stale and interaction.isstale()) or
(setup.clean and interaction.isclean()) or
@@ -227,6 +240,9 @@ class Entries(_ClientSelectCmd):
for entry in entryspec:
for client in clients:
interaction = self.get_interaction(client, setup)
+ if interaction is None:
+ continue
+
items = getattr(interaction, etype)()
for item in items:
if (item.entry_type == entry[0] and
@@ -285,9 +301,12 @@ class Entry(_ClientSelectCmd):
# TODO: batch fetch this. sqlite could break
extra = dict()
for client in self.get_clients():
+ interaction = self.get_interaction(client, setup)
+ if interaction is None:
+ continue
+
ents = entry_cls.objects.filter(
- name=ename,
- interaction=self.get_interaction(client, setup))
+ name=ename, interaction=interaction)
if len(ents) == 0:
continue
extra[client] = {"entry state": ents[0].get_state_display(),