/// <summary> /// Generate /// </summary> /// <param name="intermediate"></param> /// <param name="green"></param> /// <param name="yellow"></param> /// <param name="red"></param> /// <returns></returns> public Intermediate GenerateThresholdValuesForTransactions(Intermediate intermediate, string green, string yellow, string red) { Intermediate thIntermediate = new Intermediate(); foreach (KeyValuePair <string, string> pair in intermediate) { // add threshold color code for all value fields of this transaction thIntermediate.Add(GetThresholdColorKey(pair.Key), GenerateThresholdColorValuesForTransaction(pair.Key, pair.Value, green, yellow, red)); // add threshold reference values (th[0,1]) for this transaction thIntermediate.Add(GetThresholdReferenceKey(pair.Key), GenerateThresholdReferenceForTransaction(pair.Key, pair.Value)); } return(thIntermediate); }
/// <summary> /// Generate _be and _be_c values (baseline evaluation and colorcodes) /// </summary> /// <param name="key"></param> /// <param name="baselineValueSeries"></param> /// <param name="currentValueSeries"></param> /// <param name="baselineThresholdValueSeries"></param> /// <param name="currentThresholdValueSeries"></param> /// <param name="colorcodeBetter"></param> /// <param name="colorcodeWorse"></param> /// <returns></returns> private Intermediate GenerateEvaluation(string key, string baselineValueSeries, string currentValueSeries, string baselineThresholdValueSeries, string currentThresholdValueSeries, string colorcodeBetter, string colorcodeWorse) { Intermediate result = new Intermediate(); string[] baselineValueArr = baselineValueSeries.Split(Intermediate.LISTSEPARATOR); string[] baselineThresholdValueArr = baselineThresholdValueSeries.Split(Intermediate.LISTSEPARATOR); string[] currentValueArr = currentValueSeries.Split(Intermediate.LISTSEPARATOR); string[] currentThresholdValueArr = currentThresholdValueSeries.Split(Intermediate.LISTSEPARATOR); List <string> beValues = new List <string>(); List <string> becValues = new List <string>(); Log.Write(string.Format("baseline evaluation triggers for {0}: [", key)); for (int i = 0; i < baselineValueArr.Length; i++) { try { // only perform evaluation if current or baseline value is other than green if ((currentThresholdValueArr[i] != Baselining.belowLowThreshold) || (baselineThresholdValueArr[i] != Baselining.belowLowThreshold)) { //Log.WriteLine(string.Format("baseline evaluation trigger: current or baseline exceeding non-green level on {0}", key)); // add evaluation to beValues and becValues DoEvaluate(baselineValueArr[i], currentValueArr[i], beValues, becValues, colorcodeBetter, colorcodeWorse); } else { beValues.Add(""); // no value evaluation becValues.Add(""); // no colorcode } } catch { beValues.Add(""); // no value evaluation becValues.Add(""); // no colorcode } } Log.WriteLine("]"); // values result.Add(GetBaselineEvaluationKey(key), string.Join(Intermediate.LISTSEPARATOR.ToString(), beValues.ToArray())); // colorcodes result.Add(GetBaselineEvaluationColorKey(key), string.Join(Intermediate.LISTSEPARATOR.ToString(), becValues.ToArray())); return(result); }
/// <summary> /// Generate new Intermediate with baselining values /// ${Appbeheer_01_Inloggen_br // reference (baseline value) /// ${Appbeheer_01_Inloggen_be // evaluated value (difference from baseline in %) /// ${Appbeheer_01_Inloggen_be_c // colorcode, mark when current value exceeds threshold th1, green when diff > -15%, red when diff > +15% /// </summary> /// <param name="intermediate"></param> /// <param name="baselineIntermediate"></param> /// <param name="baselineReferenceIntermediate"></param> /// <param name="colorcodeBetter"></param> /// <param name="colorcodeWorse"></param> /// <returns></returns> public Intermediate GenerateBaselineEvaluationValues(Intermediate intermediate, Intermediate baselineIntermediate, Intermediate baselineReferenceIntermediate, string colorcodeBetter, string colorcodeWorse) { Intermediate result = new Intermediate(); // voor alle items in de baseline reference: doe evaluatie foreach (KeyValuePair <string, string> baselinePair in baselineReferenceIntermediate) { // add _br value from baseline reference result.AddValue(GetBaselineReferenceKey(baselinePair.Key), baselinePair.Value); // evaluate and generate _be and _be_c values if (intermediate.ContainsKey(baselinePair.Key)) { string baselineValueSeries = baselineIntermediate.GetValue(baselinePair.Key); string baselineThresholdValueSeries = baselineIntermediate.GetValue(Thresholds.GetThresholdColorKey(baselinePair.Key)); string currentValueSeries = intermediate.GetValue(baselinePair.Key); string currentThresholdValueSeries = intermediate.GetValue(Thresholds.GetThresholdColorKey(baselinePair.Key)); // generate _be and _be_c values Intermediate evalResult = GenerateEvaluation(baselinePair.Key, baselineValueSeries, currentValueSeries, baselineThresholdValueSeries, currentThresholdValueSeries, colorcodeBetter, colorcodeWorse); result.Add(evalResult); } } return(result); }
/// <summary> /// Format read measure data and replace SILK proprietary separators with parameter decimal- and listseparator /// </summary> /// <param name="keys"></param> /// <param name="srcDecSeparator"></param> /// <returns></returns> public string[] FormatMeasureData(string[] keys, char srcDecSeparator) { // convert values Log.Write("format measure values ["); foreach (string key in keys) { items[key] = items[key].Replace(srcDecSeparator, MEASUREDECIMALSEPARATOR); items[key] = items[key].Replace(Intermediate.LISTSEPARATOR, MEASURETFIELDSEPARATOR); Log.Write("."); } Log.WriteLine("]"); // convert names Log.Write("correct measure names if necessary ["); Intermediate newItems = new Intermediate(); List <string> newKeys = new List <string>(); foreach (KeyValuePair <string, string> item in items) { newKeys.Add(ConformName(item.Key)); newItems.Add(newKeys.Last(), item.Value); Log.Write("."); } Log.WriteLine("]"); items = newItems; return(newKeys.ToArray()); }
/// <summary> /// Add new key=value or (if key exist): add value to list of values /// </summary> /// <param name="key"></param> /// <param name="value"></param> /// <param name="list"></param> private void AddToList(string key, string value, Intermediate list) { if (list.ContainsKey(key)) { list[key] += Intermediate.LISTSEPARATOR + value; } else { list.Add(key, value); } }
/// <summary> /// Generate colorcode entries based on diff evaluation of all intermediate value entities /// input: /// key1=1;2;3;blaat;zee /// key2=1;3;3;blaat;zoo /// ... /// output (generated keys): /// key1_c="";"highlite";"";"highlite" /// key2_c="";"highlite";"";"highlite" /// ... /// </summary> /// <param name="intermediate"></param> /// <param name="colorCode"></param> /// <returns></returns> public Intermediate GenerateDiffValues(Intermediate intermediate, string colorCode) { Intermediate result = new Intermediate(); // controleer occurence in overige intermediate foreach (KeyValuePair <string, string> pair in intermediate) { result.Add(pair.Key + "_c", GetDiffValue(pair, intermediate, colorCode)); } return(result); }
/// <summary> /// Add transaction details key-value pair or replace value of existing key (warning) /// </summary> /// <param name="name"></param> /// <param name="value"></param> public void Add(string name, string value) { if (items.ContainsKey(name)) { Log.WriteLine("WARNING: replacing value of existing key [" + name + "]"); items[name] = value; } else { items.Add(name, value); } }
/// <summary> /// Fill values with blanks to normalize length of all values /// </summary> public void Normalize() { //Log.WriteLine("normalize intermediate..."); int cnt; int maxCnt = 0; // find max value series length foreach (KeyValuePair <string, string> pair in this) { cnt = NumOfElements(pair.Value); maxCnt = cnt > maxCnt ? cnt : maxCnt; } Intermediate tmpList = new Intermediate(); // apply max value series length to shorter series (normalize) foreach (KeyValuePair <string, string> pair in this) { string newValue = pair.Value; // if new value: fill left if ((NumOfElements(newValue) == 1) && (maxCnt > 1)) { while (NumOfElements(newValue) < maxCnt) { newValue = LISTSEPARATOR + newValue; } } // if already present: fill right else { while (NumOfElements(newValue) < maxCnt) { newValue = newValue + LISTSEPARATOR; } } tmpList.Add(pair.Key, newValue); } this.ReplaceFrom(tmpList); }
/// <summary> /// Get intermediate with only one value from datasource series /// </summary> /// <param name="index"></param> /// <returns></returns> public Intermediate GetIndexedValues(int index) { Intermediate filteredList = new Intermediate(); foreach (KeyValuePair <string, string> pair in this) { string value = ""; try { string[] values = pair.Value.Split(Intermediate.LISTSEPARATOR); value = values[index]; } catch { value = ""; } filteredList.Add(pair.Key, value); } return(filteredList); }