fixes
All checks were successful
release-tag / release-image (push) Successful in 1m32s

This commit is contained in:
2025-06-10 00:00:43 +02:00
parent ebd186705d
commit 13bfc5500a

31
main.go
View File

@@ -311,27 +311,30 @@ func parseStream(r io.Reader, cb func(netip.Prefix)) error {
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
func subscribeKeyspace(ctx context.Context, rdb *redis.Client, ranger *Ranger) { func subscribeKeyspace(ctx context.Context, rdb *redis.Client, ranger *Ranger) {
pubsub := rdb.PSubscribe(ctx, "__keyspace@0__:bl:*", "__keyspace@0__:wl:*") // listen to keyevent channels (not keyspace) so msg.Payload == actual key
patterns := []string{
"__keyevent@0__:set",
"__keyevent@0__:del",
"__keyevent@0__:expired",
}
pubsub := rdb.PSubscribe(ctx, patterns...)
go func() { go func() {
for msg := range pubsub.Channel() { for msg := range pubsub.Channel() {
fmt.Println(msg) key := msg.Payload // full redis key e.g. "wl:1.2.3.4" or "bl:spam:10.0.0.0/8"
key := strings.TrimPrefix(msg.Channel, "__keyspace@0__:") switch {
payload := msg.Payload case strings.HasPrefix(key, "wl:"):
if strings.HasPrefix(key, "wl:") {
ipStr := strings.TrimPrefix(key, "wl:") ipStr := strings.TrimPrefix(key, "wl:")
addr, err := netip.ParseAddr(ipStr) addr, err := netip.ParseAddr(ipStr)
if err != nil { if err != nil {
continue continue
} }
switch payload { switch msg.Channel {
case "set": case "__keyevent@0__:set":
ranger.addWhite(addr) ranger.addWhite(addr)
case "del", "expired": case "__keyevent@0__:del", "__keyevent@0__:expired":
ranger.removeWhite(addr) ranger.removeWhite(addr)
} }
continue case strings.HasPrefix(key, "bl:"):
}
if strings.HasPrefix(key, "bl:") {
parts := strings.SplitN(key, ":", 3) parts := strings.SplitN(key, ":", 3)
if len(parts) != 3 { if len(parts) != 3 {
continue continue
@@ -341,10 +344,10 @@ func subscribeKeyspace(ctx context.Context, rdb *redis.Client, ranger *Ranger) {
if err != nil { if err != nil {
continue continue
} }
switch payload { switch msg.Channel {
case "set": case "__keyevent@0__:set":
ranger.addBlock(cat, p) ranger.addBlock(cat, p)
case "del", "expired": case "__keyevent@0__:del", "__keyevent@0__:expired":
ranger.removeBlock(cat, p) ranger.removeBlock(cat, p)
} }
} }