/// <summary>Gets exact timestamp from configuration database for given user supplied timestamp</summary>
 /// <param name="utcTimestamp">User supplied timestamp</param>
 /// <returns>Exact timestamp present in configuration database or DateTime.MinValue if
 /// utcTimestamp is too small or service configuration is empty</returns>
 public DateTime GetExactTimestamp(DateTime utcTimestamp)
 {
     using (FetchConfigurationDataClassesDataContext db = new FetchConfigurationDataClassesDataContext(connectionString))
     {
         if (utcTimestamp == DateTime.MaxValue)
         {
             var result = db.GetLatestTimeStamp().FirstOrDefault();
             if (result != null)
             {
                 return((DateTime)result.TimeStamp);
             }
             else
             {
                 return(DateTime.MinValue);
             }
         }
         else
         {
             var result = db.GetExactTimeStamp(utcTimestamp).FirstOrDefault();
             if (result == null)
             {
                 return(DateTime.MinValue);
             }
             else
             {
                 return((DateTime)result.TimeStamp);
             }
         }
     }
 }
Example #2
0
        public void GetExactTimeStampTest()
        {
            db.TruncateTables();

            //Part 1
            db.AddDataSource(
                "NCEP/NCAR Reanalysis 1 (regular grid)",
                "The NCEP/NCAR Reanalysis 1 project is using a state-of-the-art analysis/forecast system to perform data assimilation using past data from 1948 to the present",
                "NCEP Reanalysis data provided by the NOAA/OAR/ESRL PSD, Boulder, Colorado, USA, from their Web site at http://www.esrl.noaa.gov/psd/",
                "Microsoft.Research.Science.FetchClimate2.DataSources.NCEPReanalysisRegularGridDataSource, NCEPReanalysisDataSource",
                "msds:az?name=ReanalysisRegular&DefaultEndpointsProtocol=http&AccountName=fetch&AccountKey=1Y0EOrnCX6ULY8c3iMHg9rrul2BWbPHKsHUceZ7SSh+ShM/q9K0ml49gQm+PE7G7i7zCvrpuT",
                null, null);


            Thread.Sleep(time);

            DateTime TIME_MIDDLE_INSERTING = (DateTime)db.GetLatestTimeStamp().First().TimeStamp;

            db.AddDataSource(
                "NCEP/NCAR Reanalysis 1 Gauss T62 grid)",
                "The NCEP/NCAR Reanalysis 1 project is using a state-of-the-art analysis/forecast system to perform data assimilation using past data from 1948 to the present",
                "NCEP Reanalysis data provided by the NOAA/OAR/ESRL PSD, Boulder, Colorado, USA, from their Web site at http://www.esrl.noaa.gov/psd/",
                "Microsoft.Research.Science.FetchClimate2.DataSources.NCEPReanalysisGaussGridDataSource, NCEPReanalysisDataSource",
                "msds:az?name=ReanalysisGaussT62&DefaultEndpointsProtocol=http&AccountName=fetch&AccountKey=1Y0EOrnCX6ULY8c3iMHg9rrul2BWbPHKsHUceZ7SSh+ShM/q9K0ml49gQm+PE7G7i7zCvrpuT",
                null, null);

            DateTime NOW = DateTime.UtcNow;
            var      t   = db.GetExactTimeStamp(NOW).ToList();

            Assert.AreEqual(t.Count, 1);

            if (t[0].TimeStamp > NOW)
            {
                Assert.Fail();
            }

            if (t[0].TimeStamp <= TIME_MIDDLE_INSERTING)
            {
                Assert.Fail();
            }

            //Part 2

            DateTime TIME_BEFORE_ENGINE_INSERTING = (DateTime)db.GetLatestTimeStamp().First().TimeStamp;

            Thread.Sleep(time);
            db.SetFetchEngine("Fetch1");
            Thread.Sleep(time);

            DateTime TIME_AFTER_ENGINE_INSERTING = (DateTime)db.GetLatestTimeStamp().First().TimeStamp;
            var      t2 = db.GetExactTimeStamp(TIME_BEFORE_ENGINE_INSERTING).ToList();


            Assert.AreEqual(t2.Count, 1);
            Assert.AreEqual(t[0].TimeStamp, t2[0].TimeStamp);

            //Part3
            Thread.Sleep(time);
            NOW = DateTime.UtcNow;
            var t3 = db.GetExactTimeStamp(NOW).ToList();

            if (t3[0].TimeStamp > NOW)
            {
                Assert.Fail();
            }

            if (t3[0].TimeStamp < TIME_BEFORE_ENGINE_INSERTING)
            {
                Assert.Fail();
            }

            if (t3[0].TimeStamp > TIME_AFTER_ENGINE_INSERTING)
            {
                Assert.Fail();
            }

            //Part4

            db.AddDataSource(
                "WorldClim 1.4",
                "A set of global climate layers (climate grids) with a spatial resolution of a square kilometer",
                "The database is documented in this article: Hijmans, R.J., S.E. Cameron, J.L. Parra, P.G. Jones and A. Jarvis, 2005. Very high resolution interpolated climate surfaces for global land areas. International Journal of Climatology 25: 1965-1978.", "Microsoft.Research.Science.FetchClimate2.DataSources.CRUProcessor, NCEPReanalysisDataSource",
                "msds:az?name=CRU_CL_2_0&DefaultEndpointsProtocol=http&AccountName=fetch&AccountKey=1Y0EOrnCX6ULY8c3iMHg9rrul2BWbPHKsHUceZ7SSh+ShM/q9K0ml49gQm+PE7G7i7zCvrpuT",
                null, null);
            db.AddVariable("MyVariable", "MyDescription", "MyUnits");
            db.AddVariable("MyVariable2", "MyDescription2", "MyUnits2");


            DateTime TIME_BEFORE_MAPPING_INSERTING = (DateTime)db.GetLatestTimeStamp().First().TimeStamp;

            Thread.Sleep(time);
            db.SetMapping("NCEP/NCAR Reanalysis 1 (regular grid)", "MyVariable", "TestDataSourceVariable", true, true);
            DateTime TIME_AFTER_MAPPING_INSERTING = (DateTime)db.GetLatestTimeStamp().First().TimeStamp;

            var t4 = db.GetExactTimeStamp(DateTime.UtcNow).ToList();

            Assert.AreEqual(t4.Count, 1);
            if (t4[0].TimeStamp > TIME_AFTER_MAPPING_INSERTING)
            {
                Assert.Fail();
            }
        }