public void Send(MessageContext messageContext) { var snapshot = new Dictionary<string, object>(); if (CurrentContexts.IsValueCreated) { if (CurrentContexts.Value.Any()) { foreach (var context in CurrentContexts.Value) { snapshot[context.Key] = JObject.Parse(JsonConvert.SerializeObject(context.Value)); } } } if (CurrentScopes.IsValueCreated) { if (CurrentScopes.Value.Any()) { var scopeEntries = new JArray(CurrentScopes.Value.Select(JObject.Parse).ToList()); snapshot[Constants.Passports.KeyScopes] = scopeEntries.OrderBy(x => (DateTimeOffset)x[Constants.PassportScope.Entry.Timestamp]) .ToList(); } } PassportStorageService.Store(messageContext, snapshot); }
public virtual StandardResponse<bool> Stamp(MessageContext messageContext , bool includeContext = false , bool includeScopes = false ) { if (PassportStorageService == null) return false.GenerateStandardResponse(); try { var contexts = new PassportsContext(); var scopes = new List<string>(); if (includeContext) { foreach (var context in Contexts) { contexts[context.Key] = context.Value; } var extendedContexts = ExtendedContexts(); if (extendedContexts != null) { foreach (var extendedContext in extendedContexts) { contexts[extendedContext.Key] = extendedContext.Value; } } } if (includeScopes) { scopes.AddRange(Scopes.Serialize()); } SendInBackground(messageContext, contexts.ToArray(), scopes.ToArray()); } catch (Exception e) { System.Diagnostics.Trace.WriteLine("Failed SendInBackground: {0}", e.Message); return false.GenerateStandardResponse(); } return true.GenerateStandardResponse(); }
private static MessageContext MessageContext(IPassport passport , PassportLevel level , string messageTemplate , object[] messageTemplateParameters , string user , string memberName , string sourceFilePath , int sourceLineNumber , bool logCaller = false , int scopeDepth = -1 ) { var scope = passport.Scope; var messageContext = new MessageContext { Session = passport.SessionId, Passport = passport.PassportId, Member = scope != null ? scope.Name ?? string.Empty : string.Empty, CallContext = scope != null ? scope.Id.ToString() : string.Empty, ParentContext = scope != null ? (scope.Parent != null ? scope.Parent.Id.ToString() : string.Empty) : string.Empty, Level = level, MessageTemplate = messageTemplate, MessageTemplateParameters = messageTemplateParameters, User = user, MemberName = memberName, SourceFilePath = sourceFilePath, SourceLineNumber = sourceLineNumber, LogCaller = logCaller, ScopeDepth = scopeDepth }; Console.WriteLine("{0} {1}" , messageContext.Timestamp.ToString("HH:mm:ss.FFFFFFF") , messageContext.Id //, messageContext.Session //, messageContext.Passport //, messageContext.MessageTemplate ); return messageContext; }
public StandardResponse<bool> StampException(MessageContext messageContext, Exception e) { if (PassportStorageService == null || e == null) return false.GenerateStandardResponse(); try { var contexts = new PassportsContext(); var scopes = new List<string>(); foreach (var context in Contexts) { contexts[context.Key] = context.Value; } var extendedContexts = ExtendedContexts(); if (extendedContexts != null) { foreach (var extendedContext in extendedContexts) { contexts[extendedContext.Key] = extendedContext.Value; } } contexts[Constants.Contexts.Exception] = new ExceptionContext(e); scopes.AddRange(Scopes.Serialize()); SendInBackground(messageContext, contexts.ToArray(), scopes.ToArray()); } catch (Exception ex) { System.Diagnostics.Trace.WriteLine("Failed SendInBackground: {0}", ex.Message); return false.GenerateStandardResponse(); } return true.GenerateStandardResponse(); }
protected void SendInBackground(MessageContext messageContext , KeyValuePair<string, IContext>[] contexts , string[] scopes) { ThreadPool.QueueUserWorkItem(c => { CurrentContexts.Value = contexts; CurrentScopes.Value = scopes; Send(messageContext); }); }
public void Store(MessageContext messageContext, IDictionary<string, object> snapshot) { var currentContext = _logger.With(Constants.KeyPassportTimestamp, messageContext.Timestamp) .With("E_0_" + Constants.Passports.KeyMember, messageContext.Member) .With("E_1_" + Constants.Passports.KeyCurrentCallContext, messageContext.CallContext) .With("E_3_" + Constants.Passports.KeyPassport, messageContext.Passport) ; if (!string.IsNullOrWhiteSpace(messageContext.ParentContext)) { currentContext = currentContext.With("E_2_" + Constants.Passports.KeyParentCallContext,messageContext.ParentContext); } if (messageContext.LogCaller) { currentContext = currentContext.With("Z_1_"+Constants.Passports.KeyCallerFilePath, messageContext.SourceFilePath) .With("Z_2_"+Constants.Passports.KeyCallerLineNumber, messageContext.SourceLineNumber) ; } if (messageContext.Session != null) { currentContext = currentContext.With("E_4_" + Constants.Passports.KeySession, messageContext.Session); } if (!string.IsNullOrWhiteSpace(messageContext.User)) { currentContext = currentContext.With("E_5_" + Constants.Passports.KeyUser, messageContext.User); } if (snapshot != null && snapshot.Keys.Any()) { var contextCount = 0; foreach (var key in snapshot.Keys.Where(x => x != Constants.Passports.KeyScopes)) { var value = snapshot[key]; currentContext = currentContext.With(string.Format("C_{0}_{1}",contextCount++, key), value); } if (snapshot.ContainsKey(Constants.Passports.KeyScopes)) { try { var entries = (IList<JToken>) snapshot[Constants.Passports.KeyScopes]; if (entries != null && entries.Any()) { if (messageContext.ScopeDepth == 0) { var lastEntry = entries.LastOrDefault(); if (lastEntry != null) { currentContext = BuildScopeEntry(currentContext, lastEntry, 0); } } else { var calculatedDepth = messageContext.ScopeDepth == -1 ? int.MaxValue : messageContext.ScopeDepth; var entryCounter = 0; currentContext = entries.Reverse() .Where(entry => entryCounter < calculatedDepth) .Aggregate(currentContext, (current, entry) => BuildScopeEntry(current, entry, entryCounter++)); } } } catch { } } } var extendedMessageTemplate = "{" + "E_0_" + Constants.Passports.KeyMember +"} " + messageContext.MessageTemplate; object[] extendedMessageTemplateParameters = null; if (messageContext.MessageTemplateParameters != null) { extendedMessageTemplateParameters = new object[messageContext.MessageTemplateParameters.Length + 1]; Array.Copy(messageContext.MessageTemplateParameters, 0, extendedMessageTemplateParameters, 1, messageContext.MessageTemplateParameters.Length); } else { extendedMessageTemplateParameters = new object[1]; } extendedMessageTemplateParameters[0] = messageContext.Member; if ( messageContext.Level == PassportLevel.Debug) { currentContext.Debug(extendedMessageTemplate, extendedMessageTemplateParameters); } else if (messageContext.Level == PassportLevel.Info) { currentContext.Information(extendedMessageTemplate, extendedMessageTemplateParameters); } else if (messageContext.Level == PassportLevel.Warn) { currentContext.Warning(extendedMessageTemplate, extendedMessageTemplateParameters); } else if (messageContext.Level == PassportLevel.Error) { currentContext.Error(extendedMessageTemplate, extendedMessageTemplateParameters); } else if (messageContext.Level == PassportLevel.Exception) { currentContext.Fatal(extendedMessageTemplate, extendedMessageTemplateParameters); } }
public void Store(MessageContext messageContext, System.Collections.Generic.IDictionary<string, object> snapshot) { }