########################################################
#
# Simple process example
#
# Define a class if a process has been running for more
# than one day
#
# For 3.6- run with cf-agent -KIf ./processes_define_class_based_on_process_runtime.cf -b main
# For 3.7+ run with cf-agent -KIf ./processes_define_class_based_on_process_runtime.cf
#   - main is the default bundle executed if no bundlesequence is defined in
#   3.7+
########################################################

bundle agent main

{
  processes:

      "init"
        process_count   => any_count("booted_over_1_day_ago"),
        process_select  => days_older_than(1),
	comment => "Define a class indicating we found an init process running
                    for more than 1 day.";

  reports:

    booted_over_1_day_ago::

      "This system was booted over 1 days ago since there is an init process
       that is older than 1 day.";

    !booted_over_1_day_ago::
      "This system has been rebooted recently as the init process has been
       running for less than a day";
}

########################################################

########################################################
# NOTE: These bundles were copied from the stdlib in
# order to make this a standalone policy that requires
# no external files.  Because the standard library is
# constantly evolving their definition may change
########################################################

body process_count any_count(cl)
# @brief Define class `cl` if one or more process is running
# @param cl Name of the class to be defined
{
      match_range => "0,0";
      out_of_range_define => { "$(cl)" };
}

########################################################

body process_select days_older_than(d)
# @brief Select all processes that are older than `d` days
# @param d Days that processes need to be old to be selected
{
      stime_range    => irange(ago(0,0,"$(d)",0,0,0),now);
      process_result => "!stime";
}

