/// <summary> /// Selects a summary of sessions and their Virtual Machine usage /// </summary> /// <returns></returns> public static dynamic SelectVirtualMachineSessionUsageSummary() { List <FrameworkClient> virtualMachines = null; List <SessionInfo> sessionSummarySet = null; using (AssetInventoryContext context = DbConnect.AssetInventoryContext()) { virtualMachines = context.FrameworkClients.ToList(); } //Get the list of sessions that are currently consuming VMs IEnumerable <string> sessionIds = virtualMachines.Select(s => s.SessionId).Distinct(); using (DataLogContext context = DbConnect.DataLogContext()) { sessionSummarySet = context.Sessions.Where(s => sessionIds.Contains(s.SessionId)).ToList(); } var now = DateTime.Now; var workingSet = ( from v in virtualMachines from s in sessionSummarySet.Where(s => s.SessionId == v.SessionId) orderby v.SortOrder select new { SessionId = s.SessionId, ScenarioName = s.SessionName, Owner = s.Owner, Status = s.Status, Dispatcher = s.Dispatcher, StartDate = s.StartDateTime?.LocalDateTime, EndDate = s.ProjectedEndDateTime?.LocalDateTime, TimeRunning = (s.StartDateTime == null ? "Unknown" : "{0:%d} Days {0:%h} Hours".FormatWith(now - s.StartDateTime)), XP = (v.FrameworkClientHostName != null && v.FrameworkClientHostName.StartsWith("X", StringComparison.OrdinalIgnoreCase)) ? 1 : 0, W7 = (v.FrameworkClientHostName != null && v.FrameworkClientHostName.StartsWith("W7", StringComparison.OrdinalIgnoreCase)) ? 1 : 0, W8 = (v.FrameworkClientHostName != null && v.FrameworkClientHostName.StartsWith("W8", StringComparison.OrdinalIgnoreCase)) ? 1 : 0, } ).ToList(); // summarize the results by grouping and counting dynamic result = (from f in workingSet group f by f.SessionId into s select new { SessionId = s.Key, ScenarioName = s.First().ScenarioName, Owner = s.First().Owner, Status = s.First().Status, Dispatcher = s.First().Dispatcher, StartDate = s.First().StartDate, EndDate = s.First().EndDate, TimeRunning = s.First().TimeRunning, XPCount = s.Sum(x => x.XP), WSevCount = s.Sum(x => x.W7), W8Count = s.Sum(x => x.W8), }).ToList(); return(result); }
private void LoadSeriesPoints() { using (DataLogContext context = DbConnect.DataLogContext()) { var counts = context.SessionData(_sessionId).ActivityCounts(GroupFields | SessionActivityGroupFields.EndDateTime).ToList(); foreach (var result in counts.OrderBy(n => CreateKey(n.Key))) { string keyText = CreateKey(result.Key); // If key is empty, skip it if (string.IsNullOrEmpty(keyText)) { continue; } // If this is one of our ignored keys, skip it if (_substringFilters.Any(s => keyText.Contains(s.Substring, StringComparison.OrdinalIgnoreCase))) { continue; } // If the series does not exist, create it Series series = Chart.Series.FindByName(keyText); if (series == null) { series = CreateSeries(keyText); Chart.Series.Add(series); CustomizeSeries(result.Key, series); } // Add the point series.Points.AddXY(result.Key.EndDateTime?.LocalDateTime, result.Count); } } }
/// <summary> /// refreshes data from Database /// </summary> protected void RefreshSessionInfo() { using (DataLogContext context = DbConnect.DataLogContext()) { _sessionInfo = context.Sessions.FirstOrDefault(s => s.SessionId == _sessionId); } }
private void configurationToolStripButton_Click(object sender, EventArgs e) { SessionSummary session = null; using (DataLogContext context = DbConnect.DataLogContext()) { session = context.DbSessions.Find(SelectedSessionId); context.Entry(session).Collection(n => n.Scenarios).Load(); } bool displayedSomething = false; foreach (SessionScenario sessionScenario in session.Scenarios) { if (!string.IsNullOrEmpty(sessionScenario.ConfigurationData)) { XmlDisplayDialog dialog = new XmlDisplayDialog(XDocument.Parse(sessionScenario.ConfigurationData)); dialog.Text = $"Session {sessionScenario.SessionId} Scenario {sessionScenario.RunOrder} Configuration Data".FormatWith(SelectedSessionId); dialog.Show(this); displayedSomething = true; } } if (!displayedSomething) { MessageBox.Show(this, $"No configuration data available for session {SelectedSessionId}.", "No Data Available", MessageBoxButtons.OK, MessageBoxIcon.Information); } }
private void remove_Button_Click(object sender, EventArgs e) { var row = GetFirstSelectedRow(); if (row != null) { DomainAccountReservation domainAccountReservation = row.DataBoundItem as DomainAccountReservation; DialogResult dialogResult = MessageBox.Show($"Removing Domain Account Reservation with session id'{domainAccountReservation.SessionId.Trim()}'. Do you want to continue?", "Delete Domain Account Reservation", MessageBoxButtons.YesNo, MessageBoxIcon.Question); SessionSummary status = null; if (dialogResult == DialogResult.Yes) { using (DataLogContext logContext = DbConnect.DataLogContext()) { status = logContext.DbSessions.FirstOrDefault(n => n.SessionId == domainAccountReservation.SessionId && n.Status == "Running"); } using (AssetInventoryContext context = DbConnect.AssetInventoryContext()) { if (status == null) { DomainAccountReservation asset = context.DomainAccountReservations.FirstOrDefault(n => n.SessionId == domainAccountReservation.SessionId); context.DomainAccountReservations.Remove(asset); context.SaveChanges(); } else { MessageBox.Show($"Domain Account Reservation cannot be removed for the session id '{domainAccountReservation.SessionId.Trim()}' as the session is still running", "Session is currently running", MessageBoxButtons.OK, MessageBoxIcon.Error); } } RefreshItems(); } } }
private void SetRowInfo(GridViewRowInfo row) { TriageDataInfo tdi = new TriageDataInfo(); DbAccess db = new DbAccess(GlobalSettings.Database); using (DataLogContext dlc = new DataLogContext(db.getConStrSQL())) { Guid aeId = (Guid)row.Cells["ActivityExecutionId"].Value; tdi.DeviceId = ActivityExecutionAssetUsage.GetByActivityExecutionId(dlc, aeId).AssetId; ActivityExecution ae = ActivityExecution.GetById(dlc, aeId); SessionDevice sd = SessionDevice.GetBySessionDeviceId(dlc, cboSessionIds.Text, tdi.DeviceId); tdi.ActivityType = ae.ActivityType; tdi.ActivityName = ae.ActivityName; tdi.UserName = ae.UserName; if (sd != null) { tdi.Firmware = sd.FirmwareRevision; tdi.FirmwareDatecode = sd.FirmwareDatecode; tdi.Model = sd.DeviceName; tdi.IPAddress = sd.IpAddress; tdi.Product = sd.ProductName; } var aepList = ActivityExecutionPerformance.GetByActivityExecutionId(dlc, aeId); tdi.AddPerformanceMarkers(aepList); SetPerformanceMarkers(tdi.PerformanceMarkers); lblDeviceId.Text = tdi.DeviceId; lblIPAddress.Text = tdi.IPAddress; lblModelInfo.Text = tdi.Model; lblProduct.Text = tdi.Product; lblFirmwareDatecode.Text = tdi.FirmwareDatecode; lblFirmwareRevision.Text = tdi.Firmware; lblUserId.Text = tdi.UserName; lbActivityType.Text = tdi.ActivityType; lblActivityName.Text = tdi.ActivityName; } byte[] thumbnail = (byte[])row.Cells["Thumbnail"].Value; if (row.Cells["ControlIds"].Value != null) { string regExp = @"[\n\r]+"; string[] temp = Regex.Split(row.Cells["ControlIds"].Value.ToString(), regExp); for (int ctr = 0; ctr < temp.Length; ctr++) { errMessageAndroid.Text += temp[ctr]; } } if (row.Cells["Reason"].Value != null) { rtbErrorMessage.Text = row.Cells["Reason"].Value.ToString(); } tabControlInfo.SelectedIndex = 0; SetImage(pbThumbnail, thumbnail); pbControlPanel.Image = null; }
/// <summary> /// Gets the activity counts for the specified session. /// </summary> /// <param name="sessionId">The session ID.</param> /// <returns>The activity counts for the specified session, grouped by result.</returns> public Dictionary <PluginResult, int> GetSessionActivityCounts(string sessionId) { using (DataLogContext context = new DataLogContext(_dataLogConnectionString)) { return(context.SessionData(sessionId).ActivityCounts(SessionActivityGroupFields.Status) .ToDictionary(n => EnumUtil.Parse <PluginResult>(n.Key.Status), n => n.Count)); } }
/// <summary> /// Initializes a new instance of the <see cref="SessionNotesForm"/> class. /// </summary> public SessionNotesForm() { InitializeComponent(); UserInterfaceStyler.Configure(this, FormStyle.SizeableDialog); _enterpriseTestContext = new EnterpriseTestContext(); _dataLogContext = DbConnect.DataLogContext(); LoadComboBoxes(); }
private void btnSessionTriage_Click(object sender, EventArgs e) { string errMsg = string.Empty; try { string sessionId = cboSessionIds.Text; if (sessionId.Length == 8) { rgvTriageData.Rows.Clear(); rgvPerformanceMarkers.Rows.Clear(); rtbErrorMessage.Text = string.Empty; pbControlPanel.Image = null; pbThumbnail.Image = null; DbAccess db = new DbAccess(GlobalSettings.Database); using (DataLogContext dlContext = new DataLogContext(db.getConStrSQL())) { var myTriageData = TriageData.GetTriageDataBySessionId(dlContext, sessionId).ToList(); if (myTriageData.Any()) { dtpStart.Value = myTriageData.First().TriageDateTime; dtpEnd.Value = myTriageData.Last().TriageDateTime; triageDataListBindingSource.DataSource = myTriageData; triageDataListBindingSource.ResetBindings(false); } else { errMsg = "TriageData does not contain data for the given session ID " + sessionId; } } pbControlPanel.Image = null; pbThumbnail.Image = null; } else { errMsg = "SessionId is not correctly formatted."; } } catch (Exception ex) { if (!string.IsNullOrEmpty(errMsg)) { log.Warn(errMsg); } else { log.Warn(ex); ShowErrorMessage(ex); } } if (!string.IsNullOrEmpty(errMsg)) { MessageBox.Show(errMsg, @"Session ID", MessageBoxButtons.OK, MessageBoxIcon.Warning); } }
private void LoadSessionIds() { DbAccess db = new DbAccess(GlobalSettings.Database); using (DataLogContext td = new DataLogContext(db.getConStrSQL())) { _sessionIds = TriageData.SessionIds(td, dtpStart.Value.ToUniversalTime(), dtpEnd.Value.ToUniversalTime()); cboSessionIds.DataSource = _sessionIds; } }
/// <summary> /// Refreshes the scenario list. /// </summary> public void RefreshScenarioList() { List <SessionDropDownItem> items = new List <SessionDropDownItem>(); using (DataLogContext context = DbConnect.DataLogContext()) { var sessions = context.Sessions .OrderByDescending(n => n.StartDateTime) .Select(n => new { n.SessionId, n.SessionName, n.Owner, n.StartDateTime }) .AsEnumerable() .Select(n => new SessionDropDownItem { SessionId = n.SessionId, SessionName = n.SessionName ?? "Undefined", Owner = n.Owner ?? "Undefined", StartDate = n.StartDateTime?.LocalDateTime ?? DateTime.MinValue }).ToList(); // Only include sessions that have activities var sessionCounts = context.SessionActivityCounts(); items.AddRange(sessions.Where(n => sessionCounts.ContainsKey(n.SessionId))); } sessionId_ComboBox.DataSource = null; sessionId_ComboBox.DataSource = items; if (items.Count() > 0) { if (!string.IsNullOrEmpty(_sessionId)) { SessionDropDownItem itemToSelect = items.FirstOrDefault(i => i.SessionId == _sessionId); if (itemToSelect != null) { sessionId_ComboBox.SelectedItem = itemToSelect; SetSelectedSession(); } } else { // Default to the most recent session run by the logged in user SessionDropDownItem mostRecentSession = items.FirstOrDefault(i => i.Owner == UserManager.CurrentUserName); sessionId_ComboBox.SelectedItem = mostRecentSession ?? sessionId_ComboBox.Items[0]; SetSelectedSession(); } } }
private static void DeleteSessionData(DataLogContext context, SessionInfo session) { try { SqlParameter sessionParameter = new SqlParameter("@sessionId", session.SessionId); context.Database.ExecuteSqlCommand("del_SessionData @sessionId", sessionParameter); LogInfo(GetLogString(session)); } catch (SqlException ex) { LogError($"Error executing del_SessionData for {session.SessionId}", ex); } }
private void UpdateTestResult() { Collection <int> testcaseIds = new Collection <int>(); Dictionary <int, bool> testIdResult = new Dictionary <int, bool>(); //using (SqlAdapter datalogsqlAdapter = new SqlAdapter(DataLogSqlConnection.ConnectionString)) //{ // //string sqlText = "select (select count(*) from ActivityExecution where SessionId = '{0}' and UpdateType = 'Completed') as PassedCount, (select count(*) from ActivityExecution where SessionId = '{0}') as TotalCount".FormatWith(_ticket.SessionId); // string sqlText = "select VirtualResourceMetadataId, MIN(case when UpdateType = 'Completed' then 1 else 0 end) as TestResult from ActivityExecution where SessionId = {0} group by VirtualResourceMetadataId".FormatWith(_ticket.SessionId); // var reader = datalogsqlAdapter.ExecuteReader(sqlText); // if (reader != null) // { // while (reader.Read()) // { // TestIdResult.Add(Guid.Parse(reader["VirtualResourceId"].ToString()), Convert.ToBoolean(reader.GetInt32(1))) ; // } // } // reader.Close(); //} DataLogContext traceContext = DbConnect.DataLogContext(); { var activityExecutions = traceContext.SessionData(_ticket.SessionId).Activities; var failedActivities = activityExecutions.Where(x => x.Status == "Failed"); using (EnterpriseTestContext context = new EnterpriseTestContext()) { foreach (var metadataId in activityExecutions.Select(x => x.ResourceMetadataId.Value).Distinct()) { testcaseIds.Add(VirtualResource.Select(context, VirtualResourceMetadata.Select(context, metadataId).VirtualResourceId).TestCaseId); } foreach (var testcaseId in testcaseIds.Distinct()) { testIdResult.Add(testcaseId, true); } foreach (var failedActivity in failedActivities) { testIdResult.Remove(VirtualResource.Select(context, VirtualResourceMetadata.Select(context, failedActivity.ResourceMetadataId.Value).VirtualResourceId).TestCaseId); testIdResult.Add(VirtualResource.Select(context, VirtualResourceMetadata.Select(context, failedActivity.ResourceMetadataId.Value).VirtualResourceId).TestCaseId, false); } } } _scenarioList.ElementAt(_currentScenarioIndex).TestResult = testIdResult; }
private void RefreshGrid() { if (sessionData_GridView.InvokeRequired) //Make sure we're on the UI thread { sessionData_GridView.Invoke(new MethodInvoker(this.RefreshGrid)); } else { sessionData_GridView.DataSource = null; // Store the current location so we can restore it int currentLocation = sessionData_GridView.SelectedRows.Any() ? sessionData_GridView.SelectedRows[0].Index : 0; // Load the list of sessions using (DataLogContext context = DbConnect.DataLogContext()) { var sessionActivityCounts = context.SessionActivityCounts(); var sessions = context.DbSessions.AsEnumerable().Select(n => new { n.SessionId, n.Cycle, n.SessionName, n.Type, n.Tags, n.Owner, StartDateTime = n.StartDateTime.HasValue ? n.StartDateTime.Value.ToLocalTime() : n.StartDateTime, EndDateTime = n.EndDateTime.HasValue ? n.EndDateTime.Value.ToLocalTime() : n.EndDateTime, ExpirationDateTime = n.ExpirationDateTime.HasValue ? n.ExpirationDateTime.Value.ToLocalTime() : n.ExpirationDateTime, n.Status, n.ShutdownState, n.Dispatcher, ActivityCount = sessionActivityCounts.ContainsKey(n.SessionId) ? sessionActivityCounts[n.SessionId] : 0 }); sessionData_GridView.DataSource = sessions; } //Restore the current location if (sessionData_GridView.Rows.Any()) { if (sessionData_GridView.Rows.Count <= currentLocation) { currentLocation = sessionData_GridView.Rows.Count - 1; } sessionData_GridView.TableElement.ScrollToRow(currentLocation); sessionData_GridView.Rows[currentLocation].IsCurrent = true; } } }
/// <summary> /// Gets the error list. /// </summary> /// <param name="point">The point.</param> /// <returns></returns> protected override IQueryable <SessionActivityCount> GetErrorList(DataLogContext context, DataPoint point) { if (point == null) { throw new ArgumentNullException("point"); } string category = point.GetCustomProperty("Category"); string updateType = point.GetCustomProperty("UpdateType"); return(context.SessionData(SessionId) .ActivityCounts(GroupFields | SessionActivityGroupFields.ResultMessage) .Where(n => n.Key.ResultCategory == category && n.Key.Status == updateType)); }
private void RetrieveTriageData(string sessionId) { DbAccess db = new DbAccess(GlobalSettings.Database); using (DataLogContext dlContext = new DataLogContext(db.getConStrSQL())) { var myTriageData = TriageData.GetTriageDataBySessionId(dlContext, sessionId).ToList(); _triageDataList = new TriageDataList(); _triageDataList.AddRange(myTriageData); BindTriageDataGrid(_triageDataList); lblCountErrors.Text = $@"Error Count={myTriageData.Count}"; } pbControlPanel.Image = null; pbThumbnail.Image = null; }
private void GetSessionActivityDevices() { _triageDataInfoList = new TriageDataInfoList(); foreach (TriageData td in _triageDataList) { TriageDataInfo tdi = new TriageDataInfo(); DbAccess db = new DbAccess(GlobalSettings.Database); using (DataLogContext dlc = new DataLogContext(db.getConStrSQL())) { var assetUsage = ActivityExecutionAssetUsage.GetByActivityExecutionId(dlc, td.ActivityExecutionId); if (assetUsage != null) { tdi.DeviceId = assetUsage.AssetId; ActivityExecution ae = ActivityExecution.GetById(dlc, td.ActivityExecutionId); SessionDevice sd = SessionDevice.GetBySessionDeviceId(dlc, cboSessionIds.Text, tdi.DeviceId); tdi.ActivityType = ae.ActivityType; tdi.ActivityName = ae.ActivityName; tdi.UserName = ae.UserName; if (sd != null) { tdi.Firmware = sd.FirmwareRevision; tdi.FirmwareDatecode = sd.FirmwareDatecode; tdi.Model = sd.DeviceName; tdi.IPAddress = sd.IpAddress; tdi.Product = sd.ProductName; } var aepList = ActivityExecutionPerformance.GetByActivityExecutionId(dlc, td.ActivityExecutionId); tdi.AddPerformanceMarkers(aepList); } else { rtbErrorMessage.Text = $@"Missing Activity Asset Usage for activity {td.ActivityExecutionId}"; MessageBox.Show($@"Missing Activity Asset Usage for activity {td.ActivityExecutionId}"); return; } } tdi.ActivityExecutionId = td.ActivityExecutionId; _triageDataInfoList.Add(tdi); } }
/// <summary> /// Selects a relationship between Virtual Machines and current Sessions /// </summary> /// <returns>A list that represents the left outer join of these two tables</returns> public static dynamic SelectVirtualMachineSessionInfo() { List <FrameworkClient> virtualMachines = null; List <SessionInfo> sessionSummarySet = null; using (AssetInventoryContext context = DbConnect.AssetInventoryContext()) { virtualMachines = context.FrameworkClients.ToList(); } //Get the list of sessions that are currently consuming VMs IEnumerable <string> sessionIds = virtualMachines.Select(s => s.SessionId).Distinct(); using (DataLogContext context = DbConnect.DataLogContext()) { sessionSummarySet = context.Sessions.Where(s => sessionIds.Contains(s.SessionId)).ToList(); } dynamic results = null; results = ( from v in virtualMachines from s in sessionSummarySet.Where(s => s.SessionId == v.SessionId).DefaultIfEmpty() orderby v.SortOrder select new { HoldId = v.HoldId, LastUpdated = v.LastUpdated, Name = v.FrameworkClientHostName, PlatformUsage = v.PlatformUsage, PowerState = v.PowerState, SessionId = v.SessionId, SortOrder = v.SortOrder, UsageState = v.UsageState, Environment = v.Environment, Owner = (s == null ? string.Empty : s.Owner), Status = (s == null ? string.Empty : s.Status), StartDate = s?.StartDateTime?.LocalDateTime } ).ToList(); return(results); }
private void exportMemoryToolStripButton_Click(object sender, EventArgs e) { // Get the folder where the user wants to place the compressed memory xml files. if (memoryFolderBrowserDialog.ShowDialog() == DialogResult.OK) { using (DataLogContext dataLogDb = DbConnect.DataLogContext()) { // Get the list of devices used in the selected session. var sessionDevices = dataLogDb.DbSessions.SelectMany(n => n.Devices).Where(n => n.SessionId == SelectedSessionId).Select(n => n.DeviceId); foreach (string deviceId in sessionDevices) { // Create a Zip file to contain the memory XML strings. string deviceIdArchiveFilename = $"{SelectedSessionId}_{deviceId}.zip"; string deviceIdArchineFilePath = Path.Combine(memoryFolderBrowserDialog.SelectedPath, deviceIdArchiveFilename); using (FileStream deviceIdArchiveFile = new FileStream(deviceIdArchineFilePath, FileMode.OpenOrCreate)) { using (ZipArchive deviceIdArchive = new ZipArchive(deviceIdArchiveFile, ZipArchiveMode.Update)) { string sql = "SELECT dmx.MemoryXml, sd.ProductName, FORMAT(dbo.fn_CalcLocalDateTime(dms.SnapshotDateTime), 'yyyy.MM.dd-HH.mm.ss.fff') AS SnapshotDateTime " + "FROM DeviceMemoryXml dmx " + "JOIN DeviceMemorySnapshot dms ON dmx.DeviceMemorySnapshotId = dms.DeviceMemorySnapshotId " + "JOIN SessionDevice sd ON dms.DeviceId = sd.DeviceId AND dms.SessionId = sd.SessionId " + "WHERE dms.SessionId = @p0 AND dms.DeviceId = @p1"; IEnumerable <MemoryXmlResult> memResults = dataLogDb.Database.SqlQuery <MemoryXmlResult>(sql, SelectedSessionId, deviceId); foreach (var result in memResults) { // Create an entry in the archive file. string deviceIdMemEntryName = $"{SelectedSessionId}_{result.ProductName}_{deviceId}_{result.SnapshotDateTime}.xml"; ZipArchiveEntry deviceIdMemEntry = deviceIdArchive.CreateEntry(deviceIdMemEntryName); using (StreamWriter writer = new StreamWriter(deviceIdMemEntry.Open())) { writer.Write(result.MemoryXml); } } } } } } } }
public IEnumerable <string> RemoveExpiredSessionData() { LogInfo(new string('-', 60)); List <string> expiredSessions = new List <string>(); try { using (DataLogContext context = new DataLogContext(_connectionString)) { var expired = context.Sessions.Where(n => n.ExpirationDateTime < DateTime.UtcNow && n.ShutdownState != "NotStarted" || n.ExpirationDateTime < DbFunctions.AddDays(DateTime.UtcNow, -30)).ToList(); if (expired.Any()) { LogInfo($"{expired.Count} expired sessions found."); // This could take a while - set an infinite timout context.Database.CommandTimeout = 0; foreach (SessionInfo session in expired) { DeleteSessionData(context, session); } expiredSessions.AddRange(expired.Select(n => n.SessionId)); } else { LogInfo("No expired sessions found."); } } } catch (Exception ex) { LogError(ex); } LogInfo(new string('-', 60)); return(expiredSessions); }
private void deleteSessionInfoToolStripButton_Click(object sender, EventArgs e) { if (MessageBox.Show("Delete saved information for the selected session?", "Delete Session Info", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { Cursor.Current = Cursors.WaitCursor; // Mark the selected session for deletion by the cleanup process. using (DataLogContext context = DbConnect.DataLogContext()) { SessionSummary session = context.DbSessions.FirstOrDefault(s => s.SessionId == SelectedSessionId); if (session != null) { session.ExpirationDateTime = DateTime.UtcNow; } context.SaveChanges(); } Cursor.Current = Cursors.Default; RefreshGrid(); } }
private void ActivityTotalsGraph_DataPointClick(object sender, DataPointClickEventArgs e) { SortableBindingList <ErrorCount> errorList = new SortableBindingList <ErrorCount>(); using (DataLogContext context = DbConnect.DataLogContext()) { foreach (SessionActivityCount result in GetErrorList(context, e.Point)) { errorList.Add(new ErrorCount(result.Key.ResultMessage, result.Count)); } } if (errorList.Count > 0 && !(errorList.Count == 1 && string.IsNullOrEmpty(errorList[0].Error))) { using (ErrorListForm form = new ErrorListForm(errorList, e.Point.AxisLabel)) { form.ShowDialog(this); } } }
private void LoadSeriesPoints(Series series) { using (DataLogContext context = DbConnect.DataLogContext()) { var counts = context.SessionData(_sessionId).ActivityCounts(GroupFields).ToList(); foreach (var result in counts.OrderByDescending(n => CreateKey(n.Key))) { string keyText = CreateKey(result.Key); // If key is empty, skip it if (string.IsNullOrEmpty(keyText)) { continue; } // If this is one of our ignored keys, skip it if (_substringFilters.Any(s => keyText.Contains(s.Substring, StringComparison.OrdinalIgnoreCase)) || _ignoredKeys.Contains(keyText)) { continue; } // If the point already exists, just update it DataPoint point = series.Points.FirstOrDefault(n => n.AxisLabel == keyText); if (point != null) { point.SetValueY(result.Count); } else { // Create the point int addedIndex = series.Points.AddY(result.Count); point = series.Points[addedIndex]; // Add key and custom data point.AxisLabel = keyText; CustomizePoint(result.Key, point); } } } }
private void pbThumbnail_DoubleClick(object sender, EventArgs e) { try { string triageDataId = rgvTriageData.SelectedRows[0].Cells["TriageDataId"].Value.ToString(); Guid tdId = Guid.Parse(triageDataId); DbAccess db = new DbAccess(GlobalSettings.Database); using (DataLogContext dlc = new DataLogContext(db.getConStrSQL())) { byte[] picture = TriageData.GetTriageDataById(dlc, tdId).ControlPanelImage; SetImage(pbControlPanel, picture); tabControlInfo.SelectedIndex = 1; } } catch (Exception ex) { log.Error(ex); ShowErrorMessage(ex); } }
/// <summary> /// Checks the specified user with the specified session. If the user is the owner, OR the user is at least a manager, returns true. /// </summary> /// <param name="user"></param> /// <param name="sessionId"></param> /// <returns>true if the user is the owner of the session, OR the user is an admin.</returns> private bool IsOwnerOrManager(User user, string sessionId) { bool result = user != null; if (result) { using (DataLogContext context = DbConnect.DataLogContext()) { SessionInfo sessionSummary = context.Sessions.FirstOrDefault(s => s.SessionId == sessionId); if (sessionSummary != null) { result = (user.InRole(UserRole.Manager) || sessionSummary.Owner.Equals(user.UserName, StringComparison.InvariantCultureIgnoreCase)); } else { //Unable to get Owner information. Return result based on role only. result = user.InRole(UserRole.Manager); } } } return(result); }
private void extendToolStripButton_Click(object sender, EventArgs e) { string result = InputDialog.Show("Select expiration extension for this Session.", "Extend Expiration", EnumUtil.GetDescription(GetDefaultLogRetention()), SessionLogRetentionHelper.ExpirationList); if (!string.IsNullOrEmpty(result)) { SessionLogRetention extension = EnumUtil.GetByDescription <SessionLogRetention>(result); using (DataLogContext context = DbConnect.DataLogContext()) { SessionSummary session = context.DbSessions.FirstOrDefault(s => s.SessionId == SelectedSessionId); if (session != null) { session.ExpirationDateTime = extension.GetExpirationDate(session.ExpirationDateTime.Value); } context.SaveChanges(); } RefreshGrid(); } }
protected override List <SessionActivityData> GetActivityExecutionData(DataLogContext context) { return(context.SessionData(_sessionId).Activities.Where(n => n.ActivityName == _activityName).ToList()); }
protected virtual List <SessionActivityData> GetActivityExecutionData(DataLogContext context) { throw new NotImplementedException(); }
/// <summary> /// Checks the current time interval for any failures. /// </summary> /// <param name="state"></param> public static void FailureNotify(object state) { FailNotificationInfo notificationInfo = (FailNotificationInfo)state; DartLogCollectorClient dartClient = null; TraceFactory.Logger.Debug("Executing Failure Check"); try { using (DataLogContext context = DbConnect.DataLogContext()) { // Only grab activities for the last minute DateTime now = DateTime.Now; DateTime adjustedTimeSpan = now - TimeSpan.FromMinutes(1); // Get activities for this session, grouped by device var assetActivities = from activity in context.SessionData(notificationInfo.SessionId).Activities from asset in activity.Assets where activity.EndDateTime <now && activity.EndDateTime> adjustedTimeSpan orderby activity.EndDateTime group new { activity.ActivityName, activity.Status, activity.EndDateTime, activity.ResultMessage } by asset; if (notificationInfo.CollectDartLog) { dartClient = new DartLogCollectorClient(); } foreach (var deviceData in assetActivities) //deviceData.Key = AssetId { if (!notificationInfo.FailureInfo.ContainsKey(deviceData.Key)) { notificationInfo.FailureInfo.Add(deviceData.Key, new DeviceFailureInfo()); } DeviceFailureInfo deviceFailureInfo = notificationInfo.FailureInfo[deviceData.Key]; foreach (var activity in deviceData) { if (activity.Status == "Failed" || activity.Status == "Error") { deviceFailureInfo.FailureCount++; } else if (activity.Status == "Passed") //reset if you get a pass. { deviceFailureInfo.FailureCount = 0; deviceFailureInfo.EmailSent = false; } //Check against pull triggers to determine whether or not we have to automatically pull dart logs. if (_triggerList.Count() != 0 && deviceFailureInfo.EmailSent == false && !string.IsNullOrEmpty(activity.ResultMessage)) { char[] separators = new char[] { '?' }; foreach (var item in _triggerList) { if (deviceFailureInfo.EmailSent == false) { int index = 0; var stringComponents = item.Split(separators, StringSplitOptions.RemoveEmptyEntries); foreach (var stringPiece in stringComponents) { //Look for the first piece index = activity.ResultMessage.IndexOf(stringPiece, index); if (index == -1) { break; } index++; } if (index != -1) { TraceFactory.Logger.Debug("Sending Notification Email"); dartClient.CollectLog(deviceData.Key, notificationInfo.SessionId, notificationInfo.ToAddresses); notificationInfo.Message.Body = notificationInfo.Message.Body + string.Format(": Device- {0}, Activity: {1}, Time: {2}, Error string match found", deviceData.Key, activity.ActivityName, activity.EndDateTime); notificationInfo.SmtpMail.Send(notificationInfo.Message); notificationInfo.ResetMessageBody(); deviceFailureInfo.EmailSent = true; } } } } if (deviceFailureInfo.FailureCount >= notificationInfo.RuleValue && deviceFailureInfo.EmailSent == false) { if (notificationInfo.CollectDartLog) { dartClient.CollectLog(deviceData.Key, notificationInfo.SessionId, notificationInfo.ToAddresses); } TraceFactory.Logger.Debug("Sending Notification Email"); notificationInfo.Message.Body = notificationInfo.Message.Body + string.Format(": Device- {0}, Activity: {1}, Time: {2}", deviceData.Key, activity.ActivityName, activity.EndDateTime); notificationInfo.SmtpMail.Send(notificationInfo.Message); notificationInfo.ResetMessageBody(); TraceFactory.Logger.Debug($"Device {deviceData.Key} breached the failure threshold of {notificationInfo.RuleValue}. Email Sent. CollectDartLog={notificationInfo.CollectDartLog}"); deviceFailureInfo.EmailSent = true; } } } } } catch (Exception e) { TraceFactory.Logger.Debug(e.ToString()); } }
private void UpdateTestResult(string sessionId) { SessionSummary summary; StfSessionTicket sessionTicket; string testStatus = "Pass"; string errorMessage = string.Empty; SessionExecutionDictionary.TryGetValue(sessionId, out sessionTicket); if (sessionTicket == null) { return; } using (DataLogContext context = DbConnect.DataLogContext()) { summary = context.DbSessions.First(n => n.SessionId == sessionId); if (context.SessionData(sessionId).Activities.Any(x => x.Status == "Failed")) { testStatus = "Fail"; } var errorMessages = context.SessionData(sessionId).Activities.Where(x => x.Status == "Error") .Select(x => x.ResultMessage); if (errorMessages.Any()) { errorMessage = string.Join(",", errorMessages); } } TraceFactory.Logger.Debug($"Updating status of test: {sessionTicket.TestCaseId} as {testStatus}"); var exchangeValue = string.Format( "{{u'Message': {9}, u'TestExecutionResults': [{{u'TestCaseURL': u'{0}',u'LocalTestExecutionFolder': u'{1}', u'TestCaseId': {2}, u'TestCaseName': u'{3}'," + " u'TestExecutionID': u'{4}', u'ExecutionData': [{{u'MetaData': [{{u'metadata_name': u'TestResourcesProvisioningBeginTS', u'metadata_value': u'{5}'}}," + " {{u'metadata_name': u'TestResourcesProvisioningEndTS', u'metadata_value': u'{5}'}}," + " {{u'metadata_name': u'TestResourcesDecommissioningBeginTS', u'metadata_value': u'{6}'}}," + " {{u'metadata_name': u'TestResourcesDecommissioningEndTS', u'metadata_value': u'{6}'}}]," + " u'Run': u'0', u'TestCaseID': {2}, u'BeginTime': u'{5}', u'EndTime': u'{6}', u'Result': u'{7}'}}]}}], u'Error': {8}}}", sessionTicket.ScenarioId, "STF", sessionTicket.TestCaseId, sessionTicket.SessionName, sessionTicket.TestExecutionId, summary.StartDateTime, summary.EndDateTime, testStatus, string.IsNullOrEmpty(errorMessage) ? "False" : "True", string.IsNullOrEmpty(errorMessage) ? "None" : $"u'{errorMessage}'"); var exchangeMessage = "{ \"project\": \"TestResultsProcessor\", \"token\": \"process_test_results\", " + $"\"parameter\": [{{ \"name\": \"TEST_RESULT\",\"value\": \"{exchangeValue}\"}}]}}"; HttpClientHandler handler = new HttpClientHandler(); HttpClient client = new HttpClient(handler); string bodyString = "{\"notification_info\": [{\"notification_type\": \"message\"," + $"\"notification_params\":{{\"use_btf_messaging\": false, \"connection_string\": \"amqp://*****:*****@{_btfMessagingServerName}:8080/\"," + "\"exchange_name\": \"test_execution_results\",\"exchange_type\": \"direct\",\"routing_key\": \"ROUTINGKEY\"," + $"\"message_info\": {exchangeMessage}}}}}]}}"; var resultMessage = client.PostAsJsonAsync("https://btf-preprod-ext.psr.rd.hpicorp.net/ns/v1/submitnotificationinfo", bodyString); if (resultMessage.Result.IsSuccessStatusCode) { TraceFactory.Logger.Debug($"Published the result to {_btfMessagingServerName}"); } //ConnectionFactory connectionFactory = // new ConnectionFactory // { // HostName = _btfMessagingServerName, // Port = 8080, // UserName = "******", // Password = "******" // }; //try //{ // using (var connection = connectionFactory.CreateConnection()) // { // using (var channel = connection.CreateModel()) // { // IBasicProperties basicProperties = new BasicProperties // { // AppId = "remote-build", // ContentType = "application/json" // }; // channel.BasicPublish("test_execution_results", "ROUTINGKEY", basicProperties, // Encoding.UTF8.GetBytes(exchangeMessage)); // } // } //} //catch (BrokerUnreachableException brokerUnreachable) //{ // TraceFactory.Logger.Debug($"Unable to reach the messaging server. {brokerUnreachable.Message}"); //} //TraceFactory.Logger.Debug($"Published the result to {_btfMessagingServerName}"); }