| [1195] | 1 | /* Written by Sam Habiel in May 2011 | 
|---|
|  | 2 | * Licensed under LGPL */ | 
|---|
|  | 3 |  | 
|---|
|  | 4 | using System; | 
|---|
|  | 5 | using System.Collections.Generic; | 
|---|
|  | 6 | using System.Text; | 
|---|
|  | 7 | using IndianHealthService.BMXNet; | 
|---|
|  | 8 | using System.Diagnostics; | 
|---|
|  | 9 |  | 
|---|
|  | 10 | namespace IndianHealthService.ClinicalScheduling | 
|---|
|  | 11 | { | 
|---|
|  | 12 | /// <summary> | 
|---|
|  | 13 | /// Class to Log Calls to RPMS/VISTA back and forth. Implements BMXNet.[I]Log interaface. | 
|---|
|  | 14 | /// Logger is implemented as a Queue Collection of class EventToLog | 
|---|
|  | 15 | /// </summary> | 
|---|
|  | 16 | public class RPCLogger: Log | 
|---|
|  | 17 | { | 
|---|
|  | 18 | /// <summary> | 
|---|
|  | 19 | /// Max size of Log | 
|---|
|  | 20 | /// </summary> | 
|---|
|  | 21 | const int maxsize = 1000; | 
|---|
|  | 22 |  | 
|---|
|  | 23 | /// <summary> | 
|---|
|  | 24 | /// Stop Watch to keep track of time between calls. | 
|---|
|  | 25 | /// </summary> | 
|---|
|  | 26 | Stopwatch _watch; | 
|---|
|  | 27 |  | 
|---|
|  | 28 | /// <summary> | 
|---|
|  | 29 | /// ctor | 
|---|
|  | 30 | /// </summary> | 
|---|
|  | 31 | public RPCLogger() | 
|---|
|  | 32 | { | 
|---|
|  | 33 | _logger = new List<EventToLog>(maxsize); | 
|---|
|  | 34 | _watch = new Stopwatch(); | 
|---|
|  | 35 | _watch.Start(); | 
|---|
|  | 36 | } | 
|---|
|  | 37 |  | 
|---|
|  | 38 | public bool IsLogging { get; set; } | 
|---|
|  | 39 |  | 
|---|
|  | 40 | //Event to notify interested controls that we have more data | 
|---|
|  | 41 | public event EventHandler<EventToLog> HaveMoreData; | 
|---|
|  | 42 |  | 
|---|
|  | 43 | private List<EventToLog> _logger; | 
|---|
|  | 44 |  | 
|---|
|  | 45 | public List<EventToLog> Logger | 
|---|
|  | 46 | { | 
|---|
|  | 47 | get { return _logger; } | 
|---|
|  | 48 | } | 
|---|
|  | 49 |  | 
|---|
|  | 50 | /// <summary> | 
|---|
|  | 51 | /// Data Structure to Log | 
|---|
|  | 52 | /// </summary> | 
|---|
|  | 53 | public class EventToLog: EventArgs | 
|---|
|  | 54 | { | 
|---|
|  | 55 | public DateTime EventTime { get; set; } | 
|---|
|  | 56 | public long ElapasedTime { get; set; } | 
|---|
|  | 57 | public string Class { get; set; } | 
|---|
|  | 58 | public string Category { get; set; } | 
|---|
|  | 59 | public string Lines { get; set; } | 
|---|
|  | 60 | public Exception Exception { get; set; } | 
|---|
|  | 61 |  | 
|---|
|  | 62 | public override string ToString() | 
|---|
|  | 63 | { | 
|---|
|  | 64 | return EventTime.TimeOfDay + "\t" + Category + "\t" + Class + "\t" + ElapasedTime + " ms"; | 
|---|
|  | 65 | } | 
|---|
|  | 66 | } | 
|---|
|  | 67 |  | 
|---|
|  | 68 | /// <summary> | 
|---|
|  | 69 | /// Chained to Below | 
|---|
|  | 70 | /// </summary> | 
|---|
|  | 71 | public void Log(string aClass, string aCategory, params string[] lines) | 
|---|
|  | 72 | { | 
|---|
|  | 73 | Log(aClass, aCategory, null, lines); | 
|---|
|  | 74 | } | 
|---|
|  | 75 |  | 
|---|
|  | 76 | /// <summary> | 
|---|
|  | 77 | /// Adds Log entry to queue object | 
|---|
|  | 78 | /// </summary> | 
|---|
|  | 79 | public void Log(string aClass, string aCategory, Exception anException, params string[] lines) | 
|---|
|  | 80 | { | 
|---|
|  | 81 | if (_logger.Count >= maxsize - 1) _logger.RemoveAt(_logger.Count - 1); | 
|---|
|  | 82 |  | 
|---|
|  | 83 | EventToLog _e = new EventToLog | 
|---|
|  | 84 | { | 
|---|
|  | 85 | EventTime = DateTime.Now, | 
|---|
|  | 86 | Class = aClass, | 
|---|
|  | 87 | Category = aCategory, | 
|---|
|  | 88 | Lines = String.Join("\r\n", lines), | 
|---|
|  | 89 | Exception = anException, | 
|---|
|  | 90 | ElapasedTime = _watch.ElapsedMilliseconds | 
|---|
|  | 91 | }; | 
|---|
|  | 92 |  | 
|---|
|  | 93 | _logger.Add(_e); | 
|---|
|  | 94 |  | 
|---|
|  | 95 | _watch.Reset(); | 
|---|
|  | 96 | _watch.Start(); | 
|---|
|  | 97 |  | 
|---|
|  | 98 | //Tell subscribers to this event that we want attention!!!! | 
|---|
|  | 99 | if (HaveMoreData != null) HaveMoreData(this, _e); | 
|---|
|  | 100 | } | 
|---|
|  | 101 | } | 
|---|
|  | 102 | } | 
|---|