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> /// 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)); } }
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; }
/// <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 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); } } } }
protected override List <SessionActivityData> GetActivityExecutionData(DataLogContext context) { return(context.SessionData(_sessionId).Activities.Where(n => n.ActivityName == _activityName).ToList()); }
/// <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}"); }
protected override List <SessionActivityData> GetActivityExecutionData(DataLogContext context) { return(context.SessionData(_sessionId).Activities.Where(n => n.ResourceInstanceId == _instanceId).ToList()); }