FilterS

FilterS are code blocks applied to generic events (hashmaps) in order to allow/deny further processing.

A Tenant will define multiple Filter profiles via .csv or API calls. The Filter profile ID is unique within a tenant but it can be repeated over multiple Tenants.

In order to be used in event processing a Filter profile will be attached inside another subsystem profile definition, otherwise Filter profile will have no effect on it’s own. A Filter profile can be shared between multiple subsystem profile definitions.

Filter profile

Definition:

type Filter struct {
       Tenant             string
       ID                 string
       Rules              []*FilterRule
       ActivationInterval *utils.ActivationInterval
}

A Filter profile can contain any number of Filter rules and all of them must pass in order for the filter profile to pass.

A Filter profile can be activated on specific interval, if multiple filters are used within a subsystem profile at least one needs to be active and passing in order for the subsystem profile to pass the event.

Filter rule

Definition:

type FilterRule struct {
       Type            string              // Filter type (*string, *timing, *rsr, *stats, *lt, *lte, *gt, *gte)
       FieldName       string              // Name of the field providing us the Values to check (used in case of some )
       Values          []string            // Filter definition
}

The matching logic of each FilterRule is given by it’s type.

The following types are implemented:

  • *string will match in full the FieldName with at least one value defined inside Values. Any of them matching will match the FilterRule. It is indexed for performance and, in order to be enabled, the subsystem configuration where the Filter profile is used needs to have the parameter string_indexed_fields nil or contain the Filter profile ID inside.
  • *prefix will match at beginning of FieldName one of the values defined inside Values. It is indexed for performance and, in order to be enabled, the subsystem configuration where the Filter profile is used needs to have the parameter prefix_indexed_fields nil or contain the Filter profile ID inside.
  • *timings will compare the time contained in FieldName with one of the TimingIDs defined in Values.
  • *destinations will make sure that the FieldName is a prefix contained inside one of the destination IDs as Values.
  • *rsr will match the RSRRules defined in Values. The field name is taken out of RSRRule.ID and matching logic is done against RSRRule.Filters
  • *lt (less than), *lte (less than or equal), *gt (greather than), *gte (greather than or equal) are comparison operators and they pass if at least one of the values defined in Values are passing for the FieldName of event. The operators are able to compare string, float, int, time.Time, time.Duration, however both types need to be the same, otherwise the filter will raise incomparable as error.