59 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
| # Copyright 2014-2016 OpenMarket Ltd
 | |
| #
 | |
| # Licensed under the Apache License, Version 2.0 (the "License");
 | |
| # you may not use this file except in compliance with the License.
 | |
| # You may obtain a copy of the License at
 | |
| #
 | |
| #     http://www.apache.org/licenses/LICENSE-2.0
 | |
| #
 | |
| # Unless required by applicable law or agreed to in writing, software
 | |
| # distributed under the License is distributed on an "AS IS" BASIS,
 | |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
| # See the License for the specific language governing permissions and
 | |
| # limitations under the License.
 | |
| 
 | |
| from ._base import Config
 | |
| 
 | |
| 
 | |
| class RatelimitConfig(Config):
 | |
| 
 | |
|     def read_config(self, config):
 | |
|         self.rc_messages_per_second = config["rc_messages_per_second"]
 | |
|         self.rc_message_burst_count = config["rc_message_burst_count"]
 | |
| 
 | |
|         self.federation_rc_window_size = config["federation_rc_window_size"]
 | |
|         self.federation_rc_sleep_limit = config["federation_rc_sleep_limit"]
 | |
|         self.federation_rc_sleep_delay = config["federation_rc_sleep_delay"]
 | |
|         self.federation_rc_reject_limit = config["federation_rc_reject_limit"]
 | |
|         self.federation_rc_concurrent = config["federation_rc_concurrent"]
 | |
| 
 | |
|     def default_config(self, **kwargs):
 | |
|         return """\
 | |
|         ## Ratelimiting ##
 | |
| 
 | |
|         # Number of messages a client can send per second
 | |
|         rc_messages_per_second: 0.2
 | |
| 
 | |
|         # Number of message a client can send before being throttled
 | |
|         rc_message_burst_count: 10.0
 | |
| 
 | |
|         # The federation window size in milliseconds
 | |
|         federation_rc_window_size: 1000
 | |
| 
 | |
|         # The number of federation requests from a single server in a window
 | |
|         # before the server will delay processing the request.
 | |
|         federation_rc_sleep_limit: 10
 | |
| 
 | |
|         # The duration in milliseconds to delay processing events from
 | |
|         # remote servers by if they go over the sleep limit.
 | |
|         federation_rc_sleep_delay: 500
 | |
| 
 | |
|         # The maximum number of concurrent federation requests allowed
 | |
|         # from a single server
 | |
|         federation_rc_reject_limit: 50
 | |
| 
 | |
|         # The number of federation requests to concurrently process from a
 | |
|         # single server
 | |
|         federation_rc_concurrent: 3
 | |
|         """
 |