Add optional cleanup task for old bill_data

This commit is contained in:
Richard
2016-03-02 18:39:16 +00:00
committed by Richard Lawley
parent 19e9cda8d0
commit dc0f695796
3 changed files with 36 additions and 0 deletions

View File

@@ -115,6 +115,27 @@ if ($options['f'] === 'notifications') {
include_once 'includes/notifications.php';
}
if ($options['f'] === 'bill_data') {
if (is_numeric($config['billing_data_purge']) && $config['billing_data_purge'] > 0) {
# Deletes data older than XX months before the start of the last complete billing period
$months = $config['billing_data_purge'];
echo "Deleting billing data more than $months month before the last completed billing cycle\n";
$sql = "DELETE bill_data
FROM bill_data
INNER JOIN (SELECT bill_id,
SUBDATE(
SUBDATE(
ADDDATE(
subdate(curdate(), (day(curdate())-1)), # Start of this month
bill_day - 1), # Billing anniversary
INTERVAL IF(bill_day > DAY(curdate()), 1, 0) MONTH), # Deal with anniversary not yet happened this month
INTERVAL ? MONTH) AS threshold # Adjust based on config threshold
FROM bills) q
ON bill_data.bill_id = q.bill_id AND bill_data.timestamp < q.threshold;";
dbQuery($sql, array($months));
}
}
if ($options['f'] === 'purgeusers') {
$purge = 0;
if (is_numeric($config['radius']['users_purge']) && $config['auth_mechanism'] === 'radius') {

View File

@@ -74,6 +74,7 @@ else
php daily.php -f callback
php daily.php -f device_perf
php daily.php -f purgeusers
php daily.php -f bill_data
;;
submodules)
# Init+Update our submodules

View File

@@ -16,3 +16,17 @@ Edit `/etc/cron.d/librenms` and add the following:
```
Create billing graphs as required.
## Options
Billing data is stored in the MySQL database, and you may wish to purge the detailed
stats for old data (per-month totals will always be kept). To enable this, add the
following to `config.php`:
```php
$config['billing_data_purge'] = 12; // Number of months to retain
```
Data for the last complete billing cycle will always be retained - only data older than
this by the configured number of months will be removed. This task is performed in the
daily cleanup tasks.