Class ::nsmcp::LogTool
::nsmcp::LogTool
create ... \
[ -description:required description:required ] \
[ -inputSchema (default "{} object {type string object properties object {} additionalProperties boolean false}") ] \
[ -name:required name:required ] \
[ -operation:required operation:required ] \
[ -outputSchema (default "") ] \
[ -permission:required permission:required ] \
[ -service:required service:required ]
Defined in /usr/local/ns/tcl/nsmcp/lib/log-tools.tclClass Relations
- class: ::nx::Class
![[i]](/resources/acs-subsite/ZoomIn16.gif)
- superclass: ::nsmcp::Tool
![[i]](/resources/acs-subsite/ZoomIn16.gif)
::nx::Class create ::nsmcp::LogTool \
-superclass ::nsmcp::Tool
Methods (to be applied on instances)
execute (scripted, public)
<instance of nsmcp::LogTool
> execute context arguments
- Parameters:
- context (required)
- arguments (required)
- Testcases:
-
No testcase defined.
set values [:arguments $arguments]
switch ${:operation} {
errors {return [${:service} start $context errors]}
requestContext {return [${:service} start $context requestContext [dict get $values identifier]]}
results {
if {[dict exists $values jobHandle]} {return [${:service} poll $context [dict get $values jobHandle]]}
set values [dict merge {cursor 0 limit 20 includePeerAddresses false} $values]
return [${:service} results $context [dict get $values resultHandle] [dict get $values cursor] [dict get $values limit] [dict get $values includePeerAddresses]]
}
}validate (scripted, public)
<instance of nsmcp::LogTool
> validate arguments
- Parameters:
- arguments (required)
- Testcases:
-
No testcase defined.
if {[lindex $arguments 1] ne "object"} {
return -code error -errorcode {NSMCP RPC -32602} "Expected arguments object"
}
set allowed [dict get [dict create errors {} requestContext {identifier} results {jobHandle resultHandle cursor limit includePeerAddresses}] ${:operation}]
foreach {key type value} [lindex $arguments 2] {
if {$key ni $allowed} {return -code error -errorcode {NSMCP RPC -32602} "Unknown log argument"}
set expected string
if {$key eq "limit"} {set expected number}
if {$key eq "includePeerAddresses"} {set expected boolean}
if {$type ne $expected} {return -code error -errorcode {NSMCP RPC -32602} "Invalid log argument type"}
if {$key in {jobHandle resultHandle} && ![regexp {^[0-9a-f]{64}$} $value]} {
return -code error -errorcode {NSMCP RPC -32602} "Invalid log handle"
}
if {$key eq "limit" && (![string is integer -strict $value] || $value < 1 || $value > 100)} {
return -code error -errorcode {NSMCP RPC -32602} "Limit must be between 1 and 100"
}
if {$key eq "cursor" && (![string is entier -strict $value] || $value < 0)} {
return -code error -errorcode {NSMCP RPC -32602} "Invalid cursor"
}
}
set values [:arguments $arguments]
if {${:operation} eq "requestContext" && (![dict exists $values identifier] ||
![::nsmcp::logRecordParser validRequestIdentifier [dict get $values identifier]])} {
return -code error -errorcode {NSMCP RPC -32602} "Expected a dash-delimited log-thread identifier"
}
if {${:operation} eq "results"} {
if {[dict exists $values jobHandle] == [dict exists $values resultHandle]} {
return -code error -errorcode {NSMCP RPC -32602} "Supply exactly one of jobHandle (poll a job) or resultHandle (read a page)"
}
if {[dict exists $values jobHandle] && [dict size $values]!=1} {
return -code error -errorcode {NSMCP RPC -32602} "Poll with jobHandle alone. Paging and includePeerAddresses apply to resultHandle pages; for access summaries set includePeerAddresses on access_summary"
}
}