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  }