* puppetboard/app.py: Implementing and utilizing the new PyPuppetDB QueryBuilder
This fixes https://github.com/voxpupuli/puppetboard/issues/239
Replacing all the directly declared query strings with various objects
from the pypuppetdb.QueryBuilder sub-module. Using this Object-Oriented
functionality it is programmatically safer to construct large, complex
queries.
* puppetboard/app.py: Simplifying the environment logic in `node()`
The query in this function will now always be an `AndOperator()` object.
If a specific environment is queried then that constraint is added.
The resulting query difference will be:
env == 'production'
`["and",["=", "environment", "production"],["=", "certname", "puppet01.hammertime.local"]]`
env == '*'
`["and",["=", "certname", "puppet01.hammertime.local"]]`
* puppetboard/app.py: Minor code simplification for more accurate results.
In index() adding the configured OVERVIEW_FILTER query after adding the previous
constraints to num_nodes_query
In inventory() wrapping fact_query in an AndOperator() regardless of environment.
This update makes it more common with other endpoints that only add environment
constraints if an environment is selected.
* requirements.txt: Bumping the pypuppetdb version requirement
* requirements.txt: Bumping pypuppetdb version to new requirement.
* puppetboard/app.py: Fixing module load error.
* puppetboard/app.py: Refactoring the report event counts.
Writing the report event counts code in the node(), reports() and
reports_node() functions to iterate through report.events() instead
of querying the event counts endpoint for each report.
This solution is heavier than the original because we have to query
for all full event objects for each report and iterate through them
to interpret their statuses. I originally wanted to replace the
report.events() function with an events variable for the Report object
but that turned out to be not technically possible presently because
the report extended events' timestamps for in a different format which
python can't interpret. Specifically the timezone values contain ':',
there is no Python 2.x documentation that states timezones containing
colons is supported.
This does, however, lighten our dependency on the event-counts endpoint
which is marked as experimental. Which means that it may change or be
removed in a future release.
This also resolves a silent bug which may or may not include environment
filters on the event-counts queries. report.events() searches the Events
endpoint based on the report hash which eliminates the possibility of
mistaken relationships.
* puppetboard/app.py: Replacing url_for_* functions with a single url_for_field()
The url_for_pagination and url_for_environments functions only worked
with a single, fixed request argument, 'page' and 'env' respectively.
The new url_for_field() excepts 2 arguments, field: the name of the
argument to update, and value: its intended value.
Should consider adding a url_for_fields() function that accepts a
dict argument and updates all the request arguments using a dict.update().
There is currently no requirement for it so it will remain in the backlog.
* puppetboard/templates/reports.html: Adding a dropdown menu to limit the report count
This fixes https://github.com/voxpupuli/puppetboard/issues/202
This new dropdown allows users to select their desired number of reports
on the reports() and reports_node() pages. The available options are
app.config['REPORTS_COUNT'], 25, 50, 100 or All. The default value
is determined by the REPORTS_COUNT configuration value.
Had to modify url_for_field() to merge the request args to the view args
in order to generate the links that include the limit query string.
This (re-)fixes https://github.com/voxpupuli/puppetboard/issues/220
Corner cases where new installations or empty environments will return
zero resources and zero nodes, this will result in a ZeroDivisionError.
Now if this happens setting the average-resources-per-node to zero.
This fixes https://github.com/voxpupuli/puppetboard/issues/234
The report_latest() function was effectively deprecated when PuppetDB
introduced the latest_report_hash field in the Nodes endpoint response
format in version 3.2. With the breaking changes to PuppetDB 4.0.0
support this function can be safely removed.
This fixes https://github.com/voxpupuli/puppetboard/issues/229
This menu provides a very user friendly interface for rendering the pagination
section, which is available in version 2.1.8. Updating the render_pagination
macro use the new HTML classes.
This fixes https://github.com/voxpupuli/puppetboard/issues/230
If there are any connection issues between PuppetBoard and the PuppetDB
instance there wasn't any obvious evidence in log files. This additional
logging added to utils.py logs errors whenever there is an HTTPError,
ConnectionError or EmptyResponseError in get_or_abort.
* puppetboard/app.py: Adding Radiator view
Part 2 of https://github.com/voxpupuli/puppetboard/issues/70
This is a refactoring of the changes in https://github.com/voxpupuli/puppetboard/pull/100.
Adds a simple Heads-Up Display of the last run statuses of managed nodes,
either environment filtered or not.
* puppetboard/app.py: Fixing environment filters and metric strings.
* The names of the population metrics have changes in PuppetDB 4.0, the initial
commit used the metric names from PuppetDB 2.x.
* The main nodes query did not include a query string to filter on environments.
'PROTOCOL_SSLv3'"
Upgrading the Requests package to 2.6.0
Running debian 8.2 (jessie) I experience the following:
```
Traceback (most recent call last):
File "dev.py", line 11, in <module>
from puppetboard.app import app
File "/srv/puppetboard/puppetboard/puppetboard/app.py", line 19, in <module>
from pypuppetdb import connect
File "/srv/puppetboard/virtenv-puppetboard/local/lib/python2.7/site-packages/pypuppetdb/__init__.py", line 61, in <module>
from pypuppetdb.api import BaseAPI
File "/srv/puppetboard/virtenv-puppetboard/local/lib/python2.7/site-packages/pypuppetdb/api/__init__.py", line 7, in <module>
import requests
File "/srv/puppetboard/virtenv-puppetboard/local/lib/python2.7/site-packages/requests/__init__.py", line 53, in <module>
from .packages.urllib3.contrib import pyopenssl
File "/srv/puppetboard/virtenv-puppetboard/local/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", line 62, in <module>
ssl.PROTOCOL_SSLv3: OpenSSL.SSL.SSLv3_METHOD,
AttributeError: 'module' object has no attribute 'PROTOCOL_SSLv3'
```
Bumped 'requests' version as suggested here: http://stackoverflow.com/questions/28987891/patch-pyopenssl-for-sslv3-issue
* Update to Semantic UI 2.1.6
Basically I tried to rebuild the old layout as closely as possible.
It is a bit more mobile friendly but still misses Semantic UIs collapsable menu:
https://github.com/Semantic-Org/Semantic-UI/issues/157
+ ditch old tablesorter for recommended one
+ use em instead of percentage for status labels in macros
Overview:
+ sort overview by report date per default
+ slightly different colors
Facts:
+ template based approach to even out the columns in facts view
+ don't show empty containers
+ needed an additional variable in context
* get rid of unnecessary semantic src files
* more cleanup
* clean jquery-tablesort directory as well
* drop unused theme files
* remove symlinks in static/{js,css}
* semantic_update
+ bump to semantic 2.1.8
+ minor adjustments
- default-sort class in tables
- table type in inventory
- fixed and wrapped table for reports
* updated screenshots
This fixes https://github.com/voxpupuli/puppetboard/issues/218
Adding environment filters to only report then number of managed nodes
and resources that are present in the current environment. Still using
the same metrics endpoint information for all environments.
I really did not want to resort to this but I could not find any answers
from previously asked questions on the subject. The template is properly
creating the csrf_token hidden field which is being submitted to the server,
but I could not figure out why it was not using it it.
This fixes https://github.com/voxpupuli/puppetboard/issues/198
This will not be permanent, will have to look into upgrading the flask-wtf
and WTForms packages to the latest versions.
Fixes https://github.com/voxpupuli/puppetboard/issues/209
The event_count queries for the reports in the reports() and reports_node()
functions were always filtering on environments, even if all environments, *,
were selected. This update removes the environment clause from the query
string if 'All Environments' are selected
Using new Node and Catalog fields available in pypuppetdb 0.2.1
With the latest_report_hash field available on the Node object the report_latest can be partially deprecated. Will hopefully be removed in the next major/minor release.
Showing the Code ID field in the catalogs page. This is currently
unused in PuppetDB as of 3.2.2 but may be useful when it will be used
If available, using the latest_report_hash field of the node object
in the index and nodes templates for the link to the latest report
available for the node.
Updating the report_latest function in app.py to query the nodes
endpoint and redirecting using the latest_report_hash field if available.
If not query the reports endpoint for the node's latest report.
Fixed https://github.com/puppet-community/puppetboard/issues/193
Fixed Semantic UI tables set a fixed position on the applied tables
that do not affect the alignment with narrow browser windows. Downside
of this approach is that users will have to scroll horizontally to view
the entire catalog comparison.
In the previous commit the environment loading was moving to each request
and that functionality change was not reflected in the error processor
functions (for 4xx and 5xx series errors)