|
@@ -1,8 +1,12 @@
|
|
|
package web
|
|
|
|
|
|
import (
|
|
|
+ "fmt"
|
|
|
+ "log"
|
|
|
"net/http"
|
|
|
+ "time"
|
|
|
|
|
|
+ "github.com/gin-contrib/sessions"
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
|
|
"code.osinet.fr/fgm/sqs_demo/back/services/redriver"
|
|
@@ -10,9 +14,54 @@ import (
|
|
|
|
|
|
func makeDeleteConfirmHandler(rd redriver.Redriver) gin.HandlerFunc {
|
|
|
return func(c *gin.Context) {
|
|
|
- c.JSON(http.StatusServiceUnavailable, gin.H{
|
|
|
- "message": "deletion confirmation",
|
|
|
- "error": "not implemented",
|
|
|
- })
|
|
|
+ ctx := c.Request.Context()
|
|
|
+ qName := c.Param("name")
|
|
|
+ redirect := "/queue/" + qName
|
|
|
+
|
|
|
+ sess := sessions.Default(c)
|
|
|
+
|
|
|
+ defer func() {
|
|
|
+ _ = sess.Save()
|
|
|
+ c.Redirect(http.StatusSeeOther, redirect)
|
|
|
+ }()
|
|
|
+
|
|
|
+ req := c.Request
|
|
|
+ if err := req.ParseForm(); err != nil {
|
|
|
+ log.Printf("Failed to parse deletion confirm form for queue %s: %v",
|
|
|
+ qName, err)
|
|
|
+ sess.AddFlash(fmt.Sprintf("Failed to parsed deletion confirmm form for queue %s",
|
|
|
+ qName))
|
|
|
+ return
|
|
|
+ }
|
|
|
+ ids := parseIDs(req.Form, validateUint)
|
|
|
+
|
|
|
+ var messages []redriver.Message
|
|
|
+ if len(ids) == 0 {
|
|
|
+ flash := fmt.Sprintf("Got no message to delete from queue %q", qName)
|
|
|
+ log.Print(flash)
|
|
|
+ sess.AddFlash(flash)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ messages = parseMessages(req.Form, ids)
|
|
|
+
|
|
|
+ keys := make([]redriver.ItemsKeys, len(messages))
|
|
|
+ for i, msg := range messages {
|
|
|
+ keys[i] = redriver.ItemsKeys{
|
|
|
+ MessageID: msg.MessageId,
|
|
|
+ ReceiptHandle: msg.ReceiptHandle,
|
|
|
+ }
|
|
|
+ }
|
|
|
+ t0 := time.Now()
|
|
|
+ err := rd.DeleteItems(ctx, qName, keys)
|
|
|
+ latency := time.Since(t0)
|
|
|
+ if err != nil {
|
|
|
+ log.Printf("failed deleting %d items from queue %q: %v",
|
|
|
+ len(keys), qName, err)
|
|
|
+ sess.AddFlash(fmt.Sprintf("Failed deleting %d items from queue %q",
|
|
|
+ len(keys), qName))
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ sess.AddFlash(fmt.Sprintf("Deleted %d items in %v", len(keys), latency))
|
|
|
}
|
|
|
}
|