mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 06:38:20 +00:00

- policy/ renamed to scripts/ - By default BROPATH now contains: - scripts/ - scripts/policy - scripts/site - *Nearly* all tests pass. - All of scripts/base/ is loaded by main.cc - Can be disabled by setting $BRO_NO_BASE_SCRIPTS - Scripts in scripts/base/ don't use relative path loading to ease use of BRO_NO_BASE_SCRIPTS (to copy and paste that script). - The scripts in scripts/base/protocols/ only (or soon will only) do logging and state building. - The scripts in scripts/base/frameworks/ add functionality without causing any additional overhead. - All "detection" activity happens through scripts in scripts/policy/. - Communications framework modified temporarily to need an environment variable to actually enable (ENABLE_COMMUNICATION=1) - This is so the communications framework can be loaded as part of the base without causing trouble when it's not needed. - This will be removed once a resolution to ticket #540 is reached.
58 lines
1.9 KiB
Text
58 lines
1.9 KiB
Text
##! Functions for using multiple thresholds with a counting tracker. For
|
|
##! example, you may want to generate a notice when something happens 10 times
|
|
##! and again when it happens 100 times but nothing in between. You can use
|
|
##! the :bro:id:`check_threshold` function to define your threshold points
|
|
##! and the :bro:type:`TrackCount` variable where you are keeping track of your
|
|
##! counter.
|
|
|
|
module GLOBAL;
|
|
|
|
export {
|
|
type TrackCount: record {
|
|
## The counter for the number of times something has happened.
|
|
n: count &default=0;
|
|
## The index of the vector where the counter currently is. This is
|
|
## used to track which threshold is currently being watched for.
|
|
index: count &default=0;
|
|
};
|
|
|
|
## The thresholds you would like to use as defaults with the
|
|
## :bro:id:`default_check_threshold` function.
|
|
const default_notice_thresholds: vector of count = {
|
|
30, 100, 1000, 10000, 100000, 1000000, 10000000,
|
|
} &redef;
|
|
|
|
## This will check if a :bro:type:`TrackCount` variable has crossed any
|
|
## thresholds in a given set.
|
|
## v: a vector holding counts that represent thresholds
|
|
## tracker: the record being used to track event counter and currently
|
|
## monitored threshold value
|
|
## Returns: T if a threshold has been crossed, else F
|
|
global check_threshold: function(v: vector of count, tracker: TrackCount): bool;
|
|
|
|
## This will use the :bro:id:`default_notice_thresholds` variable to check
|
|
## a :bro:type:`TrackCount` variable to see if it has crossed another
|
|
## threshold.
|
|
global default_check_threshold: function(tracker: TrackCount): bool;
|
|
}
|
|
|
|
function new_track_count(): TrackCount
|
|
{
|
|
local tc: TrackCount;
|
|
return tc;
|
|
}
|
|
|
|
function check_threshold(v: vector of count, tracker: TrackCount): bool
|
|
{
|
|
if ( tracker$index <= |v| && tracker$n >= v[tracker$index] )
|
|
{
|
|
++tracker$index;
|
|
return T;
|
|
}
|
|
return F;
|
|
}
|
|
|
|
function default_check_threshold(tracker: TrackCount): bool
|
|
{
|
|
return check_threshold(default_notice_thresholds, tracker);
|
|
}
|