public bool CheckEntity(float value, AlertMeasure measure, MeasureDiff diff) { if (value < 0) { return(false); } if (measure == null) { return(false); } try { MeasuredParameters ret = new MeasuredParameters(); bool bRet = false; ret = CheckMeasure(measure, value, diff); if (ret != null && ret.Count > 0) { AllocateReport(ret, measure.AlertMeasureName, diff); //If we have something to report about - also flush it into the database. Flush(ret); bRet = true; } return(bRet); } catch (Exception ex) { Log.Write("Exception in CheckEntity", ex); return(false); } }
public void Flush(MeasuredParameters mps) { IDictionaryEnumerator ide = mps.GetEnumerator(); while (ide.MoveNext()) { MeasuredParameter mp = (MeasuredParameter)ide.Value; WriteResult(mp); } }
/* Rules */ protected virtual MeasuredParameters CheckMeasure(AlertMeasure measure, float value, MeasureDiff diff) { AlertMeasures measures = null; if (!ParentWorkflow.InternalParameters.Contains("AlertMeasures")) { measures = new AlertMeasures(); ParentWorkflow.InternalParameters.Add("AlertMeasures", measures); } else { measures = (AlertMeasures)ParentWorkflow.InternalParameters["AlertMeasures"]; } MeasuredParameters ret = new MeasuredParameters(); for (int i = 0; i < _results.Count; i++) { try { MeasuredParameter mp = (MeasuredParameter)_results[i]; if (measure.CompositeMeasure) { if (measure.Evaluate(mp, value, diff, measures)) { ret.Add(mp.GK, mp); } } else { if (Evaluate(mp.ValueFromMeasure(measure.AlertMeasureName), value, diff)) { ret.Add(mp.GK, mp); } } } catch (Exception ex) { Log.Write("Exception occured while adding measured parameters", ex); continue;; } } return(ret); }
protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext) { DataManager.ConnectionString = ParentWorkflow.Parameters["ConnectionString"].ToString(); //Run the stored procedure, based on the params we have. try { int accountID = Convert.ToInt32(ParentWorkflow.Parameters["AccountID"]); DateTime cur = DayCode.GenerateDateTime(ParentWorkflow.Parameters["CurrentDayCode"]); DateTime comp = DayCode.GenerateDateTime(ParentWorkflow.Parameters["CompareDayCode"]); int channelID = Convert.ToInt32(ParentWorkflow.Parameters["ChannelID"]); int campaignGK = Convert.ToInt32(ParentWorkflow.Parameters["CampaignGK"]); //Create the command. using (DataManager.Current.OpenConnection()) { SqlCommand clicks = DataManager.CreateCommand("SP_Alerts_SumOfClicksPerAccount", System.Data.CommandType.StoredProcedure); clicks.Parameters.Add("@Account_id", System.Data.SqlDbType.NVarChar); clicks.Parameters.Add("@CurrentDayCode", System.Data.SqlDbType.NVarChar); clicks.Parameters.Add("@CompareDayCode", System.Data.SqlDbType.NVarChar); clicks.Parameters.Add("@channel_id", System.Data.SqlDbType.NVarChar); clicks.Parameters.Add("@Campaign_GK", System.Data.SqlDbType.NVarChar); clicks.Parameters.Add("@RC", System.Data.SqlDbType.Int); clicks.Parameters["@RC"].Direction = System.Data.ParameterDirection.ReturnValue; clicks.Parameters["@Account_id"].Value = accountID.ToString(); clicks.Parameters["@channel_id"].Value = channelID.ToString(); clicks.Parameters["@Campaign_GK"].Value = campaignGK.ToString(); //format the current and compare dates. string curDate = cur.ToString("yyyyMMdd"); string compDate = comp.ToString("yyyyMMdd"); clicks.Parameters["@CurrentDayCode"].Value = curDate; clicks.Parameters["@CompareDayCode"].Value = compDate; clicks.ExecuteNonQuery(); int d = Convert.ToInt32(clicks.Parameters["@RC"].Value); ClicksDelta = (float)d; CampaignAllMeasures cam = new CampaignAllMeasures(); cam.CampaignGK = campaignGK; cam.ClicksChangeRatio = ClicksDelta; cam.ChannelID = channelID; cam.AccountID = accountID; if (ParentWorkflow.InternalParameters.ContainsKey("MeasuredParams")) { MeasuredParameters mps = (MeasuredParameters)ParentWorkflow.InternalParameters["MeasuredParams"]; if (!mps.ContainsKey(cam.CampaignGK)) { mps.Add(cam.CampaignGK, cam); } ParentWorkflow.InternalParameters["MeasuredParams"] = mps; } else { MeasuredParameters mps = new MeasuredParameters(); mps.Add(cam.CampaignGK, cam); ParentWorkflow.InternalParameters.Add("MeasuredParams", mps); } } } catch (Exception ex) { throw ex; } //Put the result in the clicks property. return(ActivityExecutionStatus.Closed); }
protected void AllocateReport(MeasuredParameters mps, string measure, MeasureDiff diff) { if (ParentWorkflow.InternalParameters.ContainsKey("Reports")) { Hashtable currentReports = (Hashtable)ParentWorkflow.InternalParameters["Reports"]; if (currentReports.ContainsKey(_entityType)) { Reports entReports = (Reports)currentReports[_entityType]; if (entReports.ContainsDifference(diff)) { //We have a report which contains this type of difference. Report curReport = (Report)entReports[diff]; curReport.MeasuredParameters.Append(mps); curReport.Processed = false; curReport.DifferenceType = diff; if (!curReport.Measures.Contains(MeasuredParameter.FromString(measure))) { curReport.Measures.Add(MeasuredParameter.FromString(measure)); } entReports[diff] = curReport; } else { //We do not have a report which contains this type of difference. Report r = new Report(); r.MeasuredParameters.Append(mps); r.Processed = false; r.Name = this.Name; r.DifferenceType = diff; r.Measures.Add(MeasuredParameter.FromString(measure)); entReports.Add(diff, r); } currentReports[_entityType] = entReports; } else { //We do not have a report for this entity type. Report r = new Report(); r.MeasuredParameters.Append(mps); r.Processed = false; r.Name = this.Name; r.DifferenceType = diff; r.Measures.Add(MeasuredParameter.FromString(measure)); if (ParentWorkflow.InternalParameters.ContainsKey("AccountFilters")) { r.Filters = (AccountAlertFilters)ParentWorkflow.InternalParameters["AccountFilters"]; } r.Account = Convert.ToInt32(ParentWorkflow.Parameters["AccountID"]); Reports ht = new Reports(); ht.Add(diff, r); currentReports.Add(_entityType, ht); ParentWorkflow.InternalParameters["Reports"] = currentReports; } } else { Report r = new Report(); r.MeasuredParameters.Append(mps); r.Processed = false; r.Name = this.Name; r.DifferenceType = diff; r.Measures.Add(MeasuredParameter.FromString(measure)); if (ParentWorkflow.InternalParameters.ContainsKey("AccountFilters")) { r.Filters = (AccountAlertFilters)ParentWorkflow.InternalParameters["AccountFilters"]; } r.Account = Convert.ToInt32(ParentWorkflow.Parameters["AccountID"]); Reports ht = new Reports(); ht.Add(diff, r); Hashtable reports = new Hashtable(); reports.Add(_entityType, ht); ParentWorkflow.InternalParameters.Add("Reports", reports); } }