mirror of
https://github.com/hanzoai/forge.git
synced 2026-10-30 15:00:39 +00:00
Source files keep their SPDX-License-Identifier and Hanzo copyright line; the Gitea, Gogs and LFS Test Server copyrights they used to repeat now live once in NOTICE, alongside LICENSE. The header lint accepts any copyright line above the SPDX line, so it no longer demands an upstream one. Co-authored-by: Hanzo Dev <[email protected]>
119 lines
3.9 KiB
Go
119 lines
3.9 KiB
Go
// Copyright 2026 Hanzo AI, Inc. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package private
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
"net/url"
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
// Shutdown calls the internal shutdown function
|
|
func Shutdown(ctx context.Context) ResponseExtra {
|
|
reqURL := internalURL("manager/shutdown")
|
|
req := newInternalRequestAPI(ctx, reqURL, "POST")
|
|
return requestJSONClientMsg(req, "Shutting down")
|
|
}
|
|
|
|
// Restart calls the internal restart function
|
|
func Restart(ctx context.Context) ResponseExtra {
|
|
reqURL := internalURL("manager/restart")
|
|
req := newInternalRequestAPI(ctx, reqURL, "POST")
|
|
return requestJSONClientMsg(req, "Restarting")
|
|
}
|
|
|
|
// ReloadTemplates calls the internal reload-templates function
|
|
func ReloadTemplates(ctx context.Context) ResponseExtra {
|
|
reqURL := internalURL("manager/reload-templates")
|
|
req := newInternalRequestAPI(ctx, reqURL, "POST")
|
|
return requestJSONClientMsg(req, "Reloaded")
|
|
}
|
|
|
|
// 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(ctx context.Context, timeout time.Duration, nonBlocking bool) ResponseExtra {
|
|
reqURL := internalURL("manager/flush-queues")
|
|
req := newInternalRequestAPI(ctx, reqURL, "POST", FlushOptions{Timeout: timeout, NonBlocking: nonBlocking})
|
|
if timeout > 0 {
|
|
req.SetReadWriteTimeout(timeout + 10*time.Second)
|
|
}
|
|
return requestJSONClientMsg(req, "Flushed")
|
|
}
|
|
|
|
// PauseLogging pauses logging
|
|
func PauseLogging(ctx context.Context) ResponseExtra {
|
|
reqURL := internalURL("manager/pause-logging")
|
|
req := newInternalRequestAPI(ctx, reqURL, "POST")
|
|
return requestJSONClientMsg(req, "Logging Paused")
|
|
}
|
|
|
|
// ResumeLogging resumes logging
|
|
func ResumeLogging(ctx context.Context) ResponseExtra {
|
|
reqURL := internalURL("manager/resume-logging")
|
|
req := newInternalRequestAPI(ctx, reqURL, "POST")
|
|
return requestJSONClientMsg(req, "Logging Restarted")
|
|
}
|
|
|
|
// ReleaseReopenLogging releases and reopens logging files
|
|
func ReleaseReopenLogging(ctx context.Context) ResponseExtra {
|
|
reqURL := internalURL("manager/release-and-reopen-logging")
|
|
req := newInternalRequestAPI(ctx, reqURL, "POST")
|
|
return requestJSONClientMsg(req, "Logging Restarted")
|
|
}
|
|
|
|
// SetLogSQL sets database logging
|
|
func SetLogSQL(ctx context.Context, on bool) ResponseExtra {
|
|
reqURL := internalURL("manager/set-log-sql?on=" + strconv.FormatBool(on))
|
|
req := newInternalRequestAPI(ctx, reqURL, "POST")
|
|
return requestJSONClientMsg(req, "Log SQL setting set")
|
|
}
|
|
|
|
// LoggerOptions represents the options for the add logger call
|
|
type LoggerOptions struct {
|
|
Logger string
|
|
Writer string
|
|
Mode string
|
|
Config map[string]any
|
|
}
|
|
|
|
// AddLogger adds a logger
|
|
func AddLogger(ctx context.Context, logger, writer, mode string, config map[string]any) ResponseExtra {
|
|
reqURL := internalURL("manager/add-logger")
|
|
req := newInternalRequestAPI(ctx, reqURL, "POST", LoggerOptions{
|
|
Logger: logger,
|
|
Writer: writer,
|
|
Mode: mode,
|
|
Config: config,
|
|
})
|
|
return requestJSONClientMsg(req, "Added")
|
|
}
|
|
|
|
// RemoveLogger removes a logger
|
|
func RemoveLogger(ctx context.Context, logger, writer string) ResponseExtra {
|
|
reqURL := internalURL(fmt.Sprintf("manager/remove-logger/%s/%s", url.PathEscape(logger), url.PathEscape(writer)))
|
|
req := newInternalRequestAPI(ctx, reqURL, "POST")
|
|
return requestJSONClientMsg(req, "Removed")
|
|
}
|
|
|
|
// Processes return the current processes from this forge instance
|
|
func Processes(ctx context.Context, out io.Writer, flat, noSystem, stacktraces, json bool, cancel string) ResponseExtra {
|
|
reqURL := internalURL(fmt.Sprintf("manager/processes?flat=%t&no-system=%t&stacktraces=%t&json=%t&cancel-pid=%s", flat, noSystem, stacktraces, json, url.QueryEscape(cancel)))
|
|
|
|
req := newInternalRequestAPI(ctx, reqURL, "GET")
|
|
callback := func(resp *http.Response, extra *ResponseExtra) {
|
|
_, extra.Error = io.Copy(out, resp.Body)
|
|
}
|
|
_, extra := requestJSONResp(req, &responseCallback{callback})
|
|
return extra
|
|
}
|