예제 #1
0
        public void DisplayStats(TextWriter writer = null)
        {
            if (writer == null)
            {
                writer = new TraceTextWriter();
            }

            if (_isDisplayingStats)
            {
                return;
            }

            lock (_statsDisplayLock) {
                _isDisplayingStats = true;

                int maxNameLength = 1;
                if (_counters.Count > 0)
                {
                    maxNameLength = Math.Max(_counters.Max(c => c.Key.Length), maxNameLength);
                }
                if (_gauges.Count > 0)
                {
                    maxNameLength = Math.Max(_gauges.Max(c => c.Key.Length), maxNameLength);
                }
                if (_timings.Count > 0)
                {
                    maxNameLength = Math.Max(_timings.Max(c => c.Key.Length), maxNameLength);
                }

                foreach (var key in _counters.Keys.ToList())
                {
                    var counter = _counters[key];
                    writer.WriteLine("Counter: {0} Value: {1} Rate: {2} Rate: {3}", key.PadRight(maxNameLength), counter.Value.ToString().PadRight(12), counter.CurrentRate.ToString("#,##0.##'/s'").PadRight(12), counter.Rate.ToString("#,##0.##'/s'"));
                }

                foreach (var key in _gauges.Keys.ToList())
                {
                    var gauge = _gauges[key];
                    writer.WriteLine("  Gauge: {0} Value: {1}  Avg: {2} Max: {3}", key.PadRight(maxNameLength), gauge.Current.ToString("#,##0.##").PadRight(12), gauge.Average.ToString("#,##0.##").PadRight(12), gauge.Max.ToString("#,##0.##"));
                }

                foreach (var key in _timings.Keys.ToList())
                {
                    var timing = _timings[key];
                    writer.WriteLine(" Timing: {0}   Min: {1}  Avg: {2} Max: {3}", key.PadRight(maxNameLength), timing.Min.ToString("#,##0.##'ms'").PadRight(12), timing.Average.ToString("#,##0.##'ms'").PadRight(12), timing.Max.ToString("#,##0.##'ms'"));
                }

                if (_counters.Count > 0 || _gauges.Count > 0 || _timings.Count > 0)
                {
                    writer.WriteLine("-----");
                }
            }

            _isDisplayingStats = false;
        }
예제 #2
0
 public static void WriteTrace(
     TextWriter writer,
     ITrace trace,
     TraceLevel level    = TraceLevel.Verbose,
     AsciiType asciiType = AsciiType.Default)
 {
     TraceTextWriter.WriteTrace(
         writer,
         trace,
         level,
         asciiType);
 }