From 554f77ca216980979510d07edbc6a5a3f60cd65a Mon Sep 17 00:00:00 2001 From: Ray Alovera Date: Fri, 24 Jan 2020 02:56:50 +0800 Subject: [PATCH 1/7] get stackify.agent callcontext via reflection --- Src/StackifyLib/Internal/Logs/LogQueue.cs | 39 +++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/Src/StackifyLib/Internal/Logs/LogQueue.cs b/Src/StackifyLib/Internal/Logs/LogQueue.cs index 0cbafb8..e588199 100644 --- a/Src/StackifyLib/Internal/Logs/LogQueue.cs +++ b/Src/StackifyLib/Internal/Logs/LogQueue.cs @@ -3,7 +3,10 @@ using System; using System.Collections.Concurrent; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; +using System.Reflection; +using System.Threading; using System.Threading.Tasks; #if NETFULL @@ -99,6 +102,7 @@ public void QueueLogMessage(Models.LogMsg msg) // ignore } + #if NETFULL try { @@ -177,6 +181,41 @@ public void QueueLogMessage(Models.LogMsg msg) } } } +#else + // else if .Net Core + // get RequestID + if (string.IsNullOrEmpty(msg.TransID)) + { + var trace = Trace.CorrelationManager.ActivityId; + + var q = AppDomain.CurrentDomain.GetAssemblies(); + var a = Assembly.GetEntryAssembly().GetReferencedAssemblies(); + + var s = q.Where(assembly => assembly.FullName.Contains("Stackify.Agent")); + var middleware = s.First(); + var midTypes = middleware.GetTypes(); + var callContextType = midTypes.Where(type => type.Name.Contains("StackifyCallContext")).First(); + var traceCtxType = midTypes.Where(type => type.Name.Contains("TraceContext")).First(); + var traceContextProp = callContextType.GetProperty("TraceContext"); + var traceFields = Convert.ChangeType(traceContextProp.GetValue(null), traceCtxType); + if(traceFields != null) + { + // var tFields = traceFields.RequestID; + Console.WriteLine("Testing"); + } + //var ctxType = Type.GetType("Stackify.Agent.Threading.StackifyCallContext"); + + + // check if using log4net or NLog + /* + var correltionManagerId = CallContext.LogicalGetData("E2ETrace.ActivityID"); + + if (correltionManagerId != null && correltionManagerId is Guid && ((Guid)correltionManagerId) != Guid.Empty) + { + msg.TransID = correltionManagerId.ToString(); + } + */ + } #endif _MessageBuffer.Enqueue(msg); From ae92b3c72bb4df012ebbc909afcee833da8294a8 Mon Sep 17 00:00:00 2001 From: Ray Alovera Date: Fri, 24 Jan 2020 21:15:29 +0800 Subject: [PATCH 2/7] - get RequestID via reflection and put in msg.TransID --- Src/StackifyLib/Internal/Logs/LogQueue.cs | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/Src/StackifyLib/Internal/Logs/LogQueue.cs b/Src/StackifyLib/Internal/Logs/LogQueue.cs index e588199..d720f48 100644 --- a/Src/StackifyLib/Internal/Logs/LogQueue.cs +++ b/Src/StackifyLib/Internal/Logs/LogQueue.cs @@ -197,24 +197,12 @@ public void QueueLogMessage(Models.LogMsg msg) var callContextType = midTypes.Where(type => type.Name.Contains("StackifyCallContext")).First(); var traceCtxType = midTypes.Where(type => type.Name.Contains("TraceContext")).First(); var traceContextProp = callContextType.GetProperty("TraceContext"); - var traceFields = Convert.ChangeType(traceContextProp.GetValue(null), traceCtxType); + var traceFields = traceContextProp.GetValue(null); if(traceFields != null) { - // var tFields = traceFields.RequestID; - Console.WriteLine("Testing"); + //var tFields = traceCtxType.GetField("RequestId").GetValue(traceFields); + msg.TransID = traceCtxType.GetProperty("RequestId").GetValue(traceFields).ToString(); } - //var ctxType = Type.GetType("Stackify.Agent.Threading.StackifyCallContext"); - - - // check if using log4net or NLog - /* - var correltionManagerId = CallContext.LogicalGetData("E2ETrace.ActivityID"); - - if (correltionManagerId != null && correltionManagerId is Guid && ((Guid)correltionManagerId) != Guid.Empty) - { - msg.TransID = correltionManagerId.ToString(); - } - */ } #endif From 7a3b0b2ec29f10fe8b1df4c768625ef629e52d63 Mon Sep 17 00:00:00 2001 From: Ray Alovera Date: Fri, 24 Jan 2020 21:29:41 +0800 Subject: [PATCH 3/7] Get types without LINQ extensions --- Src/StackifyLib/Internal/Logs/LogQueue.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Src/StackifyLib/Internal/Logs/LogQueue.cs b/Src/StackifyLib/Internal/Logs/LogQueue.cs index d720f48..afed255 100644 --- a/Src/StackifyLib/Internal/Logs/LogQueue.cs +++ b/Src/StackifyLib/Internal/Logs/LogQueue.cs @@ -194,13 +194,12 @@ public void QueueLogMessage(Models.LogMsg msg) var s = q.Where(assembly => assembly.FullName.Contains("Stackify.Agent")); var middleware = s.First(); var midTypes = middleware.GetTypes(); - var callContextType = midTypes.Where(type => type.Name.Contains("StackifyCallContext")).First(); - var traceCtxType = midTypes.Where(type => type.Name.Contains("TraceContext")).First(); + var callContextType = middleware.GetType("Stackify.Agent.Threading.StackifyCallContext"); + var traceCtxType = middleware.GetType("Stackify.Agent.Tracing.ITraceContext"); var traceContextProp = callContextType.GetProperty("TraceContext"); var traceFields = traceContextProp.GetValue(null); if(traceFields != null) { - //var tFields = traceCtxType.GetField("RequestId").GetValue(traceFields); msg.TransID = traceCtxType.GetProperty("RequestId").GetValue(traceFields).ToString(); } } From 31cd5ea694b9e95188954ddbde89ad37b9c8cfb7 Mon Sep 17 00:00:00 2001 From: Ray Alovera Date: Tue, 28 Jan 2020 00:20:25 +0800 Subject: [PATCH 4/7] - check everything if null --- Src/StackifyLib/Internal/Logs/LogQueue.cs | 28 +++++++++++++++-------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/Src/StackifyLib/Internal/Logs/LogQueue.cs b/Src/StackifyLib/Internal/Logs/LogQueue.cs index afed255..ab9d59f 100644 --- a/Src/StackifyLib/Internal/Logs/LogQueue.cs +++ b/Src/StackifyLib/Internal/Logs/LogQueue.cs @@ -189,18 +189,28 @@ public void QueueLogMessage(Models.LogMsg msg) var trace = Trace.CorrelationManager.ActivityId; var q = AppDomain.CurrentDomain.GetAssemblies(); - var a = Assembly.GetEntryAssembly().GetReferencedAssemblies(); var s = q.Where(assembly => assembly.FullName.Contains("Stackify.Agent")); - var middleware = s.First(); - var midTypes = middleware.GetTypes(); - var callContextType = middleware.GetType("Stackify.Agent.Threading.StackifyCallContext"); - var traceCtxType = middleware.GetType("Stackify.Agent.Tracing.ITraceContext"); - var traceContextProp = callContextType.GetProperty("TraceContext"); - var traceFields = traceContextProp.GetValue(null); - if(traceFields != null) + if(s.Count() > 0) { - msg.TransID = traceCtxType.GetProperty("RequestId").GetValue(traceFields).ToString(); + var middleware = s.First(); + var callContextType = middleware.GetType("Stackify.Agent.Threading.StackifyCallContext"); + if (callContextType != null) + { + var traceCtxType = middleware.GetType("Stackify.Agent.Tracing.ITraceContext"); + if(traceCtxType != null) + { + var traceContextProp = callContextType.GetProperty("TraceContext"); + if(traceCtxType != null) + { + var traceFields = traceContextProp.GetValue(null); + if (traceFields != null) + { + msg.TransID = traceCtxType.GetProperty("RequestId").GetValue(traceFields).ToString(); + } + } + } + } } } #endif From c4b0c9d7eff6a232ecb2e129995db2e21226f67a Mon Sep 17 00:00:00 2001 From: Ray Alovera Date: Tue, 28 Jan 2020 00:26:36 +0800 Subject: [PATCH 5/7] -check RequestId property and the value before turning it into a string --- Src/StackifyLib/Internal/Logs/LogQueue.cs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/Src/StackifyLib/Internal/Logs/LogQueue.cs b/Src/StackifyLib/Internal/Logs/LogQueue.cs index ab9d59f..dfb8756 100644 --- a/Src/StackifyLib/Internal/Logs/LogQueue.cs +++ b/Src/StackifyLib/Internal/Logs/LogQueue.cs @@ -201,12 +201,22 @@ public void QueueLogMessage(Models.LogMsg msg) if(traceCtxType != null) { var traceContextProp = callContextType.GetProperty("TraceContext"); - if(traceCtxType != null) + if(traceContextProp != null) { var traceFields = traceContextProp.GetValue(null); if (traceFields != null) { - msg.TransID = traceCtxType.GetProperty("RequestId").GetValue(traceFields).ToString(); + var reqIdProp = traceCtxType.GetProperty("RequestId"); + + if (reqIdProp != null) + { + var transIDVal = reqIdProp.GetValue(traceFields); + if (transIDVal != null) + { + msg.TransID = transIDVal.ToString(); + } + } + } } } From 29b9d008f1586ec72af6574c42fc91420d6a5c52 Mon Sep 17 00:00:00 2001 From: Ray Alovera Date: Tue, 28 Jan 2020 22:26:00 +0800 Subject: [PATCH 6/7] - make code more concise with coalesce chains - add Stackify.json --- Src/StackifyLib/Internal/Logs/LogQueue.cs | 22 +++++----------------- samples/CoreWebApp/Stackify.json | 4 ++++ 2 files changed, 9 insertions(+), 17 deletions(-) create mode 100644 samples/CoreWebApp/Stackify.json diff --git a/Src/StackifyLib/Internal/Logs/LogQueue.cs b/Src/StackifyLib/Internal/Logs/LogQueue.cs index dfb8756..c1f8271 100644 --- a/Src/StackifyLib/Internal/Logs/LogQueue.cs +++ b/Src/StackifyLib/Internal/Logs/LogQueue.cs @@ -200,24 +200,12 @@ public void QueueLogMessage(Models.LogMsg msg) var traceCtxType = middleware.GetType("Stackify.Agent.Tracing.ITraceContext"); if(traceCtxType != null) { - var traceContextProp = callContextType.GetProperty("TraceContext"); - if(traceContextProp != null) + var traceContextProp = callContextType.GetProperty("TraceContext")?.GetValue(null); + if (traceContextProp != null) { - var traceFields = traceContextProp.GetValue(null); - if (traceFields != null) - { - var reqIdProp = traceCtxType.GetProperty("RequestId"); - - if (reqIdProp != null) - { - var transIDVal = reqIdProp.GetValue(traceFields); - if (transIDVal != null) - { - msg.TransID = transIDVal.ToString(); - } - } - - } + var reqIdProp = traceCtxType.GetProperty("RequestId")?.GetValue(traceContextProp)?.ToString(); + if(!string.IsNullOrEmpty(reqIdProp)) + msg.TransID = reqIdProp; } } } diff --git a/samples/CoreWebApp/Stackify.json b/samples/CoreWebApp/Stackify.json new file mode 100644 index 0000000..6c7e898 --- /dev/null +++ b/samples/CoreWebApp/Stackify.json @@ -0,0 +1,4 @@ +{ + "AppName": "Ray Log Test", + "Environment": "Ray Log" +} \ No newline at end of file From 9e5cf9895b273d2f492fdabf4591c9a310cacf62 Mon Sep 17 00:00:00 2001 From: Ray Alovera Date: Tue, 28 Jan 2020 22:41:12 +0800 Subject: [PATCH 7/7] - remove unused variable --- Src/StackifyLib/Internal/Logs/LogQueue.cs | 10 ++++------ samples/CoreWebApp/Stackify.json | 4 ---- 2 files changed, 4 insertions(+), 10 deletions(-) delete mode 100644 samples/CoreWebApp/Stackify.json diff --git a/Src/StackifyLib/Internal/Logs/LogQueue.cs b/Src/StackifyLib/Internal/Logs/LogQueue.cs index c1f8271..fd426b0 100644 --- a/Src/StackifyLib/Internal/Logs/LogQueue.cs +++ b/Src/StackifyLib/Internal/Logs/LogQueue.cs @@ -186,14 +186,12 @@ public void QueueLogMessage(Models.LogMsg msg) // get RequestID if (string.IsNullOrEmpty(msg.TransID)) { - var trace = Trace.CorrelationManager.ActivityId; + var assemblies = AppDomain.CurrentDomain.GetAssemblies(); - var q = AppDomain.CurrentDomain.GetAssemblies(); - - var s = q.Where(assembly => assembly.FullName.Contains("Stackify.Agent")); - if(s.Count() > 0) + var agentAssemblyQry = assemblies.Where(assembly => assembly.FullName.Contains("Stackify.Agent")); + if(agentAssemblyQry.Count() > 0) { - var middleware = s.First(); + var middleware = agentAssemblyQry.First(); var callContextType = middleware.GetType("Stackify.Agent.Threading.StackifyCallContext"); if (callContextType != null) { diff --git a/samples/CoreWebApp/Stackify.json b/samples/CoreWebApp/Stackify.json deleted file mode 100644 index 6c7e898..0000000 --- a/samples/CoreWebApp/Stackify.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "AppName": "Ray Log Test", - "Environment": "Ray Log" -} \ No newline at end of file