Module: Falcon::Limiter::Environment

Defined in:
lib/falcon/limiter/environment.rb

Overview

A flat environment module for falcon-limiter services.

Provides simple, declarative configuration for concurrency limiting. Override these methods in your service to customize behavior.

Instance Method Summary collapse

Instance Method Details

#connection_limiterObject



42
43
44
45
46
47
48
# File 'lib/falcon/limiter/environment.rb', line 42

def connection_limiter
	# Create priority queue and pre-populate with tokens:
	queue = Async::PriorityQueue.new
	limiter_maximum_connections.times{queue.push(true)}
	
	Async::Limiter::Queued.new(queue, utilization: limiter_utilization.namespace(:socket_accept))
end

#endpointObject



82
83
84
# File 'lib/falcon/limiter/environment.rb', line 82

def endpoint
	super.with(wrapper: limiter_wrapper)
end

#limiter_maximum_connectionsObject



27
28
29
# File 'lib/falcon/limiter/environment.rb', line 27

def limiter_maximum_connections
	1
end

#limiter_maximum_long_tasksObject

Maximum number of concurrent long tasks (default: 10). If this is nil or non-positive, long task support will be disabled.



22
23
24
# File 'lib/falcon/limiter/environment.rb', line 22

def limiter_maximum_long_tasks
	10
end

#limiter_middleware(middleware) ⇒ Object



56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/falcon/limiter/environment.rb', line 56

def limiter_middleware(middleware)
	# Create middleware with long task support if enabled:
	if limiter_maximum_long_tasks&.positive?
		limiter_middleware_class.new(
			middleware, 
			connection_limiter: connection_limiter,
			maximum_long_tasks: limiter_maximum_long_tasks,
			start_delay: limiter_start_delay,
			utilization: limiter_utilization
		)
	else
		middleware
	end
end

#limiter_middleware_classObject



51
52
53
# File 'lib/falcon/limiter/environment.rb', line 51

def limiter_middleware_class
	Middleware
end

#limiter_start_delayObject



32
33
34
# File 'lib/falcon/limiter/environment.rb', line 32

def limiter_start_delay
	0.1
end

#limiter_utilizationObject



37
38
39
# File 'lib/falcon/limiter/environment.rb', line 37

def limiter_utilization
	@limiter_utilization ||= Async::Utilization::Registry.new
end

#limiter_wrapperObject



77
78
79
# File 'lib/falcon/limiter/environment.rb', line 77

def limiter_wrapper
	Wrapper.new(connection_limiter)
end

#middlewareObject



72
73
74
# File 'lib/falcon/limiter/environment.rb', line 72

def middleware
	limiter_middleware(super)
end