nsmcp::AccessDiagnosticTool method options (protected)
<instance of nsmcp::AccessDiagnosticTool> options arguments
Defined in /usr/local/ns/tcl/nsmcp/traffic-tools.tcl
- Parameters:
- arguments (required)
- Testcases:
- No testcase defined.
Source code: if {[lindex $arguments 1] ne "object"} {error "Expected an arguments object"} set options {lastMinutes 60 limit 20 pool bots module nslog includePeerAddresses false category {} scanStrategy window aggregateTraffic false} dict set options mode [expr {${:operation} eq "bot" ? ${:defaultMode} : "page"}] set seen {} foreach {key type value} [lindex $arguments 2] { if {$key in $seen} {error "Duplicate argument: $key"} lappend seen $key switch -- $key { lastMinutes - limit - beforeOffset - sourceBytes { if {$type ne "number" || ![string is entier -strict $value] || $value<0} {error "Invalid $key"} if {$key eq "lastMinutes" && ($value<1 || $value>1440)} {error "lastMinutes must be 1..1440"} if {$key eq "limit" && ($value<1 || $value>100)} {error "limit must be 1..100"} } from - to { if {$type ne "number" || ![string is double -strict $value] || $value<0 || $value>[clock seconds]} {error "Invalid $key"} } pool - module { if {$type ne "string" || ![regexp {^[A-Za-z0-9_.-]+$} $value]} {error "Invalid $key"} } mode { if {$type ne "string" || $value ni {scan page} || (${:operation} ne "bot" && $value ne "page")} {error "Invalid diagnostic mode"} } scanStrategy { if {$type ne "string" || $value ni {window full}} {error "Invalid scanStrategy"} } category { if {${:operation} ne "bot" || $type ne "string" || $value ni { matching-rule-in-target matching-rule-other-pool-candidate bot-like-unmatched-heuristic no-target-rule-match unknown native-target-in-target native-target-other-pool-candidate bot-like-routed-elsewhere-heuristic native-other-pool }} {error "Invalid routing category"} } sourceIdentity - mappingIdentity { if {$type ne "string" || ![regexp {^[a-f0-9]{64}$} $value]} {error "Invalid $key"} } authenticationState { if {$type ne "string" || $value ni {anonymous authenticated unknown}} {error "Invalid authenticationState"} } path { if {$type ne "string" || ![string match /* $value] || [string length $value]>2048 || [string first ? $value]>=0 || [string first \x00 $value]>=0} {error "Expected exact queryless path"} } aggregateTraffic - includePeerAddresses {if {$type ne "boolean"} {error "Expected a boolean"}} default {error "Unknown argument: $key"} } dict set options $key $value } if {[dict exists $options from] != [dict exists $options to]} {error "Specify both from and to"} if {[dict exists $options from]} { if {"lastMinutes" in $seen || [dict get $options to]<=[dict get $options from] || [dict get $options to]-[dict get $options from]>86400} {error "Invalid or conflicting time selectors"} } else { dict set options to [clock seconds] dict set options from [expr {[dict get $options to]-60*[dict get $options lastMinutes]}] } set paging 0 foreach key {beforeOffset sourceBytes sourceIdentity} {incr paging [dict exists $options $key]} if {$paging ni {0 3}} {error "Paging requires beforeOffset, sourceBytes and sourceIdentity"} if {$paging && [dict get $options beforeOffset]>[dict get $options sourceBytes]} {error "Invalid cursor"} return $optionsXQL Not present: Generic, PostgreSQL, Oracle
![[i]](/resources/acs-subsite/ZoomIn16.gif)