From a38a627f5a66e86502f2898bee3419f9412d86a6 Mon Sep 17 00:00:00 2001 From: bel Date: Mon, 17 Jan 2022 18:40:31 -0700 Subject: [PATCH] add logtr.sosf for sos straight to specific matrix --- config.json | 13 +++++++++++-- config/config.go | 32 +++++++++++++++++++------------- logtr/log.go | 33 +++++++++++++++++++++++++++++---- main.go | 6 +++--- message/images_test.go | 2 +- message/matrix.go | 11 ++++++++++- 6 files changed, 73 insertions(+), 24 deletions(-) diff --git a/config.json b/config.json index 703744f..8d5d915 100644 --- a/config.json +++ b/config.json @@ -1,7 +1,16 @@ { "Log": { "Path": "/tmp/truckstop.log", - "Level": "err" + "Level": "deb", + "SOSMatrix": { + "ReceiveEnabled": true, + "Mock": true, + "Homeserver": "https://m.bltrucks.top", + "Username": "@bot.m.bltrucks.top", + "Token": "mvDWB96KXMF8XhOam8EC5XVdQvSEw0CDeClcSWocBcYkwZX3FPNWZ5uOnQk2EmT1cjpzfeuD7gDYPPjOuyZlI3bE9TE35UjNOlZgi0Tugm25s91iVsbIF6kMZsCIhVMSmEf6w3jxX6wQYOWvmDZ4mu6f5c8wr221EMDcOpEzQV09d1zuBSWgKLBgjqAkYHJZ5dTRIWpEDpPgujhOFZa2ld1HiAOxrJKlIrlfDBN0CUsTlGOGplujDAr4VtpFzNRS", + "Device": "TGNIOGKATZ", + "Room": "!OYZqtInrBCn1cyz90D:m.bltrucks.top" + } }, "Interval": { "Input": "5s..10s", @@ -67,7 +76,7 @@ "Mock": true, "LoadPageURIFormat": "https://ntgvision.com/LoadDetails?loadId=%d", "Username": "noeasyrunstrucking@gmail.com", - "Password": "thumper123" + "Password": "thumper1234" } } } diff --git a/config/config.go b/config/config.go index 3e63b8e..86cd07a 100644 --- a/config/config.go +++ b/config/config.go @@ -10,10 +10,21 @@ import ( "time" ) +type Matrix struct { + ReceiveEnabled bool + Mock bool + Homeserver string + Username string + Token string + Device string + Room string +} + type Config struct { Log struct { - Path string - Level logtr.Level + Path string + Level logtr.Level + SOSMatrix Matrix } Interval struct { Input Duration @@ -49,15 +60,7 @@ type Config struct { Clients map[string]Client Storage []string Message struct { - Matrix struct { - ReceiveEnabled bool - Mock bool - Homeserver string - Username string - Token string - Device string - Room string - } + Matrix Matrix } Once bool Brokers struct { @@ -117,7 +120,7 @@ func AllStates() []State { return states } -func Refresh() error { +func Refresh(soser func() logtr.SOSer) error { b, err := ioutil.ReadFile(configPath()) if err != nil { return err @@ -132,6 +135,9 @@ func Refresh() error { live.db.Close() } live = c + if soser != nil { + logtr.SetSOSer(soser()) + } return nil } @@ -145,7 +151,7 @@ func Set(other Config) { return } ioutil.WriteFile(configPath(), b, os.ModePerm) - Refresh() + Refresh(nil) } func (c *Config) DB() storage.DB { diff --git a/logtr/log.go b/logtr/log.go index c2c71d2..5765f41 100644 --- a/logtr/log.go +++ b/logtr/log.go @@ -5,6 +5,7 @@ import ( "errors" "fmt" "io" + "log" "os" "strings" "sync" @@ -18,8 +19,13 @@ const ( DEBUG = Level(8) INFO = Level(9) ERROR = Level(10) + SOS = Level(15) ) +type SOSer interface { + Send(string) error +} + func (l Level) MarshalJSON() ([]byte, error) { return json.Marshal(l.String()) } @@ -34,7 +40,7 @@ func (l *Level) UnmarshalJSON(b []byte) error { if len(s) > 3 { s = s[:3] } - for i := 0; i < int(ERROR)+5; i++ { + for i := 0; i < int(SOS)+5; i++ { l2 := Level(i) if l2.String() == s { *l = l2 @@ -48,6 +54,7 @@ var logger io.Writer = os.Stderr var loggerPath string = "" var lock = &sync.Mutex{} var level Level = INFO +var ansoser SOSer = nil func SetLogpath(p string) { lock.Lock() @@ -63,18 +70,34 @@ func SetLogpath(p string) { loggerPath = p } +func SetSOSer(another SOSer) { + lock.Lock() + defer lock.Unlock() + ansoser = another +} + func SetLevel(l Level) { + lock.Lock() + defer lock.Unlock() level = l } func logf(l Level, format string, args []interface{}) { format = fmt.Sprintf("%v: %v: %s\n", time.Now().Format("15:04:05"), l.String(), strings.TrimSpace(format)) - lock.Lock() - defer lock.Unlock() - if level <= l { + cLevel := level + cAnsoser := ansoser + if l >= cLevel { fmt.Fprintf(os.Stderr, format, args...) } fmt.Fprintf(logger, format, args...) + log.Printf("l==sos=%v, ansoser!=nil=%v", l == SOS, ansoser != nil) + if l == SOS && cAnsoser != nil { + cAnsoser.Send(fmt.Sprintf(format, args...)) + } +} + +func SOSf(format string, args ...interface{}) { + logf(SOS, format, args) } func Infof(format string, args ...interface{}) { @@ -107,6 +130,8 @@ func (l Level) String() string { return "DEB" case VERBOSE: return "VER" + case SOS: + return "SOS" default: return "?" } diff --git a/main.go b/main.go index 090139b..a6b5e6f 100644 --- a/main.go +++ b/main.go @@ -21,7 +21,7 @@ import ( var stateFinder = regexp.MustCompile(`[A-Za-z]+`) func main() { - if err := config.Refresh(); err != nil { + if err := config.Refresh(message.NewSOSMatrix); err != nil { panic(err) } if config.Get().Message.Matrix.ReceiveEnabled { @@ -33,7 +33,7 @@ func main() { go func() { for { time.Sleep(config.Get().Interval.Input.Get()) - if err := config.Refresh(); err != nil { + if err := config.Refresh(message.NewSOSMatrix); err != nil { logtr.Errorf("failed parsing config: %v", err) } else { if config.Get().Message.Matrix.ReceiveEnabled { @@ -247,7 +247,7 @@ func _main() error { func _mainOne() error { logtr.Debugf("config.refreshing...") - if err := config.Refresh(); err != nil { + if err := config.Refresh(message.NewSOSMatrix); err != nil { return err } logtr.Debugf("once...") diff --git a/message/images_test.go b/message/images_test.go index 2756649..894e077 100644 --- a/message/images_test.go +++ b/message/images_test.go @@ -16,7 +16,7 @@ func TestImageUpload(t *testing.T) { if err != nil { t.Fatal(err) } - if err := config.Refresh(); err != nil { + if err := config.Refresh(nil); err != nil { t.Fatal(err) } got, err := UploadImage(b) diff --git a/message/matrix.go b/message/matrix.go index 37028f8..04b6d7a 100644 --- a/message/matrix.go +++ b/message/matrix.go @@ -23,15 +23,24 @@ type Matrix struct { continuation string } +func NewSOSMatrix() logtr.SOSer { + conf := config.Get().Log.SOSMatrix + return newMatrix(conf, "0") +} + func NewMatrix() Matrix { conf := config.Get().Message.Matrix + return newMatrix(conf, GetMatrixContinuation()) +} + +func newMatrix(conf config.Matrix, cont string) Matrix { return Matrix{ homeserver: conf.Homeserver, username: conf.Username, token: conf.Token, room: conf.Room, mock: conf.Mock, - continuation: GetMatrixContinuation(), + continuation: cont, } }