nsmcp::LogTool method validate (public)

 <instance of nsmcp::LogTool[i]> validate arguments

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

Parameters:
arguments (required)

Testcases:
No testcase defined.
Source code:
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"
    }
}
XQL Not present:
Generic, PostgreSQL, Oracle
[ hide source ] | [ make this the default ]
Show another procedure: