gitea源码

queue.go 2.5KB

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