diff options
author | Steven Barth <steven@midlink.org> | 2008-07-03 18:49:29 +0000 |
---|---|---|
committer | Steven Barth <steven@midlink.org> | 2008-07-03 18:49:29 +0000 |
commit | 280872baa79d20de093314e3cfcf2cea14434f83 (patch) | |
tree | 39e012bbd6285563abfdefbd560cd33fdcaca4ee | |
parent | f0a0e503783d6571c1a0a90bf14e7531b2f2a176 (diff) |
* libs/httpd: Add limit for luci handler
-rw-r--r-- | libs/httpd/luasrc/httpd/handler/luci.lua | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/libs/httpd/luasrc/httpd/handler/luci.lua b/libs/httpd/luasrc/httpd/handler/luci.lua index 0937413935..65f3f01b25 100644 --- a/libs/httpd/luasrc/httpd/handler/luci.lua +++ b/libs/httpd/luasrc/httpd/handler/luci.lua @@ -23,12 +23,16 @@ local ltn12 = require("luci.ltn12") Luci = luci.util.class(luci.httpd.module.Handler) Response = luci.httpd.module.Response -function Luci.__init__(self) +function Luci.__init__(self, limit) luci.httpd.module.Handler.__init__(self) + self.limit = limit or 5 + self.running = {} + setmetatable(self.running, {__mode = "v"}) end function Luci.handle_head(self, ...) local response, sourceout = self:handle_get(...) + self.running = self.running - 1 return response end @@ -37,6 +41,11 @@ function Luci.handle_post(self, ...) end function Luci.handle_get(self, request, sourcein, sinkerr) + if self.limit and #self.running >= self.limit then + return self:failure(503, "Overload") + end + table.insert(self.running, coroutine.running()) + local r = luci.http.Request( request.env, sourcein, @@ -57,6 +66,7 @@ function Luci.handle_get(self, request, sourcein, sinkerr) status = 500 headers["Content-Type"] = "text/plain" local err = {id} + self.running = self.running - 1 return Response( status, headers ), function() return table.remove(err) end end |