Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        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);
     }
 }
Esempio n. 4
0
        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();
                }
            }
        }
Esempio n. 6
0
        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;
        }
Esempio n. 7
0
 /// <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));
     }
 }
Esempio n. 8
0
 /// <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();
 }
Esempio n. 9
0
        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);
            }
        }
Esempio n. 10
0
        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;
            }
        }
Esempio n. 11
0
        /// <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();
                }
            }
        }
Esempio n. 12
0
 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);
     }
 }
Esempio n. 13
0
        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;
        }
Esempio n. 14
0
        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));
        }
Esempio n. 16
0
        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;
        }
Esempio n. 17
0
        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);
            }
        }
Esempio n. 18
0
        /// <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);
        }
Esempio n. 19
0
        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);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
Esempio n. 20
0
        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);
        }
Esempio n. 21
0
        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);
                }
            }
        }
Esempio n. 23
0
        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);
                    }
                }
            }
        }
Esempio n. 24
0
        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);
            }
        }
Esempio n. 25
0
        /// <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);
        }
Esempio n. 26
0
        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();
            }
        }
Esempio n. 27
0
 protected override List <SessionActivityData> GetActivityExecutionData(DataLogContext context)
 {
     return(context.SessionData(_sessionId).Activities.Where(n => n.ActivityName == _activityName).ToList());
 }
Esempio n. 28
0
 protected virtual List <SessionActivityData> GetActivityExecutionData(DataLogContext context)
 {
     throw new NotImplementedException();
 }
Esempio n. 29
0
        /// <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());
            }
        }
Esempio n. 30
0
        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}");
        }