.. _others-index:
==========
Other docs
==========
.. _contributing:
Contributing
============
We welcome contributions to Munin. Here are the main ways to help:
Plugin Gallery
--------------
We need help completing the `Munin Gallery `_.
A lot of plugins don't have their documentation in POD style format.
And the Gallery needs more screenshots!
See the `hints for plugin contributions `_
for more details.
Code Contributions
------------------
Munin is hosted on `GitHub `_.
To contribute code:
1. Fork the repository.
2. Create a feature branch.
3. Make your changes with tests.
4. Submit a pull request.
See :ref:`develop-environment` for instructions on setting up a
development environment.
Documentation
-------------
The Munin Guide is written in reStructuredText and built with Sphinx.
You can edit pages directly on GitHub and submit a pull request.
See :ref:`documentation-index` for details.
.. _dev-talk:
Project Resources
=================
- `Munin Wiki `_ — community documentation
- `Munin Contrib `_ — contributed plugins
- `Munin Gallery `_ — plugin catalog with screenshots
- `Mailing lists `_ — user and developer lists
.. _dirtyconfig-overview:
Dirty Config
============
The "dirty config" optimization allows plugins to output both configuration
and data values in a single ``config`` call, eliminating the need for a
separate ``fetch``. This can halve the execution time for expensive plugins.
How it works
------------
Normally, ``munin-update`` calls ``config `` and then ``fetch ``
for each plugin on every run. Plugins that do expensive work to gather their
numbers end up doing that work twice.
With dirty config, a plugin outputs its values as part of the ``config`` response.
``munin-update`` detects this (the config output contains ``.value`` lines) and
skips the separate ``fetch`` call.
Implementation
--------------
The master advertises the capability with ``cap dirtyconfig``. If the node
supports it, it sets the environment variable ``MUNIN_CAP_DIRTYCONFIG`` before
running plugins.
A plugin that supports dirty config checks this variable and, if set, includes
its values in the ``config`` output. Plugins that don't support dirty config
continue to work normally — old masters simply ignore the extra output during
``config`` and call ``fetch`` as usual.
See :ref:`plugin-protocol-dirtyconfig` for the protocol details.