summaryrefslogtreecommitdiff
path: root/python-puppetboard.spec
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-05-05 05:40:28 +0000
committerCoprDistGit <infra@openeuler.org>2023-05-05 05:40:28 +0000
commitcf5bf9e897af56dfdf4ccafa94db5c03cec87895 (patch)
tree50699100a4b4faedce942b8f90c29b72080968ef /python-puppetboard.spec
parent7d1ccfbc484a5a3ba87241f62765d431efa209f4 (diff)
automatic import of python-puppetboardopeneuler20.03
Diffstat (limited to 'python-puppetboard.spec')
-rw-r--r--python-puppetboard.spec581
1 files changed, 581 insertions, 0 deletions
diff --git a/python-puppetboard.spec b/python-puppetboard.spec
new file mode 100644
index 0000000..6694ecc
--- /dev/null
+++ b/python-puppetboard.spec
@@ -0,0 +1,581 @@
+%global _empty_manifest_terminate_build 0
+Name: python-puppetboard
+Version: 4.3.0
+Release: 1
+Summary: Web frontend for PuppetDB
+License: Apache License 2.0
+URL: https://github.com/voxpupuli/puppetboard
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/ba/37/d2e9982f5f62f6d3743dba153b4d35eeaf478e12d6345bf87b4681657062/puppetboard-4.3.0.tar.gz
+BuildArch: noarch
+
+Requires: python3-certifi
+Requires: python3-charset-normalizer
+Requires: python3-click
+Requires: python3-commonmark
+Requires: python3-Flask
+Requires: python3-Flask-APScheduler
+Requires: python3-Flask-Caching
+Requires: python3-Flask-WTF
+Requires: python3-idna
+Requires: python3-itsdangerous
+Requires: python3-Jinja2
+Requires: python3-MarkupSafe
+Requires: python3-packaging
+Requires: python3-pyparsing
+Requires: python3-pypuppetdb
+Requires: python3-requests
+Requires: python3-typing-extensions
+Requires: python3-urllib3
+Requires: python3-Werkzeug
+Requires: python3-WTForms
+Requires: python3-zipp
+Requires: python3-pep8
+Requires: python3-coverage
+Requires: python3-mock
+Requires: python3-pytest
+Requires: python3-pylint
+Requires: python3-pytest-pylint
+Requires: python3-pytest-cov
+Requires: python3-pytest-mock
+Requires: python3-pytest-mypy
+Requires: python3-pytest-randomly
+Requires: python3-cov-core
+Requires: python3-beautifulsoup4
+Requires: python3-bandit
+Requires: python3-mypy
+Requires: python3-types-requests
+Requires: python3-types-setuptools
+Requires: python3-types-toml
+
+%description
+```
+```
+PUPPETDB_CERT=LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQouLi4KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ==
+```
+For information about how to generate the correct keys please refer to the
+[pypuppetdb documentation](https://pypuppetdb.readthedocs.io/en/latest/connecting.html#ssl). Alternatively it is possible
+to explicitly specify the protocol to be used setting the `PUPPETDB_PROTO` variable.
+Other settings that might be interesting, in no particular order:
+- `FAVORITE_ENVS`: an ordered list of Puppet environment names that will be shown immediately after "All Environments"
+ and before other environments (which are sorted by name) in the dropdown for choosing the environment shown
+ in the top-right of the UI. Environments listed here that do not really exist in your deployment are silently ignored.
+- `SHOW_ERROR_AS`: `friendly` or `raw`. The former makes Puppet run errors in Report and Failures views shown
+ in a modified, (arguably) more user-friendly form. The latter shows them as they are.
+ Defaults to `friendly`.
+- `CODE_PREFIX_TO_REMOVE`: what code path that should be shortened in "Friendly errors" to "…" for readability.
+ A regexp. Defaults to `/etc/puppetlabs/code/environments(/.*?/modules)?`.
+- `SECRET_KEY`: Refer to [Flask documentation](https://flask.palletsprojects.com/en/2.0.x/quickstart/#sessions),
+ section "How to generate good secret keys" for more info. Defaults to a random 64-char string generated by `secrets.token_hex(32)`, prepended with a `default-` string. **Warning** Leaving SECRET_KEY set to a default value WILL cause issues when the app is restarted or has more than 1 replica (f.e. uWSGI workers, k8s replicas etc.) and some features (in particular: queries) are used. Please set SECRET_KEY to your own value, the same for all app replicas. This will be REQUIRED starting with Puppetboard 5.x which will NOT contain the default value anymore. Please see [#721](https://github.com/voxpupuli/puppetboard/issues/721) for more info.
+- `PUPPETDB_TIMEOUT`: Defaults to 20 seconds, but you might need to increase this value. It depends on how big the
+ results are when querying PuppetDB. This behaviour will change in a future release when pagination will be introduced.
+- `UNRESPONSIVE_HOURS`: The amount of hours since the last check-in after which a node is considered unresponsive.
+- `LOGLEVEL`: A string representing the loglevel. It defaults to `'info'` but can be changed to `'warning'` or
+ `'critical'` for less verbose logging or `'debug'` for more information.
+- `ENABLE_QUERY`: Defaults to `True` causing a Query tab to show up in the web interface allowing users to write
+ and execute arbitrary queries against a set of endpoints in PuppetDB. Change this to `False` to disable this.
+ See `ENABLED_QUERY_ENDPOINTS` to fine-tune which endpoints are allowed.
+- `ENABLED_QUERY_ENDPOINTS`: If `ENABLE_QUERY` is `True`, allow to fine tune the endpoints of PuppetDB APIs that
+ can be queried. It must be a list of strings of PuppetDB endpoints for which the query is enabled.
+ See the `QUERY_ENDPOINTS` constant in the `puppetboard.app` module for a list of the available endpoints.
+- `GRAPH_TYPE`: Specify the type of graph to display. Default is
+ pie, other good option is donut. Other choices can be found here:
+ \_C3JS\_documentation\`
+- `GRAPH_FACTS`: A list of fact names to tell PuppetBoard to generate a pie-chart on the fact page. With some fact
+ values being unique per node, like ipaddress, uuid, and serial number, as well as structured facts it was no longer
+ feasible to generate a graph for everything.
+- `INVENTORY_FACTS`: A list of tuples that serve as the column header and the fact name to search for to create
+ the inventory page. If a fact is not found for a node then `undef` is printed.
+- `INVENTORY_FACT_TEMPLATES`: A mapping between fact name and jinja template to customize display
+- `ENABLE_CATALOG`: If set to `True` allows the user to view a node's latest catalog. This includes all managed
+ resources, their file-system locations and their relationships, if available. Defaults to `False`.
+- `REFRESH_RATE`: Defaults to `30` the number of seconds to wait until the index page is automatically refreshed.
+- `DEFAULT_ENVIRONMENT`: Defaults to `'production'`, as the name suggests, load all information filtered by this
+ environment value.
+- `REPORTS_COUNT`: Defaults to `10` the limit of the number of reports to load on the node or any reports page.
+- `OFFLINE_MODE`: If set to `True` load static assets (jquery, semantic-ui, etc) from the local web server instead
+ of a CDN. Defaults to `False`.
+- `DAILY_REPORTS_CHART_ENABLED`: Enable the use of daily chart graphs when looking at dashboard and node view.
+- `DAILY_REPORTS_CHART_DAYS`: Number of days to show history for on the daily report graphs.
+- `DISPLAYED_METRICS`: Metrics to show when displaying node summary. Example: `'resources.total'`, `'events.noop'`.
+- `TABLE_COUNT_SELECTOR`: Configure the dropdown to limit number of hosts to show per page.
+- `LITTLE_TABLE_COUNT`: Default number of reports to show when when looking at a node.
+- `NORMAL_TABLE_COUNT`: Default number of nodes to show when displaying reports and catalog nodes.
+- `LOCALISE_TIMESTAMP`: If set to `True` then timestamps are shown using your browser's timezone. Otherwise UTC is used. Defaults to `True`.
+- `WITH_EVENT_NUMBERS`: If set to `True` then Overview and Nodes list shows exact number of changed resources
+ in the last report. Otherwise shows only 'some' string if there are resources with given status. Setting this
+ to `False` gives performance benefits, especially in big Puppet environments (more than few hundreds of nodes).
+ Defaults to `True`.
+- `ENABLE_CLASS`: If set to `True` allows the user to view the number of resource events (number of changed resources in the last report) grouped by class.
+ The resource events are grouped by their status ('failure', 'success', 'noop').
+- `CLASS_EVENTS_STATUS_COLUMNS`: A mapping between the status of the resource events and the name of the columns of the table to display.
+- `CACHE_TYPE`: Specifies which type of caching object to use when `SCHEDULER_ENABLED` is set to `True`.
+ The cache is used for the classes view (`ENABLE_CLASS` is set to `True`) which requires parsing the events of all the latest reports to group them by Puppet class.
+ If the last report is present in the cache, we do not parse the events, which avoids unnecessary processing.
+ If you configure more than one worker, you must use a shared backend (e.g. `MemcachedCache`) to allow the sharing of the cache between the processes.
+ Indeed, the `SimpleCache` type does not allow sharing the cache between processes, it uses the process memory to store the cache.
+ Defaults to `SimpleCache`.
+- `CACHE_DEFAULT_TIMEOUT`: Cache lifetime in second. Defaults to `3600`.
+- `SCHEDULER_ENABLED`: If set to `True` then a scheduler instance is created in order to execute scheduled jobs. Defaults to `False`.
+- `SCHEDULER_JOBS`: List of the scheduled jobs to trigger within a worker.
+ A job can for example be used to compute a result to be cached. This is the case for the classes view which uses a job to pre-compute at regular intervals the results to be displayed.
+ Each scheduled job must contain the following fields: `id`, `func`, `trigger`, `seconds`.
+- `SCHEDULER_LOCK_BIND_PORT`: Specifies an available port that allows a single worker to listen on it.
+ This allows to configure scheduled jobs in a single worker. Defaults to `49100`.
+## Getting Help<a id="getting-help"></a>
+For questions or bug reports you can file an [issue](https://github.com/voxpupuli/puppetboard/issues).
+## Contributing<a id="contributing"></a>
+### Development
+Puppetboard relies on the [pypuppetdb](https://pypi.org/project/pypuppetdb/) library to fetch data from PuppetDB
+and is built with the help of the [Flask](https://flask.palletsprojects.com) microframework.
+If you wish to hack on Puppetboard you should fork/clone the Github repository and then install the requirements through:
+```bash
+pip install --upgrade wheel setuptools
+python setup.py develop
+pip install --upgrade -r requirements-test.txt
+mypy --install-types --non-interactive puppetboard/ test/
+```
+You're advised to do this inside a virtualenv specifically created to work on Puppetboard as to not pollute your global Python installation.
+You can run the tests with:
+```bash
+pytest --cov=. --cov-report=xml --strict-markers --mypy puppetboard test
+pylint --errors-only puppetboard test
+```
+You can run the app it in development mode by simply executing:
+```bash
+flask run
+```
+You can specify listening host and port with environment variables or command line otions:
+```bash
+export FLASK_RUN_HOST=0.0.0.0
+export FLASK_RUN_PORT=8000
+flask run
+```
+or
+```bash
+flask run --host '0.0.0.0' --port '8000'
+```
+Use `PUPPETBOARD_SETTINGS` to change the different settings or patch `default_settings.py` directly.
+Take care not to include your local changes on that file when submitting patches for Puppetboard.
+Place a `settings.py` file inside the base directory of the git repository that will be used, if the environment
+variable is not set.
+We welcome contributions to this project. However, there are a few ground rules contributors should be aware of.
+### License
+This project is licensed under the Apache v2.0 License. As such, your contributions, once accepted, are automatically
+covered by this license.
+### Commit messages
+Write decent commit messages. Don't use swear words and refrain from uninformative commit messages as 'fixed typo'.
+The preferred format of a commit message:
+ docs/quickstart: Fixed a typo in the Nodes section.
+ If needed, elaborate further on this commit. Feel free to write a
+ complete blog post here if that helps us understand what this is
+ all about.
+ Fixes #4 and resolves #2.
+If you'd like a more elaborate guide on how to write and format your commit messages have a look at [this post
+by Tim Pope](https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html).
+## More Screenshots<a id="more-screenshots"></a>
+* Overview / Index / Homepage
+![Overview / Index / Homepage](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/overview.png)
+* Nodes view, all active nodes
+![Nodes view, all active nodes](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/nodes.png)
+* Single node page / overview
+![Single node page / overview](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/node.png)
+* Report view
+![Report view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/report.png)
+* Facts view
+![Facts view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/facts.png)
+* Single fact, with graphs
+![Single fact, with graphs](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/fact.png)
+* All nodes that have this fact with that value
+![All nodes that have this fact with that value](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/fact_value.png)
+* Query view - results as table
+![Query view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/query_result_table.png)
+* Query view - results as JSON
+![Query view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/query_result_json.png)
+* Metrics view
+![Metrics view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/metrics.png)
+* Single metric
+![Single metric](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/metric.png)
+* Inventory view
+![Inventory view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/inventory.png)
+* Classes view, group the resource events of the last reports by Puppet class
+![Classes view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/classes.png)
+* Class view, list the nodes with almost one resource event for a given class
+![Class view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/class.png)
+# Legal<a id="legal"></a>
+The app code is licensed under the [Apache License, Version 2.0](./LICENSE).
+The favicon has been created based on the icon created by [Jonathan Coutiño](https://thenounproject.com/ralts01/)
+under the [Attribution 3.0 Unported (CC BY 3.0) license](https://creativecommons.org/licenses/by/3.0/),
+downloaded from the [Noun Project](https://thenounproject.com).
+
+%package -n python3-puppetboard
+Summary: Web frontend for PuppetDB
+Provides: python-puppetboard
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-puppetboard
+```
+```
+PUPPETDB_CERT=LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQouLi4KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ==
+```
+For information about how to generate the correct keys please refer to the
+[pypuppetdb documentation](https://pypuppetdb.readthedocs.io/en/latest/connecting.html#ssl). Alternatively it is possible
+to explicitly specify the protocol to be used setting the `PUPPETDB_PROTO` variable.
+Other settings that might be interesting, in no particular order:
+- `FAVORITE_ENVS`: an ordered list of Puppet environment names that will be shown immediately after "All Environments"
+ and before other environments (which are sorted by name) in the dropdown for choosing the environment shown
+ in the top-right of the UI. Environments listed here that do not really exist in your deployment are silently ignored.
+- `SHOW_ERROR_AS`: `friendly` or `raw`. The former makes Puppet run errors in Report and Failures views shown
+ in a modified, (arguably) more user-friendly form. The latter shows them as they are.
+ Defaults to `friendly`.
+- `CODE_PREFIX_TO_REMOVE`: what code path that should be shortened in "Friendly errors" to "…" for readability.
+ A regexp. Defaults to `/etc/puppetlabs/code/environments(/.*?/modules)?`.
+- `SECRET_KEY`: Refer to [Flask documentation](https://flask.palletsprojects.com/en/2.0.x/quickstart/#sessions),
+ section "How to generate good secret keys" for more info. Defaults to a random 64-char string generated by `secrets.token_hex(32)`, prepended with a `default-` string. **Warning** Leaving SECRET_KEY set to a default value WILL cause issues when the app is restarted or has more than 1 replica (f.e. uWSGI workers, k8s replicas etc.) and some features (in particular: queries) are used. Please set SECRET_KEY to your own value, the same for all app replicas. This will be REQUIRED starting with Puppetboard 5.x which will NOT contain the default value anymore. Please see [#721](https://github.com/voxpupuli/puppetboard/issues/721) for more info.
+- `PUPPETDB_TIMEOUT`: Defaults to 20 seconds, but you might need to increase this value. It depends on how big the
+ results are when querying PuppetDB. This behaviour will change in a future release when pagination will be introduced.
+- `UNRESPONSIVE_HOURS`: The amount of hours since the last check-in after which a node is considered unresponsive.
+- `LOGLEVEL`: A string representing the loglevel. It defaults to `'info'` but can be changed to `'warning'` or
+ `'critical'` for less verbose logging or `'debug'` for more information.
+- `ENABLE_QUERY`: Defaults to `True` causing a Query tab to show up in the web interface allowing users to write
+ and execute arbitrary queries against a set of endpoints in PuppetDB. Change this to `False` to disable this.
+ See `ENABLED_QUERY_ENDPOINTS` to fine-tune which endpoints are allowed.
+- `ENABLED_QUERY_ENDPOINTS`: If `ENABLE_QUERY` is `True`, allow to fine tune the endpoints of PuppetDB APIs that
+ can be queried. It must be a list of strings of PuppetDB endpoints for which the query is enabled.
+ See the `QUERY_ENDPOINTS` constant in the `puppetboard.app` module for a list of the available endpoints.
+- `GRAPH_TYPE`: Specify the type of graph to display. Default is
+ pie, other good option is donut. Other choices can be found here:
+ \_C3JS\_documentation\`
+- `GRAPH_FACTS`: A list of fact names to tell PuppetBoard to generate a pie-chart on the fact page. With some fact
+ values being unique per node, like ipaddress, uuid, and serial number, as well as structured facts it was no longer
+ feasible to generate a graph for everything.
+- `INVENTORY_FACTS`: A list of tuples that serve as the column header and the fact name to search for to create
+ the inventory page. If a fact is not found for a node then `undef` is printed.
+- `INVENTORY_FACT_TEMPLATES`: A mapping between fact name and jinja template to customize display
+- `ENABLE_CATALOG`: If set to `True` allows the user to view a node's latest catalog. This includes all managed
+ resources, their file-system locations and their relationships, if available. Defaults to `False`.
+- `REFRESH_RATE`: Defaults to `30` the number of seconds to wait until the index page is automatically refreshed.
+- `DEFAULT_ENVIRONMENT`: Defaults to `'production'`, as the name suggests, load all information filtered by this
+ environment value.
+- `REPORTS_COUNT`: Defaults to `10` the limit of the number of reports to load on the node or any reports page.
+- `OFFLINE_MODE`: If set to `True` load static assets (jquery, semantic-ui, etc) from the local web server instead
+ of a CDN. Defaults to `False`.
+- `DAILY_REPORTS_CHART_ENABLED`: Enable the use of daily chart graphs when looking at dashboard and node view.
+- `DAILY_REPORTS_CHART_DAYS`: Number of days to show history for on the daily report graphs.
+- `DISPLAYED_METRICS`: Metrics to show when displaying node summary. Example: `'resources.total'`, `'events.noop'`.
+- `TABLE_COUNT_SELECTOR`: Configure the dropdown to limit number of hosts to show per page.
+- `LITTLE_TABLE_COUNT`: Default number of reports to show when when looking at a node.
+- `NORMAL_TABLE_COUNT`: Default number of nodes to show when displaying reports and catalog nodes.
+- `LOCALISE_TIMESTAMP`: If set to `True` then timestamps are shown using your browser's timezone. Otherwise UTC is used. Defaults to `True`.
+- `WITH_EVENT_NUMBERS`: If set to `True` then Overview and Nodes list shows exact number of changed resources
+ in the last report. Otherwise shows only 'some' string if there are resources with given status. Setting this
+ to `False` gives performance benefits, especially in big Puppet environments (more than few hundreds of nodes).
+ Defaults to `True`.
+- `ENABLE_CLASS`: If set to `True` allows the user to view the number of resource events (number of changed resources in the last report) grouped by class.
+ The resource events are grouped by their status ('failure', 'success', 'noop').
+- `CLASS_EVENTS_STATUS_COLUMNS`: A mapping between the status of the resource events and the name of the columns of the table to display.
+- `CACHE_TYPE`: Specifies which type of caching object to use when `SCHEDULER_ENABLED` is set to `True`.
+ The cache is used for the classes view (`ENABLE_CLASS` is set to `True`) which requires parsing the events of all the latest reports to group them by Puppet class.
+ If the last report is present in the cache, we do not parse the events, which avoids unnecessary processing.
+ If you configure more than one worker, you must use a shared backend (e.g. `MemcachedCache`) to allow the sharing of the cache between the processes.
+ Indeed, the `SimpleCache` type does not allow sharing the cache between processes, it uses the process memory to store the cache.
+ Defaults to `SimpleCache`.
+- `CACHE_DEFAULT_TIMEOUT`: Cache lifetime in second. Defaults to `3600`.
+- `SCHEDULER_ENABLED`: If set to `True` then a scheduler instance is created in order to execute scheduled jobs. Defaults to `False`.
+- `SCHEDULER_JOBS`: List of the scheduled jobs to trigger within a worker.
+ A job can for example be used to compute a result to be cached. This is the case for the classes view which uses a job to pre-compute at regular intervals the results to be displayed.
+ Each scheduled job must contain the following fields: `id`, `func`, `trigger`, `seconds`.
+- `SCHEDULER_LOCK_BIND_PORT`: Specifies an available port that allows a single worker to listen on it.
+ This allows to configure scheduled jobs in a single worker. Defaults to `49100`.
+## Getting Help<a id="getting-help"></a>
+For questions or bug reports you can file an [issue](https://github.com/voxpupuli/puppetboard/issues).
+## Contributing<a id="contributing"></a>
+### Development
+Puppetboard relies on the [pypuppetdb](https://pypi.org/project/pypuppetdb/) library to fetch data from PuppetDB
+and is built with the help of the [Flask](https://flask.palletsprojects.com) microframework.
+If you wish to hack on Puppetboard you should fork/clone the Github repository and then install the requirements through:
+```bash
+pip install --upgrade wheel setuptools
+python setup.py develop
+pip install --upgrade -r requirements-test.txt
+mypy --install-types --non-interactive puppetboard/ test/
+```
+You're advised to do this inside a virtualenv specifically created to work on Puppetboard as to not pollute your global Python installation.
+You can run the tests with:
+```bash
+pytest --cov=. --cov-report=xml --strict-markers --mypy puppetboard test
+pylint --errors-only puppetboard test
+```
+You can run the app it in development mode by simply executing:
+```bash
+flask run
+```
+You can specify listening host and port with environment variables or command line otions:
+```bash
+export FLASK_RUN_HOST=0.0.0.0
+export FLASK_RUN_PORT=8000
+flask run
+```
+or
+```bash
+flask run --host '0.0.0.0' --port '8000'
+```
+Use `PUPPETBOARD_SETTINGS` to change the different settings or patch `default_settings.py` directly.
+Take care not to include your local changes on that file when submitting patches for Puppetboard.
+Place a `settings.py` file inside the base directory of the git repository that will be used, if the environment
+variable is not set.
+We welcome contributions to this project. However, there are a few ground rules contributors should be aware of.
+### License
+This project is licensed under the Apache v2.0 License. As such, your contributions, once accepted, are automatically
+covered by this license.
+### Commit messages
+Write decent commit messages. Don't use swear words and refrain from uninformative commit messages as 'fixed typo'.
+The preferred format of a commit message:
+ docs/quickstart: Fixed a typo in the Nodes section.
+ If needed, elaborate further on this commit. Feel free to write a
+ complete blog post here if that helps us understand what this is
+ all about.
+ Fixes #4 and resolves #2.
+If you'd like a more elaborate guide on how to write and format your commit messages have a look at [this post
+by Tim Pope](https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html).
+## More Screenshots<a id="more-screenshots"></a>
+* Overview / Index / Homepage
+![Overview / Index / Homepage](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/overview.png)
+* Nodes view, all active nodes
+![Nodes view, all active nodes](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/nodes.png)
+* Single node page / overview
+![Single node page / overview](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/node.png)
+* Report view
+![Report view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/report.png)
+* Facts view
+![Facts view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/facts.png)
+* Single fact, with graphs
+![Single fact, with graphs](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/fact.png)
+* All nodes that have this fact with that value
+![All nodes that have this fact with that value](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/fact_value.png)
+* Query view - results as table
+![Query view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/query_result_table.png)
+* Query view - results as JSON
+![Query view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/query_result_json.png)
+* Metrics view
+![Metrics view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/metrics.png)
+* Single metric
+![Single metric](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/metric.png)
+* Inventory view
+![Inventory view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/inventory.png)
+* Classes view, group the resource events of the last reports by Puppet class
+![Classes view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/classes.png)
+* Class view, list the nodes with almost one resource event for a given class
+![Class view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/class.png)
+# Legal<a id="legal"></a>
+The app code is licensed under the [Apache License, Version 2.0](./LICENSE).
+The favicon has been created based on the icon created by [Jonathan Coutiño](https://thenounproject.com/ralts01/)
+under the [Attribution 3.0 Unported (CC BY 3.0) license](https://creativecommons.org/licenses/by/3.0/),
+downloaded from the [Noun Project](https://thenounproject.com).
+
+%package help
+Summary: Development documents and examples for puppetboard
+Provides: python3-puppetboard-doc
+%description help
+```
+```
+PUPPETDB_CERT=LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQouLi4KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ==
+```
+For information about how to generate the correct keys please refer to the
+[pypuppetdb documentation](https://pypuppetdb.readthedocs.io/en/latest/connecting.html#ssl). Alternatively it is possible
+to explicitly specify the protocol to be used setting the `PUPPETDB_PROTO` variable.
+Other settings that might be interesting, in no particular order:
+- `FAVORITE_ENVS`: an ordered list of Puppet environment names that will be shown immediately after "All Environments"
+ and before other environments (which are sorted by name) in the dropdown for choosing the environment shown
+ in the top-right of the UI. Environments listed here that do not really exist in your deployment are silently ignored.
+- `SHOW_ERROR_AS`: `friendly` or `raw`. The former makes Puppet run errors in Report and Failures views shown
+ in a modified, (arguably) more user-friendly form. The latter shows them as they are.
+ Defaults to `friendly`.
+- `CODE_PREFIX_TO_REMOVE`: what code path that should be shortened in "Friendly errors" to "…" for readability.
+ A regexp. Defaults to `/etc/puppetlabs/code/environments(/.*?/modules)?`.
+- `SECRET_KEY`: Refer to [Flask documentation](https://flask.palletsprojects.com/en/2.0.x/quickstart/#sessions),
+ section "How to generate good secret keys" for more info. Defaults to a random 64-char string generated by `secrets.token_hex(32)`, prepended with a `default-` string. **Warning** Leaving SECRET_KEY set to a default value WILL cause issues when the app is restarted or has more than 1 replica (f.e. uWSGI workers, k8s replicas etc.) and some features (in particular: queries) are used. Please set SECRET_KEY to your own value, the same for all app replicas. This will be REQUIRED starting with Puppetboard 5.x which will NOT contain the default value anymore. Please see [#721](https://github.com/voxpupuli/puppetboard/issues/721) for more info.
+- `PUPPETDB_TIMEOUT`: Defaults to 20 seconds, but you might need to increase this value. It depends on how big the
+ results are when querying PuppetDB. This behaviour will change in a future release when pagination will be introduced.
+- `UNRESPONSIVE_HOURS`: The amount of hours since the last check-in after which a node is considered unresponsive.
+- `LOGLEVEL`: A string representing the loglevel. It defaults to `'info'` but can be changed to `'warning'` or
+ `'critical'` for less verbose logging or `'debug'` for more information.
+- `ENABLE_QUERY`: Defaults to `True` causing a Query tab to show up in the web interface allowing users to write
+ and execute arbitrary queries against a set of endpoints in PuppetDB. Change this to `False` to disable this.
+ See `ENABLED_QUERY_ENDPOINTS` to fine-tune which endpoints are allowed.
+- `ENABLED_QUERY_ENDPOINTS`: If `ENABLE_QUERY` is `True`, allow to fine tune the endpoints of PuppetDB APIs that
+ can be queried. It must be a list of strings of PuppetDB endpoints for which the query is enabled.
+ See the `QUERY_ENDPOINTS` constant in the `puppetboard.app` module for a list of the available endpoints.
+- `GRAPH_TYPE`: Specify the type of graph to display. Default is
+ pie, other good option is donut. Other choices can be found here:
+ \_C3JS\_documentation\`
+- `GRAPH_FACTS`: A list of fact names to tell PuppetBoard to generate a pie-chart on the fact page. With some fact
+ values being unique per node, like ipaddress, uuid, and serial number, as well as structured facts it was no longer
+ feasible to generate a graph for everything.
+- `INVENTORY_FACTS`: A list of tuples that serve as the column header and the fact name to search for to create
+ the inventory page. If a fact is not found for a node then `undef` is printed.
+- `INVENTORY_FACT_TEMPLATES`: A mapping between fact name and jinja template to customize display
+- `ENABLE_CATALOG`: If set to `True` allows the user to view a node's latest catalog. This includes all managed
+ resources, their file-system locations and their relationships, if available. Defaults to `False`.
+- `REFRESH_RATE`: Defaults to `30` the number of seconds to wait until the index page is automatically refreshed.
+- `DEFAULT_ENVIRONMENT`: Defaults to `'production'`, as the name suggests, load all information filtered by this
+ environment value.
+- `REPORTS_COUNT`: Defaults to `10` the limit of the number of reports to load on the node or any reports page.
+- `OFFLINE_MODE`: If set to `True` load static assets (jquery, semantic-ui, etc) from the local web server instead
+ of a CDN. Defaults to `False`.
+- `DAILY_REPORTS_CHART_ENABLED`: Enable the use of daily chart graphs when looking at dashboard and node view.
+- `DAILY_REPORTS_CHART_DAYS`: Number of days to show history for on the daily report graphs.
+- `DISPLAYED_METRICS`: Metrics to show when displaying node summary. Example: `'resources.total'`, `'events.noop'`.
+- `TABLE_COUNT_SELECTOR`: Configure the dropdown to limit number of hosts to show per page.
+- `LITTLE_TABLE_COUNT`: Default number of reports to show when when looking at a node.
+- `NORMAL_TABLE_COUNT`: Default number of nodes to show when displaying reports and catalog nodes.
+- `LOCALISE_TIMESTAMP`: If set to `True` then timestamps are shown using your browser's timezone. Otherwise UTC is used. Defaults to `True`.
+- `WITH_EVENT_NUMBERS`: If set to `True` then Overview and Nodes list shows exact number of changed resources
+ in the last report. Otherwise shows only 'some' string if there are resources with given status. Setting this
+ to `False` gives performance benefits, especially in big Puppet environments (more than few hundreds of nodes).
+ Defaults to `True`.
+- `ENABLE_CLASS`: If set to `True` allows the user to view the number of resource events (number of changed resources in the last report) grouped by class.
+ The resource events are grouped by their status ('failure', 'success', 'noop').
+- `CLASS_EVENTS_STATUS_COLUMNS`: A mapping between the status of the resource events and the name of the columns of the table to display.
+- `CACHE_TYPE`: Specifies which type of caching object to use when `SCHEDULER_ENABLED` is set to `True`.
+ The cache is used for the classes view (`ENABLE_CLASS` is set to `True`) which requires parsing the events of all the latest reports to group them by Puppet class.
+ If the last report is present in the cache, we do not parse the events, which avoids unnecessary processing.
+ If you configure more than one worker, you must use a shared backend (e.g. `MemcachedCache`) to allow the sharing of the cache between the processes.
+ Indeed, the `SimpleCache` type does not allow sharing the cache between processes, it uses the process memory to store the cache.
+ Defaults to `SimpleCache`.
+- `CACHE_DEFAULT_TIMEOUT`: Cache lifetime in second. Defaults to `3600`.
+- `SCHEDULER_ENABLED`: If set to `True` then a scheduler instance is created in order to execute scheduled jobs. Defaults to `False`.
+- `SCHEDULER_JOBS`: List of the scheduled jobs to trigger within a worker.
+ A job can for example be used to compute a result to be cached. This is the case for the classes view which uses a job to pre-compute at regular intervals the results to be displayed.
+ Each scheduled job must contain the following fields: `id`, `func`, `trigger`, `seconds`.
+- `SCHEDULER_LOCK_BIND_PORT`: Specifies an available port that allows a single worker to listen on it.
+ This allows to configure scheduled jobs in a single worker. Defaults to `49100`.
+## Getting Help<a id="getting-help"></a>
+For questions or bug reports you can file an [issue](https://github.com/voxpupuli/puppetboard/issues).
+## Contributing<a id="contributing"></a>
+### Development
+Puppetboard relies on the [pypuppetdb](https://pypi.org/project/pypuppetdb/) library to fetch data from PuppetDB
+and is built with the help of the [Flask](https://flask.palletsprojects.com) microframework.
+If you wish to hack on Puppetboard you should fork/clone the Github repository and then install the requirements through:
+```bash
+pip install --upgrade wheel setuptools
+python setup.py develop
+pip install --upgrade -r requirements-test.txt
+mypy --install-types --non-interactive puppetboard/ test/
+```
+You're advised to do this inside a virtualenv specifically created to work on Puppetboard as to not pollute your global Python installation.
+You can run the tests with:
+```bash
+pytest --cov=. --cov-report=xml --strict-markers --mypy puppetboard test
+pylint --errors-only puppetboard test
+```
+You can run the app it in development mode by simply executing:
+```bash
+flask run
+```
+You can specify listening host and port with environment variables or command line otions:
+```bash
+export FLASK_RUN_HOST=0.0.0.0
+export FLASK_RUN_PORT=8000
+flask run
+```
+or
+```bash
+flask run --host '0.0.0.0' --port '8000'
+```
+Use `PUPPETBOARD_SETTINGS` to change the different settings or patch `default_settings.py` directly.
+Take care not to include your local changes on that file when submitting patches for Puppetboard.
+Place a `settings.py` file inside the base directory of the git repository that will be used, if the environment
+variable is not set.
+We welcome contributions to this project. However, there are a few ground rules contributors should be aware of.
+### License
+This project is licensed under the Apache v2.0 License. As such, your contributions, once accepted, are automatically
+covered by this license.
+### Commit messages
+Write decent commit messages. Don't use swear words and refrain from uninformative commit messages as 'fixed typo'.
+The preferred format of a commit message:
+ docs/quickstart: Fixed a typo in the Nodes section.
+ If needed, elaborate further on this commit. Feel free to write a
+ complete blog post here if that helps us understand what this is
+ all about.
+ Fixes #4 and resolves #2.
+If you'd like a more elaborate guide on how to write and format your commit messages have a look at [this post
+by Tim Pope](https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html).
+## More Screenshots<a id="more-screenshots"></a>
+* Overview / Index / Homepage
+![Overview / Index / Homepage](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/overview.png)
+* Nodes view, all active nodes
+![Nodes view, all active nodes](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/nodes.png)
+* Single node page / overview
+![Single node page / overview](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/node.png)
+* Report view
+![Report view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/report.png)
+* Facts view
+![Facts view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/facts.png)
+* Single fact, with graphs
+![Single fact, with graphs](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/fact.png)
+* All nodes that have this fact with that value
+![All nodes that have this fact with that value](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/fact_value.png)
+* Query view - results as table
+![Query view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/query_result_table.png)
+* Query view - results as JSON
+![Query view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/query_result_json.png)
+* Metrics view
+![Metrics view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/metrics.png)
+* Single metric
+![Single metric](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/metric.png)
+* Inventory view
+![Inventory view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/inventory.png)
+* Classes view, group the resource events of the last reports by Puppet class
+![Classes view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/classes.png)
+* Class view, list the nodes with almost one resource event for a given class
+![Class view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/class.png)
+# Legal<a id="legal"></a>
+The app code is licensed under the [Apache License, Version 2.0](./LICENSE).
+The favicon has been created based on the icon created by [Jonathan Coutiño](https://thenounproject.com/ralts01/)
+under the [Attribution 3.0 Unported (CC BY 3.0) license](https://creativecommons.org/licenses/by/3.0/),
+downloaded from the [Noun Project](https://thenounproject.com).
+
+%prep
+%autosetup -n puppetboard-4.3.0
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-puppetboard -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Fri May 05 2023 Python_Bot <Python_Bot@openeuler.org> - 4.3.0-1
+- Package Spec generated