nsmcp::StatsTool method encode (protected)

 <instance of nsmcp::StatsTool[i]> encode role value

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

Container types come from the ns_stats contract, never from Tcl's internal representation or from guessing whether a string is a dict.

Parameters:
role (required)
value (required)

Testcases:
No testcase defined.
Source code:
if {$role in {strings numbers describeDrivers records events gaps}} {
    set fields {}
    set index 0
    foreach item $value {
        if {$role eq "strings"} {
            lappend fields $index string $item
        } elseif {$role eq "numbers"} {
            lappend fields $index number $item
        } else {
            set child [expr {$role eq "describeDrivers" ? "driver" : ($role eq "records" ? "runtime" : "metrics")}]
            lappend fields $index object [:encode $child $item]
        }
        incr index
    }
    return $fields
}
set fields {}
dict for {key item} $value {
    set child {}
    switch -- $role {
        topology - runtime {
            switch -- $key {
                process {set child process}
                servers {set child servers}
                drivers {set child [expr {$role eq "topology" ? "describeDrivers" : "metricMap"}]}
                queues {set child queues}
                cpu - databasePools {set child metricMap}
                cpuPercent {set child cpuPercent}
                availability {set child availability}
                units {set child stringsObject}
                sampling {set child metrics}
            }
        }
        history {
            switch -- $key {
                records {set child records}
                topologies {set child topologies}
                coverage {set child coverage}
            }
        }
        topologies {set child topology}
        coverage {
            if {$key in {events gaps}} {set child $key}
            if {$key eq "restartBoundaries"} {set child numbers}
        }
        servers {set child server}
        server {
            switch -- $key {
                pools {set child pools}
                bindings {set child metricMap}
                availability {set child availability}
                modules - databasePools {set child strings}
            }
        }
        pools {set child metrics}
        metricMap {set child metrics}
        queues {set child metricMap}
        process {
            if {$key eq "platform"} {set child stringsObject}
            if {$key eq "allocatorBytes"} {set child metrics}
        }
        cpuPercent {
            if {$key eq "groups"} {set child metrics}
            if {$key eq "threads"} {set child metricMap}
        }
        metrics - driver {
            if {$key in {counters gauges socketStates threads deltas rates timingAverageSeconds}} {set child metrics}
            if {$key in {resetCounters hostMappings}} {set child strings}
        }
    }
    if {$child ne ""} {
        set type [expr {$child in {strings numbers describeDrivers records events gaps} ? "array" : "object"}]
        lappend fields $key $type [:encode $child $item]
    } elseif {$role eq "availability" || $key in {ready running reset hostMappingsComplete enabled complete windowExamined more evictionOrFailureOverlap}} {
        lappend fields $key boolean $item
    } elseif {$role eq "stringsObject" || $key in {
        scope instance name group thread module type server location address
        protocol libraryversion host version build os osVersion machine
        driver dbtype scheduler lastError lastFailure owner pool reason topologyId
    }} {
        lappend fields $key string $item
    } elseif {$item eq ""} {
        lappend fields $key null {}
    } elseif {[string is double -strict $item]} {
        lappend fields $key number $item
    } else {
        # Preserve unrecognized scalar additions as text; never evaluate
        # them or recursively interpret arbitrary configuration strings.
        lappend fields $key string $item
    }
}
return $fields
XQL Not present:
Generic, PostgreSQL, Oracle
[ hide source ] | [ make this the default ]
Show another procedure: