1 /* 2 * This file is part of Waarp Project (named also Waarp or GG). 3 * 4 * Copyright (c) 2019, Waarp SAS, and individual contributors by the @author 5 * tags. See the COPYRIGHT.txt in the distribution for a full listing of 6 * individual contributors. 7 * 8 * All Waarp Project is free software: you can redistribute it and/or 9 * modify it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation, either version 3 of the License, or (at your 11 * option) any later version. 12 * 13 * Waarp is distributed in the hope that it will be useful, but WITHOUT ANY 14 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR 15 * A PARTICULAR PURPOSE. See the GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License along with 18 * Waarp . If not, see <http://www.gnu.org/licenses/>. 19 */ 20 package org.waarp.openr66.protocol.networkhandler; 21 22 import io.netty.handler.traffic.GlobalTrafficShapingHandler; 23 import org.waarp.common.cpu.WaarpConstraintLimitHandler; 24 import org.waarp.openr66.protocol.configuration.Configuration; 25 26 /** 27 * R66 Constraint Limit Handler 28 * <p> 29 * Constraint Limit (CPU and connection - network and local -) handler, only for 30 * server side (requested or 31 * requester). 32 */ 33 public class R66ConstraintLimitHandler extends WaarpConstraintLimitHandler { 34 public R66ConstraintLimitHandler() { 35 } 36 37 /** 38 * @param useJdKCpuLimit True to use JDK Cpu native or False for 39 * JavaSysMon 40 * @param lowcpuLimit for proactive cpu limitation (throttling 41 * bandwidth) 42 * (0<= x < 1 & highcpulimit) 43 * @param highcpuLimit for proactive cpu limitation (throttling 44 * bandwidth) 45 * (0<= x <= 1) 0 meaning no 46 * throttle activated 47 * @param percentageDecrease for proactive cpu limitation, 48 * throttling 49 * bandwidth reduction (0 < x < 1) as 0.25 50 * for 25% of reduction 51 * @param handler the GlobalTrafficShapingHandler associated (null 52 * to have 53 * no proactive cpu 54 * limitation) 55 * @param delay the delay between 2 tests for proactive cpu 56 * limitation 57 * @param limitLowBandwidth the minimal bandwidth (read or write) to 58 * apply 59 * when decreasing bandwidth (low 60 * limit = 4096) 61 */ 62 public R66ConstraintLimitHandler(final boolean useJdKCpuLimit, 63 final double lowcpuLimit, 64 final double highcpuLimit, 65 final double percentageDecrease, 66 final GlobalTrafficShapingHandler handler, 67 final long delay, 68 final long limitLowBandwidth) { 69 super(1000, Configuration.configuration != null? 70 Configuration.configuration.getTimeoutCon() : 30000, useJdKCpuLimit, 71 lowcpuLimit, highcpuLimit, percentageDecrease, handler, delay, 72 limitLowBandwidth); 73 } 74 75 /** 76 * @param useCpuLimit True to enable cpuLimit on connection check 77 * @param useJdKCpuLimit True to use JDK Cpu native or False for 78 * JavaSysMon 79 * @param cpulimit high cpu limit (0<= x < 1) to refuse new 80 * connections 81 * @param channellimit number of connection limit (0<= x) 82 */ 83 public R66ConstraintLimitHandler(final boolean useCpuLimit, 84 final boolean useJdKCpuLimit, 85 final double cpulimit, 86 final int channellimit) { 87 super(1000, Configuration.configuration != null? 88 Configuration.configuration.getTimeoutCon() : 30000, useCpuLimit, 89 useJdKCpuLimit, cpulimit, channellimit); 90 } 91 92 /** 93 * @param useCpuLimit True to enable cpuLimit on connection check 94 * @param useJdKCpuLimit True to use JDK Cpu native or False for 95 * JavaSysMon 96 * @param cpulimit high cpu limit (0<= x < 1) to refuse new 97 * connections 98 * @param channellimit number of connection limit (0<= x) 99 * @param lowcpuLimit for proactive cpu limitation (throttling 100 * bandwidth) 101 * (0<= x < 1 & highcpulimit) 102 * @param highcpuLimit for proactive cpu limitation (throttling 103 * bandwidth) 104 * (0<= x <= 1) 0 meaning no 105 * throttle activated 106 * @param percentageDecrease for proactive cpu limitation, 107 * throttling 108 * bandwidth reduction (0 < x < 1) as 0.25 109 * for 25% of reduction 110 * @param handler the GlobalTrafficShapingHandler associated (null 111 * to have 112 * no proactive cpu 113 * limitation) 114 * @param delay the delay between 2 tests for proactive cpu 115 * limitation 116 * @param limitLowBandwidth the minimal bandwidth (read or write) to 117 * apply 118 * when decreasing bandwidth (low 119 * limit = 4096) 120 */ 121 public R66ConstraintLimitHandler(final boolean useCpuLimit, 122 final boolean useJdKCpuLimit, 123 final double cpulimit, 124 final int channellimit, 125 final double lowcpuLimit, 126 final double highcpuLimit, 127 final double percentageDecrease, 128 final GlobalTrafficShapingHandler handler, 129 final long delay, 130 final long limitLowBandwidth) { 131 super(1000, Configuration.configuration != null? 132 Configuration.configuration.getTimeoutCon() : 30000, useCpuLimit, 133 useJdKCpuLimit, cpulimit, channellimit, lowcpuLimit, highcpuLimit, 134 percentageDecrease, handler, delay, limitLowBandwidth); 135 } 136 137 @Override 138 protected final int getNumberLocalChannel() { 139 if (Configuration.configuration.getLocalTransaction() != null) { 140 return Configuration.configuration.getLocalTransaction() 141 .getNumberLocalChannel(); 142 } 143 return 0; 144 } 145 146 @Override 147 protected final long getReadLimit() { 148 return Configuration.configuration.getServerGlobalReadLimit(); 149 } 150 151 @Override 152 protected final long getWriteLimit() { 153 return Configuration.configuration.getServerGlobalWriteLimit(); 154 } 155 156 }