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);
        }
示例#4
0
        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);
            }
        }