aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2016-01-22 21:32:14 -0500
committerLuke Pulverenti <luke.pulverenti@gmail.com>2016-01-22 21:32:14 -0500
commit69d0464ca61ab07c57051425702074da575ef3b5 (patch)
tree0fa95dcc453263a280587f88d8b03e339b8187ca
parent94fdb07925de71ace63dc0c0112b13a79d796446 (diff)
throttle people requests
-rw-r--r--MediaBrowser.Api/ItemRefreshService.cs3
-rw-r--r--MediaBrowser.Controller/Providers/ImageRefreshOptions.cs2
-rw-r--r--MediaBrowser.Controller/Providers/ItemLookupInfo.cs4
-rw-r--r--MediaBrowser.Providers/Manager/MetadataService.cs1
-rw-r--r--MediaBrowser.Providers/People/MovieDbPersonProvider.cs38
5 files changed, 45 insertions, 3 deletions
diff --git a/MediaBrowser.Api/ItemRefreshService.cs b/MediaBrowser.Api/ItemRefreshService.cs
index af1f1c90a..1e912c92d 100644
--- a/MediaBrowser.Api/ItemRefreshService.cs
+++ b/MediaBrowser.Api/ItemRefreshService.cs
@@ -76,7 +76,8 @@ namespace MediaBrowser.Api
ImageRefreshMode = request.ImageRefreshMode,
ReplaceAllImages = request.ReplaceAllImages,
ReplaceAllMetadata = request.ReplaceAllMetadata,
- ForceSave = true
+ ForceSave = true,
+ IsAutomated = false
};
}
}
diff --git a/MediaBrowser.Controller/Providers/ImageRefreshOptions.cs b/MediaBrowser.Controller/Providers/ImageRefreshOptions.cs
index a66cc6f22..9b21a2972 100644
--- a/MediaBrowser.Controller/Providers/ImageRefreshOptions.cs
+++ b/MediaBrowser.Controller/Providers/ImageRefreshOptions.cs
@@ -11,6 +11,7 @@ namespace MediaBrowser.Controller.Providers
public bool ReplaceAllImages { get; set; }
public List<ImageType> ReplaceImages { get; set; }
+ public bool IsAutomated { get; set; }
public ImageRefreshOptions(IDirectoryService directoryService)
{
@@ -18,6 +19,7 @@ namespace MediaBrowser.Controller.Providers
DirectoryService = directoryService;
ReplaceImages = new List<ImageType>();
+ IsAutomated = true;
}
public bool IsReplacingImage(ImageType type)
diff --git a/MediaBrowser.Controller/Providers/ItemLookupInfo.cs b/MediaBrowser.Controller/Providers/ItemLookupInfo.cs
index 7114cde3e..dc7a04135 100644
--- a/MediaBrowser.Controller/Providers/ItemLookupInfo.cs
+++ b/MediaBrowser.Controller/Providers/ItemLookupInfo.cs
@@ -33,10 +33,12 @@ namespace MediaBrowser.Controller.Providers
public int? Year { get; set; }
public int? IndexNumber { get; set; }
public int? ParentIndexNumber { get; set; }
- public DateTime? PremiereDate { get; set; }
+ public DateTime? PremiereDate { get; set; }
+ public bool IsAutomated { get; set; }
public ItemLookupInfo()
{
+ IsAutomated = true;
ProviderIds = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
}
}
diff --git a/MediaBrowser.Providers/Manager/MetadataService.cs b/MediaBrowser.Providers/Manager/MetadataService.cs
index d9f5c30fd..e18da565d 100644
--- a/MediaBrowser.Providers/Manager/MetadataService.cs
+++ b/MediaBrowser.Providers/Manager/MetadataService.cs
@@ -138,6 +138,7 @@ namespace MediaBrowser.Providers.Manager
var id = itemOfType.GetLookupInfo();
//await FindIdentities(id, cancellationToken).ConfigureAwait(false);
+ id.IsAutomated = refreshOptions.IsAutomated;
var result = await RefreshWithProviders(metadataResult, id, refreshOptions, providers, itemImageProvider, cancellationToken).ConfigureAwait(false);
diff --git a/MediaBrowser.Providers/People/MovieDbPersonProvider.cs b/MediaBrowser.Providers/People/MovieDbPersonProvider.cs
index 4e652a428..0dab24b11 100644
--- a/MediaBrowser.Providers/People/MovieDbPersonProvider.cs
+++ b/MediaBrowser.Providers/People/MovieDbPersonProvider.cs
@@ -10,6 +10,7 @@ using MediaBrowser.Model.Providers;
using MediaBrowser.Model.Serialization;
using MediaBrowser.Providers.Movies;
using System;
+using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
@@ -18,6 +19,7 @@ using System.Net;
using System.Threading;
using System.Threading.Tasks;
using CommonIO;
+using MediaBrowser.Model.Logging;
using MediaBrowser.Model.Net;
namespace MediaBrowser.Providers.People
@@ -32,14 +34,30 @@ namespace MediaBrowser.Providers.People
private readonly IFileSystem _fileSystem;
private readonly IServerConfigurationManager _configurationManager;
private readonly IHttpClient _httpClient;
+ private readonly ILogger _logger;
- public MovieDbPersonProvider(IFileSystem fileSystem, IServerConfigurationManager configurationManager, IJsonSerializer jsonSerializer, IHttpClient httpClient)
+ private int _requestCount;
+ private readonly object _requestCountLock = new object();
+ private Timer _requestCountReset;
+
+ public MovieDbPersonProvider(IFileSystem fileSystem, IServerConfigurationManager configurationManager, IJsonSerializer jsonSerializer, IHttpClient httpClient, ILogger logger)
{
_fileSystem = fileSystem;
_configurationManager = configurationManager;
_jsonSerializer = jsonSerializer;
_httpClient = httpClient;
+ _logger = logger;
Current = this;
+
+ _requestCountReset = new Timer(OnRequestThrottleTimerFired, null, TimeSpan.FromHours(1), TimeSpan.FromHours(1));
+ }
+
+ private void OnRequestThrottleTimerFired(object state)
+ {
+ lock (_requestCountLock)
+ {
+ _requestCount = 0;
+ }
}
public string Name
@@ -79,6 +97,24 @@ namespace MediaBrowser.Providers.People
return new[] { result };
}
+ if (searchInfo.IsAutomated)
+ {
+ lock (_requestCountLock)
+ {
+ var requestCount = _requestCount;
+
+ if (requestCount >= 5)
+ {
+ _logger.Debug("Throttling Tmdb people");
+
+ // This needs to be throttled
+ return new List<RemoteSearchResult>();
+ }
+
+ _requestCount = requestCount + 1;
+ }
+ }
+
var url = string.Format(@"http://api.themoviedb.org/3/search/person?api_key={1}&query={0}", WebUtility.UrlEncode(searchInfo.Name), MovieDbProvider.ApiKey);
using (var json = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions