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.
80 lines
1.8 KiB
80 lines
1.8 KiB
package classify |
|
|
|
import ( |
|
"strings" |
|
"context" |
|
"go-common/app/service/ops/log-agent/event" |
|
"go-common/app/service/ops/log-agent/processor" |
|
"go-common/app/service/ops/log-agent/pkg/common" |
|
) |
|
|
|
type Classify struct { |
|
c *Config |
|
} |
|
|
|
func init() { |
|
err := processor.Register("classify", Process) |
|
if err != nil { |
|
panic(err) |
|
} |
|
} |
|
|
|
func Process(ctx context.Context, config interface{}, input <-chan *event.ProcessorEvent) (output chan *event.ProcessorEvent, err error) { |
|
classify := new(Classify) |
|
|
|
if c, ok := config.(*Config); !ok { |
|
panic("Error config for Classify Processor") |
|
} else { |
|
if err = c.ConfigValidate(); err != nil { |
|
return nil, err |
|
} |
|
classify.c = c |
|
} |
|
|
|
output = make(chan *event.ProcessorEvent) |
|
go func() { |
|
for { |
|
select { |
|
case e := <-input: |
|
// only do classify for ops-log |
|
if e.Destination == "lancer-ops-log" { |
|
if common.CriticalLog(e.Level) || e.Priority == "high" { |
|
e.LogId = classify.getLogIdByLevel("important") |
|
} else { |
|
e.LogId = classify.getLogIdByAppId(e.AppId) |
|
} |
|
} |
|
output <- e |
|
case <-ctx.Done(): |
|
return |
|
} |
|
} |
|
}() |
|
return output, nil |
|
} |
|
|
|
// getLogLevel get logId level by appId |
|
func (c *Classify) getLogIdByAppId(appId []byte) (logId string) { |
|
// get logId by setting |
|
if logLevel, ok := c.c.LogLevelMapConfig[string(appId)]; ok { |
|
return c.getLogIdByLevel(logLevel) |
|
} |
|
|
|
// appId format error, logId 1 |
|
if len(strings.Split(string(appId), ".")) < 3 { |
|
return c.getLogIdByLevel("low") // low level |
|
} |
|
|
|
// set logLevel to 2 by default |
|
return c.getLogIdByLevel("normal") // normal level |
|
} |
|
|
|
// getLogIdByLevel return logid by level |
|
func (c *Classify) getLogIdByLevel(level string) (logId string) { |
|
if logId, ok := c.c.LogIdMapConfig[level]; ok { |
|
return logId |
|
} else { |
|
// return 000161 by default |
|
return "000161" |
|
} |
|
}
|
|
|