public override async Task <bool> SendExecutionLogToCentralDBAsync(LiteDB.ObjectId runsetId, Guid executionId, eDeleteLocalDataOnPublish deleteLocalData) { //Get the latest execution details from LiteDB LiteDbManager dbManager = new LiteDbManager(new ExecutionLoggerHelper().GetLoggerDirectory(WorkSpace.Instance.Solution.LoggerConfigurations.CalculatedLoggerFolder)); LiteDbRunSet liteDbRunSet = dbManager.GetLatestExecutionRunsetData(runsetId?.ToString()); List <string> screenshotList = PopulateMissingFieldsAndGetScreenshotsList(liteDbRunSet, executionId); CentralExecutionLoggerHelper centralExecutionLogger = new CentralExecutionLoggerHelper(WorkSpace.Instance.Solution.LoggerConfigurations.CentralLoggerEndPointUrl); //Map the data to AccountReportRunset Object AccountReportRunSet accountReportRunSet = centralExecutionLogger.MapDataToAccountReportObject(liteDbRunSet); accountReportRunSet.ExecutionId = executionId; //Publish the Data and screenshots to Central DB await centralExecutionLogger.SendRunsetExecutionDataToCentralDBAsync(accountReportRunSet); await centralExecutionLogger.SendScreenShotsToCentralDBAsync(executionId, screenshotList); //Delete local data if configured if (deleteLocalData == eDeleteLocalDataOnPublish.Yes) { try { dbManager.DeleteDocumentByLiteDbRunSet(liteDbRunSet); } catch (Exception ex) { Reporter.ToLog(eLogLevel.ERROR, "Error when deleting local LiteDB data after Publis", ex); } foreach (string screenshot in screenshotList) { try { File.Delete(screenshot); } catch (Exception ex) { Reporter.ToLog(eLogLevel.DEBUG, "Deleting screenshots after published to central db", ex); } } } return(true); }
public override string CalculateExecutionJsonData(LiteDbRunSet liteDbRunSet, HTMLReportConfiguration reportTemplate) { CentralExecutionLoggerHelper centralExecutionLogger = new CentralExecutionLoggerHelper(); AccountReportRunSet accountReportRunSet = centralExecutionLogger.MapDataToAccountReportObject(liteDbRunSet); string json = JsonConvert.SerializeObject(accountReportRunSet, Formatting.Indented); JObject runSetObject = JObject.Parse(json); #region Generate JSON //Remove Fields from json which are not selected foreach (HTMLReportConfigFieldToSelect runsetFieldToRemove in reportTemplate.RunSetSourceFieldsToSelect.Where(x => !x.IsSelected)) { runSetObject.Property(GetFieldToRemove(runsetFieldToRemove.FieldKey)).Remove(); } //RunnersCollection HTMLReportConfigFieldToSelect runnerField = reportTemplate.RunSetSourceFieldsToSelect.Where(x => x.IsSelected && x.FieldKey == "RunnersColl").FirstOrDefault(); if (runnerField != null) { if (reportTemplate.GingerRunnerSourceFieldsToSelect.Select(x => x.IsSelected).ToList().Count > 0) { JArray runnerArray = (JArray)runSetObject[runnerField.FieldKey]; foreach (JObject jRunnerObject in runnerArray) { foreach (HTMLReportConfigFieldToSelect runnerFieldToRemove in reportTemplate.GingerRunnerSourceFieldsToSelect.Where(x => !x.IsSelected)) { jRunnerObject.Property(GetFieldToRemove(runnerFieldToRemove.FieldKey)).Remove(); } //BusinessFlowsCollection HTMLReportConfigFieldToSelect bfField = reportTemplate.GingerRunnerSourceFieldsToSelect.Where(x => x.IsSelected && x.FieldKey == "BusinessFlowsColl").FirstOrDefault(); if (bfField != null) { if (reportTemplate.BusinessFlowSourceFieldsToSelect.Select(x => x.IsSelected).ToList().Count > 0) { JArray bfArray = (JArray)jRunnerObject[bfField.FieldKey]; foreach (JObject jBFObject in bfArray) { foreach (HTMLReportConfigFieldToSelect bfFieldToRemove in reportTemplate.BusinessFlowSourceFieldsToSelect.Where(x => !x.IsSelected)) { jBFObject.Property(GetFieldToRemove(bfFieldToRemove.FieldKey)).Remove(); } //ActivityGroupsCollection HTMLReportConfigFieldToSelect activityGroupField = reportTemplate.BusinessFlowSourceFieldsToSelect.Where(x => x.IsSelected && x.FieldKey == "ActivitiesGroupsColl").FirstOrDefault(); if (activityGroupField != null) { if (reportTemplate.ActivityGroupSourceFieldsToSelect.Select(x => x.IsSelected).ToList().Count > 0) { JArray activityGroupArray = (JArray)jBFObject[activityGroupField.FieldKey]; foreach (JObject jActivityGroupObject in activityGroupArray) { foreach (HTMLReportConfigFieldToSelect activityGroupFieldToRemove in reportTemplate.ActivityGroupSourceFieldsToSelect.Where(x => !x.IsSelected)) { jActivityGroupObject.Property(GetFieldToRemove(activityGroupFieldToRemove.FieldKey)).Remove(); } //ActivitiesCollection HTMLReportConfigFieldToSelect activityFieldCheck = reportTemplate.ActivityGroupSourceFieldsToSelect.Where(x => x.IsSelected && x.FieldKey == "ActivitiesColl").FirstOrDefault(); if (activityFieldCheck != null) { if (reportTemplate.ActivitySourceFieldsToSelect.Select(x => x.IsSelected).ToList().Count > 0) { JArray activityArray = (JArray)jActivityGroupObject[activityFieldCheck.FieldKey]; foreach (JObject jActivityObject in activityArray) { //Calculate ErrorDetails And add it to Activity Level StringBuilder errorDetailsNew = new StringBuilder(); string errorDetails = null; JArray actionsArray = (JArray)jActivityObject["ActionsColl"]; foreach (JObject jActionObject in actionsArray) { if (!string.IsNullOrEmpty(jActionObject.Property("Error").Value.ToString()) && !string.IsNullOrEmpty(errorDetailsNew.ToString())) { errorDetailsNew.Append(","); errorDetailsNew.Append(jActionObject.Property("Error").Value.ToString()); } else { errorDetailsNew.Append(jActionObject.Property("Error").Value.ToString()); } } if (string.IsNullOrEmpty(errorDetailsNew.ToString())) { errorDetails = "NA"; } else { errorDetails = errorDetailsNew.ToString(); } jActivityObject.Add("ErrorDetails", errorDetails); foreach (HTMLReportConfigFieldToSelect activityFieldToRemove in reportTemplate.ActivitySourceFieldsToSelect.Where(x => !x.IsSelected)) { jActivityObject.Property(GetFieldToRemove(activityFieldToRemove.FieldKey)).Remove(); } //ActionsColl HTMLReportConfigFieldToSelect actionField = reportTemplate.ActivitySourceFieldsToSelect.Where(x => x.IsSelected && x.FieldKey == "ActionsColl").FirstOrDefault(); if (actionField != null) { if (reportTemplate.ActionSourceFieldsToSelect.Select(x => x.IsSelected).ToList().Count > 0) { JArray actionArray = (JArray)jActivityObject[actionField.FieldKey]; foreach (JObject jActionObject in actionArray) { foreach (HTMLReportConfigFieldToSelect actionFieldToRemove in reportTemplate.ActionSourceFieldsToSelect.Where(x => !x.IsSelected)) { jActionObject.Property(GetFieldToRemove(actionFieldToRemove.FieldKey)).Remove(); } } } } } } } } } } } } } } } } #endregion return(runSetObject.ToString(Formatting.Indented)); }