home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / mail / pp / pp-6.0 / Lib / qmgr / order.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-12-18  |  4.0 KB  |  187 lines

  1. /* order.c: routines for use in ordering calculations */
  2.  
  3. # ifndef lint
  4. static char Rcsid[] = "@(#)$Header: /xtel/pp/pp-beta/Lib/qmgr/RCS/order.c,v 6.0 1991/12/18 20:23:58 jpo Rel $";
  5. # endif
  6.  
  7. /*
  8.  * $Header: /xtel/pp/pp-beta/Lib/qmgr/RCS/order.c,v 6.0 1991/12/18 20:23:58 jpo Rel $
  9.  *
  10.  * $Log: order.c,v $
  11.  * Revision 6.0  1991/12/18  20:23:58  jpo
  12.  * Release 6.0
  13.  *
  14.  */
  15.  
  16. #include "util.h"
  17. #include "qmgr-int.h"
  18.  
  19. /*   */
  20.  
  21. /* -1 == MAX */
  22.  
  23. double measure_Channel(chan, measure, currenttime)
  24. register ChannelInfo    *chan;
  25. register MeasureInfo    *measure;
  26. time_t            currenttime;
  27. {
  28.     double    average_db = 0.0;
  29.     int    noFactors = 0;
  30.  
  31.     if (NULL == measure) 
  32.         return 0;
  33.  
  34.     if (0.0 != measure->ub_number) {
  35.         if (chan->numberMessages + chan->numberReports >= measure->ub_number)
  36.             return -1;
  37.         average_db += (chan->numberMessages+chan->numberReports)*100/measure->ub_number;
  38.         noFactors++;
  39.     }
  40.  
  41.     if (0.0 != measure->ub_volume) {
  42.         if (chan->volumeMessages >= measure->ub_volume)
  43.             return -1;
  44.         average_db += (chan->volumeMessages*100)/measure->ub_volume;
  45.         noFactors++;
  46.     }
  47.  
  48.     if (0.0 != measure->ub_age) {
  49.         double    age;
  50.         if (chan->oldestMessage != 0
  51.             && (chan->numberMessages != 0
  52.             || chan->numberReports != 0))
  53.             age = (currenttime - chan->oldestMessage) / 60.0;
  54.         else
  55.             age = 0.0;
  56.         if (age >= measure -> ub_age)
  57.             return -1;
  58.         average_db += (age * 100)/measure->ub_age;
  59.         noFactors++;
  60.     }
  61.  
  62.     if (0.0 != measure->ub_last) {
  63.         double    last;
  64.         if (0 != chan->status->lastSuccess)
  65.             last = (currenttime - chan->status->lastSuccess)/60.0;
  66.         else
  67.             last = 0.0;
  68.         if (last >= measure->ub_last)
  69.             return -1;
  70.         if (last >= measure->ub_last/2) {
  71.             /* only kick in at halfway */
  72.             average_db += (last * 100)/ measure->ub_last;
  73.             noFactors++;
  74.         }
  75.     }
  76.  
  77.     if (1 < noFactors)
  78.         average_db = average_db / noFactors;
  79.  
  80.     return average_db;
  81. }
  82.  
  83. /*   */
  84.  
  85. /* -1 == MAX */
  86.  
  87. double measure_Mta(mta, measure, currenttime)
  88. register MtaInfo    *mta;
  89. register MeasureInfo    *measure;
  90. time_t            currenttime;
  91. {
  92.     double    average_db = 0.0;
  93.     int    noFactors = 0;
  94.  
  95.     if (NULL == measure) 
  96.         return 0;
  97.  
  98.     if (0.0 != measure->ub_number) {
  99.         if (mta->numberMessages + mta->numberReports >= measure->ub_number)
  100.             return -1;
  101.         average_db += (mta->numberMessages+mta->numberReports)*100/measure->ub_number;
  102.         noFactors++;
  103.     }
  104.  
  105.     if (0.0 != measure->ub_volume) {
  106.         if (mta->volumeMessages >= measure->ub_volume)
  107.             return -1;
  108.         average_db += (mta->volumeMessages*100)/measure->ub_volume;
  109.         noFactors++;
  110.     }
  111.  
  112.     if (0.0 != measure->ub_age) {
  113.         double    age;
  114.         if (mta->oldestMessage != 0
  115.             && (mta->numberMessages != 0
  116.             || mta->numberReports != 0))
  117.             age = (currenttime - mta->oldestMessage) / 60.0;
  118.         else
  119.             age = 0.0;
  120.         if (age >= measure -> ub_age)
  121.             return -1;
  122.         average_db += (age * 100)/measure->ub_age;
  123.         noFactors++;
  124.     }
  125.  
  126.     if (0.0 != measure->ub_last) {
  127.         double    last;
  128.         if (0 != mta->status->lastSuccess)
  129.             last = (currenttime - mta->status->lastSuccess)/60.0;
  130.         else
  131.             last = 0.0;
  132.         if (last >= measure->ub_last)
  133.             return -1;
  134.         if (last >= measure->ub_last/2) {
  135.             /* only kick in at halfway */
  136.             average_db += (last * 100)/ measure->ub_last;
  137.             noFactors++;
  138.         }
  139.     }
  140.  
  141.     if (1 < noFactors)
  142.         average_db = average_db / noFactors;
  143.  
  144.     return average_db;
  145. }
  146.  
  147. /*   */
  148.  
  149. /* -1 == MAX */
  150.  
  151. double measure_Msg(msg, measure, currenttime)
  152. register MsgInfo    *msg;
  153. register MeasureInfo    *measure;
  154. time_t            currenttime;
  155. {
  156.     double    average_db = 0.0;
  157.     int    noFactors = 0;
  158.  
  159.     if (NULL == measure)
  160.         return 0;
  161.  
  162.     if (msg->permsginfo->expiryTime != 0
  163.         && (currenttime - msg->permsginfo->expiryTime) >= 0)
  164.         /* expired so return MAX */
  165.         return -1;
  166.  
  167.     if (0.0 != measure->ub_age) {
  168.         double    age;
  169.         age = (currenttime - msg->permsginfo->age) / 60.0;
  170.         if (age >= measure->ub_age)
  171.             return -1;
  172.         average_db += (age * 100)/measure->ub_age;
  173.         noFactors++;
  174.     }
  175.  
  176.     if (0.0 != measure->ub_volume) {
  177.         if (msg->permsginfo->size >= measure->ub_volume)
  178.             return -1;
  179.         average_db += (msg->permsginfo->size * 100) / measure->ub_volume;
  180.         noFactors++;
  181.     }
  182.  
  183.     if (1 < noFactors)
  184.         average_db = average_db / noFactors;
  185.     return average_db;
  186. }
  187.