// Copyright 2020 The Gitea Authors. All rights reserved. // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. package private import ( "encoding/json" "fmt" "net/http" "time" "code.gitea.io/gitea/modules/setting" ) // Shutdown calls the internal shutdown function func Shutdown() (int, string) { reqURL := setting.LocalURL + fmt.Sprintf("api/internal/manager/shutdown") req := newInternalRequest(reqURL, "POST") resp, err := req.Response() if err != nil { return http.StatusInternalServerError, fmt.Sprintf("Unable to contact gitea: %v", err.Error()) } defer resp.Body.Close() if resp.StatusCode != http.StatusOK { return resp.StatusCode, decodeJSONError(resp).Err } return http.StatusOK, "Shutting down" } // Restart calls the internal restart function func Restart() (int, string) { reqURL := setting.LocalURL + fmt.Sprintf("api/internal/manager/restart") req := newInternalRequest(reqURL, "POST") resp, err := req.Response() if err != nil { return http.StatusInternalServerError, fmt.Sprintf("Unable to contact gitea: %v", err.Error()) } defer resp.Body.Close() if resp.StatusCode != http.StatusOK { return resp.StatusCode, decodeJSONError(resp).Err } return http.StatusOK, "Restarting" } // FlushOptions represents the options for the flush call type FlushOptions struct { Timeout time.Duration NonBlocking bool } // FlushQueues calls the internal flush-queues function func FlushQueues(timeout time.Duration, nonBlocking bool) (int, string) { reqURL := setting.LocalURL + fmt.Sprintf("api/internal/manager/flush-queues") req := newInternalRequest(reqURL, "POST") if timeout > 0 { req.SetTimeout(timeout+10*time.Second, timeout+10*time.Second) } req = req.Header("Content-Type", "application/json") jsonBytes, _ := json.Marshal(FlushOptions{ Timeout: timeout, NonBlocking: nonBlocking, }) req.Body(jsonBytes) resp, err := req.Response() if err != nil { return http.StatusInternalServerError, fmt.Sprintf("Unable to contact gitea: %v", err.Error()) } defer resp.Body.Close() if resp.StatusCode != http.StatusOK { return resp.StatusCode, decodeJSONError(resp).Err } return http.StatusOK, "Flushed" }