::nsmcp::Tool ::nsmcp::Tool describe execute init jsonArguments name permission validate ::nsmcp::Object ::nsmcp::Object dict getdef ::nsmcp::Tool->::nsmcp::Object ::nsmcp::RequestRoutingTool ::nsmcp::RequestRoutingTool contextSupported encodeSnapshot execute mapped snapshot ::nsmcp::RequestRoutingTool->::nsmcp::Tool

Class ::nsmcp::RequestRoutingTool

::nsmcp::RequestRoutingTool[i] create ... \
           [ -adminExample (default "") ] \
           [ -adminSummary (default "") ] \
           [ -description (default "Inspect effective connection-pool mappings and registered filters for the authenticated server. Runtime ns_server data, not configuration guesses. Filter registrations include authentication, request processing and other purposes; names do not establish behavior. Does not execute filters or read implementation files.") ] \
           [ -inputSchema (default " { "type": "object", "properties": {}, "additionalProperties": false } ") ] \
           [ -name (default "server_request_routing") ] \
           [ -outputSchema (default "") ] \
           [ -permission (default "diagnostics.runtime.read") ] \
           [ -redactor:required redactor:required ]

Defined in /usr/local/ns/tcl/nsmcp/traffic-tools.tcl

Class Relations

  • class: ::nx::Class[i]
  • superclass: ::nsmcp::Tool[i]
::nx::Class create ::nsmcp::RequestRoutingTool \
     -superclass ::nsmcp::Tool

Methods (to be applied on instances)

  • contextSupported (scripted, public)

     <instance of nsmcp::RequestRoutingTool[i]> contextSupported server

    Probe whether native routing supports a request-context ns_set. Use a temporary context and release it even when the capability probe fails.

    Parameters:
    server (required)
    Selected NaviServer virtual-server name.
    Returns:
    True when contextual routing lookup is supported, otherwise false.

    Testcases:
    No testcase defined.
    set context [ns_set create]
    try {
        return [expr {![catch {
            ns_server -server $server mapped -context $context {GET /}
        }]}]
    } finally {
        ns_set free $context
    }
  • encodeSnapshot (scripted, public)

     <instance of nsmcp::RequestRoutingTool[i]> encodeSnapshot snapshot

    Encode a routing snapshot as typed JSON fields. Retain route order and availability metadata while converting Tcl containers to arrays and objects.

    Parameters:
    snapshot (required)
    Routing snapshot with availability metadata.
    Returns:
    The field triples for the encoded routing snapshot.

    Testcases:
    No testcase defined.
    set pools {}
    dict for {pool maps} [dict get $snapshot pools] {
        set rows {}
        set i 0
        foreach row $maps {
            lappend rows $i string [${:redactor} message $row]
            incr i
        }
        lappend pools $pool array $rows
    }
    set filters {}
    set i 0
    foreach row [dict get $snapshot filters] {
        lappend filters $i string [${:redactor} message $row]
        incr i
    }
    set errors {}
    dict for {key value} [dict get $snapshot availability] {
        lappend errors $key string $value
    }
    return [list mappings object $pools filters array $filters availability object $errors]
  • execute (scripted, public)

     <instance of nsmcp::RequestRoutingTool[i]> execute context \
        arguments

    Describe the selected server's request-routing configuration. Capture pool/filter maps and whether native contextual lookup is supported.

    Parameters:
    context (required)
    Authenticated request context carrying the principal, grants and selected server.
    arguments (required)
    Rooted ns_json typed triples for the tool's JSON argument object.
    Returns:
    A rooted JSON tool-result object, including availability or job metadata as appropriate.

    Testcases:
    No testcase defined.
    set server [$context server]
    return [list {} object [list server string $server observedAt number [clock seconds]  source string ns_server nativeContextLookup boolean [:contextSupported $server] {*}[:encodeSnapshot [:snapshot $server]]]]
  • mapped (scripted, public)

     <instance of nsmcp::RequestRoutingTool[i]> mapped server record

    Resolve one request against native pool mapping. Populate a temporary request context from available record fields, perform the lookup and release the ns_set.

    Parameters:
    server (required)
    Selected NaviServer virtual-server name.
    record (required)
    Recorded request fields or routing-evidence dictionary.
    Returns:
    The native mapping result for the request.

    Testcases:
    No testcase defined.
    set context [ns_set create]
    try {
        if {[dict exists $record userAgent]} {
            ns_set put $context user-agent [dict get $record userAgent]
        }
        set peer [dict get $record peerAddress]
        if {[ns_ip valid $peer]} {
            ns_set put $context x-ns-ip $peer
        }
        set pool [ns_server -server $server mapped -context $context  [list [dict get $record method] [dict get $record path]]]
        return [expr {$pool eq "" ? "default" : $pool}]
    } finally {
        ns_set free $context
    }
  • snapshot (scripted, public)

     <instance of nsmcp::RequestRoutingTool[i]> snapshot server

    Capture configured request-pool and filter routing information. Record unavailable runtime observations explicitly instead of inferring missing routes.

    Parameters:
    server (required)
    Selected NaviServer virtual-server name.
    Returns:
    The routing snapshot dictionary with pools, filters and availability metadata.

    Testcases:
    No testcase defined.
    set pools {}
    set filters {}
    set errors {}
    if {[catch {
        ns_server -server $server pools
    } names]} {
        dict set errors pools unavailable
    } else {
        foreach pool $names {
            if {[catch {
                ns_server -server $server -pool $pool map
            } maps]} {
                dict set errors $pool unavailable
            } else {
                dict set pools [expr {$pool eq "" ? "default" : $pool}] $maps
            }
        }
    }
    if {[catch {
        ns_server -server $server filters
    } filters]} {
        set filters {}
        dict set errors filters unavailable
    }
    return [dict create pools $pools filters $filters availability $errors]