You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

107 lines
2.3 KiB

// ------------------------------------------------------------------------
// Project atila
// Active Thing (activething.com) git.activething.com/go
//
// File name filter.go
// Created by DEV
// Modified 23/02/2024
//
// Copyright 2024 activething.com
// ------------------------------------------------------------------------
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// ------------------------------------------------------------------------
package logs
import "activething.com/go/gogo/sapis/tokens"
type (
Filter interface {
Name () string
Active() bool
Denied() bool
Apply (e *Entry) bool
}
filter struct {
name string
active bool
denied bool
applyFn FilterApplyFnc
}
FilterApplyFnc func (*Entry) bool
)
func NewFilter (name string, denied bool, filterFn FilterApplyFnc) *filter {
if filterFn == nil {
filterFn = filterAlwaysTrue
}
return &filter{
name : name,
active : true,
denied : denied,
applyFn : filterFn,
}
}
func NewFilterLevel (level Level, deny bool) *filter {
l := level
return NewFilter(level.String(),deny,func(e *Entry) bool {
return e.Level.Has(l) })
}
func NewFilterScope (scope string, deny bool) *filter {
tk := tokens.NewTopic(G.tokenizer,[]byte(scope),tokens.TokenKindAll)
if tk.Kind().HasInvalid() {
return nil
}
return NewFilter(scope,deny,func(e *Entry) bool {
return tk.Match(e.Scopes) })
}
func (f filter) Name () string {
return f.name }
func (f filter) Active () bool {
return f.active }
func (f filter) SetActive (active bool) {
f.active = active }
func (f filter) Denied () bool {
return f.denied }
func (f filter) Apply (e *Entry) bool {
if !f.denied {
return f.applyFn(e)
}
return !f.applyFn(e)
}
func filterAlwaysTrue(_ *Entry) bool {
return true }

Powered by TurnKey Linux.