add logtr.sosf for sos straight to specific matrix
parent
73ccc22fd5
commit
a38a627f5a
13
config.json
13
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"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
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 {
|
||||
|
|
|
|||
33
logtr/log.go
33
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 "?"
|
||||
}
|
||||
|
|
|
|||
6
main.go
6
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...")
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue