本文整理汇总了C#中Exceptionless.Core.Plugins.EventProcessor.EventContext类的典型用法代码示例。如果您正苦于以下问题:C# EventContext类的具体用法?C# EventContext怎么用?C# EventContext使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
EventContext类属于Exceptionless.Core.Plugins.EventProcessor命名空间,在下文中一共展示了EventContext类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: EventProcessing
public override void EventProcessing(EventContext context)
{
if (!context.Event.IsError())
return;
Error error = context.Event.GetError();
if (error == null)
return;
if (String.IsNullOrWhiteSpace(context.Event.Message))
context.Event.Message = error.Message;
string[] commonUserMethods = { "DataContext.SubmitChanges", "Entities.SaveChanges" };
if (context.HasProperty("CommonMethods"))
commonUserMethods = context.GetProperty<string>("CommonMethods").SplitAndTrim(',');
string[] userNamespaces = null;
if (context.HasProperty("UserNamespaces"))
userNamespaces = context.GetProperty<string>("UserNamespaces").SplitAndTrim(',');
var signature = new ErrorSignature(error, userCommonMethods: commonUserMethods, userNamespaces: userNamespaces);
if (signature.SignatureInfo.Count <= 0)
return;
foreach (var key in signature.SignatureInfo.Keys)
context.StackSignatureData.Add(key, signature.SignatureInfo[key]);
}
示例2: Process
public override void Process(EventContext ctx)
{
// if they don't have premium features, then we don't need to queue notifications
if (!ctx.Organization.HasPremiumFeatures)
return;
_notificationQueue.EnqueueAsync(new EventNotification {
Event = ctx.Event,
IsNew = ctx.IsNew,
IsCritical = ctx.Event.IsCritical(),
IsRegression = ctx.IsRegression,
//TotalOccurrences = ctx.Stack.TotalOccurrences,
ProjectName = ctx.Project.Name
}).Wait();
foreach (WebHook hook in _webHookRepository.GetByOrganizationIdOrProjectId(ctx.Event.OrganizationId, ctx.Event.ProjectId)) {
bool shouldCall = hook.EventTypes.Contains(WebHookRepository.EventTypes.NewError) && ctx.IsNew
|| hook.EventTypes.Contains(WebHookRepository.EventTypes.ErrorRegression) && ctx.IsRegression
|| hook.EventTypes.Contains(WebHookRepository.EventTypes.CriticalError) && ctx.Event.Tags != null && ctx.Event.Tags.Contains("Critical");
if (!shouldCall)
continue;
Log.Trace().Project(ctx.Event.ProjectId).Message("Web hook queued: project={0} url={1}", ctx.Event.ProjectId, hook.Url).Write();
// TODO: Should we be using the hook's project id and organization id?
var context = new WebHookDataContext(hook.Version, ctx.Event, ctx.Organization, ctx.Project, ctx.Stack, ctx.IsNew, ctx.IsRegression);
_webHookNotificationQueue.EnqueueAsync(new WebHookNotification {
OrganizationId = ctx.Event.OrganizationId,
ProjectId = ctx.Event.ProjectId,
Url = hook.Url,
Data = _webHookDataPluginManager.CreateFromEvent(context)
}).Wait();
}
}
示例3: EventProcessingAsync
public override Task EventProcessingAsync(EventContext context) {
if (!context.Event.IsError())
return Task.CompletedTask;
Error error = context.Event.GetError();
if (error == null)
return Task.CompletedTask;
if (String.IsNullOrWhiteSpace(context.Event.Message))
context.Event.Message = error.Message;
string[] commonUserMethods = { "DataContext.SubmitChanges", "Entities.SaveChanges" };
if (context.HasProperty("CommonMethods"))
commonUserMethods = context.GetProperty<string>("CommonMethods").SplitAndTrim(',');
string[] userNamespaces = null;
if (context.HasProperty("UserNamespaces"))
userNamespaces = context.GetProperty<string>("UserNamespaces").SplitAndTrim(',');
var signature = new ErrorSignature(error, userCommonMethods: commonUserMethods, userNamespaces: userNamespaces);
if (signature.SignatureInfo.Count <= 0)
return Task.CompletedTask;
var targetInfo = new SettingsDictionary(signature.SignatureInfo);
var stackingTarget = error.GetStackingTarget();
if (stackingTarget?.Error?.StackTrace != null && stackingTarget.Error.StackTrace.Count > 0 && !targetInfo.ContainsKey("Message"))
targetInfo["Message"] = stackingTarget.Error.Message;
error.Data[Error.KnownDataKeys.TargetInfo] = targetInfo;
foreach (var key in signature.SignatureInfo.Keys)
context.StackSignatureData.Add(key, signature.SignatureInfo[key]);
return Task.CompletedTask;
}
示例4: EventProcessing
public override void EventProcessing(EventContext context)
{
if (Settings.Current.WebsiteMode == WebsiteMode.Dev)
return;
var project = _projectRepository.GetById(context.Event.ProjectId);
if (project == null || !project.DeleteBotDataEnabled)
return;
// Throttle errors by client ip address to no more than X every 5 minutes.
var ri = context.Event.GetRequestInfo();
if (ri == null || String.IsNullOrEmpty(ri.ClientIpAddress))
return;
string throttleCacheKey = String.Concat("bot:", ri.ClientIpAddress, ":", DateTime.Now.Floor(_throttlingPeriod).Ticks);
var requestCount = _cacheClient.Get<int?>(throttleCacheKey);
if (requestCount != null) {
_cacheClient.Increment(throttleCacheKey, 1);
requestCount++;
} else {
_cacheClient.Set(throttleCacheKey, 1, _throttlingPeriod);
requestCount = 1;
}
if (requestCount < Settings.Current.BotThrottleLimit)
return;
Log.Info().Message("Bot throttle triggered. IP: {0} Time: {1} Project: {2}", ri.ClientIpAddress, DateTime.Now.Floor(_throttlingPeriod), context.Event.ProjectId).Project(context.Event.ProjectId).Write();
// the throttle was triggered, go and delete all the errors that triggered the throttle to reduce bot noise in the system
Task.Run(() => _eventRepository.HideAllByClientIpAndDateAsync(context.Event.OrganizationId, ri.ClientIpAddress, DateTime.Now.Floor(_throttlingPeriod), DateTime.Now.Ceiling(_throttlingPeriod)));
context.IsCancelled = true;
}
示例5: EventProcessingAsync
public override Task EventProcessingAsync(EventContext context) {
var data = context.Event.Data;
if (data.ContainsKey(Event.KnownDataKeys.ManualStackingKey) && data[Event.KnownDataKeys.ManualStackingKey] != null)
context.StackSignatureData.AddItemIfNotEmpty(nameof(Event.KnownDataKeys.ManualStackingKey), data[Event.KnownDataKeys.ManualStackingKey].ToString());
return Task.CompletedTask;
}
示例6: ProcessAsync
public override async Task ProcessAsync(EventContext ctx) {
// if they don't have premium features, then we don't need to queue notifications
if (!ctx.Organization.HasPremiumFeatures)
return;
if (ShouldQueueNotification(ctx))
await _notificationQueue.EnqueueAsync(new EventNotificationWorkItem {
EventId = ctx.Event.Id,
IsNew = ctx.IsNew,
IsCritical = ctx.Event.IsCritical(),
IsRegression = ctx.IsRegression,
TotalOccurrences = ctx.Stack.TotalOccurrences,
ProjectName = ctx.Project.Name
}).AnyContext();
foreach (WebHook hook in (await _webHookRepository.GetByOrganizationIdOrProjectIdAsync(ctx.Event.OrganizationId, ctx.Event.ProjectId).AnyContext()).Documents) {
if (!ShouldCallWebHook(hook, ctx))
continue;
var context = new WebHookDataContext(hook.Version, ctx.Event, ctx.Organization, ctx.Project, ctx.Stack, ctx.IsNew, ctx.IsRegression);
var notification = new WebHookNotification {
OrganizationId = ctx.Event.OrganizationId,
ProjectId = ctx.Event.ProjectId,
Url = hook.Url,
Data = await _webHookDataPluginManager.CreateFromEventAsync(context).AnyContext()
};
await _webHookNotificationQueue.EnqueueAsync(notification).AnyContext();
Logger.Trace().Project(ctx.Event.ProjectId).Message("Web hook queued: project={0} url={1}", ctx.Event.ProjectId, hook.Url).Property("Web Hook Notification", notification).Write();
}
}
示例7: Process
public override void Process(EventContext ctx) {
if (ctx.StackInfo == null || !ctx.StackInfo.OccurrencesAreCritical)
return;
Log.Trace().Message("Marking error as critical.").Write();
ctx.Event.MarkAsCritical();
}
示例8: SetBrowserOsAndDeviceFromUserAgent
private async Task SetBrowserOsAndDeviceFromUserAgent(RequestInfo request, EventContext context) {
var info = await _parser.ParseAsync(request.UserAgent, context.Project.Id).AnyContext();
if (info != null) {
if (!String.Equals(info.UserAgent.Family, "Other")) {
request.Data[RequestInfo.KnownDataKeys.Browser] = info.UserAgent.Family;
if (!String.IsNullOrEmpty(info.UserAgent.Major)) {
request.Data[RequestInfo.KnownDataKeys.BrowserVersion] = String.Join(".", new[] { info.UserAgent.Major, info.UserAgent.Minor, info.UserAgent.Patch }.Where(v => !String.IsNullOrEmpty(v)));
request.Data[RequestInfo.KnownDataKeys.BrowserMajorVersion] = info.UserAgent.Major;
}
}
if (!String.Equals(info.Device.Family, "Other"))
request.Data[RequestInfo.KnownDataKeys.Device] = info.Device.Family;
if (!String.Equals(info.OS.Family, "Other")) {
request.Data[RequestInfo.KnownDataKeys.OS] = info.OS.Family;
if (!String.IsNullOrEmpty(info.OS.Major)) {
request.Data[RequestInfo.KnownDataKeys.OSVersion] = String.Join(".", new[] { info.OS.Major, info.OS.Minor, info.OS.Patch }.Where(v => !String.IsNullOrEmpty(v)));
request.Data[RequestInfo.KnownDataKeys.OSMajorVersion] = info.OS.Major;
}
}
var botPatterns = context.Project.Configuration.Settings.GetStringCollection(SettingsDictionary.KnownKeys.UserAgentBotPatterns).ToList();
request.Data[RequestInfo.KnownDataKeys.IsBot] = info.Device.IsSpider || request.UserAgent.AnyWildcardMatches(botPatterns);
}
}
示例9: ProcessAsync
public override async Task ProcessAsync(EventContext ctx) {
if (ctx.Stack == null || !ctx.Stack.OccurrencesAreCritical)
return;
Log.Trace().Message("Marking error as critical.").Write();
ctx.Event.MarkAsCritical();
}
示例10: AddManualStackSignatureData
public async Task AddManualStackSignatureData(string dataKey, string dataValue, bool willAddManualStackSignature) {
var plugin = new ManualStackingPlugin();
var data = new DataDictionary() { { dataKey, dataValue } };
var context = new EventContext(new PersistentEvent { Data = data });
await plugin.EventBatchProcessingAsync(new List<EventContext> { context });
Assert.Equal(willAddManualStackSignature, context.StackSignatureData.Count > 0);
}
示例11: EventProcessingAsync
public override Task EventProcessingAsync(EventContext context) {
var msi = context.Event.GetManualStackingInfo();
if (msi?.SignatureData != null) {
foreach (var kvp in msi.SignatureData)
context.StackSignatureData.AddItemIfNotEmpty(kvp.Key, kvp.Value);
}
return Task.CompletedTask;
}
示例12: ProcessAsync
public override Task ProcessAsync(EventContext ctx) {
if (!ctx.Organization.HasPremiumFeatures)
return Task.CompletedTask;
// TODO: Do we need a pipeline action to trim keys and remove null values that may be sent by other native clients.
ctx.Event.CopyDataToIndex();
return Task.CompletedTask;
}
示例13: Process
public override void Process(EventContext ctx)
{
try {
ctx.Event = _eventRepository.Add(ctx.Event);
} catch (DuplicateDocumentException ex) {
Log.Info().Project(ctx.Event.ProjectId).Message("Ignoring duplicate error submission: {0}", ctx.Event.Id).Write();
ctx.IsCancelled = true;
}
}
示例14: ProcessAsync
public override Task ProcessAsync(EventContext ctx) {
if (ctx.Stack == null || !ctx.Stack.OccurrencesAreCritical)
return Task.CompletedTask;
_logger.Trace("Marking error as critical.");
ctx.Event.MarkAsCritical();
return Task.CompletedTask;
}
示例15: AddManualStackSignatureData
public async Task AddManualStackSignatureData(string stackingKey, bool willAddManualStackSignature) {
var ev = new PersistentEvent();
ev.SetManualStackingKey(stackingKey);
var context = new EventContext(ev);
var plugin = new ManualStackingPlugin();
await plugin.EventBatchProcessingAsync(new List<EventContext> { context });
Assert.Equal(willAddManualStackSignature, context.StackSignatureData.Count > 0);
}