use logrus properly (fixes #1)

master
Carlo Strub 7 years ago
parent 04cc804722
commit 1e67467307

@ -3,7 +3,6 @@ package sisyphus
import (
"errors"
"os"
"strconv"
log "github.com/sirupsen/logrus"
@ -147,7 +146,10 @@ func (m *Mail) Classify(db *bolt.DB) error {
return err
}
log.Print("Classified " + m.Key + " as Junk=" + strconv.FormatBool(m.Junk))
log.WithFields(log.Fields{
"mail": m.Key,
"junk": m.Junk,
}).Info("Classified")
// Move mail around if junk.
if junk {
@ -156,7 +158,9 @@ func (m *Mail) Classify(db *bolt.DB) error {
if err != nil {
return err
}
log.Print("Moved " + m.Key + " from new to Junk folder")
log.WithFields(log.Fields{
"mail": m.Key,
}).Info("Moved to Junk folder")
}
return nil

@ -1,8 +1,6 @@
package sisyphus
import (
"errors"
"fmt"
"io/ioutil"
"os"
"os/exec"
@ -37,94 +35,110 @@ func (p Pidfile) savePID(process int) error {
}
// DaemonStart starts sisyphus as a backgound process
func (p Pidfile) DaemonStart() error {
func (p Pidfile) DaemonStart() {
// check if daemon already running.
if _, err := os.Stat(string(p)); err == nil {
return errors.New("sisyphus running or " + string(p) + " file exists.")
log.WithFields(log.Fields{
"pidfile": p,
}).Fatal("Already running or pidfile exists")
}
log.Info("Starting sisyphus daemon")
cmd := exec.Command(os.Args[0], "run")
err := cmd.Start()
cmd.Start()
log.WithFields(log.Fields{
"pid": cmd.Process.Pid,
}).Info("Sisyphus started")
err := (p).savePID(cmd.Process.Pid)
if err != nil {
return err
log.WithFields(log.Fields{
"err": err,
}).Warning("Save process ID file")
}
log.Printf("starting sisyphus process ID [%v]\n", cmd.Process.Pid)
log.Println("sisyphus started")
err = (p).savePID(cmd.Process.Pid)
log.WithFields(log.Fields{
"pidfile": p,
}).Info("Process ID file stored")
return err
return
}
// DaemonStop stops a running sisyphus background process
func (p Pidfile) DaemonStop() error {
func (p Pidfile) DaemonStop() {
_, err := os.Stat(string(p))
if err != nil {
return errors.New("sisyphus is not running")
log.Fatal("Sisyphus is not running")
}
processIDRaw, err := ioutil.ReadFile(string(p))
if err != nil {
return errors.New("sisyphus is not running")
log.Fatal("Sisyphus is not running")
}
processID, err := strconv.Atoi(string(processIDRaw))
if err != nil {
return errors.New("unable to read and parse process id found in " + string(p))
log.WithFields(log.Fields{
"pid": p,
}).Fatal("Unable to read process ID")
}
process, err := os.FindProcess(processID)
if err != nil {
e := fmt.Sprintf("Unable to find process ID [%v] with error %v \n", processID, err)
return errors.New(e)
log.WithFields(log.Fields{
"pid": p,
"err": err,
}).Fatal("Unable to find process ID")
}
// remove PID file
err = os.Remove(string(p))
if err != nil {
return err
log.Warning("Unable to remove process ID file")
}
log.Printf("stopping sisyphus process ID [%v]\n", processID)
log.WithFields(log.Fields{
"pid": processID,
}).Info("Stopping sisyphus process")
// kill process and exit immediately
err = process.Kill()
if err != nil {
e := fmt.Sprintf("Unable to kill process ID [%v] with error %v \n", processID, err)
return errors.New(e)
log.WithFields(log.Fields{
"pid": processID,
"err": err,
}).Fatal("Unable to kill sisyphus process")
}
log.Println("sisyphus stopped")
log.Info("Sisyphus stopped")
os.Exit(0)
return nil
return
}
// DaemonRestart restarts a running sisyphus background process
func (p Pidfile) DaemonRestart() error {
func (p Pidfile) DaemonRestart() {
_, err := os.Stat(string(p))
if err != nil {
return errors.New("sisyphus is not running")
log.Fatal("Sisyphus not running")
}
pid, err := ioutil.ReadFile(string(p))
if err != nil {
return errors.New("sisyphus is not running")
log.Fatal("Sisyphus not running")
}
log.WithFields(log.Fields{
"pid": pid,
}).Info("Stopping sisyphus process")
cmd := exec.Command(os.Args[0], "stop")
err = cmd.Start()
if err != nil {
return err
}
log.Printf("stopping sisyphus process ID [%v]\n", string(pid))
cmd.Start()
cmd = exec.Command(os.Args[0], "start")
err = cmd.Start()
if err != nil {
return err
}
cmd.Start()
log.Println("sisyphus restarted")
log.Info("Sisyphus restarted")
return nil
return
}

@ -9,7 +9,9 @@ import (
// openDB creates and opens a new database and its respective buckets (if required)
func openDB(m Maildir) (db *bolt.DB, err error) {
log.Println("loading database for " + string(m))
log.WithFields(log.Fields{
"maildir": m,
}).Info("Loading database")
// Open the sisyphus.db data file in your current directory.
// It will be created if it doesn't exist.
db, err = bolt.Open(string(m)+"/sisyphus.db", 0600, nil)
@ -65,7 +67,7 @@ func LoadDatabases(d []Maildir) (databases map[Maildir]*bolt.DB, err error) {
}
}
log.Println("all databases loaded")
log.Info("All databases loaded")
return databases, nil
}
@ -75,9 +77,13 @@ func CloseDatabases(databases map[Maildir]*bolt.DB) {
for key, val := range databases {
err := val.Close()
if err != nil {
log.Println(err)
log.WithFields(log.Fields{
"db": string(key) + "/sisyphus.db",
}).Warn("Unable to close database")
}
log.Println("database " + string(key) + "/sisyphus.db closed")
log.WithFields(log.Fields{
"db": string(key) + "/sisyphus.db",
}).Info("Database closed")
}
return

@ -73,7 +73,9 @@ func (m *Mail) learnStatistics(db *bolt.DB) error {
// Learn adds the the mail key to the list of words using hyper log log algorithm.
func (m *Mail) Learn(db *bolt.DB) error {
log.Println("learn mail " + m.Key)
log.WithFields(log.Fields{
"mail": m.Key,
}).Info("Learn mail")
list, err := m.cleanWordlist()
if err != nil {

@ -30,7 +30,9 @@ func (d Maildir) CreateDirs() error {
dir := string(d)
log.Println("create missing directories for Maildir " + dir)
log.WithFields(log.Fields{
"dir": dir,
}).Info("Create missing directories")
err := os.MkdirAll(dir+"/.Junk/cur", 0700)
if err != nil {
@ -50,7 +52,10 @@ func (d Maildir) Index() (m []*Mail, err error) {
dir := string(d)
log.Println("start indexing mails in " + dir)
log.WithFields(log.Fields{
"dir": dir,
}).Info("Start indexing mails")
dirs := []string{dir, dir + "/.Junk"}
for _, val := range dirs {
j, err := maildir.Dir(val).Keys()
@ -67,7 +72,9 @@ func (d Maildir) Index() (m []*Mail, err error) {
}
}
log.Println("all mails in " + dir + " indexed")
log.WithFields(log.Fields{
"dir": dir,
}).Info("All mails indexed")
return m, nil
}

@ -69,7 +69,9 @@ func main() {
// check if daemon already running.
if _, err := os.Stat(*pidfile); err == nil {
log.Fatal("sisyphus running or " + *pidfile + " file exists.")
log.WithFields(log.Fields{
"pidfile": *pidfile,
}).Fatal("Already running or pidfile exists")
}
fmt.Print(`
@ -93,11 +95,13 @@ func main() {
go func() {
signalType := <-ch
signal.Stop(ch)
log.Println("Exit command received. Exiting sisyphus...")
log.Info("Exit command received. Exiting sisyphus...")
// this is a good place to flush everything to disk
// before terminating.
log.Println("Received signal type: ", signalType)
log.WithFields(log.Fields{
"signal": signalType,
}).Info("Received signal")
// remove PID file
os.Remove(*pidfile)
@ -119,13 +123,17 @@ func main() {
// Load all mails
mails, err := sisyphus.LoadMails(maildirs)
if err != nil {
log.Fatal(err)
log.WithFields(log.Fields{
"err": err,
}).Fatal("Cannot load mails")
}
// Open all databases
dbs, err := sisyphus.LoadDatabases(maildirs)
if err != nil {
log.Fatal(err)
log.WithFields(log.Fields{
"err": err,
}).Fatal("Cannot load databases")
}
defer sisyphus.CloseDatabases(dbs)
@ -136,7 +144,9 @@ func main() {
for _, val := range m {
err := val.Learn(db)
if err != nil {
log.Fatal(err)
log.WithFields(log.Fields{
"err": err,
}).Warning("Cannot learn mail")
}
}
}
@ -144,7 +154,9 @@ func main() {
// // Classify on arrival
// watcher, err := fsnotify.NewWatcher()
// if err != nil {
// log.Fatal(err)
//log.WithFields(log.Fields{
// "err": err,
//}).Warning("Cannot create directory watcher")
// }
// defer watcher.Close()
//
@ -202,10 +214,7 @@ func main() {
Usage: "start sisyphus daemon in the background",
Action: func(c *cli.Context) error {
err := sisyphus.Pidfile(*pidfile).DaemonStart()
if err != nil {
log.Fatal(err)
}
sisyphus.Pidfile(*pidfile).DaemonStart()
return nil
},
@ -216,10 +225,7 @@ func main() {
Usage: "stop sisyphus daemon",
Action: func(c *cli.Context) error {
err := sisyphus.Pidfile(*pidfile).DaemonStop()
if err != nil {
log.Fatal(err)
}
sisyphus.Pidfile(*pidfile).DaemonStop()
return nil
},
@ -230,10 +236,7 @@ func main() {
Usage: "restart sisyphus daemon",
Action: func(c *cli.Context) error {
err := sisyphus.Pidfile(*pidfile).DaemonRestart()
if err != nil {
log.Fatal(err)
}
sisyphus.Pidfile(*pidfile).DaemonRestart()
return nil
},
@ -243,7 +246,7 @@ func main() {
Aliases: []string{"i"},
Usage: "status of sisyphus",
Action: func(c *cli.Context) error {
log.Println("here, we should get statistics from the db, TBD...")
log.Info("here, we should get statistics from the db, TBD...")
return nil
},
},

Loading…
Cancel
Save