Improve logging
This commit is contained in:
parent
1710c90548
commit
a21afdaa6b
|
@ -1,2 +1,3 @@
|
|||
.go
|
||||
/aerc
|
||||
log
|
||||
|
|
|
@ -1,13 +1,30 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"github.com/mattn/go-isatty"
|
||||
|
||||
"git.sr.ht/~sircmpwn/aerc2/config"
|
||||
"git.sr.ht/~sircmpwn/aerc2/ui"
|
||||
)
|
||||
|
||||
func main() {
|
||||
var logOut io.Writer
|
||||
var logger *log.Logger
|
||||
if !isatty.IsTerminal(os.Stdout.Fd()) {
|
||||
logOut = os.Stdout
|
||||
} else {
|
||||
logOut = ioutil.Discard
|
||||
}
|
||||
logger = log.New(logOut, "", log.LstdFlags|log.Lshortfile)
|
||||
logger.Println("Starting up aerc")
|
||||
|
||||
conf, err := config.LoadConfig(nil)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
|
@ -18,7 +35,11 @@ func main() {
|
|||
}
|
||||
defer _ui.Close()
|
||||
for _, account := range conf.Accounts {
|
||||
tab, err := ui.NewAccountTab(&account)
|
||||
logger.Printf("Initializing account %s\n", account.Name)
|
||||
tab, err := ui.NewAccountTab(&account, log.New(
|
||||
logOut,
|
||||
fmt.Sprintf("[%s] ", account.Name),
|
||||
log.LstdFlags|log.Lshortfile))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
|
|
@ -1,26 +1,29 @@
|
|||
package ui
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
|
||||
tb "github.com/nsf/termbox-go"
|
||||
|
||||
"github.com/davecgh/go-spew/spew"
|
||||
|
||||
"git.sr.ht/~sircmpwn/aerc2/config"
|
||||
"git.sr.ht/~sircmpwn/aerc2/worker"
|
||||
"git.sr.ht/~sircmpwn/aerc2/worker/types"
|
||||
)
|
||||
|
||||
type AccountTab struct {
|
||||
Config *config.AccountConfig
|
||||
Worker worker.Worker
|
||||
Parent *UIState
|
||||
|
||||
Config *config.AccountConfig
|
||||
Worker worker.Worker
|
||||
Parent *UIState
|
||||
logger *log.Logger
|
||||
counter int
|
||||
log []string
|
||||
}
|
||||
|
||||
func NewAccountTab(conf *config.AccountConfig) (*AccountTab, error) {
|
||||
work, err := worker.NewWorker(conf.Source)
|
||||
func NewAccountTab(conf *config.AccountConfig,
|
||||
logger *log.Logger) (*AccountTab, error) {
|
||||
|
||||
work, err := worker.NewWorker(conf.Source, logger)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -30,6 +33,7 @@ func NewAccountTab(conf *config.AccountConfig) (*AccountTab, error) {
|
|||
return &AccountTab{
|
||||
Config: conf,
|
||||
Worker: work,
|
||||
logger: logger,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
@ -49,9 +53,6 @@ func (acc *AccountTab) Render(at Geometry) {
|
|||
}
|
||||
TFill(at, cell)
|
||||
TPrintf(&at, cell, "%s %d\n", acc.Name(), acc.counter)
|
||||
for _, str := range acc.log {
|
||||
TPrintf(&at, cell, "%s\n", str)
|
||||
}
|
||||
acc.counter++
|
||||
if acc.counter%10000 == 0 {
|
||||
acc.counter = 0
|
||||
|
@ -64,5 +65,11 @@ func (acc *AccountTab) GetChannel() chan types.WorkerMessage {
|
|||
}
|
||||
|
||||
func (acc *AccountTab) HandleMessage(msg types.WorkerMessage) {
|
||||
acc.log = append(acc.log, fmt.Sprintf("<- %T", msg))
|
||||
switch msg.InResponseTo().(type) {
|
||||
case types.Configure:
|
||||
// Avoid printing passwords
|
||||
acc.logger.Printf("<- %T\n", msg)
|
||||
default:
|
||||
acc.logger.Printf("<- %s", spew.Sdump(msg))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,13 +2,16 @@ package imap
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"net/url"
|
||||
"strings"
|
||||
|
||||
"git.sr.ht/~sircmpwn/aerc2/worker/types"
|
||||
"github.com/davecgh/go-spew/spew"
|
||||
"github.com/emersion/go-imap"
|
||||
"github.com/emersion/go-imap/client"
|
||||
"github.com/emersion/go-imap-idle"
|
||||
"github.com/emersion/go-imap/client"
|
||||
|
||||
"git.sr.ht/~sircmpwn/aerc2/worker/types"
|
||||
)
|
||||
|
||||
var errUnsupported = fmt.Errorf("unsupported command")
|
||||
|
@ -31,13 +34,15 @@ type IMAPWorker struct {
|
|||
|
||||
client *imapClient
|
||||
updates chan client.Update
|
||||
logger *log.Logger
|
||||
}
|
||||
|
||||
func NewIMAPWorker() *IMAPWorker {
|
||||
func NewIMAPWorker(logger *log.Logger) *IMAPWorker {
|
||||
return &IMAPWorker{
|
||||
messages: make(chan types.WorkerMessage, 50),
|
||||
actions: make(chan types.WorkerMessage, 50),
|
||||
updates: make(chan client.Update, 50),
|
||||
logger: logger,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -126,11 +131,24 @@ func (w *IMAPWorker) handleMessage(msg types.WorkerMessage) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// Logs an action but censors passwords
|
||||
func (w *IMAPWorker) logAction(msg types.WorkerMessage) {
|
||||
switch msg := msg.(type) {
|
||||
case types.Configure:
|
||||
src := msg.Config.Source
|
||||
msg.Config.Source = "[obsfucated]"
|
||||
w.logger.Printf("<= %s", spew.Sdump(msg))
|
||||
msg.Config.Source = src
|
||||
default:
|
||||
w.logger.Printf("<= %s", spew.Sdump(msg))
|
||||
}
|
||||
}
|
||||
|
||||
func (w *IMAPWorker) Run() {
|
||||
for {
|
||||
select {
|
||||
case msg := <-w.actions:
|
||||
fmt.Printf("<= %T\n", msg)
|
||||
w.logAction(msg)
|
||||
if err := w.handleMessage(msg); err == errUnsupported {
|
||||
w.messages <- types.Unsupported{
|
||||
Message: types.RespondTo(msg),
|
||||
|
@ -146,7 +164,7 @@ func (w *IMAPWorker) Run() {
|
|||
}
|
||||
}
|
||||
case update := <-w.updates:
|
||||
fmt.Printf("<= %T\n", update)
|
||||
w.logger.Printf("[= %s", spew.Sdump(update))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@ import (
|
|||
"git.sr.ht/~sircmpwn/aerc2/worker/types"
|
||||
|
||||
"fmt"
|
||||
"log"
|
||||
"net/url"
|
||||
)
|
||||
|
||||
|
@ -15,7 +16,7 @@ type Worker interface {
|
|||
}
|
||||
|
||||
// Guesses the appropriate worker type based on the given source string
|
||||
func NewWorker(source string) (Worker, error) {
|
||||
func NewWorker(source string, logger *log.Logger) (Worker, error) {
|
||||
u, err := url.Parse(source)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
@ -23,7 +24,7 @@ func NewWorker(source string) (Worker, error) {
|
|||
switch u.Scheme {
|
||||
case "imap":
|
||||
case "imaps":
|
||||
return imap.NewIMAPWorker(), nil
|
||||
return imap.NewIMAPWorker(logger), nil
|
||||
}
|
||||
return nil, fmt.Errorf("Unknown backend %s", u.Scheme)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue