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; }