Use updateLogLevel with gcsafe pragma

This commit is contained in:
Arnaud 2025-10-23 16:51:16 +02:00
parent f2db1c40b5
commit 0d21a16908
No known key found for this signature in database
GPG Key ID: B8FBC178F10CA7AE
4 changed files with 67 additions and 23 deletions

View File

@ -105,6 +105,10 @@ package main
static int cGoCodexUploadFile(void* codexCtx, char* sessionId, void* resp) {
return codex_upload_file(codexCtx, sessionId, (CodexCallback) callback, resp);
}
static int cGoCodexLogLevel(void* codexCtx, char* logLevel, void* resp) {
return codex_log_level(codexCtx, logLevel, (CodexCallback) callback, resp);
}
*/
import "C"
import (
@ -122,18 +126,6 @@ import (
"unsafe"
)
type LogLevel string
const (
TRACE LogLevel = "trace"
DEBUG LogLevel = "debug"
INFO LogLevel = "info"
NOTICE LogLevel = "notice"
WARN LogLevel = "warn"
ERROR LogLevel = "error"
FATAL LogLevel = "fatal"
)
type LogFormat string
const (
@ -155,7 +147,7 @@ const defaultBlockSize = 1024 * 64
type Config struct {
// Default: INFO
LogLevel LogLevel `json:"log-level,omitempty"`
LogLevel string `json:"log-level,omitempty"`
// Specifies what kind of logs should be written to stdout
// Default: auto
@ -788,24 +780,45 @@ func (node CodexNode) UploadFileAsync(options UploadOptions, onDone func(cid str
}()
}
func (node CodexNode) UpdateLogLevel(logLevel string) error {
bridge := newBridgeCtx()
defer bridge.free()
var cLogLevel = C.CString(string(logLevel))
defer C.free(unsafe.Pointer(cLogLevel))
if C.cGoCodexLogLevel(node.ctx, cLogLevel, bridge.resp) != C.RET_OK {
return bridge.callError("cGoCodexLogLevel")
}
_, err := bridge.wait()
return err
}
func main() {
node, err := New(Config{
BlockRetries: 5,
LogLevel: "WARN",
})
if err != nil {
log.Fatalf("Failed to create Codex node: %v", err)
}
if err := node.Start(); err != nil {
log.Fatalf("Failed to start Codex node: %v", err)
}
log.Println("Codex node started")
version, err := node.Version()
if err != nil {
log.Fatalf("Failed to get Codex version: %v", err)
}
log.Printf("Codex version: %s", version)
if err := node.Start(); err != nil {
log.Fatalf("Failed to start Codex node: %v", err)
err = node.UpdateLogLevel("ERROR")
if err != nil {
log.Fatalf("Failed to update log level: %v", err)
}
log.Println("Codex node started")
buf := bytes.NewBuffer([]byte("Hello World!"))
len := buf.Len()

View File

@ -22,21 +22,28 @@ logScope:
type NodeDebugMsgType* = enum
DEBUG
PEER
LOG_LEVEL
type NodeDebugRequest* = object
operation: NodeDebugMsgType
peerId: cstring
logLevel: cstring
proc createShared*(
T: type NodeDebugRequest, op: NodeDebugMsgType, peerId: cstring = ""
T: type NodeDebugRequest,
op: NodeDebugMsgType,
peerId: cstring = "",
logLevel: cstring = "",
): ptr type T =
var ret = createShared(T)
ret[].operation = op
ret[].peerId = peerId.alloc()
ret[].logLevel = logLevel.alloc()
return ret
proc destroyShared(self: ptr NodeDebugRequest) =
deallocShared(self[].peerId)
deallocShared(self[].logLevel)
deallocShared(self)
proc getDebug(
@ -81,6 +88,17 @@ proc getPeer(
else:
return err("Failed to get peer: peer debug API is disabled")
proc updateLogLevel(
codex: ptr CodexServer, logLevel: cstring
): Future[Result[string, string]] {.async: (raises: []).} =
try:
{.gcsafe.}:
updateLogLevel($logLevel)
except ValueError as err:
return err("Failed to update log level: invalid value for log level: " & err.msg)
return ok("")
proc process*(
self: ptr NodeDebugRequest, codex: ptr CodexServer
): Future[Result[string, string]] {.async: (raises: []).} =
@ -99,4 +117,9 @@ proc process*(
if res.isErr:
error "Failed to get PEER.", error = res.error
return err($res.error)
of NodeDebugMsgType.LOG_LEVEL:
let res = (await updateLogLevel(codex, self.logLevel))
if res.isErr:
error "Failed to update LOG_LEVEL.", error = res.error
return err($res.error)
return res

View File

@ -116,6 +116,13 @@ proc createCodex(
return err("Failed to create codex: unable to load configuration: " & e.msg)
conf.setupLogging()
try:
{.gcsafe.}:
updateLogLevel(conf.logLevel)
except ValueError as err:
return err("Failed to create codex: invalid value for log level: " & err.msg)
conf.setupMetrics()
if not (checkAndCreateDataDir((conf.dataDir).string)):

View File

@ -39,7 +39,7 @@ import ./codex_thread_requests/requests/node_download_request
import ./codex_thread_requests/requests/node_storage_request
import ./ffi_types
from ../codex/conf import codexVersion, updateLogLevel
from ../codex/conf import codexVersion
logScope:
topics = "codexlib"
@ -201,12 +201,13 @@ proc codex_log_level(
initializeLibrary()
checkLibcodexParams(ctx, callback, userData)
try:
updateLogLevel($logLevel)
except ValueError as e:
return callback.error(e.msg, userData)
let reqContent =
NodeDebugRequest.createShared(NodeDebugMsgType.LOG_LEVEL, logLevel = logLevel)
let res = codex_context.sendRequestToCodexThread(
ctx, RequestType.DEBUG, reqContent, callback, userData
)
return callback.success("", userData)
return callback.okOrError(res, userData)
proc codex_connect(
ctx: ptr CodexContext,