mirror of
https://github.com/idanoo/autobrr
synced 2025-07-23 08:49:13 +00:00
feat(feeds): optimize existing cache items check (#2078)
* feat(feeds): optimize existing items cache check * feat(feeds): remove ttl from repo method ExistingItems * feat(feeds): add db integration test for ExistingItems * feat(feeds): improve release and filter processing * feat(feeds): fix failing test
This commit is contained in:
parent
92ddb919a5
commit
46f6fbe5cc
8 changed files with 266 additions and 45 deletions
|
@ -30,6 +30,7 @@ type Service interface {
|
|||
Delete(ctx context.Context, req *domain.DeleteReleaseRequest) error
|
||||
Process(release *domain.Release)
|
||||
ProcessMultiple(releases []*domain.Release)
|
||||
ProcessMultipleFromIndexer(releases []*domain.Release, indexer domain.IndexerMinimal) error
|
||||
ProcessManual(ctx context.Context, req *domain.ReleaseProcessReq) error
|
||||
Retry(ctx context.Context, req *domain.ReleaseActionRetryReq) error
|
||||
|
||||
|
@ -175,8 +176,6 @@ func (s *service) Process(release *domain.Release) {
|
|||
}
|
||||
}()
|
||||
|
||||
defer release.CleanupTemporaryFiles()
|
||||
|
||||
ctx := context.Background()
|
||||
|
||||
// TODO check in config for "Save all releases"
|
||||
|
@ -195,10 +194,23 @@ func (s *service) Process(release *domain.Release) {
|
|||
return
|
||||
}
|
||||
|
||||
if err := s.processFilters(ctx, filters, release); err != nil {
|
||||
if err := s.processRelease(ctx, release, filters); err != nil {
|
||||
s.log.Error().Err(err).Msgf("release.Process: error processing filters for indexer: %s", release.Indexer.Name)
|
||||
return
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (s *service) processRelease(ctx context.Context, release *domain.Release, filters []*domain.Filter) error {
|
||||
defer release.CleanupTemporaryFiles()
|
||||
|
||||
if err := s.processFilters(ctx, filters, release); err != nil {
|
||||
s.log.Error().Err(err).Msgf("release.Process: error processing filters for indexer: %s", release.Indexer.Name)
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *service) processFilters(ctx context.Context, filters []*domain.Filter, release *domain.Release) error {
|
||||
|
@ -340,7 +352,6 @@ func (s *service) ProcessMultiple(releases []*domain.Release) {
|
|||
s.log.Debug().Msgf("process (%d) new releases from feed", len(releases))
|
||||
|
||||
for _, rls := range releases {
|
||||
rls := rls
|
||||
if rls == nil {
|
||||
continue
|
||||
}
|
||||
|
@ -348,6 +359,45 @@ func (s *service) ProcessMultiple(releases []*domain.Release) {
|
|||
}
|
||||
}
|
||||
|
||||
func (s *service) ProcessMultipleFromIndexer(releases []*domain.Release, indexer domain.IndexerMinimal) error {
|
||||
s.log.Debug().Msgf("process (%d) new releases from feed %s", len(releases), indexer.Name)
|
||||
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
s.log.Error().Msgf("recovering from panic in release process %s error: %v", "", r)
|
||||
//err := errors.New("panic in release process: %s", release.TorrentName)
|
||||
return
|
||||
}
|
||||
}()
|
||||
|
||||
ctx := context.Background()
|
||||
|
||||
// get filters by priority
|
||||
filters, err := s.filterSvc.FindByIndexerIdentifier(ctx, indexer.Identifier)
|
||||
if err != nil {
|
||||
s.log.Error().Err(err).Msgf("release.Process: error finding filters for indexer: %s", indexer.Name)
|
||||
return err
|
||||
}
|
||||
|
||||
if len(filters) == 0 {
|
||||
s.log.Warn().Msgf("no active filters found for indexer: %s skipping rest..", indexer.Name)
|
||||
return domain.ErrNoActiveFiltersFoundForIndexer
|
||||
}
|
||||
|
||||
for _, release := range releases {
|
||||
if release == nil {
|
||||
continue
|
||||
}
|
||||
|
||||
if err := s.processRelease(ctx, release, filters); err != nil {
|
||||
s.log.Error().Err(err).Msgf("release.ProcessMultipleFromIndexer: error processing filters for indexer: %s", indexer.Name)
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *service) runAction(ctx context.Context, action *domain.Action, release *domain.Release, status *domain.ReleaseActionStatus) (*domain.ReleaseActionStatus, error) {
|
||||
// add action status as pending
|
||||
//status := domain.NewReleaseActionStatus(action, release)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue