Parcourir la source

Expanded report view

Jeremy Stretch il y a 7 ans
Parent
commit
6c6b67330f
2 fichiers modifiés avec 70 ajouts et 5 suppressions
  1. 15 4
      netbox/extras/reports.py
  2. 55 1
      netbox/templates/extras/report.html

+ 15 - 4
netbox/extras/reports.py

@@ -93,7 +93,7 @@ class Report(object):
                     ('success', 0),
                     ('info', 0),
                     ('warning', 0),
-                    ('failed', 0),
+                    ('failure', 0),
                     ('log', []),
                 ])
         if not test_methods:
@@ -118,8 +118,19 @@ class Report(object):
         """
         if level not in LOG_LEVEL_CODES:
             raise Exception("Unknown logging level: {}".format(level))
-        logline = [timezone.now().isoformat(), level, str(obj), message]
-        self._results[self.active_test]['log'].append(logline)
+        self._results[self.active_test]['log'].append(
+            timezone.now().isoformat(),
+            LOG_LEVEL_CODES.get(level),
+            str(obj) if obj else None,
+            obj.get_absolute_url() if getattr(obj, 'get_absolute_url', None) else None,
+            message,
+        )
+
+    def log(self, message):
+        """
+        Log a message which is not associated with a particular object.
+        """
+        self._log(None, message, level=LOG_DEFAULT)
 
     def log_success(self, obj, message=None):
         """
@@ -148,7 +159,7 @@ class Report(object):
         Log a failure. Calling this method will automatically mark the report as failed.
         """
         self._log(obj, message, level=LOG_FAILURE)
-        self._results[self.active_test]['failed'] += 1
+        self._results[self.active_test]['failure'] += 1
         self.failed = True
 
     def run(self):

+ 55 - 1
netbox/templates/extras/report.html

@@ -24,7 +24,7 @@
     {% endif %}
     <h1>{{ report.name }}{% include 'extras/inc/report_label.html' %}</h1>
     <div class="row">
-        <div class="col-md-9">
+        <div class="col-md-12">
             {% if report.description %}
                 <p class="lead">{{ report.description }}</p>
             {% endif %}
@@ -34,5 +34,59 @@
                 <p class="text-muted">Last run: Never</p>
             {% endif %}
         </div>
+        <div class="col-md-9">
+            {% if report.result %}
+                <table class="table table-hover">
+                    <thead>
+                        <tr>
+                            <th>Time</th>
+                            <th>Level</th>
+                            <th>Object</th>
+                            <th>Message</th>
+                        </tr>
+                    </thead>
+                    {% for method, data in report.result.data.items %}
+                        <tr>
+                            <th colspan="4"><a name="{{ method }}"></a>{{ method }}</th>
+                        </tr>
+                        {% for time, level, obj, url, message in data.log %}
+                            <tr class="{% if level == 'failure' %}danger{% elif level %}{{ level }}{% endif %}">
+                                <td>{{ time }}</td>
+                                <td>
+                                    <label class="label label-{% if level == 'failure' %}danger{% else %}{{ level }}{% endif %}">{{ level|title }}</label>
+                                </td>
+                                <td>
+                                    {% if obj and url %}
+                                        <a href="{{ url }}">{{ obj }}</a>
+                                    {% elif obj %}
+                                        {{ obj }}
+                                    {% endif %}
+                                </td>
+                                <td>{{ message }}</td>
+                            </tr>
+                        {% endfor %}
+                    {% endfor %}
+                </table>
+            {% else %}
+                <div class="well">No results are available for this report. Please run the report first.</div>
+            {% endif %}
+        </div>
+        <div class="col-md-3">
+            {% if report.result %}
+                <div class="panel panel-default">
+                    <div class="panel-heading">
+                        <strong>Methods</strong>
+                    </div>
+                    <ul class="list-group">
+                        {% for method, data in report.result.data.items %}
+                            <li class="list-group-item">
+                                <a href="#{{ method }}">{{ method }}</a>
+                                <span class="badge">{{ data.log|length }}</span>
+                            </li>
+                        {% endfor %}
+                    </ul>
+                </div>
+            {% endif %}
+        </div>
     </div>
 {% endblock %}