IPA_CONV(8)                                                        IPA_CONV(8)



NAME
       ipa_conv -- IPA accounting/database module for converting statistics

DESCRIPTION
       ipa_conv  is  an IPA accounting/database module with the following fea-
       tures:

       -      The module is designed for converting statistics;

       -      Statistics is converted according to custom plans, several plans
              can be used at the same time;

       -      Each  plan can have converting rules for months, days, week days
              and time ranges;

       -      Statistics of one static rule  can  be  converted  and  sent  to
              another static rule.

       The name of the accounting system and the name of the database is conv.

DESIGN OVERVIEW
       ipa_conv consists of one accounting module and one database module, but
       these  two  modules are implemented in one object file.  This file must
       be loaded two times in the ipa.conf(5)  configuration  file,  one  time
       using  the ac_mod parameter and second time using the db_mod parameter.
       Actually only a single copy of an  object  file  is  brought  into  the
       address  space of ipa(8) and the module checks this at the time of ini-
       tialization.

       An arbitrary static rule can use this module as  a  database  (in  this
       case  this rule is called ``source rule'') and/or as an accounting sys-
       tem (in this case this rule  is  called  ``destination  rule'').   Each
       source  rule is the source of statistics for some one destination rule.
       Each source rule has a converting plan for  converting  statistics  for
       corresponding  destination rule.  One destination rule can receive con-
       verted statistics from several source rules.

       When the database part of the module gets  statistics  for  the  source
       rule  it  converts this statistics according to the converting plan and
       sends converted statistics to the destination  rule.   The  destination
       rule receives converted statistics from the accounting part of the mod-
       ule.  In other words, the module works like a pipe between  two  rules,
       it  converts statistics from one rule and sends converted statistics to
       another rule.

       A converting plan consists of time intervals with  information  how  to
       convert  original  statistics.   This information contains two numbers,
       the first number X is the amount of original statistics and the  second
       number  Y  is  the amount of corresponding converted statistics: full X
       units of the original statistics are converted to Y  units  (X > 0  and
       Y >= 0).   By  default  the module scales X and Y values to the minimum
       possible values, but this feature can be disabled.

       There are several formats of time intervals (given below).   The  data-
       base part of the module always chooses the most specific time interval.
       The most specific time interval is chosen when the database part of the
       module  gets  updated statistics for some source rule.  If the value of
       statistics was s1 at t1 time and the value of statistics is  s2  at  t2
       time  for  some source rule and there were not database updates between
       t1 and t2 of this rule, then the time interval is chosen  for  t2  time
       and  the  difference (s2 - s1) is converted and sent to the destination
       rule (this difference  can  be  negative).   Too  long  time  intervals
       between database updates can cause inaccurate converting of statistics.

       Usually a source rule should be written above the corresponding  desti-
       nation  rule  in the configuration file and it is better to tell ipa(8)
       to not change internally their order (use the keep_rules_order  parame-
       ter).  If a source rule is processed first and the corresponding desti-
       nation rule is processed second at the same time, then the  destination
       rule  will receive converted statistics from a source rule immediately.
       Otherwise it will receive converted  statistics  during  next  database
       update time.

       This module works with increasing statistics and decreasing statistics.
       But since a database module receives only non-negative statistics, then
       this  module  cannot handle correctly situation when statistics of some
       rule became negative (in this case the module's database part  receives
       zero  statistics  from  ipa(8)).   If  this statistics becomes positive
       again, then the module will work as expected.

CONFIGURATION FILE FORMAT
       One part of  the  configuration  for  the  module  is  integrated  into
       ipa.conf(5),  other  parts  of the configuration are kept in files with
       converting plans.  The configuration prefix of this module is ``conv''.

       The conv:scale parameter specifies whether the module should scale val-
       ues in all loaded converting plans:

           conv:scale = <boolean>;

       This parameter should not be placed in any section and should  be  used
       before  conv:load  parameters.   The default value of this parameter is
       ``yes'' and the module scales values in all plans.

       The conv:load parameter loads a file with converting plan and  gives  a
       local name to loaded plan:

           conv:load = <plan-name> "/path/file";

       This  parameter  should  not  be placed in any section and it should be
       used before conv:plan parameters.  The given file is loaded and  parsed
       when the module parses this parameter.

       The  conv:dest  parameter  specifies  the  destination  rule  name, the
       conv:plan parameter specifies the converting plan for this rule:

           conv:dest = <rule-name>;
           conv:plan = <plan-name>;

       These two parameters can be placed in the  rule  section.   The  module
       checks whether the given destination rule exists at the end of configu-
       ration file parsing.  If a destination rule is inactive, then  it  does
       not received converted statistics.

       The  conv:quiet  parameter  allows to make the module less or more ver-
       bose:

           conv:quiet = <value>;

       This parameter should not be placed in any section.  The default  value
       of  this parameter is 3.  If its value has 0x1 bit off, then the module
       sends a warning message when ipa(8) deinitializes some destination rule
       and  this  rule still have some converted statistics.  If its value has
       0x2 bit off, then the module sends a warning message when ipa(8) deini-
       tializes  some  source rule and this rule still have some not converted
       original statistics.

       The conv:debug parameter helps to debug the module:

           conv:debug = <level>;

       This parameter should not be placed in any section.   Only  two  values
       are  allowed  for  the debug level: 0 and 1.  The default value of this
       parameter is 0 and debugging is disabled.

CONVERTING PLAN FORMAT
       A file with converting plan consists of lines.  Each line  should  have
       not  more than 255 characters.  Each line can have a shell-like comment
       that starts with the '#' character.  Empty lines  or  lines  with  only
       comments are ignored.

       A  converting  plan for one time interval should be written in one line
       containing three fields.  The first field is a time interval, the  sec-
       ond  field  is the amount of original statistics and the third field is
       the amount of corresponding converted  statistics.   These  fields  are
       separated by space or tab characters.

       A  time  interval can be given in different formats, but time intervals
       of one format should not overlap.  Here is the list  of  time  interval
       formats  (time  intervals  types  are checked exactly in the same order
       when the most specific time interval is being searched):

       o      year.mon.day/h1:m1-h2:m2 specifies time interval for year, month
              and day.

       o      year.mon.day specifies year, month and day.

       o      mon.day/h1:m1-h2:m2 specifies time interval for month and day.

       o      mon.day specifies month and day.

       o      mon specifies a month.

       o      X/h1:m1-h2:m2  specifies  time  interval  for a week day.  Valid
              values for X are: `S'  Sunday,  `M'  Monday,  `T'  Tuesday,  `W'
              Wednesday, `H' Thursday, `F' Friday, `A' Saturday.

       o      X specifies a week day

       o      h1:m1-h2:m2 specifies time interval.

       o      `*' specifies the default settings and must exist in any plan.

       A  month can be given as the first three characters of English language
       month name.

       A day starts at 00:00 and ends at 24:00.

       Example:

       There is one rule r1 that gets statistics from some accounting  system.
       It  is necessary to get only 50% of that statistics at night from 00:00
       till 07:00 and statistics should not be changed at other time.

       Let's create a file with converting plan /etc/ipa/plan/night:

           # Interval      Original        Converted
           *               1               1               # 100%
           00:00-07:00     2               1               #  50% (night)

       Let's create ipa.conf, rule r2 will get converted statistics from  rule
       r1:

           /* ... */

           ac_mod "ipa_conv.so";
           db_mod "ipa_conv.so";

           conv:load = night "/etc/ipa/plan/night";

           rule r1 {
               /* ... */
               db_list = conv;
               conv:dest = r2;
               conv:plan = night;
           }

           rule r2 {
               /* ... */
               ac_list = conv;
           }

       Rule  r1  can  use  several  databases,  rule  r2 can use databases and
       another accounting systems.  The accounting system used by rule  r1  is
       not shown in this example.

AUTHOR
       Andrey Simonenko <simon@comsys.ntu-kpi.kiev.ua>

BUGS
       If you find any, please send email me.



                                 July 22, 2009                     IPA_CONV(8)