nsmcp::AccessLogIngestor method summaryLocked (protected)

 <instance of nsmcp::AccessLogIngestor[i]> summaryLocked options

Defined in /usr/local/ns/tcl/nsmcp/access-analytics.tcl

Parameters:
options (required)

Testcases:
No testcase defined.
Source code:
set requestedFrom [dict get $options from]
set requestedTo [dict get $options to]
set alignment [expr {min(60,[dict get $options bucketSeconds])}]
dict set options from [expr {([dict get $options from]/$alignment)*$alignment}]
dict set options to [expr {(([dict get $options to]+$alignment-1)/$alignment)*$alignment}]
set state [:state]
set result [dict merge $options [dict create server [ns_info server] requestCount 0 responseBytes 0 fallbackCount 0 pools {} methods {} statuses {} paths {} excludedPaths 0 timingCount 0 acceptTotal 0.0 queueTotal 0.0 filterTotal 0.0 runTotal 0.0 runMax 0.0 buckets {}]]
set counts [dict get $result buckets]
for {set slot [dict get $options from]} {$slot < [dict get $options to]} {incr slot [dict get $options bucketSeconds]} {
    set key [expr {($slot/[dict get $options bucketSeconds])*[dict get $options bucketSeconds]}]
    if {![dict exists $counts $key]} {
        dict set counts $key 0
    }
}
dict set result buckets $counts
set unread [expr {max(0,[dict get $state observedSize]-[dict get $state cursor])}]
set historyUnread [expr {[dict get $state historyEnd]-[dict get $state historyCursor]}]
set historyIncomplete [expr {$historyUnread>0 && [dict get $options from]<[dict get $state recentFrom]}]
set seekPending [expr {[dict get $state seek] ne ""}]
dict set result coverage [dict create updatedAt [dict get $state updatedAt] firstObserved [dict get $state firstObserved] latestObserved [dict get $state latestObserved]  sourceBytes [dict get $state observedSize] unreadBytes $unread scanIncomplete [expr {$seekPending || $historyIncomplete || ($unread>0 && ![dict get $state pending])}]  historyUnreadBytes $historyUnread totalUnreadBytes [expr {$unread+$historyUnread}]  processedBytes [expr {max(0,[dict get $state cursor]-$historyUnread)}]  historyIncomplete $historyIncomplete seekPending $seekPending  recentFrom [dict get $state recentFrom] initialOffset [dict get $state initialOffset]  seekMarginSeconds 300 completionOrderAssumed [expr {$historyUnread>0}] pending [dict get $state pending] generation [dict get $state generation] rotationGaps [dict get $state rotationGaps] lastRotationAt [dict get $state lastRotationAt]  malformed [dict get $state malformed] oversized [dict get $state oversized] retentionSeconds ${:retentionSeconds} minuteAligned [expr {$alignment == 60}]]
set retainedFrom [:retentionCutoff]
dict set result coverage retainedFrom $retainedFrom
set first [dict get $state firstObserved]
dict set result coverage windowComplete [expr {$first ne "" && $first <= [dict get $options from] &&
    [dict get $options from] >= $retainedFrom && $unread == 0 && !$historyIncomplete && !$seekPending &&
    ([dict get $state rotationGaps] == 0 || [dict get $options from] >= (([dict get $state lastRotationAt]+59)/60)*60) && [dict get $state malformed] == 0 && [dict get $state oversized] == 0}]
set reasons {}
if {$first eq ""} {
    lappend reasons no-observations
} elseif {$first>[dict get $options from]} {
    lappend reasons unobserved-start
}
if {[dict get $options from]<$retainedFrom} {
    lappend reasons retention
}
if {$seekPending} {
    lappend reasons seeking
}
if {$historyIncomplete} {
    lappend reasons historical-backfill
}
if {$unread>0} {
    lappend reasons [expr {[dict get $state pending] ? "pending-line" : "live-tail"}]
}
if {[dict get $state rotationGaps]>0 && [dict get $options from]<(([dict get $state lastRotationAt]+59)/60)*60} {
    lappend reasons rotation
}
if {[dict get $state malformed]>0} {
    lappend reasons cumulative-parse-errors
}
if {[dict get $state oversized]>0} {
    lappend reasons cumulative-oversized-records
}
set completion [dict get $state latestCompletionObserved]
set age {}
if {$completion ne ""} {
    set age [expr {max(0,[dict get $state updatedAt]-$completion)}]
}
dict set result coverage requestedFrom $requestedFrom
dict set result coverage requestedTo $requestedTo
dict set result coverage roundedTailSeconds [expr {[dict get $options to]-$requestedTo}]
dict set result coverage latestCompletionObserved $completion
dict set result coverage completionObservationAgeSeconds $age
dict set result coverage sourceCaughtUp [expr {$unread==0 || [dict get $state pending]}]
dict set result coverage liveTailIncomplete [expr {$unread>0 && ![dict get $state pending]}]
dict set result coverage historicalBackfillPending [expr {$historyUnread>0}]
dict set result coverage parseErrorScopeUnknown [expr {[dict get $state malformed]>0}]
dict set result coverage oversizedScopeUnknown [expr {[dict get $state oversized]>0}]
dict set result coverage lastMalformedAt [dict get $state lastMalformedAt]
dict set result coverage incompleteReasons $reasons
dict set result pathCountsComplete [expr {[dict get $result excludedPaths]==0}]
return $result
XQL Not present:
Generic, PostgreSQL, Oracle
[ hide source ] | [ make this the default ]
Show another procedure: