diff --git a/eliofile/eliofile.go b/eliofile/eliofile.go index ecb46fa..385ed0e 100644 --- a/eliofile/eliofile.go +++ b/eliofile/eliofile.go @@ -48,55 +48,52 @@ func NewElioDateiFoo(lookUpDir string, process ElioHandleFunc) *ElioDateiFoo { // Veraltete Dateien mit Präfix no-import und Postifx .old benennen. // Gültige Dateinamen zur Extraktion in Closure übergeben. func (f *ElioDateiFoo) ScanCsv(ctx context.Context, data chan<- CountryCsvData) { - select { - case <-ctx.Done(): - fmt.Println("Abbruch angefordert im Verarbeitungsprozess.") - default: - files, err := os.ReadDir(f.lookUpDir) + files, err := os.ReadDir(f.lookUpDir) + if err != nil { + fmt.Println(err) + } + + filemap := make(map[string]filedata) + for _, file := range files { + fmt.Printf("Lese Datei: %s\n", file) + if !strings.Contains(file.Name(), FileExt) { + continue + } + tl, err := tools.ExtractDateAndConvertToDate(file.Name()) if err != nil { - fmt.Println(err) + continue } - - filemap := make(map[string]filedata) - for _, file := range files { - fmt.Printf("Lese Datei: %s\n", file) - if !strings.Contains(file.Name(), FileExt) { - continue - } - tl, err := tools.ExtractDateAndConvertToDate(file.Name()) - if err != nil { - continue - } - warehouse := tools.ExtractWarehouseAndType(file.Name()) - value, ok := filemap[warehouse] - if !ok { - filemap[warehouse] = filedata{filename: file.Name(), dt: tl} - } else { - if tl.Unix() >= value.dt.Unix() { - err := os.Rename(f.lookUpDir+"/"+value.filename, f.lookUpDir+"/"+"no-import-"+value.filename+".old") - if err != nil { - fmt.Printf("Datei %s konnte nicht umbenannt werden!!!", value.filename) - } - filemap[warehouse] = filedata{filename: file.Name(), dt: tl} + warehouse := tools.ExtractWarehouseAndType(file.Name()) + value, ok := filemap[warehouse] + if !ok { + filemap[warehouse] = filedata{filename: file.Name(), dt: tl} + } else { + if tl.Unix() >= value.dt.Unix() { + err := os.Rename(f.lookUpDir+"/"+value.filename, f.lookUpDir+"/"+"no-import-"+value.filename+".old") + if err != nil { + fmt.Printf("Datei %s konnte nicht umbenannt werden!!!", value.filename) } + filemap[warehouse] = filedata{filename: file.Name(), dt: tl} } } + } - for _, v := range filemap { - f.mu.RLock() - _, ok := f.haveDone[v.filename] - f.mu.RUnlock() - if ok { - break - } - //Todo: Goroutine Einbauen, die alte Datensätze aus der Map entfernt - f.mu.Lock() - f.haveDone[v.filename] = time.Now() - f.mu.Unlock() + for _, v := range filemap { + f.mu.RLock() + _, ok := f.haveDone[v.filename] + f.mu.RUnlock() + if ok { + break + } + //Todo: Goroutine Einbauen, die alte Datensätze aus der Map entfernt + f.mu.Lock() + f.haveDone[v.filename] = time.Now() + f.mu.Unlock() + go func() { //Max 5 Sekunden zum Abarbeiten eines Datensatzes tctx, cancel := context.WithTimeout(ctx, time.Second*5) f.process(tctx, v.filename, data) cancel() - } + }() } }