diff options
15 files changed, 128 insertions, 153 deletions
| diff --git a/PollutometerWebApi.Tests/Test.cs b/PollutometerWebApi.Tests/Test.cs index 254f0bc..cc17234 100644 --- a/PollutometerWebApi.Tests/Test.cs +++ b/PollutometerWebApi.Tests/Test.cs @@ -8,7 +8,7 @@ namespace PollutometerWebApi.Tests          [Test()]          public void TestCase()          { -            EmailService.Start(); +            var result = AqiCalculator.CalculateAqi(new Models.Reading() {Co = 30.4, No = 1.0, So = 0.4});          }      }  } diff --git a/PollutometerWebApi.Tests/bin/Debug/PollutometerWebApi.Tests.dll b/PollutometerWebApi.Tests/bin/Debug/PollutometerWebApi.Tests.dllBinary files differ index a1a6f09..4fec8a3 100644 --- a/PollutometerWebApi.Tests/bin/Debug/PollutometerWebApi.Tests.dll +++ b/PollutometerWebApi.Tests/bin/Debug/PollutometerWebApi.Tests.dll diff --git a/PollutometerWebApi.Tests/bin/Debug/PollutometerWebApi.Tests.pdb b/PollutometerWebApi.Tests/bin/Debug/PollutometerWebApi.Tests.pdbBinary files differ index ee082ed..4b521ed 100644 --- a/PollutometerWebApi.Tests/bin/Debug/PollutometerWebApi.Tests.pdb +++ b/PollutometerWebApi.Tests/bin/Debug/PollutometerWebApi.Tests.pdb diff --git a/PollutometerWebApi.Tests/bin/Debug/PollutometerWebApi.dll b/PollutometerWebApi.Tests/bin/Debug/PollutometerWebApi.dllBinary files differ index b8d1eba..205cb6b 100644 --- a/PollutometerWebApi.Tests/bin/Debug/PollutometerWebApi.dll +++ b/PollutometerWebApi.Tests/bin/Debug/PollutometerWebApi.dll diff --git a/PollutometerWebApi.Tests/bin/Debug/PollutometerWebApi.pdb b/PollutometerWebApi.Tests/bin/Debug/PollutometerWebApi.pdbBinary files differ index 1cf8ce4..176b41e 100644 --- a/PollutometerWebApi.Tests/bin/Debug/PollutometerWebApi.pdb +++ b/PollutometerWebApi.Tests/bin/Debug/PollutometerWebApi.pdb diff --git a/PollutometerWebApi.Tests/obj/Debug/PollutometerWebApi.Tests.csprojResolveAssemblyReference.cache b/PollutometerWebApi.Tests/obj/Debug/PollutometerWebApi.Tests.csprojResolveAssemblyReference.cacheBinary files differ index 11b2422..e810d97 100644 --- a/PollutometerWebApi.Tests/obj/Debug/PollutometerWebApi.Tests.csprojResolveAssemblyReference.cache +++ b/PollutometerWebApi.Tests/obj/Debug/PollutometerWebApi.Tests.csprojResolveAssemblyReference.cache diff --git a/PollutometerWebApi.Tests/obj/Debug/PollutometerWebApi.Tests.dll b/PollutometerWebApi.Tests/obj/Debug/PollutometerWebApi.Tests.dllBinary files differ index a1a6f09..4fec8a3 100644 --- a/PollutometerWebApi.Tests/obj/Debug/PollutometerWebApi.Tests.dll +++ b/PollutometerWebApi.Tests/obj/Debug/PollutometerWebApi.Tests.dll diff --git a/PollutometerWebApi.Tests/obj/Debug/PollutometerWebApi.Tests.pdb b/PollutometerWebApi.Tests/obj/Debug/PollutometerWebApi.Tests.pdbBinary files differ index ee082ed..4b521ed 100644 --- a/PollutometerWebApi.Tests/obj/Debug/PollutometerWebApi.Tests.pdb +++ b/PollutometerWebApi.Tests/obj/Debug/PollutometerWebApi.Tests.pdb diff --git a/PollutometerWebApi.userprefs b/PollutometerWebApi.userprefs index 6eb030b..34c119a 100644 --- a/PollutometerWebApi.userprefs +++ b/PollutometerWebApi.userprefs @@ -1,19 +1,10 @@ -<Properties StartupConfiguration="{22C32F4C-0DEB-40EA-9D56-48942CBB2A07}|"> -  <MonoDevelop.Ide.Workbench ActiveDocument="PollutometerWebApi/Controllers/ReadingsController.cs"> +<Properties StartupConfiguration="{D19CA1E0-796F-480A-996D-3DFABFC6203F}|Unit Tests"> +  <MonoDevelop.Ide.Workbench ActiveDocument="PollutometerWebApi/AqiCalculator.cs">      <Files> -      <File FileName="PollutometerWebApi/SqlOperator.cs" Line="25" Column="1" /> -      <File FileName="PollutometerWebApi/Views/Home/Index.cshtml" Line="1" Column="1" /> -      <File FileName="PollutometerWebApi/Views/Shared/_Layout.cshtml" Line="1" Column="1" /> -      <File FileName="PollutometerWebApi/App_Start/RouteConfig.cs" Line="1" Column="1" /> -      <File FileName="PollutometerWebApi/App_Start/WebApiConfig.cs" Line="1" Column="1" /> -      <File FileName="PollutometerWebApi/packages.config" Line="1" Column="1" /> -      <File FileName="PollutometerWebApi/Web.config" Line="3" Column="33" /> -      <File FileName="PollutometerWebApi/Global.asax" Line="1" Column="39" /> -      <File FileName="PollutometerWebApi/Global.asax.cs" Line="1" Column="1" /> -      <File FileName="PollutometerWebApi/EmailSender.cs" Line="42" Column="27" /> -      <File FileName="PollutometerWebApi/EmailService.cs" Line="30" Column="53" /> -      <File FileName="PollutometerWebApi.Tests/Test.cs" Line="12" Column="1" /> -      <File FileName="PollutometerWebApi/Controllers/ReadingsController.cs" Line="14" Column="4" /> +      <File FileName="PollutometerWebApi/AqiCalculator.cs" Line="7" Column="16" /> +      <File FileName="PollutometerWebApi.Tests/Test.cs" Line="15" Column="1" /> +      <File FileName="PollutometerWebApi/Controllers/ReadingsController.cs" Line="71" Column="48" /> +      <File FileName="PollutometerWebApi/EmailSender.cs" Line="24" Column="5" />      </Files>    </MonoDevelop.Ide.Workbench>    <MonoDevelop.Ide.Workspace ActiveConfiguration="Debug" /> diff --git a/PollutometerWebApi/AqiCalculator.cs b/PollutometerWebApi/AqiCalculator.cs new file mode 100644 index 0000000..e00d792 --- /dev/null +++ b/PollutometerWebApi/AqiCalculator.cs @@ -0,0 +1,102 @@ +using PollutometerWebApi.Models; + +namespace PollutometerWebApi +{ +    public static class AqiCalculator +    { +        public static Aqi CalculateAqi(Reading reading) +        { +            double[,,] breakpoints = +            { +                { +                    {0, 4.4}, +                    {4.5, 9.4}, +                    {9.5, 12.4}, +                    {12.5, 15.4}, +                    {15.5, 30.4}, +                    {30.5, 40.4}, +                    {40.5, 50.4} +                }, +                { +                    {0.000, 0.034}, +                    {0.035, 0.144}, +                    {0.145, 0.224}, +                    {0.225, 0.304}, +                    {0.305, 0.604}, +                    {0.605, 0.804}, +                    {0.805, 1.004} +                }, +                { +                    {0, 0.05}, +                    {0.08, 0.10}, +                    {0.15, 0.20}, +                    {0.25, 0.31}, +                    {0.65, 1.24}, +                    {1.25, 1.64}, +                    {1.65, 2.04} +                }, +                { +                    {0, 50}, +                    {51, 100}, +                    {101, 150}, +                    {151, 200}, +                    {201, 300}, +                    {301, 400}, +                    {401, 500} +                } +            }; + +            double i, c = 0, cLow = 0, cHigh = 0, iLow = 0, iHigh = 0;
 +            Aqi aqi = new Aqi(); +            +            for (int x = 0; x < 4; x++)
 +            { +                switch (x) +                { +                    case 0: +                        c = reading.Co; +                        break; +                    case 1: +                        c = reading.So; +                        break; +                    case 2: +                        c = reading.No; +                        break; +                } + +                for (int y = 0; y < 7; y++) +				{ +					if (c >= breakpoints[x, y, 0] && c <= breakpoints[x, y, 1]) +					{ +						cLow = breakpoints[x, y, 0]; +						cHigh = breakpoints[x, y, 1]; +						iLow = breakpoints[3, y, 0]; +						iHigh = breakpoints[3, y, 1]; +                        break; +					} +				}
 +
 +                i = (iHigh - iLow) / (cHigh - cLow) * (c - cLow) + iLow;
 +
 +                if (i > aqi.Value) +                { 
 +                    aqi.Value = i; +                    switch (x) +                    { +                        case 0: +                            aqi.GasName = "CO"; +                            break; +                        case 1: +                            aqi.GasName = "SO"; +                            break; +                        case 2: +                            aqi.GasName = "NO"; +                            break; +                    } +                }
 +            } + +            return aqi; +        } +    } +} diff --git a/PollutometerWebApi/Controllers/ReadingsController.cs b/PollutometerWebApi/Controllers/ReadingsController.cs index 9767645..f915e17 100644 --- a/PollutometerWebApi/Controllers/ReadingsController.cs +++ b/PollutometerWebApi/Controllers/ReadingsController.cs @@ -12,8 +12,6 @@ namespace PollutometerWebApi.Controllers  		public IHttpActionResult GetAllReadings()  		{ -            Task.Run(() => EmailService.Start());
 -            
              var command = "SELECT * FROM Readings";
              var readings = SqlOperator.GetReadings(command); @@ -67,7 +65,10 @@ namespace PollutometerWebApi.Controllers  		{  			if (reading != null)  			{ -                SqlOperator.PostReading(reading); +                SqlOperator.PostReading(reading);
 +                var aqi = AqiCalculator.CalculateAqi(reading);
 +                if (aqi.Value > 151)
 +                    EmailSender.SendEmail(aqi);  				return Ok();  			}  			else return BadRequest(); diff --git a/PollutometerWebApi/EmailSender.cs b/PollutometerWebApi/EmailSender.cs index 6d8702e..287551e 100644 --- a/PollutometerWebApi/EmailSender.cs +++ b/PollutometerWebApi/EmailSender.cs @@ -1,17 +1,13 @@  using System; -using System.Collections.Generic;  using System.Net.Mail; +using PollutometerWebApi.Models;  namespace PollutometerWebApi  { -    public class EmailSender +    public static class EmailSender      { -        public EmailSender() {} - -        public static void SendEmail(string gasName, double max) +        public static void SendEmail(Aqi aqi)          { -            try -            {                  MailMessage mail = new MailMessage("***REMOVED***", "***REMOVED***@edu.easj.dk");                  SmtpClient client = new SmtpClient()                  { @@ -29,14 +25,9 @@ namespace PollutometerWebApi                      "\n" +                      "<img src=\"https://i.imgflip.com/20b4q2.jpg\"/>\n" +                      "\n" + -                    $"<p>The warning was triggered by {gasName}.</p>\n" + -                    $"<p>Air quality index: {max}</p>"; +                $"<p>The warning was triggered by {aqi.GasName}.</p>\n" + +                $"<p>Air quality index: {aqi.Value}</p>";                  client.Send(mail); -            } -            catch(Exception ex) -            { -                Console.Write(ex.Message); -            }          }      }  }
\ No newline at end of file diff --git a/PollutometerWebApi/EmailService.cs b/PollutometerWebApi/EmailService.cs deleted file mode 100644 index 3681dd2..0000000 --- a/PollutometerWebApi/EmailService.cs +++ /dev/null @@ -1,119 +0,0 @@ -using System;
 -using System.Collections.Generic; -using PollutometerWebApi.Singletons; - -namespace PollutometerWebApi -{ -    public class EmailService -    { -        public EmailService() -        { -        } - -        public static void Start() -        { -            var startTimeSpan = TimeSpan.Zero; -            var periodTimeSpan = TimeSpan.FromMinutes(60); - -            var timer = new System.Threading.Timer((e) => -            { -                var command = "SELECT * FROM Readings " + -                                "WHERE TimeStamp IN(SELECT MAX(TimeStamp) FROM Readings)"; -                var reading = SqlOperator.GetReadings(command)[0]; - -                Dictionary<string, double> results = new Dictionary<string, double>(); -                results["CO"] = CalculateAqi(reading.Co, "CO"); -                results["NO"] = CalculateAqi(reading.No, "NO"); -                results["SO"] = CalculateAqi(reading.So, "SO"); - -				double max = 0; -				string gasName = ""; -				foreach (var result in results) -				{ -					if (result.Value > max) -					{ -						max = result.Value;  -						gasName = result.Key; -					} -				}
 - -                if(max >= 151) EmailSender.SendEmail(gasName, max); -            }, null, startTimeSpan, periodTimeSpan); -        } - -        static double CalculateAqi(double c, string t) -        { -            double[,,] breakpoints = -            { -                { -                    {0, 4.4}, -                    {4.5, 9.4}, -                    {9.5, 12.4}, -                    {12.5, 15.4}, -                    {15.5, 30.4}, -                    {30.5, 40.4}, -                    {40.5, 50.4} -                }, -                { -                    {0.000, 0.034}, -                    {0.035, 0.144}, -                    {0.145, 0.224}, -                    {0.225, 0.304}, -                    {0.305, 0.604}, -                    {0.605, 0.804}, -                    {0.805, 1.004} -                }, -                { -                    {0, 0.05}, -                    {0.08, 0.10}, -                    {0.15, 0.20}, -                    {0.25, 0.31}, -                    {0.65, 1.24}, -                    {1.25, 1.64}, -                    {1.65, 2.04} -                }, -                { -                    {0, 50}, -                    {51, 100}, -                    {101, 150}, -                    {151, 200}, -                    {201, 300}, -                    {301, 400}, -                    {401, 500} -                } -            }; - -            double i, cLow = 0, cHigh = 0, iLow = 0, iHigh = 0; -            int g = 0; - -            switch (t) -            { -                case "CO": -                    g = 0; -                    break; -                case "SO": -                    g = 1; -                    break; -                case "NO": -                    g = 2; -                    break; -            } - -            for (int j = 0; j < 7; j++) -            { -                if (c >= breakpoints[g, j, 0] && c <= breakpoints[g, j, 1]) -                { -                    cLow = breakpoints[g, j, 0]; -                    cHigh = breakpoints[g, j, 1]; -                    iLow = breakpoints[3, j, 0]; -                    iHigh = breakpoints[3, j, 1]; -                    break; -                } -            } - -            i = (iHigh - iLow) / (cHigh - cLow) * (c - cLow) + iLow; - -            return i; -        } -    } -} diff --git a/PollutometerWebApi/Models/Aqi.cs b/PollutometerWebApi/Models/Aqi.cs new file mode 100644 index 0000000..490df85 --- /dev/null +++ b/PollutometerWebApi/Models/Aqi.cs @@ -0,0 +1,8 @@ +namespace PollutometerWebApi.Models +{ +    public class Aqi +    { +        public string GasName { get; set; } +        public double Value { get; set; } +    } +} diff --git a/PollutometerWebApi/PollutometerWebApi.csproj b/PollutometerWebApi/PollutometerWebApi.csproj index d2dcd57..f2ef659 100644 --- a/PollutometerWebApi/PollutometerWebApi.csproj +++ b/PollutometerWebApi/PollutometerWebApi.csproj @@ -90,7 +90,8 @@      <Compile Include="Models\Reading.cs" />
      <Compile Include="SqlOperator.cs" />
      <Compile Include="EmailSender.cs" />
 -    <Compile Include="EmailService.cs" />
 +    <Compile Include="AqiCalculator.cs" />
 +    <Compile Include="Models\Aqi.cs" />
    </ItemGroup>
    <ItemGroup>
      <Content Include="Views\Web.config" />
 |