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 | }
|
---|