Promise reporting portal using CFEngine Community
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


Build Status

Delta Reporting provides centralized CFEngine class and promise reporting via a modern and responsive web application.

Dashboard screenshot

More screenshots


This software is well teseted. See its automated testing over at Travis-CI.


  • Report on class membership history.
  • Report on low level promise compliance history.
  • Report missing hosts.
  • Trend graphs for promise outcomes and host counts.
  • Inventory reporting.
  • Centralize all your CFEngine servers to a single reporting database.
  • IPV6 ready.
  • Use you existing database infrastructure.
  • Sort and filter your report results.
  • Save your reports in multiple formats.
  • Command line report tool that outputs multiple formats.


Client and Server

  1. CFEngine 3.6.3+.
  2. EFL, the Evolve Thinking free promise library. It very important that you know how to use this.
  3. Perl 5.10+

Note about EFL

EFL contains logging action and classes attributes that log promise outcomes for Delta Reporting to gather and process. EFL's promise bundles use these automatically. To use your own promises you will need to use these EFL action and classes attributes. See EFL bundles efl_rkn, efl_delta_reporting, and the Delta Reporting architecture docs.


  1. Tested on Debian and RHEL 6. May work on others if requirements are met.
  2. Postgresql 8.3+
  3. Apache recommended for proxy front end.
  4. Perl Modules
  5. Mojolicious framework, included.
  6. Statistics::LineFit, included.
  7. Mojo::Pg, included.
  8. Local::lib, included.
  9. Try::Tiny, included.
  10. Log::Log4perl, included
  11. Log::Dispatch::Syslog, included
  12. Data::Dumper, for development only, not required for production.
  13. POSIX
  14. Getopt::Long
  15. Time::Local
  16. Test::More
  17. Test::Exception
  18. feature 'say', comes with perl 5.10+
  19. Net::DNS
  20. Regexp::Common
  21. Sys::Hostname::Long
  22. DBI
  23. DBD::Pg


Neil Watson is the creator and caretaker of Delta Reporting. They offer professional support services for Delta Reporting, CFEngine, and other IT services. ( ).

How it works

Using the provided the CFEngine policy in all CFEngine class and all promises using EFL are logged by cf-agent on the host and stored for pickup by the policy server. The policy server downloads the log from every client and inserts them into the database.


  1. Install prerequisites.

  2. Create database delta_reporting.

  3. Install contents of repo to /opt/delta_reporting/.

  4. Configure using DeltaR.conf. Be sure to configure your database properly for authentication and authorization. Two database users are required. The read/write user should own the database.

  5. If you configure the database delta_reporting_test, with the same users as above, you can use the built in test suite to test the installation: ./ test.

  6. Copy bin/delta_reporting script to /etc/init.d. This is your start script.

  7. Create a user 'deltar', home /opt/delta_reporting, shell /bin/false.

  8. Go to http://localhost:8080/initialize\_database.

  9. You can DR run as is, or proxy behind Apache:

    <VirtualHost *:80>
       ProxyPass / http://localhost:8080/
       ProxyPassReverse / http://localhost:8080/
       <LocationMatch /.*>
          AuthUserFile /etc/apache2/passwords.secret
          AuthType Basic
          AuthName 'Evolve Thinking Delta Reporting'
          Require valid-user
  10. Install into your CFEngine policy. Run bundles in the following order. Use of EFL's main methods bundle is encouraged. Don't forget the null parameters.

  11. deltarep_prelogging as early as possible on all hosts.

  12. deltarep_postlogging as late as possible on all hosts.

  13. deltarep_client_get after deltarep_postlogging on policy servers only.

  14. Define the namespace class delta_reporting for all hosts, as early as possible.

  15. Install bin/dhlogmaker and configure CFEngine to install it on all hosts. /opt/delta_reporting/bin/dhlogmaker suggested.

  16. Create server access promises that allow the policy server's agent to download from cf-serverd on all agents, including itself, the directory ${sys.workdir}/delta_reporting. Use of the EFL bundle efl_server is encouraged.

Multiple CFEngine servers?

If you have mutiple CFEngine servers, install Delta Reporting on each, but point each to a central database. Now every server loads its client data to the central database and each can report on the data collected from all servers.


Delta Reporting is a central server compliance log that uses CFEngine.

Copyright (C) 2016 Neil H. Watson

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see