mirror of
https://codeberg.org/Codeberg/pages-server.git
synced 2025-06-20 07:32:40 +02:00
feat: use a in memory map to count requests for ips and log the n most active each hour
This commit is contained in:
parent
023ea17492
commit
b22d3665a9
7 changed files with 74 additions and 20 deletions
|
@ -7,7 +7,9 @@ import (
|
|||
"net"
|
||||
"net/http"
|
||||
"os"
|
||||
"sort"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/pires/go-proxyproto"
|
||||
|
@ -135,8 +137,41 @@ func Serve(ctx *cli.Context) error {
|
|||
StartProfilingServer(ctx.String("profiling-address"))
|
||||
}
|
||||
|
||||
mostActiveIpMap := &sync.Map{}
|
||||
if cfg.Server.LogMostActiveIps {
|
||||
go func() {
|
||||
ticker := time.NewTicker(1 * time.Hour)
|
||||
for range ticker.C {
|
||||
type kv struct {
|
||||
Key string
|
||||
Value uint
|
||||
}
|
||||
|
||||
var kvArray []kv
|
||||
mostActiveIpMap.Range(func(k, v any) bool {
|
||||
kvArray = append(kvArray, kv{k.(string), v.(uint)})
|
||||
return true
|
||||
})
|
||||
mostActiveIpMap.Clear()
|
||||
|
||||
sort.Slice(kvArray, func(i, j int) bool {
|
||||
return kvArray[i].Value > kvArray[j].Value
|
||||
})
|
||||
|
||||
builder := strings.Builder{}
|
||||
var item kv
|
||||
for i := uint(0); i < cfg.Server.MostActiveIpCount; i++ {
|
||||
item = kvArray[i]
|
||||
builder.WriteString(fmt.Sprintf("\n%s, %d", item.Key, item.Value))
|
||||
}
|
||||
|
||||
log.Log().Msg(fmt.Sprintf("%d most active IPs:%s", cfg.Server.MostActiveIpCount, builder.String()))
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
// Create ssl handler based on settings
|
||||
sslHandler := handler.Handler(cfg.Server, giteaClient, canonicalDomainCache, redirectsCache)
|
||||
sslHandler := handler.Handler(cfg.Server, giteaClient, canonicalDomainCache, redirectsCache, mostActiveIpMap)
|
||||
|
||||
// Start the ssl listener
|
||||
log.Info().Msgf("Start SSL server using TCP listener on %s", listener.Addr())
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue