nsmcp::LogService method start (public)

 <instance of nsmcp::LogService[i]> start context operation \
    [ identifier ]

Defined in /usr/local/ns/tcl/nsmcp/lib/log-tools.tcl

Parameters:
context (required)
operation (required)
identifier (optional)

Testcases:
No testcase defined.
Source code:
:require $context
if {$operation ni {errors requestContext accessSummary}} {error "invalid log operation"}
if {$operation eq "requestContext" && ![::nsmcp::logRecordParser validRequestIdentifier $identifier]} {
    return -code error -errorcode {NSMCP RPC -32602} "Invalid request identifier"
}
set requiresPeers [expr {$operation eq "accessSummary" &&
    ([dict exists $identifier peer] || ([dict exists $identifier includePeerAddresses] && [dict get $identifier includePeerAddresses]))}]
if {$requiresPeers} {${:authorizer} require $context diagnostics.logs.peers.read}
ns_mutex lock ${:mutex}
try {
    foreach key [nsv_array names ${:store}] {
        set record [nsv_get ${:store} $key]
        if {[dict get $record expires] <= [clock seconds] && [dict get $record status] in {complete failed}} {
            nsv_unset ${:store} $key
        }
    }
    if {[llength [nsv_array names ${:store}]] >= ${:maxJobs}} {error "log job limit reached"}
    set handle [ns_crypto::randombytes -encoding hex 32]
    nsv_set ${:store} $handle [dict create principal [$context principal] server [$context server]  expires [expr {[clock seconds]+${:lifetime}}] status queued mappings {} requiresPeers $requiresPeers]
    try {
        ns_job queue -detached ${:queue} [list [self] run $handle $operation $identifier]
    } on error {message options} {
        nsv_unset ${:store} $handle
        return -options $options $message
    }
} finally {ns_mutex unlock ${:mutex}}
return [list {} object [list jobHandle string $handle status string queued server string [ns_info server]]]
XQL Not present:
Generic, PostgreSQL, Oracle
[ hide source ] | [ make this the default ]
Show another procedure: