Upload Modules
This commit is contained in:
64
ngx_http_limit_req_module/log_zone/main.go
Normal file
64
ngx_http_limit_req_module/log_zone/main.go
Normal file
@@ -0,0 +1,64 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"net"
|
||||
"os"
|
||||
)
|
||||
|
||||
func main() {
|
||||
arg := os.Args[1:]
|
||||
zone := "one"
|
||||
if arg[0] == "log" {
|
||||
if len(arg) >= 2 {
|
||||
zone = arg[1]
|
||||
}
|
||||
logs(zone)
|
||||
return
|
||||
}
|
||||
if arg[0] == "send" {
|
||||
if len(arg) >= 2 {
|
||||
zone = arg[1]
|
||||
}
|
||||
send(zone)
|
||||
}
|
||||
}
|
||||
|
||||
func toNonMonotonic(last int64, header RateLimitHeader) int64 {
|
||||
return header.Now - (header.NowMonotonic - last)
|
||||
}
|
||||
|
||||
type Zone struct {
|
||||
Name string
|
||||
RateLimitHeader RateLimitHeader
|
||||
RateLimitEntries []RateLimitEntry
|
||||
}
|
||||
|
||||
type RateLimitHeader struct {
|
||||
Key string
|
||||
Now int64
|
||||
NowMonotonic int64
|
||||
}
|
||||
|
||||
type RateLimitEntry struct {
|
||||
Key Key
|
||||
Last int64
|
||||
Excess int64
|
||||
}
|
||||
|
||||
const (
|
||||
BinaryRemoteAddress = "$binary_remote_addr"
|
||||
RemoteAddress = "$remote_addr"
|
||||
)
|
||||
|
||||
type Key []byte
|
||||
|
||||
func (r Key) String(header RateLimitHeader) string {
|
||||
switch header.Key {
|
||||
case BinaryRemoteAddress:
|
||||
return net.IP(r).String()
|
||||
case RemoteAddress:
|
||||
fallthrough
|
||||
default:
|
||||
return string(r)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user