Files
2026-05-17 11:34:54 +08:00

78 lines
2.0 KiB
Go

package main
import (
"fmt"
"io"
"net/http"
"time"
"github.com/sirupsen/logrus"
"github.com/vmihailenco/msgpack/v5"
)
func logs(zone string) {
for {
zone, err := handleRequest(zone)
if err != nil {
logrus.Error("Error handling request", "error", err)
return
}
fmt.Print("\033[H\033[2J")
logrus.Infof("Zone: %s, RateLimitHeader: %+v, RateLimitEntries: %d",
zone.Name, zone.RateLimitHeader, len(zone.RateLimitEntries))
for _, entry := range zone.RateLimitEntries {
logrus.Infof("Entry Key: %s, Last: %d, Excess: %d",
entry.Key.String(zone.RateLimitHeader), entry.Last, entry.Excess)
}
fmt.Println("\nPress Ctrl+C to exit")
time.Sleep(2 * time.Second)
}
}
func handleRequest(zone string) (Zone, error) {
endpoint := fmt.Sprintf("http://localhost:9000/api/%s", zone)
req, err := http.NewRequest(http.MethodGet, endpoint, nil)
if err != nil {
return Zone{}, err
}
response, err := http.DefaultClient.Do(req)
if err != nil {
return Zone{}, fmt.Errorf("error making request to %s: %w", endpoint, err)
}
defer response.Body.Close()
decoder := msgpack.NewDecoder(response.Body)
var rateLimitHeader RateLimitHeader
rateLimitEntries := []RateLimitEntry{}
log := logrus.New()
if err := decoder.Decode(&rateLimitHeader); err != nil {
if err == io.EOF {
return Zone{
Name: zone,
RateLimitHeader: rateLimitHeader,
RateLimitEntries: rateLimitEntries,
}, nil
}
log.Error("Error decoding header", "error", err)
return Zone{}, err
}
for {
var message RateLimitEntry
if err := decoder.Decode(&message); err != nil {
if err == io.EOF {
break
}
log.Error("Error decoding entry", "error", err)
return Zone{}, err
}
message.Last = toNonMonotonic(message.Last, rateLimitHeader)
rateLimitEntries = append(rateLimitEntries, message)
}
log.Debug("Received rate limit entries", "zone", zone, "entries", len(rateLimitEntries))
return Zone{
Name: zone,
RateLimitHeader: rateLimitHeader,
RateLimitEntries: rateLimitEntries,
}, nil
}