From 5a52de7ba99ec6afc47628d2cb6af1ddb9130643 Mon Sep 17 00:00:00 2001 From: Keivan Beigi Date: Fri, 26 Jul 2013 17:05:33 -0700 Subject: [PATCH] added NoOpPerformanceCounterManager for signalr so linux doesn't blowup. --- NzbDrone.Api/NzbDrone.Api.csproj | 1 + .../SignalR/NoOpPerformanceCounterManager.cs | 105 ++++++++++++++++++ .../SignalR/SignalrDependencyResolver.cs | 4 +- NzbDrone.Test.Dummy/app.config | 3 + 4 files changed, 112 insertions(+), 1 deletion(-) create mode 100644 NzbDrone.Api/SignalR/NoOpPerformanceCounterManager.cs create mode 100644 NzbDrone.Test.Dummy/app.config 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 @@ namespace NzbDrone.Api.SignalR private SignalrDependencyResolver(IContainer container) { + container.RegisterSingleton(typeof(IPerformanceCounterManager), typeof(NoOpPerformanceCounterManager)); _container = container; } @@ -28,4 +30,4 @@ namespace NzbDrone.Api.SignalR 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 @@ + + +