private AnalysedResult runPostAnalysers(IEnumerable <AnalysedResult> analysed) { var results = new List <IAnalyseResult>(); var res = new AnalysedResult() { Results = results, Source = new PostAnalyserSource() }; foreach (var analyser in this.Config.PostAnalysers) { Dictionary <string, int> passed = new Dictionary <string, int>(); var locations = new List <String>(); foreach (var id in analyser.When) { foreach (var sourceItem in analysed) { if (sourceItem.Results != null) { foreach (var result in sourceItem.Results) { var actionResult = result as IAnalyseActionResult; if (actionResult != null) { if (actionResult.Action.Id == id) { if (passed.ContainsKey(id)) { passed[id]++; } else { passed.Add(id, 1); } var location = result as ILocation; if (location != null) { locations.AddRange(location.Locations); } } } } } } } if (analyser.When.Length > 0 && analyser.When.Length == passed.Keys.Count) { results.Add(new PostAnalyseResult() { DisplayMessage = analyser.Then.DisplayMessage, Severity = analyser.Then.Severity, Locations = locations }); } } return(res); }
private AnalysedResult GetBatteryStatusOfSerialNumberGroup(List <BatteryData> groupedBatteryData) { var analysedResult = new AnalysedResult(groupedBatteryData.FirstOrDefault().serialNumber); //Order by timestamp var orderedGroupedBatteryData = groupedBatteryData.OrderBy(batteryData => batteryData.timestamp).ToList(); //Initialization of required vars var previousBatteryLevel = 1.00; var continousDecrementedBatteryLevel = new List <BatteryLevelTimestamp>(); var batteryLevelAvgTillIncrement = new List <double>(); //Iterate over the list orderedGroupedBatteryData.ForEach(batteryData => { if (batteryData.batteryLevel <= previousBatteryLevel) { //Add the Object in the continous decremented battery level list continousDecrementedBatteryLevel.Add(new BatteryLevelTimestamp(batteryData.batteryLevel, batteryData.timestamp)); } else { //Check if there are required elements available to find the average if (continousDecrementedBatteryLevel.Count >= 2) { var percentageDecreaseInADay = GetPercentageDecreaseInADay(continousDecrementedBatteryLevel); batteryLevelAvgTillIncrement.Add(percentageDecreaseInADay); //Clear the continous list as we found the increment in the battery continousDecrementedBatteryLevel.Clear(); } } previousBatteryLevel = batteryData.batteryLevel; }); //handled the corner case where in the end there is no increment in the battery level if (continousDecrementedBatteryLevel.Count >= 2) { var percentageDecreaseInADay = GetPercentageDecreaseInADay(continousDecrementedBatteryLevel); batteryLevelAvgTillIncrement.Add(percentageDecreaseInADay); //Clear the continous list as we found the increment in the battery continousDecrementedBatteryLevel.Clear(); } //find the Average of Average battery level (final average) if (batteryLevelAvgTillIncrement.Any()) { if (batteryLevelAvgTillIncrement.Average() <= 30) { analysedResult.batteryStatus = BatteryStatus.Good; } else { analysedResult.batteryStatus = BatteryStatus.Faulty; } analysedResult.averageConsumption = batteryLevelAvgTillIncrement.Average(); } else { analysedResult.batteryStatus = BatteryStatus.Unknown; } return(analysedResult); }