public static void Update(RateLimitEntity item, ref bool ifContain) { RateLimitEntity rateLimitOld = RateLimitAccess.GetRateLimitByID(item.TableID); if (item.ZoneId == rateLimitOld.ZoneId) { var list = RateLimitAccess.GetRateLimits(item.ZoneId, null, null, string.Empty); list.RemoveAt(list.FindIndex((r) => { return(r.TableID == item.TableID); })); if (IfContain(list, item)) { ifContain = true; return; } else { ifContain = false; } RateLimitAccess.Edit(item); } else { RateLimitBusiness.Add(item, ref ifContain); if (!ifContain) { Delete(rateLimitOld.TableID, rateLimitOld.OrderNo, rateLimitOld.ZoneId); } } }
public static void Add(RateLimitEntity item) { string cons = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["DefaultConnection"].ToString(); using (SqlConnection conn = new SqlConnection(cons)) { string query = @"INSERT INTO dbo.t_RateLimiting_Rules ( ZoneId , OrderNo , Url , Threshold , Period , Action , EnlargementFactor , LatestTriggerTime , RateLimitTriggerIpCount , RateLimitTriggerTime , Remark , CreatedBy , CreatedTime, IfBanIp, IfOpenRateLimitRule, IfTesting ) VALUES ( @zoneID , -- ZoneId - nvarchar(512) @order , -- OrderNo - int @url , -- Url - nvarchar(512) @threshold , -- Threshold - int @period , -- Period - int N'challenge' , -- Action - nvarchar(256) @enlargement , -- EnlargementFactor - int GETUTCDATE() , -- LatestTriggerTime - datetime @triggerIpCount , -- RateLimitTriggerIpCount - int @triggerTime , -- RateLimitTriggerTime - int N'' , -- Remark - nvarchar(1024) @user , -- CreatedBy - GETUTCDATE(), -- CreatedTime - datetime @ifBanIp , -- IfBanIp - @ifOpenRateLimitRule , -- IfOpenRateLimitRule - @ifTesting -- IfTesting - )"; SqlCommand cmd = new SqlCommand(query, conn); cmd.Parameters.AddWithValue("@zoneID", item.ZoneId); cmd.Parameters.AddWithValue("@order", item.OrderNo); cmd.Parameters.AddWithValue("@threshold", item.Threshold); cmd.Parameters.AddWithValue("@period", item.Period); cmd.Parameters.AddWithValue("@url", item.Url); cmd.Parameters.AddWithValue("@enlargement", item.EnlargementFactor); cmd.Parameters.AddWithValue("@triggerIpCount", item.RateLimitTriggerIpCount); cmd.Parameters.AddWithValue("@triggerTime", item.RateLimitTriggerTime); cmd.Parameters.AddWithValue("@user", item.CreatedBy); cmd.Parameters.AddWithValue("@ifBanIp", item.IfBanIp); cmd.Parameters.AddWithValue("@ifOpenRateLimitRule", item.IfOpenRateLimitRule); cmd.Parameters.AddWithValue("@ifTesting", item.IfTesting); conn.Open(); cmd.ExecuteNonQuery(); } }
private bool IfMatchConditionAccumulation(RateLimitEntity rateLimit, LogAnalyzeModel analyzeModel) { bool bResult = false; bResult = rateLimit.Url.EndsWith("*") ? ((analyzeModel.RequestUrl.ToLower().StartsWith(rateLimit.Url.Replace("*", "").ToLower())) && (analyzeModel.RequestCount >= rateLimit.EnlargementFactor * rateLimit.Threshold * accumulationSecond / (float)rateLimit.Period)) : ((analyzeModel.RequestUrl.ToLower().Equals(rateLimit.Url.ToLower())) && (analyzeModel.RequestCount >= rateLimit.EnlargementFactor * rateLimit.Threshold * accumulationSecond / (float)rateLimit.Period)); return(bResult); }
public static void UpdateOrder(int action, int id, int order, string zoneId) { int toOrder = action == 1 ? order - 1 : order + 1; RateLimitEntity toItem = RateLimitAccess.GetRateLimitByOrderNo(toOrder, zoneId); if (toItem.TableID > 0) { RateLimitAccess.EditOrder(id, toOrder, toItem.TableID, order); } }
private static bool IfContain(List <RateLimitEntity> rateLimitEntities, RateLimitEntity rateLimit) { List <string> vs = new List <string> { "ID", "TableID", "OrderNo", "CreatedBy", "ZoneId", "Action", "LatestTriggerTime", "EnlargementFactor", "RateLimitTriggerIpCount", "RateLimitTriggerTime" }; foreach (RateLimitEntity item in rateLimitEntities) { if (!Utils.DifferenceComparison <RateLimitEntity, RateLimitEntity>(item, rateLimit, vs)) { return(true); } } return(false); }
public static RateLimitEntity GetRateLimitByOrderNo(int order, string zoneId) { string cons = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["DefaultConnection"].ToString(); RateLimitEntity item = new RateLimitEntity(); using (SqlConnection conn = new SqlConnection(cons)) { string query = @"SELECT Period, Threshold, Url, OrderNo, EnlargementFactor, RateLimitTriggerIpCount, Id, ZoneId, IfBanIp, IfOpenRateLimitRule, IfTesting, RateLimitTriggerTime FROM t_RateLimiting_Rules where OrderNo=@order and ZoneId=@zoneId"; SqlCommand cmd = new SqlCommand(query, conn); cmd.Parameters.AddWithValue("@order", order); cmd.Parameters.AddWithValue("@zoneId", zoneId); conn.Open(); using (SqlDataReader reader = cmd.ExecuteReader()) { if (reader.Read()) { item.Period = Convert.ToInt32(reader["Period"]); item.Threshold = Convert.ToInt32(reader["Threshold"]); item.Url = Convert.ToString(reader["Url"]); item.OrderNo = Convert.ToInt32(reader["OrderNo"]); item.EnlargementFactor = float.Parse(reader["EnlargementFactor"] == DBNull.Value ? "0" : reader["EnlargementFactor"].ToString()); item.RateLimitTriggerIpCount = Convert.ToInt32(reader["RateLimitTriggerIpCount"]); item.TableID = Convert.ToInt32(reader["Id"]); item.ZoneId = Convert.ToString(reader["ZoneId"]); item.RateLimitTriggerTime = Convert.ToInt32(reader["RateLimitTriggerTime"]); item.IfBanIp = Convert.ToInt32(reader["IfBanIp"]) > 0; item.IfOpenRateLimitRule = Convert.ToInt32(reader["IfOpenRateLimitRule"]) > 0; item.IfTesting = Convert.ToInt32(reader["IfTesting"]) > 0; } } } return(item); }
public static void Add(RateLimitEntity item, ref bool ifContain) { var list = RateLimitAccess.GetRateLimits(item.ZoneId, null, null, string.Empty); var orderMax = 0; if (null != list.LastOrDefault()) { orderMax = list.LastOrDefault().OrderNo; } if (IfContain(list, item)) { ifContain = true; return; } else { ifContain = false; } item.OrderNo = orderMax + 1; RateLimitAccess.Add(item); }
public static void TriggerRateLimit(RateLimitEntity rateLimit) { var cons = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["DefaultConnection"].ToString(); using (var conn = new SqlConnection(cons)) { const string query = @"UPDATE dbo.t_RateLimiting_Rules SET LatestTriggerTime = GETUTCDATE() WHERE Url = @Url AND Threshold = @Threshold AND Period = @Period AND ZoneId = @ZoneId"; var cmd = new SqlCommand(query, conn); cmd.Parameters.AddWithValue("@Threshold", rateLimit.Threshold); cmd.Parameters.AddWithValue("@Period", rateLimit.Period); cmd.Parameters.AddWithValue("@Url", rateLimit.Url); cmd.Parameters.AddWithValue("@ZoneId", rateLimit.ZoneId); conn.Open(); cmd.ExecuteNonQuery(); } }
public static void Edit(RateLimitEntity item) { var cons = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["DefaultConnection"].ToString(); using (var conn = new SqlConnection(cons)) { const string query = @"UPDATE dbo.t_RateLimiting_Rules SET ZoneId = @zoneID , Url = @url , Threshold = @threshold , Period = @period , EnlargementFactor = @enlargement , RateLimitTriggerIpCount = @triggerIpCount , RateLimitTriggerTime = @triggerTime , CreatedBy = @user, IfBanIp = @ifBanIp, IfOpenRateLimitRule = @ifOpenRateLimitRule, IfTesting = @ifTesting WHERE Id = @id;"; var cmd = new SqlCommand(query, conn); cmd.Parameters.AddWithValue("@zoneID", item.ZoneId); cmd.Parameters.AddWithValue("@threshold", item.Threshold); cmd.Parameters.AddWithValue("@period", item.Period); cmd.Parameters.AddWithValue("@url", item.Url); cmd.Parameters.AddWithValue("@enlargement", item.EnlargementFactor); cmd.Parameters.AddWithValue("@triggerIpCount", item.RateLimitTriggerIpCount); cmd.Parameters.AddWithValue("@triggerTime", item.RateLimitTriggerTime); cmd.Parameters.AddWithValue("@user", item.CreatedBy); cmd.Parameters.AddWithValue("@id", item.TableID); cmd.Parameters.AddWithValue("@ifBanIp", item.IfBanIp); cmd.Parameters.AddWithValue("@ifOpenRateLimitRule", item.IfOpenRateLimitRule); cmd.Parameters.AddWithValue("@ifTesting", item.IfTesting); conn.Open(); cmd.ExecuteNonQuery(); } }
public static void TriggerRateLimit(RateLimitEntity rateLimit) { RateLimitAccess.TriggerRateLimit(rateLimit); }