add logtr.sosf for sos straight to specific matrix

master
bel 2022-01-17 18:40:31 -07:00
parent 73ccc22fd5
commit a38a627f5a
6 changed files with 73 additions and 24 deletions

View File

@ -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"
}
}
}

View File

@ -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 {

View File

@ -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 "?"
}

View File

@ -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...")

View File

@ -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)

View File

@ -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,
}
}