From 89cfedeb08ac79fd626063fba59f8e6b10c1c136 Mon Sep 17 00:00:00 2001 From: Josh Baker Date: Sun, 11 Sep 2016 19:20:53 -0700 Subject: [PATCH] added PDELHOOKS --- controller/controller.go | 4 +++- controller/hooks.go | 39 +++++++++++++++++++++++++++++++++++++++ core/commands.json | 10 ++++++++++ core/commands_gen.go | 10 ++++++++++ 4 files changed, 62 insertions(+), 1 deletion(-) diff --git a/controller/controller.go b/controller/controller.go index 171bb420..66cff6b1 100644 --- a/controller/controller.go +++ b/controller/controller.go @@ -389,7 +389,7 @@ func (c *Controller) handleInputCommand(conn *server.Conn, msg *server.Message, default: c.mu.RLock() defer c.mu.RUnlock() - case "set", "del", "drop", "fset", "flushdb", "sethook", "delhook", "expire", "persist": + case "set", "del", "drop", "fset", "flushdb", "sethook", "pdelhook", "delhook", "expire", "persist": // write operations write = true c.mu.Lock() @@ -479,6 +479,8 @@ func (c *Controller) command(msg *server.Message, w io.Writer) (res string, d co res, d, err = c.cmdSetHook(msg) case "delhook": res, d, err = c.cmdDelHook(msg) + case "pdelhook": + res, d, err = c.cmdPDelHook(msg) case "expire": res, d, err = c.cmdExpire(msg) case "persist": diff --git a/controller/hooks.go b/controller/hooks.go index 23f00a15..115960a7 100644 --- a/controller/hooks.go +++ b/controller/hooks.go @@ -5,6 +5,7 @@ import ( "encoding/json" "errors" "sort" + "strconv" "strings" "sync" "time" @@ -196,6 +197,44 @@ func (c *Controller) cmdDelHook(msg *server.Message) (res string, d commandDetai return } +func (c *Controller) cmdPDelHook(msg *server.Message) (res string, d commandDetailsT, err error) { + start := time.Now() + vs := msg.Values[1:] + + var pattern string + var ok bool + if vs, pattern, ok = tokenval(vs); !ok || pattern == "" { + return "", d, errInvalidNumberOfArguments + } + if len(vs) != 0 { + return "", d, errInvalidNumberOfArguments + } + + count := 0 + for name := range c.hooks { + match, _ := glob.Match(pattern, name) + if match { + if h, ok := c.hooks[name]; ok { + h.Close() + if hm, ok := c.hookcols[h.Key]; ok { + delete(hm, h.Name) + } + delete(c.hooks, h.Name) + count++ + } + } + } + d.timestamp = time.Now() + + switch msg.OutputType { + case server.JSON: + return server.OKMessage(msg, start), d, nil + case server.RESP: + return ":" + strconv.FormatInt(int64(count), 10) + "\r\n", d, nil + } + return +} + func (c *Controller) cmdHooks(msg *server.Message) (res string, err error) { start := time.Now() vs := msg.Values[1:] diff --git a/core/commands.json b/core/commands.json index 4a1f6346..71243d39 100644 --- a/core/commands.json +++ b/core/commands.json @@ -1120,5 +1120,15 @@ } ], "group": "webhook" + }, + "PDELHOOK": { + "summary": "Removes all hooks matching a pattern", + "arguments":[ + { + "name": "pattern", + "type": "pattern" + } + ], + "group": "webhook" } } diff --git a/core/commands_gen.go b/core/commands_gen.go index 52944aab..0b7e175b 100644 --- a/core/commands_gen.go +++ b/core/commands_gen.go @@ -1282,5 +1282,15 @@ var commandsJSON = `{ } ], "group": "webhook" + }, + "PDELHOOK": { + "summary": "Removes all hooks matching a pattern", + "arguments":[ + { + "name": "pattern", + "type": "pattern" + } + ], + "group": "webhook" } }`