gte/cmd/daemon/service.go

90 lines
2.0 KiB
Go
Raw Normal View History

2021-05-13 08:15:14 +02:00
package main
import (
2021-05-15 11:19:28 +02:00
"flag"
2021-05-13 08:15:14 +02:00
"os"
"os/signal"
"time"
2021-09-19 11:59:26 +02:00
"ewintr.nl/go-kit/log"
"ewintr.nl/gte/internal/configuration"
"ewintr.nl/gte/internal/process"
"ewintr.nl/gte/internal/storage"
"ewintr.nl/gte/internal/task"
"ewintr.nl/gte/pkg/msend"
"ewintr.nl/gte/pkg/mstore"
2021-05-13 08:15:14 +02:00
)
func main() {
logger := log.New(os.Stdout)
2021-05-15 11:19:28 +02:00
configPath := flag.String("c", "~/.config/gte/gte.conf", "path to configuration file")
daysAhead := flag.Int("d", 6, "generate for this amount of days from now")
flag.Parse()
logger.With(log.Fields{
"config": *configPath,
"daysAhead": *daysAhead,
}).Info("started")
configFile, err := os.Open(*configPath)
if err != nil {
logger.WithErr(err).Error("could not open config file")
os.Exit(1)
}
config := configuration.New(configFile)
msgStore := mstore.NewIMAP(config.IMAP())
mailSend := msend.NewSSLSMTP(config.SMTP())
2021-06-25 09:14:27 +02:00
repo := storage.NewRemoteRepository(msgStore)
disp := storage.NewDispatcher(mailSend)
2021-05-13 08:15:14 +02:00
inboxProc := process.NewInbox(repo)
2021-05-15 11:19:28 +02:00
recurProc := process.NewRecur(repo, disp, *daysAhead)
2021-05-13 08:15:14 +02:00
go Run(inboxProc, recurProc, logger)
done := make(chan os.Signal)
signal.Notify(done, os.Interrupt)
<-done
logger.Info("stopped")
}
func Run(inboxProc *process.Inbox, recurProc *process.Recur, logger log.Logger) {
logger = logger.WithField("func", "run")
2021-09-19 09:04:27 +02:00
inboxTicker := time.NewTicker(30 * time.Second)
2021-05-13 08:15:14 +02:00
recurTicker := time.NewTicker(time.Hour)
2022-06-06 11:07:03 +02:00
oldToday := task.Today()
2021-05-13 08:15:14 +02:00
for {
select {
case <-inboxTicker.C:
result, err := inboxProc.Process()
if err != nil {
logger.WithErr(err).Error("failed processing inbox")
continue
}
2021-05-15 11:46:03 +02:00
if result.Count > 0 {
logger.WithField("result", result).Info("finished processing inbox")
}
2021-05-13 08:15:14 +02:00
case <-recurTicker.C:
2022-06-06 11:07:03 +02:00
if oldToday.Equal(task.Today()) {
2021-05-13 08:15:14 +02:00
continue
}
2022-06-06 11:07:03 +02:00
oldToday = task.Today()
2021-05-13 08:15:14 +02:00
result, err := recurProc.Process()
if err != nil {
logger.WithErr(err).Error("failed generating recurring tasks")
continue
}
2021-05-15 11:46:03 +02:00
if result.Count > 0 {
logger.WithField("result", result).Info("finished generating recurring tasks")
}
2021-05-13 08:15:14 +02:00
}
}
}