[relase] v0.1.18-unstable4
- network fix
This commit is contained in:
parent
95e86f289e
commit
7c36e39ac0
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "cosmos-server",
|
"name": "cosmos-server",
|
||||||
"version": "0.1.18-unstable3",
|
"version": "0.1.18-unstable4",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "test-server.js",
|
"main": "test-server.js",
|
||||||
"bugs": {
|
"bugs": {
|
||||||
|
|
|
@ -62,5 +62,5 @@ func onDockerDestroyed(containerID string) {
|
||||||
|
|
||||||
func onNetworkDisconnect(networkID string) {
|
func onNetworkDisconnect(networkID string) {
|
||||||
utils.Debug("onNetworkDisconnect: " + networkID)
|
utils.Debug("onNetworkDisconnect: " + networkID)
|
||||||
NetworkCleanUp(networkID)
|
DebouncedNetworkCleanUp(networkID)
|
||||||
}
|
}
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"time"
|
"time"
|
||||||
"errors"
|
"errors"
|
||||||
|
"sync"
|
||||||
|
|
||||||
"github.com/azukaar/cosmos-server/src/utils"
|
"github.com/azukaar/cosmos-server/src/utils"
|
||||||
|
|
||||||
|
@ -221,11 +222,29 @@ func ConnectToNetworkSync(networkName string, containerID string) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func NetworkCleanUp(networkId string) {
|
func _debounceNetworkCleanUp() func(string) {
|
||||||
|
var mu sync.Mutex
|
||||||
|
var timer *time.Timer
|
||||||
|
|
||||||
|
return func(networkId string) {
|
||||||
if(networkId == "bridge" || networkId == "host" || networkId == "none") {
|
if(networkId == "bridge" || networkId == "host" || networkId == "none") {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mu.Lock()
|
||||||
|
defer mu.Unlock()
|
||||||
|
|
||||||
|
if timer != nil {
|
||||||
|
timer.Stop()
|
||||||
|
}
|
||||||
|
|
||||||
|
timer = time.AfterFunc(30*time.Minute, NetworkCleanUp)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var DebouncedNetworkCleanUp = _debounceNetworkCleanUp()
|
||||||
|
|
||||||
|
func NetworkCleanUp() {
|
||||||
DockerNetworkLock <- true
|
DockerNetworkLock <- true
|
||||||
defer func() { <-DockerNetworkLock }()
|
defer func() { <-DockerNetworkLock }()
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,8 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net"
|
"net"
|
||||||
|
"math"
|
||||||
|
"strconv"
|
||||||
)
|
)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -168,6 +170,16 @@ func (shield *smartShieldState) computeThrottle(policy utils.SmartShieldPolicy,
|
||||||
return throttle
|
return throttle
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func calculateLowestExhaustedPercentage(policy utils.SmartShieldPolicy, userConsumed userUsedBudget) int64 {
|
||||||
|
timeExhaustedPercentage := 100 - (userConsumed.Time / policy.PerUserTimeBudget) * 100
|
||||||
|
requestsExhaustedPercentage := 100 - (float64(userConsumed.Requests) / float64(policy.PerUserRequestLimit)) * 100
|
||||||
|
bytesExhaustedPercentage := 100 - (float64(userConsumed.Bytes) / float64(policy.PerUserByteLimit)) * 100
|
||||||
|
|
||||||
|
// utils.Debug(fmt.Sprintf("Time: %f, Requests: %d, Bytes: %d", timeExhaustedPercentage, requestsExhaustedPercentage, bytesExhaustedPercentage))
|
||||||
|
|
||||||
|
return int64(math.Max(0, math.Min(math.Min(timeExhaustedPercentage, requestsExhaustedPercentage), bytesExhaustedPercentage)))
|
||||||
|
}
|
||||||
|
|
||||||
func GetClientID(r *http.Request) string {
|
func GetClientID(r *http.Request) string {
|
||||||
ip, _, _ := net.SplitHostPort(r.RemoteAddr)
|
ip, _, _ := net.SplitHostPort(r.RemoteAddr)
|
||||||
return ip
|
return ip
|
||||||
|
@ -216,6 +228,12 @@ func SmartShieldMiddleware(policy utils.SmartShieldPolicy) func(http.Handler) ht
|
||||||
policy: policy,
|
policy: policy,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// add rate limite headers
|
||||||
|
In20Minutes := strconv.FormatInt(time.Now().Add(20 * time.Minute).Unix(), 10)
|
||||||
|
w.Header().Set("X-RateLimit-Remaining", strconv.FormatInt(calculateLowestExhaustedPercentage(policy, userConsumed), 10))
|
||||||
|
w.Header().Set("X-RateLimit-Limit", strconv.FormatInt(int64(policy.PerUserRequestLimit), 10))
|
||||||
|
w.Header().Set("X-RateLimit-Reset", In20Minutes)
|
||||||
|
|
||||||
utils.Debug("SmartShield: Adding request")
|
utils.Debug("SmartShield: Adding request")
|
||||||
shield.Lock()
|
shield.Lock()
|
||||||
shield.requests = append(shield.requests, wrapper)
|
shield.requests = append(shield.requests, wrapper)
|
||||||
|
|
Loading…
Reference in a new issue