Files
tele-recv/utils/telegram.go
T

64 lines
1.4 KiB
Go
Raw Normal View History

2020-12-21 16:18:08 +08:00
package utils
import (
2021-02-01 17:13:54 +08:00
"go.uber.org/zap"
2020-12-21 16:18:08 +08:00
"regexp"
"strings"
2020-12-28 16:36:59 +08:00
rotatelogs "github.com/lestrrat-go/file-rotatelogs"
2020-12-21 16:18:08 +08:00
)
const (
EndTag = "NNNN"
Expression = "(?s)ZCZC.*?NNNN"
MaxBufferSize = 65536
BufferTrimSize = 32768
2020-12-21 16:18:08 +08:00
)
2020-12-29 11:11:13 +08:00
var buffer string
2020-12-29 11:35:09 +08:00
var exp, _ = regexp.Compile(Expression)
2020-12-28 16:36:59 +08:00
var RawLog *rotatelogs.RotateLogs
2021-02-01 15:35:13 +08:00
var Tcp bool
var Pulsar bool
2020-12-21 16:18:08 +08:00
2020-12-29 11:00:01 +08:00
func Append(data string) bool {
2020-12-31 10:45:07 +08:00
buffer += data + "\n"
if len(buffer) > MaxBufferSize {
Log.Warn("buffer overflow, truncating",
zap.Int("size", len(buffer)),
zap.Int("max", MaxBufferSize))
buffer = buffer[len(buffer)-BufferTrimSize:]
}
2020-12-28 16:58:36 +08:00
return check()
2020-12-21 16:18:08 +08:00
}
2020-12-28 16:58:36 +08:00
func check() bool {
2020-12-29 11:11:13 +08:00
teleString := buffer
if strings.Contains(teleString, EndTag) {
loc := exp.FindStringIndex(teleString)
if loc != nil {
telegram := teleString[loc[0]:loc[1]]
2020-12-28 17:01:14 +08:00
telegram = removeEmpty(telegram) + "\n\n"
2020-12-29 11:11:13 +08:00
telegram += "\n"
2020-12-31 10:46:34 +08:00
_, _ = RawLog.Write([]byte(telegram + "\n"))
buffer = teleString[loc[1]:]
// 先持久化,再发送:即使发送失败,数据已安全落盘
if err := InsertTelegram(telegram); err != nil {
Log.Error("error in save telegram to db", zap.Error(err))
}
2021-02-01 17:13:54 +08:00
if Pulsar {
if err := PulsarSend(telegram); err != nil {
2021-02-01 17:13:54 +08:00
Log.Error("error in send to pulsar", zap.Error(err))
}
}
2020-12-28 16:58:36 +08:00
return true
2020-12-21 16:18:08 +08:00
}
}
2020-12-28 16:58:36 +08:00
return false
2020-12-21 16:18:08 +08:00
}
2020-12-28 16:46:25 +08:00
func removeEmpty(s string) string {
2020-12-28 16:49:36 +08:00
return regexp.MustCompile(`[\t\r\n]+`).ReplaceAllString(strings.TrimSpace(s), "\n")
2020-12-28 16:46:25 +08:00
}