code.gitea.io/gitea@v1.21.7/routers/web/admin/queue.go (about) 1 // Copyright 2023 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package admin 5 6 import ( 7 "net/http" 8 "strconv" 9 10 "code.gitea.io/gitea/modules/context" 11 "code.gitea.io/gitea/modules/queue" 12 "code.gitea.io/gitea/modules/setting" 13 ) 14 15 func Queues(ctx *context.Context) { 16 if !setting.IsProd { 17 initTestQueueOnce() 18 } 19 ctx.Data["Title"] = ctx.Tr("admin.monitor.queues") 20 ctx.Data["PageIsAdminMonitorQueue"] = true 21 ctx.Data["Queues"] = queue.GetManager().ManagedQueues() 22 ctx.HTML(http.StatusOK, tplQueue) 23 } 24 25 // QueueManage shows details for a specific queue 26 func QueueManage(ctx *context.Context) { 27 qid := ctx.ParamsInt64("qid") 28 mq := queue.GetManager().GetManagedQueue(qid) 29 if mq == nil { 30 ctx.Status(http.StatusNotFound) 31 return 32 } 33 ctx.Data["Title"] = ctx.Tr("admin.monitor.queue", mq.GetName()) 34 ctx.Data["PageIsAdminMonitor"] = true 35 ctx.Data["Queue"] = mq 36 ctx.HTML(http.StatusOK, tplQueueManage) 37 } 38 39 // QueueSet sets the maximum number of workers and other settings for this queue 40 func QueueSet(ctx *context.Context) { 41 qid := ctx.ParamsInt64("qid") 42 mq := queue.GetManager().GetManagedQueue(qid) 43 if mq == nil { 44 ctx.Status(http.StatusNotFound) 45 return 46 } 47 48 maxNumberStr := ctx.FormString("max-number") 49 50 var err error 51 var maxNumber int 52 if len(maxNumberStr) > 0 { 53 maxNumber, err = strconv.Atoi(maxNumberStr) 54 if err != nil { 55 ctx.Flash.Error(ctx.Tr("admin.monitor.queue.settings.maxnumberworkers.error")) 56 ctx.Redirect(setting.AppSubURL + "/admin/monitor/queue/" + strconv.FormatInt(qid, 10)) 57 return 58 } 59 if maxNumber < -1 { 60 maxNumber = -1 61 } 62 } else { 63 maxNumber = mq.GetWorkerMaxNumber() 64 } 65 66 mq.SetWorkerMaxNumber(maxNumber) 67 ctx.Flash.Success(ctx.Tr("admin.monitor.queue.settings.changed")) 68 ctx.Redirect(setting.AppSubURL + "/admin/monitor/queue/" + strconv.FormatInt(qid, 10)) 69 } 70 71 func QueueRemoveAllItems(ctx *context.Context) { 72 // Gitea's queue doesn't have transaction support 73 // So in rare cases, the queue could be corrupted/out-of-sync 74 // Site admin could remove all items from the queue to make it work again 75 qid := ctx.ParamsInt64("qid") 76 mq := queue.GetManager().GetManagedQueue(qid) 77 if mq == nil { 78 ctx.Status(http.StatusNotFound) 79 return 80 } 81 82 if err := mq.RemoveAllItems(ctx); err != nil { 83 ctx.ServerError("RemoveAllItems", err) 84 return 85 } 86 87 ctx.Flash.Success(ctx.Tr("admin.monitor.queue.settings.remove_all_items_done")) 88 ctx.Redirect(setting.AppSubURL + "/admin/monitor/queue/" + strconv.FormatInt(qid, 10)) 89 }