nsmcp::AccessCardinalityStore method add (public)

 <instance of nsmcp::AccessCardinalityStore[i]> add row redactor

Defined in /usr/local/ns/tcl/nsmcp/log-traffic-aggregate.tcl

Accumulate peer and user-agent observations from a request. Apply the redactor and configured capacity limits before buffering distinct-observation updates.

Parameters:
row (required)
Parsed access-request record.
redactor (required)
Redactor object applied before returning diagnostic evidence.
Returns:
The observation update result.

Testcases:
No testcase defined.
Source code:
set peer [dict get $row peerAddress]
set knownPeer [expr {$peer ni {{} - {[REDACTED]}}}]
set knownAgent [expr {[dict exists $row userAgent] && [dict get $row userAgent] ni {{} -}}]
if {[dict get ${:data} status] ne "active"} {
    if {$knownPeer} {
        dict incr :data peerOmitted
    }
    if {$knownAgent} {
        dict incr :data agentOmitted
    }
    return
}
if {$knownPeer} {
    set key [ns_crypto::md string -digest sha256 -- $peer]
    :addKey 0 $key {} 0 0
    incr :peerPending
}
if {$knownAgent} {
    set agent [dict get $row userAgent]
    set key [ns_crypto::md string -digest sha256 -- $agent]
    set label [$redactor message $agent]
    set redacted [expr {$label ne $agent}]
    set bytes [encoding convertto utf-8 $label]
    set clipped [expr {[string length $bytes]>1024}]
    if {$clipped} {
        set label [encoding convertfrom utf-8 [string range $bytes 0 1023]]
        while {[string length [encoding convertto utf-8 $label]]>1024} {
            set label [string range $label 0 end-1]
        }
        dict incr :data labelTruncatedRecords
    }
    if {$redacted} {
        dict incr :data labelRedactedRecords
    }
    :addKey 1 $key $label $clipped $redacted
    incr :agentPending
}
incr :events
if {${:events}>=512} {
    :flush
}
XQL Not present:
Generic, PostgreSQL, Oracle
[ hide source ] | [ make this the default ]
Show another procedure: