/// <summary> /// /// </summary> /// <param name="perspective">排名、間隔</param> /// <param name="resolution_time">month、week、hour、day、minute</param> /// <param name="restrict_kind">要取得的資料類型 category、ApiActivityResponse、productivity..etc</param> /// <param name="restrict_begin">時間begin</param> /// <param name="restrict_end">時間end</param> /// <param name="restrict_thing">要取得的物件名稱 ex.domain name、程式名稱,用了這個選項,會回傳視窗標題,而不是domain name</param> /// <param name="restrict_thingy">用來搜尋視窗標題,好像沒有用</param> /// <returns></returns> private static string BuildQueryString( EnumModule.perspective perspective = EnumModule.perspective.rank, EnumModule.resolution_time resolution_time = EnumModule.resolution_time.hour, EnumModule.restrict_kind restrict_kind = EnumModule.restrict_kind.document, string restrict_begin = "", string restrict_end = "", string restrict_thing = "", string restrict_thingy = "", ConfigModel.JsonConfig config = null) { if (config == null) { config = ConfigUtil.GetJsonConfigData(); } var queryParams = new NameValueCollection() { { "key", config.Apikey }, { "perspective", perspective.ToString() }, { "resolution_time", resolution_time.ToString() }, { "restrict_kind", restrict_kind.ToString() }, { "restrict_begin", restrict_begin }, { "restrict_end", restrict_end }, { "restrict_thing", restrict_thing }, { "restrict_thingy", restrict_thingy }, }; return(AnalyticDataAPI_URL + ToQueryString(queryParams)); }
public AlertRuleForm(ConfigModel.JsonConfig config, EnumModule.formType formType, string alertName) { this._config = config; this.formType = formType; InitializeComponent(); cbPeriodName.DataSource = _config.Period; cbPeriodName.DisplayMember = "PeriodName"; cbPeriodName.ValueMember = "PeriodName"; cbEnablePeriodName.DataSource = _config.Period; cbEnablePeriodName.DisplayMember = "PeriodName"; cbEnablePeriodName.ValueMember = "PeriodName"; cbEnableDays.DataSource = Enum.GetValues(typeof(EnumModule.WeekDays)); cbAlertType.DataSource = Enum.GetValues(typeof(EnumModule.AlertType)); if (formType == EnumModule.formType.Edit) { this.alertRule = config.Alert.FirstOrDefault(x => x.alertName == alertName); tbAlertName.Visible = false; initData(); } else { //auto choose default weekday for (int count = 0; count < cbEnableDays.Items.Count; count++) { if ((EnumModule.WeekDays)cbEnableDays.Items[count] != EnumModule.WeekDays.Saturday && (EnumModule.WeekDays)cbEnableDays.Items[count] != EnumModule.WeekDays.Sunday) { cbEnableDays.SetItemChecked(count, true); } } //auto select default period cbPeriodName.SetItemChecked(0, true); cbEnablePeriodName.SetItemChecked(0, true); } }
public string DisplayAlertProcess(List <ApiActivityResponse> data, ConfigModel.JsonConfig config = null) { string alertMsg = string.Empty; if (config == null) { config = ConfigUtil.GetJsonConfigData(); } foreach (var alertRule in config.Alert) { var IsShowAlert = CheckTimeSpendIsExceedByAlertTypeAndPeriod(alertRule, data, config); var HasShowAlertToday = CheckAlertHasDisplayToday(alertRule.alertName); if (IsShowAlert && !HasShowAlertToday) { //組回傳字串 alertMsg += "\n" + BuildAlertMessage(alertRule); //紀錄到AlertRecord ConfigUtil.InsertUpdateAlertRecord(new ConfigModel.AlertRecord(alertRule.alertName, DateTime.Now.Date)); } } return(alertMsg); }
void RefreshConfig() { this.IsConfigModify = true; this._config = ConfigUtil.GetJsonConfigData(); }
public static ConfigModel.PeriodRule GetPeriodRuleByPeriodName(string periodName, ConfigModel.JsonConfig config = null) { if (config == null) { config = GetJsonConfigData(); } return(ErrorHandle.Execute(() => _config.GetPeriodRuleByPeriodName(config, periodName))); }
/// <summary> /// 取得在指定period中,指定的AlertType所花費的時間 /// </summary> /// <param name="alertRule"></param> /// <param name="data"></param> /// <returns>如果累計時間超過alertRule指定的時間,就回傳true</returns> public bool CheckTimeSpendIsExceedByAlertTypeAndPeriod(ConfigModel.AlertRule alertRule, List <ApiActivityResponse> data, ConfigModel.JsonConfig config = null) { bool result = false; if (config == null) { config = ConfigUtil.GetJsonConfigData(); } //取得Period by period name List <ConfigModel.PeriodRule> periodList = alertRule.PeriodName.Select(x => ConfigUtil.GetPeriodRuleByPeriodName(x, config)).Where(x => x != null).ToList(); //會觸發Alert的時段 List <ConfigModel.PeriodRule> EnableAlertPeriodList = alertRule.EnablePeriodName.Select(x => ConfigUtil.GetPeriodRuleByPeriodName(x, config)).Where(x => x != null).ToList(); //判斷是否執行Alert bool IsEnableAlert = false; var TodayWeekDay = (EnumModule.WeekDays)((int)DateTime.Now.DayOfWeek); if (alertRule.EnableDays.Contains(TodayWeekDay)) { foreach (var period in EnableAlertPeriodList) { if (CheckTimeBetweenTwoHour(DateTime.Now.Hour, period.Hour_begin, period.Hour_end)) { IsEnableAlert = true; } } } if (!IsEnableAlert) { return(false); } //Func<> 用在where條件,依照period,取得總花費時間 Func <ApiActivityResponse, bool> FilterDataByPeriod = (ApiActivityResponse x) => { bool filterResult = false; if (periodList.Count == 0) { return(true); } foreach (var period in periodList) { //p.s. 這裡的hour_end判斷是用小於,沒有等於 filterResult = CheckTimeBetweenTwoHour(x.Date.Hour, period.Hour_begin, period.Hour_end); } return(filterResult); }; //依照AlertType跟period,取得data switch (alertRule.AlertType) { case EnumModule.AlertType.SpecificCategory: data = data .Where(x => alertRule.SpecificName.Contains(x.Category, StringComparer.OrdinalIgnoreCase) && FilterDataByPeriod(x)) .ToList(); break; case EnumModule.AlertType.SpecificActivity: data = data .Where(x => ( alertRule.SpecificName.Contains(x.Activity, StringComparer.OrdinalIgnoreCase) || (x.Activity == "Google Chrome" && alertRule.SpecificName.Any(s => s.Equals(x.Document, StringComparison.OrdinalIgnoreCase)) ) ) && FilterDataByPeriod(x)) .ToList(); break; case EnumModule.AlertType.SpecificCategoryOrActivity: data = data .Where(x => (alertRule.SpecificName.Contains(x.Category, StringComparer.OrdinalIgnoreCase) || alertRule.SpecificName.Contains(x.Activity, StringComparer.OrdinalIgnoreCase) || (x.Activity == "Google Chrome" && alertRule.SpecificName.Any(s => s.Equals(x.Document, StringComparison.OrdinalIgnoreCase)) ) ) && FilterDataByPeriod(x)) .ToList(); break; case EnumModule.AlertType.All: data = data.Where(x => FilterDataByPeriod(x)).ToList(); break; case EnumModule.AlertType.AllDistractingTime: data = data.Where(x => x.Productivity < 0 && FilterDataByPeriod(x)).ToList(); break; case EnumModule.AlertType.AllProductiveTime: data = data.Where(x => x.Productivity > 0 && FilterDataByPeriod(x)).ToList(); break; } int TotalSpendTime = data.Sum(x => x.TimeSpent); //判斷總花費時間有沒有超過 int limitTime = (alertRule.Hour * 60 + alertRule.Minute) * 60; if (TotalSpendTime > limitTime) { result = true; } return(result); }