1+ using System ;
2+ using System . Collections . Generic ;
3+ using System . Diagnostics ;
4+ using System . Linq ;
5+ using System . Text ;
6+ using System . Threading . Tasks ;
7+
8+ namespace Rally . RestApi
9+ {
10+ /// <summary>
11+ /// Diagnostic trace settings
12+ /// </summary>
13+ [ Flags ]
14+ public enum TraceFieldEnum
15+ {
16+ /// <summary>
17+ /// No trace
18+ /// </summary>
19+ None = 0 ,
20+
21+ /// <summary>
22+ /// Includes Request/Response Data
23+ /// </summary>
24+ Data = 1 ,
25+
26+ /// <summary>
27+ /// Include Request/Response Headers
28+ /// </summary>
29+ Headers = 2 ,
30+
31+ /// <summary>
32+ /// Include Before/After Cookies
33+ /// </summary>
34+ Cookies = 4
35+ }
36+
37+ /// <summary>
38+ /// Helper class for logging diagnostic trace messages
39+ /// </summary>
40+ public static class TraceHelper
41+ {
42+ /// <summary>
43+ /// Variable controlling level of Trace output
44+ /// </summary>
45+ public static TraceFieldEnum TraceFields { get ; set ; }
46+
47+ /// <summary>
48+ /// Log a Trace message
49+ /// </summary>
50+ public static void TraceMessage ( string format , params object [ ] args )
51+ {
52+ if ( TraceHelper . TraceFields > 0 )
53+ {
54+ Trace . TraceInformation ( format + "\r \n \r \n " , args ) ;
55+ }
56+ }
57+
58+ /// <summary>
59+ /// Log a Http Trace message
60+ /// </summary>
61+ public static void TraceHttpMessage ( string action , DateTime startTime , Uri target , string requestHeaders , object responseData , string responseHeaders )
62+ {
63+ TraceHttpMessage ( action , startTime , target , null , requestHeaders , null , responseData , responseHeaders , null ) ;
64+ }
65+
66+ /// <summary>
67+ /// Log a Http Trace message
68+ /// </summary>
69+ public static void TraceHttpMessage ( string action , DateTime startTime , Uri target , string requestHeaders , string cookiesBefore , object responseData , string responseHeaders , string cookiesAfter )
70+ {
71+ TraceHttpMessage ( action , startTime , target , null , requestHeaders , cookiesBefore , responseData , responseHeaders , cookiesAfter ) ;
72+ }
73+
74+ /// <summary>
75+ /// Log a Http Trace message
76+ /// </summary>
77+ public static void TraceHttpMessage ( string action , DateTime startTime , Uri target , object requestData , string requestHeaders , string cookiesBefore , object responseData , string responseHeaders , string cookiesAfter )
78+ {
79+ if ( TraceHelper . TraceFields > 0 )
80+ {
81+ string traceRequestData = "" , traceResponseData = "" , traceRequestHeaders = "" , traceResponseHeaders = "" , traceCookiesBefore = "" , traceCookiesAfter = "" ;
82+
83+ var traceSummary = string . Format ( "{0} ({1}):\r \n {2}" , action , DateTime . Now . Subtract ( startTime ) . ToString ( ) , target . ToString ( ) ) ;
84+
85+ // Include data
86+ if ( TraceHelper . TraceFields . HasFlag ( TraceFieldEnum . Data ) )
87+ {
88+ traceRequestData = requestData == null ? "" : string . Format ( "\r \n Request Data:\r \n {0}\r \n " , requestData ) ;
89+ traceResponseData = string . Format ( "\r \n Response Data\r \n {0}" , responseData ) ;
90+ }
91+
92+ // Include headers
93+ if ( TraceHelper . TraceFields . HasFlag ( TraceFieldEnum . Headers ) )
94+ {
95+ traceRequestHeaders = string . Format ( "\r \n Request Headers:\r \n {0}" , requestHeaders ) ;
96+ traceResponseHeaders = string . Format ( "\r \n Response Headers:\r \n {0}" , responseHeaders ) ;
97+ }
98+
99+ // Include cookies
100+ if ( TraceHelper . TraceFields . HasFlag ( TraceFieldEnum . Cookies ) )
101+ {
102+ traceCookiesBefore = string . Format ( "\r \n Cookies Before:\r \n {0}" , cookiesBefore ) ;
103+ traceCookiesAfter = string . Format ( "\r \n Cookies After:\r \n {0}" , cookiesAfter ) ;
104+ }
105+
106+ // Log the trace information
107+ Trace . TraceInformation ( String . Concat (
108+ traceSummary ,
109+ traceRequestHeaders ,
110+ traceCookiesBefore ,
111+ traceRequestData ,
112+ traceResponseHeaders ,
113+ traceCookiesAfter ,
114+ traceResponseData ,
115+ "\r \n \r \n " ) ) ;
116+ }
117+ }
118+ }
119+ }
0 commit comments