datawriter/internal/dataservice/dataservice.go

56 lines
1.3 KiB
Go

package dataservice
import (
"context"
"fmt"
"sync"
"time"
"gittea.marcokittel.de/elio/eliotools/datawriter/internal/dbwriter"
"gittea.marcokittel.de/elio/eliotools/datawriter/internal/event"
"gittea.marcokittel.de/elio/eliotools/eliofile"
"gittea.marcokittel.de/elio/eliotools/logger"
)
type DataService struct {
listener []event.EventListener
log logger.Logger
ef eliofile.ElioDateiFoo
}
func (d *DataService) ListenerCount() int {
return len(d.listener)
}
func (d *DataService) Run(ctx context.Context, wg *sync.WaitGroup) {
defer wg.Done()
for {
select {
case <-ctx.Done():
return
default:
//Hier nach neuen Dateien suchen
for _, l := range d.listener {
d.ef.ScanCsv()
err := l.HandleData(ctx, dbwriter.MyStruct{A: "dkl", B: 3})
if err != nil {
//todo
}
}
d.log.Info("DataService Run")
time.Sleep(time.Second * 3)
}
}
}
func (d *DataService) AddListener(ev event.EventListener) {
d.listener = append(d.listener, ev)
}
func NewDataService() *DataService {
ds := DataService{listener: make([]event.EventListener, 0), log: logger.NewMarcoLogger(), ef: *eliofile.NewElioDateiFoo(".", func(filename string) {
fmt.Printf("Achtung hier wird das CSV Vearbeitet: %s\n\n", filename)
})}
return &ds
}