nsmcp::AccessRecordStoreSQLite method totals (public)

 <instance of nsmcp::AccessRecordStoreSQLite[i]> totals options

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

Return stored request totals for the current query scope. Use minute rollups when the scope and filters permit, retaining detailed boundary rows. Otherwise aggregate the scoped records and checkpoint diagnostic counters directly.

Parameters:
options (required)
Normalized time window and request filters.
Returns:
A list containing the counts dictionary, selected status counts and coverage diagnostics.

Testcases:
No testcase defined.
Source code:
lassign [:filters $options] context selected
set source [:rollupSource $options]
if {$source ne {}} {
    set counts [dict create requestCount 0 failedRecords 0 selectedRecords 0]
    set statuses {}
    # One grouped pass supplies both context and selected totals.
    foreach row [${:db} execute "
        SELECT status, sum(n) AS n, sum(CASE WHEN $selected THEN n ELSE 0 END) AS selected FROM ($source) WHERE
        $context GROUP BY status ORDER BY status
    "] {
        set status [dict get $row status]
        set n [dict get $row n]
        set selectedCount [dict get $row selected]
        dict incr counts requestCount $n
        if {$status>=400} {
            dict incr counts failedRecords $n
        }
        dict incr counts selectedRecords $selectedCount
        if {$selectedCount>0} {
            lappend statuses [dict create status $status count $selectedCount]
        }
    }
    set overview [:overview]
    return [list $counts $statuses [dict create  queryStrategy minute-rollups-with-boundaries  storedPhysicalRecords [dict get $counts requestCount]  parseErrors [dict get $overview malformed]  oversizedRecords [dict get $overview oversized]  pendingRecords 0]]
}
set counts [lindex [${:db} execute "
    SELECT count(*) AS requestCount, coalesce(sum(status>=400), 0) AS failedRecords, coalesce(sum(CASE WHEN
    $selected THEN 1 ELSE 0 END), 0) AS selectedRecords FROM temp.nsmcp_record_window WHERE $context
"] 0]
set statuses [${:db} execute "
    SELECT status, count(*) AS count FROM temp.nsmcp_record_window WHERE $selected GROUP BY status ORDER BY
    status
"]
set diagnostics [lindex [${:db} execute {
    SELECT count(*) AS storedPhysicalRecords, coalesce(sum(kind=1), 0) AS parseErrors, coalesce(sum(kind=2), 0)
    AS oversizedRecords FROM temp.nsmcp_record_window
}] 0]
set counters [:checkpointCounts]
foreach key {parseErrors oversizedRecords} {
    dict incr diagnostics $key [dict get $counters $key]
}
dict set diagnostics diagnosticCountsComplete [dict get $counters diagnosticCountsComplete]
dict set diagnostics queryStrategy detailed-rows
dict set diagnostics pendingRecords [:boundaryPending]
return [list $counts $statuses $diagnostics]
XQL Not present:
Generic, PostgreSQL, Oracle
[ hide source ] | [ make this the default ]
Show another procedure: