public static PersistentEvent ToSessionStartEvent(this PersistentEvent source, DateTime? lastActivityUtc = null, bool? isSessionEnd = null, bool hasPremiumFeatures = true) { var startEvent = new PersistentEvent { SessionId = source.SessionId, Date = source.Date, Geo = source.Geo, OrganizationId = source.OrganizationId, ProjectId = source.ProjectId, Type = Event.KnownTypes.Session, Value = 0 }; var ei = source.GetEnvironmentInfo(); if (ei != null) { startEvent.SetEnvironmentInfo(new EnvironmentInfo { Architecture = ei.Architecture, CommandLine = ei.CommandLine, Data = ei.Data, InstallId = ei.InstallId, IpAddress = ei.IpAddress, MachineName = ei.MachineName, OSName = ei.OSName, OSVersion = ei.OSVersion, ProcessId = ei.ProcessId, ProcessName = ei.ProcessName, ProcessorCount = ei.ProcessorCount, RuntimeVersion = ei.RuntimeVersion, TotalPhysicalMemory = ei.TotalPhysicalMemory }); } var ri = source.GetRequestInfo(); if (ri != null) { startEvent.AddRequestInfo(new RequestInfo { ClientIpAddress = ri.ClientIpAddress, Data = ri.Data, Host = ri.Host, HttpMethod = ri.HttpMethod, IsSecure = ri.IsSecure, Port = ri.Port, Path = ri.Path, Referrer = ri.Referrer, UserAgent = ri.UserAgent }); } startEvent.SetVersion(source.GetVersion()); startEvent.SetUserIdentity(source.GetUserIdentity()); if (lastActivityUtc.HasValue) startEvent.UpdateSessionStart(lastActivityUtc.Value, isSessionEnd.GetValueOrDefault()); if (hasPremiumFeatures) startEvent.CopyDataToIndex(); return startEvent; }
public static PersistentEvent GenerateEvent(string[] organizationIds = null, string[] projectIds = null, string[] stackIds = null, DateTimeOffset? startDate = null, DateTimeOffset? endDate = null, DateTimeOffset? occurrenceDate = null, int maxErrorNestingLevel = 0, bool generateTags = true, bool generateData = true, bool isFixed = false, bool isHidden = false, string[] referenceIds = null, string type = null, string sessionId = null, string userIdentity = null, decimal? value = -1, string semver = null) { if (!startDate.HasValue || startDate > DateTimeOffset.Now.AddHours(1)) startDate = DateTimeOffset.Now.AddDays(-30); if (!endDate.HasValue || endDate > DateTimeOffset.Now.AddHours(1)) endDate = DateTimeOffset.Now; var ev = new PersistentEvent { OrganizationId = organizationIds.Random(TestConstants.OrganizationId), ProjectId = projectIds.Random(TestConstants.ProjectId), ReferenceId = referenceIds.Random(), Date = occurrenceDate ?? RandomData.GetDateTimeOffset(startDate, endDate), Value = value.GetValueOrDefault() >= 0 ? value : RandomData.GetDecimal(0, Int32.MaxValue), IsFixed = isFixed, IsHidden = isHidden, StackId = stackIds.Random() }; if (!String.IsNullOrEmpty(userIdentity)) ev.SetUserIdentity(userIdentity); if (generateData) { for (int i = 0; i < RandomData.GetInt(1, 5); i++) { string key = RandomData.GetWord(); while (ev.Data.ContainsKey(key) || key == Event.KnownDataKeys.Error) key = RandomData.GetWord(); ev.Data.Add(key, RandomData.GetWord()); } } if (generateTags) { for (int i = 0; i < RandomData.GetInt(1, 3); i++) { string tag = TestConstants.EventTags.Random(); if (!ev.Tags.Contains(tag)) ev.Tags.Add(tag); } } if (String.IsNullOrEmpty(type) || String.Equals(type, Event.KnownTypes.Error, StringComparison.OrdinalIgnoreCase)) { ev.Type = Event.KnownTypes.Error; // limit error variation so that stacking will occur if (_randomErrors == null) _randomErrors = new List<Error>(Enumerable.Range(1, 25).Select(i => GenerateError(maxErrorNestingLevel))); ev.Data[Event.KnownDataKeys.Error] = _randomErrors.Random(); } else { ev.Type = type.ToLower(); } if (!String.IsNullOrEmpty(sessionId)) ev.SetSessionId(sessionId); if (ev.IsSessionStart()) ev.Value = null; ev.SetVersion(semver); return ev; }