# == Class: heat::cron::purge_deleted
#
# Installs a cron job to purge db entries marked as deleted and older than $age.
# Default will be 1 day.
#
# === Parameters
#
#  [*ensure*]
#    (optional) Defaults to present.
#    Valid values are present, absent.
#
#  [*minute*]
#    (optional) Defaults to '1'.
#
#  [*hour*]
#    (optional) Defaults to '0'.
#
#  [*monthday*]
#    (optional) Defaults to '*'.
#
#  [*month*]
#    (optional) Defaults to '*'.
#
#  [*weekday*]
#    (optional) Defaults to '*'.
#
#  [*maxdelay*]
#    (optional) Seconds. Defaults to 0. Should be a positive integer.
#    Induces a random delay before running the cronjob to avoid running all
#    cron jobs at the same time on all hosts this job is configured.
#
#  [*user*]
#    (optional) User with access to heat files.
#    Defaults to 'heat'.
#
#  [*age*]
#    (optional) Age value for $age_type.
#    Defaults to '1'.
#
#  [*age_type*]
#    (optional) Age type.
#    Can be days, hours, minutes, seconds
#    Defaults to 'days'.
#
#  [*destination*]
#    (optional) Path to file to which rows should be archived
#    Defaults to '/var/log/heat/heat-purge_deleted.log'.
#
class heat::cron::purge_deleted (
  $ensure      = present,
  $minute      = 1,
  $hour        = 0,
  $monthday    = '*',
  $month       = '*',
  $weekday     = '*',
  $maxdelay    = 0,
  $user        = 'heat',
  $age         = 1,
  $age_type    = 'days',
  $destination = '/var/log/heat/heat-purge_deleted.log'
) {

  if ! member(['days', 'hours', 'minutes', 'seconds'], $age_type) {
    fail('age_type possible values are only days, hours, minutes, or seconds.')
  }

  if $maxdelay == 0 {
    $sleep = ''
  } else {
    $sleep = "sleep `expr \${RANDOM} \\% ${maxdelay}`; "
  }

  cron { 'heat-manage purge_deleted':
    ensure      => $ensure,
    command     => "${sleep}heat-manage purge_deleted -g ${age_type} ${age} >>${destination} 2>&1",
    environment => 'PATH=/bin:/usr/bin:/usr/sbin SHELL=/bin/sh',
    user        => $user,
    minute      => $minute,
    hour        => $hour,
    monthday    => $monthday,
    month       => $month,
    weekday     => $weekday
  }

  Package<| tag == 'heat-package' |> -> Cron['heat-manage purge_deleted']
}
