Changeset 1096

Show
Ignore:
Timestamp:
06/19/08 15:07:39 (6 months ago)
Author:
kris
Message:

Changed metrics again

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/mango/net/servlet/Servlet.d

    r1089 r1096  
    6262        this (char[] name = null) 
    6363        {        
    64                 this.name = name; 
    65                 log = Log.lookup (name); 
     64                if (name.length is 0) 
     65                    name = this.classinfo.name; 
     66 
     67                log = Log.lookup (this.name = name); 
    6668        } 
    6769 
     
    9092 
    9193        /********************************************************************** 
    92  
     94  
    9395                Servlet metrics 
    9496 
     
    9799        struct Metrics 
    98100        { 
    99                 char[]  name; 
    100  
    101                 ulong   ok = 0, 
    102                         bad = 0, 
     101                // counters 
     102                ulong   ok   = 0, 
     103                        bad  = 0, 
    103104                        fail = 0; 
    104  
    105                 double  time = 0, 
    106                         average = 0, 
     105                 
     106                // rolling average time 
     107                float   current  = 0, 
     108                        average  = 0, 
    107109                        average2 = 0, 
     110                        average3 = 0, 
    108111                        average4 = 0, 
     112                        average5 = 0, 
     113                        average6 = 0, 
     114                        average7 = 0, 
    109115                        average8 = 0; 
    110116 
    111                          
    112  
    113                 void update (HttpStatus status, double time) 
     117                Metrics failure () 
     118                { 
     119                        ++fail; 
     120                        return *this; 
     121                } 
     122 
     123                Metrics success (HttpStatus status, float time) 
    114124                { 
    115125                        if (status.code < HttpResponseCode.BadRequest) 
     
    118128                           ++bad; 
    119129 
    120                         this.time = time; 
    121                         average2 = (average2 + time) / 2.0; 
    122                         average4 = (average4 + average2) / 2.0; 
    123                         average8 = (average8 + average4) / 2.0; 
    124                         average  = (average  + average8) / 2.0; 
     130                        average8 = average7; 
     131                        average7 = average6; 
     132                        average6 = average5; 
     133                        average5 = average4; 
     134                        average4 = average3; 
     135                        average3 = average2; 
     136                        average2 = average; 
     137                        current  = time; 
     138                        average  = ((current  + average2 +  
     139                                     average3 + average4 + 
     140                                     average5 + average6 + 
     141                                     average7 + average8) / 8.0); 
     142                        return *this; 
    125143                } 
    126144        } 
     
    374392                     
    375393                    // update metrics 
    376                     metric.update (response.getStatus, timer.stop); 
    377  
    378                     if (log) 
     394                    auto m = metric.success (response.getStatus, timer.stop); 
     395 
     396                    // logging enabled? 
     397                    if (log.enabled(log.Info)) 
    379398                        log.info ("{} [{.512}] - {} good, {} bad, {} fail, {}us [{}]",  
    380                                   method, request.path, metric.ok, metric.bad, metric.fail, 
    381                                   cast(int)(metric.time    * 1_000_000), 
    382                                   cast(int)(metric.average * 1_000_000)); 
     399                                  method, request.path, m.ok, m.bad, m.fail, 
     400                                  cast(int) (m.current * 1000000.0),  
     401                                  cast(int) (m.average * 1000000.0)); 
    383402 
    384403                    } catch (Exception e) 
    385404                            { 
    386                             ++metric.fail; 
    387                             if (log) 
    388                                 log.error ("{} [{.512}] - {} good, {} bad, {} fail: {.256}",  
    389                                            method, request.path, metric.ok, metric.bad, metric.fail, e); 
     405                            auto m = metric.failure; 
     406                            log.error ("{} [{.512}] - {} good, {} bad, {} fail: {.256}",  
     407                                        method, request.path, m.ok, m.bad, m.fail, e); 
    390408                            throw exception; 
    391409                            }