Pārlūkot izejas kodu

Have internal classes implement IDisposable

Nick Babcock 5 gadi atpakaļ
vecāks
revīzija
96c13a881e

+ 16 - 13
OhmGraphite.Test/PrometheusTest.cs

@@ -14,8 +14,7 @@ namespace OhmGraphite.Test
             var collector = new TestSensorCreator();
             var registry = PrometheusCollection.SetupDefault(collector);
             var mserver = new MetricServer("localhost", 21881, registry: registry);
-            var server = new PrometheusServer(mserver, collector);
-            try
+            using (var server = new PrometheusServer(mserver, collector))
             {
                 server.Start();
                 var client = new HttpClient();
@@ -24,10 +23,6 @@ namespace OhmGraphite.Test
                 var content = await resp.Content.ReadAsStringAsync();
                 Assert.Contains("# HELP ohm_cpu_celsius Metric reported by open hardware sensor", content);
             }
-            finally
-            {
-                server.Stop();
-            }
         }
 
         [Fact]
@@ -36,8 +31,7 @@ namespace OhmGraphite.Test
             var collector = new NicGuidSensor();
             var registry = PrometheusCollection.SetupDefault(collector);
             var mserver = new MetricServer("localhost", 21882, registry: registry);
-            var server = new PrometheusServer(mserver, collector);
-            try
+            using (var server = new PrometheusServer(mserver, collector))
             {
                 server.Start();
                 var client = new HttpClient();
@@ -46,10 +40,19 @@ namespace OhmGraphite.Test
                 var content = await resp.Content.ReadAsStringAsync();
                 Assert.Contains("Bluetooth Network Connection 2", content);
             }
-            finally
-            {
-                server.Stop();
-            }
+        }
+
+        [Fact]
+        public void PrometheusStopServerWithoutStarting()
+        {
+            var collector = new NicGuidSensor();
+            var registry = PrometheusCollection.SetupDefault(collector);
+            var mserver = new MetricServer("localhost", 21883, registry: registry);
+            var server = new PrometheusServer(mserver, collector);
+
+            // Asserting that the following doesn't throw when the server
+            // is disposed before starting
+            server.Dispose();
         }
 
         public class NicGuidSensor : IGiveSensors
@@ -63,7 +66,7 @@ namespace OhmGraphite.Test
             {
             }
 
-            public void Stop()
+            public void Dispose()
             {
             }
         }

+ 1 - 1
OhmGraphite.Test/TestSensorCreator.cs

@@ -18,7 +18,7 @@ namespace OhmGraphite.Test
         {
         }
 
-        public void Stop()
+        public void Dispose()
         {
         }
     }

+ 4 - 3
OhmGraphite/IManage.cs

@@ -1,8 +1,9 @@
-namespace OhmGraphite
+using System;
+
+namespace OhmGraphite
 {
-    public interface IManage
+    public interface IManage : IDisposable
     {
         void Start();
-        void Stop();
     }
 }

+ 9 - 9
OhmGraphite/MetricTimer.cs

@@ -31,15 +31,6 @@ namespace OhmGraphite
             });
         }
 
-        public void Stop()
-        {
-            Logger.LogAction("stopping metric timer", () =>
-            {
-                _collector.Stop();
-                _timer.Stop();
-            });
-        }
-
         private async void ReportMetrics(object sender, ElapsedEventArgs e)
         {
             Logger.Debug("Starting to report metrics");
@@ -60,5 +51,14 @@ namespace OhmGraphite
                 Logger.Error(ex, "Unable to send metrics");
             }
         }
+
+        public void Dispose()
+        {
+            Logger.LogAction("stopping metric timer", () =>
+            {
+                _collector?.Dispose();
+                _timer?.Dispose();
+            });
+        }
     }
 }

+ 1 - 1
OhmGraphite/Program.cs

@@ -37,7 +37,7 @@ namespace OhmGraphite
 
                     s.ConstructUsing(name => metricsManager);
                     s.WhenStarted(tc => tc.Start());
-                    s.WhenStopped(tc => tc.Stop());
+                    s.WhenStopped(tc => tc.Dispose());
                 });
                 x.UseNLog();
                 x.RunAsLocalSystem();

+ 2 - 2
OhmGraphite/PrometheusServer.cs

@@ -25,11 +25,11 @@ namespace OhmGraphite
             });
         }
 
-        public void Stop()
+        public void Dispose()
         {
             Logger.LogAction("stopping prometheus server", () =>
             {
-                _collector.Stop();
+                _collector?.Dispose();
                 _server.Stop();
             });
         }

+ 1 - 1
OhmGraphite/SensorCollector.cs

@@ -40,7 +40,7 @@ namespace OhmGraphite
         }
 
         public void Start() => Open();
-        public void Stop() => Close();
+        public void Dispose() => Close();
 
         private void HardwareAdded(IHardware hardware)
         {