diff --git a/NzbDrone.Api/NzbDrone.Api.csproj b/NzbDrone.Api/NzbDrone.Api.csproj
index 87e6b3e35..8d82ee148 100644
--- a/NzbDrone.Api/NzbDrone.Api.csproj
+++ b/NzbDrone.Api/NzbDrone.Api.csproj
@@ -147,6 +147,7 @@
+
diff --git a/NzbDrone.Api/SignalR/NoOpPerformanceCounterManager.cs b/NzbDrone.Api/SignalR/NoOpPerformanceCounterManager.cs
new file mode 100644
index 000000000..a3e3d7c1f
--- /dev/null
+++ b/NzbDrone.Api/SignalR/NoOpPerformanceCounterManager.cs
@@ -0,0 +1,105 @@
+using System.Diagnostics;
+using System.Threading;
+using Microsoft.AspNet.SignalR.Infrastructure;
+
+namespace NzbDrone.Api.SignalR
+{
+ public class NoOpPerformanceCounterManager : IPerformanceCounterManager
+ {
+ private static readonly IPerformanceCounter noOpCounter = new NoOpPerformanceCounter();
+
+ public void Initialize(string instanceName, CancellationToken hostShutdownToken)
+ {
+
+ }
+
+ public IPerformanceCounter LoadCounter(string categoryName, string counterName, string instanceName, bool isReadOnly)
+ {
+ return noOpCounter;
+ }
+
+ public IPerformanceCounter ConnectionsConnected { get { return noOpCounter; } }
+ public IPerformanceCounter ConnectionsReconnected { get { return noOpCounter; } }
+ public IPerformanceCounter ConnectionsDisconnected { get { return noOpCounter; } }
+ public IPerformanceCounter ConnectionsCurrent { get { return noOpCounter; } }
+ public IPerformanceCounter ConnectionMessagesReceivedTotal { get { return noOpCounter; } }
+ public IPerformanceCounter ConnectionMessagesSentTotal { get { return noOpCounter; } }
+ public IPerformanceCounter ConnectionMessagesReceivedPerSec { get { return noOpCounter; } }
+ public IPerformanceCounter ConnectionMessagesSentPerSec { get { return noOpCounter; } }
+ public IPerformanceCounter MessageBusMessagesReceivedTotal { get { return noOpCounter; } }
+ public IPerformanceCounter MessageBusMessagesReceivedPerSec { get { return noOpCounter; } }
+ public IPerformanceCounter ScaleoutMessageBusMessagesReceivedPerSec { get { return noOpCounter; } }
+ public IPerformanceCounter MessageBusMessagesPublishedTotal { get { return noOpCounter; } }
+ public IPerformanceCounter MessageBusMessagesPublishedPerSec { get { return noOpCounter; } }
+ public IPerformanceCounter MessageBusSubscribersCurrent { get { return noOpCounter; } }
+ public IPerformanceCounter MessageBusSubscribersTotal { get { return noOpCounter; } }
+ public IPerformanceCounter MessageBusSubscribersPerSec { get { return noOpCounter; } }
+ public IPerformanceCounter MessageBusAllocatedWorkers { get { return noOpCounter; } }
+ public IPerformanceCounter MessageBusBusyWorkers { get { return noOpCounter; } }
+ public IPerformanceCounter MessageBusTopicsCurrent { get { return noOpCounter; } }
+ public IPerformanceCounter ErrorsAllTotal { get { return noOpCounter; } }
+ public IPerformanceCounter ErrorsAllPerSec { get { return noOpCounter; } }
+ public IPerformanceCounter ErrorsHubResolutionTotal { get { return noOpCounter; } }
+ public IPerformanceCounter ErrorsHubResolutionPerSec { get { return noOpCounter; } }
+ public IPerformanceCounter ErrorsHubInvocationTotal { get { return noOpCounter; } }
+ public IPerformanceCounter ErrorsHubInvocationPerSec { get { return noOpCounter; } }
+ public IPerformanceCounter ErrorsTransportTotal { get { return noOpCounter; } }
+ public IPerformanceCounter ErrorsTransportPerSec { get { return noOpCounter; } }
+ public IPerformanceCounter ScaleoutStreamCountTotal { get { return noOpCounter; } }
+ public IPerformanceCounter ScaleoutStreamCountOpen { get { return noOpCounter; } }
+ public IPerformanceCounter ScaleoutStreamCountBuffering { get { return noOpCounter; } }
+ public IPerformanceCounter ScaleoutErrorsTotal { get { return noOpCounter; } }
+ public IPerformanceCounter ScaleoutErrorsPerSec { get { return noOpCounter; } }
+ public IPerformanceCounter ScaleoutSendQueueLength { get { return noOpCounter; } }
+ }
+
+ public class NoOpPerformanceCounter : IPerformanceCounter
+ {
+ public string CounterName
+ {
+ get
+ {
+ return this.GetType().Name;
+ }
+ }
+
+ public long RawValue
+ {
+ get
+ {
+ return 0L;
+ }
+ set
+ {
+ }
+ }
+
+ public long Decrement()
+ {
+ return 0L;
+ }
+
+ public long Increment()
+ {
+ return 0L;
+ }
+
+ public long IncrementBy(long value)
+ {
+ return 0L;
+ }
+
+ public void Close()
+ {
+ }
+
+ public void RemoveInstance()
+ {
+ }
+
+ public CounterSample NextSample()
+ {
+ return CounterSample.Empty;
+ }
+ }
+}
\ No newline at end of file
diff --git a/NzbDrone.Api/SignalR/SignalrDependencyResolver.cs b/NzbDrone.Api/SignalR/SignalrDependencyResolver.cs
index 51eeb249f..f95f9ae5a 100644
--- a/NzbDrone.Api/SignalR/SignalrDependencyResolver.cs
+++ b/NzbDrone.Api/SignalR/SignalrDependencyResolver.cs
@@ -1,5 +1,6 @@
using System;
using Microsoft.AspNet.SignalR;
+using Microsoft.AspNet.SignalR.Infrastructure;
using NzbDrone.Common.Composition;
namespace NzbDrone.Api.SignalR
@@ -15,6 +16,7 @@ public static void Register(IContainer container)
private SignalrDependencyResolver(IContainer container)
{
+ container.RegisterSingleton(typeof(IPerformanceCounterManager), typeof(NoOpPerformanceCounterManager));
_container = container;
}
@@ -28,4 +30,4 @@ public override object GetService(Type serviceType)
return base.GetService(serviceType);
}
}
-}
+}
\ No newline at end of file
diff --git a/NzbDrone.Test.Dummy/app.config b/NzbDrone.Test.Dummy/app.config
new file mode 100644
index 000000000..e36560333
--- /dev/null
+++ b/NzbDrone.Test.Dummy/app.config
@@ -0,0 +1,3 @@
+
+
+