util::log_rate_limit_check (private)

 util::log_rate_limit_check severity key interval

Defined in packages/acs-tcl/tcl/utilities-procs.tcl

Return {suppressed reference}, where suppressed is -1 when this call should not log, or the number of additional suppressed calls. Reference is the thread name captured when the first full message was permitted. The caller must supply a positive interval in seconds.

Parameters:
severity (required)
key (required)
interval (required)

Partial Call Graph (max 5 caller/called nodes):
ad_log ad_log (public) util::log_rate_limit_check util::log_rate_limit_check ad_log->util::log_rate_limit_check

Testcases:
No testcase defined.
Source code:
    set severity [string tolower $severity]
    set count_key [list total $severity $key]
    set state_key [list window $severity $key]

    set sequence [nsv_incr ad_log_rate_limited $count_key]
    set now [clock seconds]

    if {[nsv_get ad_log_rate_limited $state_key state]} {
        lassign $state last_log accounted reference

        if {$sequence <= $accounted
            || ($now >= $last_log && $now - $last_log < $interval)} {
            return [list -1 ""]
        }
    }

    set result [list -1 ""]
    set mutex [nsv_get ad_log_rate_limited mutex]

    ns_mutex eval $mutex {
        set now [clock seconds]
        set emit 1

        if {[nsv_get ad_log_rate_limited $state_key state]} {
            lassign $state last_log accounted reference

            if {$sequence <= $accounted
                || ($now >= $last_log && $now - $last_log < $interval)} {
                set emit 0
            }
        } else {
            set accounted 0
            set reference [ns_thread name]
        }

        if {$emit} {
            #
            # Existing two-element records have no reference.
            # Establish one with this newly permitted full message.
            #
            if {$reference eq ""} {
                set reference [ns_thread name]
            }

            set total [nsv_get ad_log_rate_limited $count_key]
            set suppressed [expr {$total - $accounted - 1}]

            nsv_set ad_log_rate_limited $state_key  [list $now $total $reference]

            set result [list $suppressed $reference]
        }
    }

    return $result
XQL Not present:
PostgreSQL, Oracle
Generic XQL file:
packages/acs-tcl/tcl/utilities-procs.xql

[ hide source ] | [ make this the default ]
Show another procedure: