Exemple #1
0
    /// <summary>
    /// Get a list of new predicted/observed tables added by a pull request.
    /// The returned table names will be of the form "FileName.TableName".
    /// </summary>
    /// <param name="pullRequestId">Pull request ID.</param>
    /// <param name="acceptedPullRequestId">ID of the pull request of the accepted stats.</param>
    public static List <string> GetNewTables(int pullRequestId, int acceptedPullRequestId)
    {
        string returnStr = string.Empty;

        using (ApsimDBContext context = new ApsimDBContext())
        {
            string strsql = $@"SELECT curr.[Filename]
FROM (
	SELECT 'currentPO' as 'Source', a1.[FileName] + '.' + pod1.[TableName] as [FileName]
	FROM [dbo].[ApsimFiles] a1
	INNER JOIN [dbo].[PredictedObservedDetails] pod1 on a1.ID = pod1.ApsimFilesID
	WHERE a1.[PullRequestId] = {pullRequestId}
) as curr
LEFT OUTER JOIN (
		SELECT 'acceptedPO' as 'Source', a1.[FileName] + '.' + pod1.[TableName] as [FileName]
		FROM[dbo].[ApsimFiles] a1
		INNER JOIN [dbo].[PredictedObservedDetails] pod1 on a1.ID = pod1.ApsimFilesID
		WHERE a1.[PullRequestId] = {acceptedPullRequestId}
) AS acc
ON curr.[FileName] = acc.[FileName]
WHERE acc.[FileName] IS NULL;";

            return(context.Database.SqlQuery <string>(strsql).ToList());
        }
    }
Exemple #2
0
    public static List <vSimulationPredictedObserved> GetCurrentAcceptedSimulationValues(int currentPoID, int acceptedPoId)
    {
        using (ApsimDBContext context = new ApsimDBContext())
        {
            SqlParameter param1 = new SqlParameter("@CurrentPredictedObservedId", currentPoID);
            SqlParameter param2 = new SqlParameter("@AcceptedPredictedObservedId", acceptedPoId);

            var results = context.Database
                          .SqlQuery <vSimulationPredictedObserved>("usp_GetCurrentAcceptedSimulationValues @CurrentPredictedObservedId, @AcceptedPredictedObservedId", param1, param2)
                          .Select(v => new vSimulationPredictedObserved
            {
                ID                     = v.ID,
                MatchNames             = v.MatchNames,
                MatchValues            = v.MatchNames,
                ValueName              = v.ValueName,
                CurrentPredictedValue  = (double?)v.CurrentPredictedValue,
                CurrentObservedValue   = (double?)v.CurrentObservedValue,
                AcceptedPredictedValue = (double?)v.AcceptedPredictedValue,
                AcceptedObservedValue  = (double?)v.AcceptedObservedValue,
                SimulationName         = v.SimulationName,
                SimulationsID          = (int)v.ID
            })
                          .ToList();
            return(results);
        }
    }
Exemple #3
0
    /// <summary>
    /// Gets Details of the individual Apsim simulation Files that make up this specified Pull Request and Run Date
    /// NOTE:  No longer in use as can no longer have multiple pull requests with different dates.
    /// </summary>
    /// <param name="pullRequestId"></param>
    /// <param name="runDate"></param>
    /// <returns></returns>
    public static List <vSimFile> GetSimFilesByPullRequestIDandDate(int pullRequestId, DateTime runDate)
    {
        using (ApsimDBContext context = new ApsimDBContext())
        {
            string pathStr = @"C:\Jenkins\workspace\1. GitHub pull request\ApsimX\Tests\Validation\Maize\Maize.apsimx";
            int    posn    = pathStr.IndexOf(@"ApsimX\Tests");
            posn += 7;

            return(context.ApsimFiles.Join(context.PredictedObservedDetails,
                                           af => af.ID,
                                           pod => pod.ApsimFilesID,
                                           (af, pod) => new { ApsimFiles = af, PredictedObservedDetails = pod })
                   .Where(sf => sf.ApsimFiles.PullRequestId == pullRequestId && sf.ApsimFiles.RunDate == runDate)
                   .Select(sf => new vSimFile
            {
                PullRequestId = sf.ApsimFiles.PullRequestId,
                FileName = sf.ApsimFiles.FileName,
                FullFileName = ((sf.ApsimFiles.FullFileName.Contains("GitHub")) ? sf.ApsimFiles.FullFileName.Substring(posn) : sf.ApsimFiles.FullFileName),
                SubmitDetails = sf.ApsimFiles.SubmitDetails,
                PredictedObservedID = sf.PredictedObservedDetails.ID,
                strPredictedObservedID = sf.PredictedObservedDetails.ID.ToString(),
                PredictedObservedTableName = sf.PredictedObservedDetails.TableName,
                PassedTests = sf.PredictedObservedDetails.PassedTests,
                AcceptedPredictedObservedDetailsID = sf.PredictedObservedDetails.AcceptedPredictedObservedDetailsID
            })
                   .OrderBy(sf => sf.FileName)
                   .ToList());
        }
    }
Exemple #4
0
    /// <summary>
    /// Returns the PredictedObservedValues and corresponding Simulation details for a specific PredictedObserved Table and variable
    /// </summary>
    /// <param name="predictedObservedId"></param>
    /// <param name="variable"></param>
    /// <returns></returns>
    //public static List<vSimulationPredictedObserved> GetByPredictedObservedIdAndVariable(int predictedObservedId, string variable)
    //{
    //    //TODO:  Convert this to Indexed View in Sql Server
    //    using (ApsimDBContext context = new ApsimDBContext())
    //    {
    //        SqlParameter param1 = new SqlParameter("@PredictedObservedId", predictedObservedId);
    //        SqlParameter param2 = new SqlParameter("@ValueName", variable);

    //        var results = context.Database
    //                             .SqlQuery<vSimulationPredictedObserved>("usp_GetByPredictedObservedIdAndVariable @PredictedObservedId, @ValueName",
    //                                                                     param1, param2).ToList();
    //        return results;
    //    }
    //}

    /// <summary>
    /// This takes two PredictedObservedDetails ID's, and returns a comparison of the values for both sets of PredictedObservedValues.
    /// This is used to compare the 'Current' and 'Accepted' Values for a specific variable.
    /// </summary>
    /// <param name="variable"></param>
    /// <param name="currentPoID"></param>
    /// <param name="acceptedPoId"></param>
    /// <returns></returns>
    //public static List<vCurrentAndAccepted> GetCurrentAcceptedValues(string variable, int currentPoID, int acceptedPoId)
    //{
    //    using (ApsimDBContext context = new ApsimDBContext())
    //    {
    //        SqlParameter param1 = new SqlParameter("@CurrentPredictedObservedId", currentPoID);
    //        SqlParameter param2 = new SqlParameter("@AcceptedPredictedObservedId", acceptedPoId);
    //        SqlParameter param3 = new SqlParameter("@ValueName", variable);

    //        var results = context.Database
    //                        .SqlQuery<vCurrentAndAccepted>("usp_GetCurrentAcceptedValues @CurrentPredictedObservedId, @AcceptedPredictedObservedId, @ValueName",
    //                                                        param1, param2, param3).ToList();
    //        return results;
    //    }
    //}

    public static List <vCurrentAndAccepted> GetCurrentAcceptedValuesWithNulls(string variable, int currentPoID, int acceptedPoId)
    {
        using (ApsimDBContext context = new ApsimDBContext())
        {
            SqlParameter param1 = new SqlParameter("@CurrentPredictedObservedId", currentPoID);
            SqlParameter param2 = new SqlParameter("@AcceptedPredictedObservedId", acceptedPoId);
            SqlParameter param3 = new SqlParameter("@ValueName", variable);

            var results = context.Database
                          .SqlQuery <vCurrentAndAccepted>("usp_GetCurrentAcceptedValuesWithNulls @CurrentPredictedObservedId, @AcceptedPredictedObservedId, @ValueName",
                                                          param1, param2, param3)
                          .Select(v => new vCurrentAndAccepted
            {
                ID                     = v.ID,
                TableName              = v.TableName,
                SimulationName         = v.SimulationName,
                MatchNames             = v.MatchNames,
                MatchValues            = v.MatchNames,
                CurrentPredictedValue  = (double?)v.CurrentPredictedValue,
                CurrentObservedValue   = (double?)v.CurrentObservedValue,
                AcceptedPredictedValue = (double?)v.AcceptedPredictedValue,
                AcceptedObservedValue  = (double?)v.AcceptedObservedValue
            })
                          .ToList();
            return(results);
        }
    }
Exemple #5
0
 /// <summary>
 /// Gets the Predicted Observed Details based on the id (int)
 /// </summary>
 /// <param name="predictedObservedId"></param>
 /// <returns></returns>
 public static PredictedObservedDetail GetByPredictedObservedID(int predictedObservedId)
 {
     using (ApsimDBContext context = new ApsimDBContext())
     {
         return(context.PredictedObservedDetails
                .Where(d => d.ID == predictedObservedId)
                .SingleOrDefault());
     }
 }
Exemple #6
0
    //NOTE:  Dont forget that these need to have the build property set to compile

    /// <summary>
    /// Returns details of ApsimFile based on the ID (int) of the record
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    public static ApsimFile GetByID(int id)
    {
        using (ApsimDBContext context = new ApsimDBContext())
        {
            return(context.ApsimFiles
                   .Where(a => a.ID == id)
                   .SingleOrDefault());
        }
    }
Exemple #7
0
    //NOTE:  Dont forget that these need to have the build property set to compile

    /// <summary>
    /// Retrieves the Table Name for a Predicted Observed table, based on the Id (int)
    /// </summary>
    /// <param name="predictedObservedId"></param>
    /// <returns></returns>
    public static string GetFilenameByPredictedObservedID(int predictedObservedId)
    {
        using (ApsimDBContext context = new ApsimDBContext())
        {
            return((from pod in context.PredictedObservedDetails
                    where (pod.ID == predictedObservedId)
                    select pod.TableName)
                   .SingleOrDefault());
        }
    }
Exemple #8
0
 /// <summary>
 /// Returns details of ApsimFile (parent record) based on the PredictedObservedDetails ID (int) of the record
 /// </summary>
 /// <param name="predictedObservedId"></param>
 /// <returns></returns>
 public static ApsimFile GetByPredictedObservedId(int predictedObservedId)
 {
     using (ApsimDBContext context = new ApsimDBContext())
     {
         return((from pod in context.PredictedObservedDetails
                 join af in context.ApsimFiles on pod.ApsimFilesID equals af.ID
                 where pod.ID == predictedObservedId
                 select af)
                .SingleOrDefault());
     }
 }
Exemple #9
0
 /// <summary>
 /// Returns the lastest (last) Pull Request Id that has been flagged as a release version,
 /// excluding the specified Pull Request Id
 /// </summary>
 /// <param name="currentPullRequestId"></param>
 /// <returns></returns>
 public static int GetLatestMergedPullRequestId(int currentPullRequestId)
 {
     using (ApsimDBContext context = new ApsimDBContext())
     {
         return(context.ApsimFiles
                .Where(a => a.StatsAccepted == true && a.PullRequestId != currentPullRequestId)
                .OrderByDescending(a => a.RunDate)
                .Select(a => a.PullRequestId)
                .First());
     }
 }
Exemple #10
0
 /// <summary>
 /// This is used tor retrieve the Tests details for a specifice Predicted Observed Id and variable.
 /// </summary>
 /// <param name="variable"></param>
 /// <param name="currentPoID"></param>
 /// <returns></returns>
 public static List <PredictedObservedTest> GetPredictedObservedTest(int currentPoID, string variable)
 {
     using (ApsimDBContext context = new ApsimDBContext())
     {
         return(context.PredictedObservedTests
                .Where(v => v.PredictedObservedDetailsID == currentPoID && v.Variable == variable)
                .OrderBy(v => v.SortOrder)
                .ThenBy(v => v.Test)
                .ToList());
     }
 }
Exemple #11
0
 public static List <vPredictedObservedTests> GetCurrentAcceptedTestsFiltered(int pullRequestId)
 {
     using (ApsimDBContext context = new ApsimDBContext())
     {
         SqlParameter param1 = new SqlParameter("@PullRequestId", pullRequestId);
         //[Test] IN ('RMSE', 'NSE', 'Bias', 'RSR')
         var results = context.Database
                       .SqlQuery <vPredictedObservedTests>("usp_GetPredictedObservedTestsFiltered @PullRequestId", param1)
                       .ToList();
         return(results);
     }
 }
Exemple #12
0
    public static List <vPredictedObservedTests> GetCurrentAcceptedTestsDiffsSubset(int pullRequestId)
    {
        using (ApsimDBContext context = new ApsimDBContext())
        {
            SqlParameter param1 = new SqlParameter("@PullRequestId", pullRequestId);

            var results = context.Database
                          .SqlQuery <vPredictedObservedTests>("usp_GetPredictedObservedTestswithDifferences @PullRequestId", param1)
                          .ToList();
            return(results);
        }
    }
Exemple #13
0
 /// <summary>
 /// Thes the Predicted Observed Details ID, for a specific Pull Request ID (int), by matching specific
 /// PredictedObservedDetails information.  This is used when the 'Accepted' PredictedObservedDetailsID is
 /// not saved with the 'Current' PredictedObservedDetails record.
 /// </summary>
 /// <param name="pullRequestId"></param>
 /// <param name="filename"></param>
 /// <param name="tablename"></param>
 /// <param name="predictedTableName"></param>
 /// <param name="observedTableName"></param>
 /// <param name="fieldNameUsedForMatch"></param>
 /// <returns></returns>
 public static int GetIDByMatchingDetails(int pullRequestId, string filename, string tablename)
 {
     using (ApsimDBContext context = new ApsimDBContext())
     {
         return((from pod in context.PredictedObservedDetails
                 join af in context.ApsimFiles on pod.ApsimFilesID equals af.ID
                 where af.PullRequestId == pullRequestId &&
                 af.FileName == filename &&
                 pod.TableName == tablename
                 select pod.ID)
                .SingleOrDefault());
     }
 }
Exemple #14
0
    public static List <vPredictedObservedTestsFormatted> GetPredictedObservedTestFormatted(int currentPoID, string variable)
    {
        using (ApsimDBContext context = new ApsimDBContext())
        {
            SqlParameter param1 = new SqlParameter("@PredictedObservedId", currentPoID);
            SqlParameter param2 = new SqlParameter("@Variable", variable);

            var results = context.Database
                          .SqlQuery <vPredictedObservedTestsFormatted>("usp_GetPredictedObservedTestsFormatted @PredictedObservedId, @Variable", param1, param2)
                          .ToList();
            return(results);
        }
    }
Exemple #15
0
    /// <summary>
    /// Get limited details (Pull Request ID, Run Date and Is Merged status) for all Apsim Files
    /// in reverse date order
    /// </summary>
    /// <returns></returns>
    //public static List<vApsimFile> GetAllApsimFiles()
    //{
    //    using (ApsimDBContext context = new ApsimDBContext())
    //    {
    //        return context.ApsimFiles
    //            .Select(h => new vApsimFile
    //            {
    //                PullRequestId = h.PullRequestId,
    //                RunDate = h.RunDate,
    //                SubmitDetails = h.SubmitDetails,
    //                StatsAccepted = h.StatsAccepted
    //            })
    //            .Distinct()
    //            .OrderByDescending(h => h.RunDate)
    //            .ThenByDescending(h => h.PullRequestId)
    //            .ToList();
    //    }
    //}

    public static List <vVariable> GetDistinctApsimFileNames()
    {
        using (ApsimDBContext context = new ApsimDBContext())
        {
            return(context.ApsimFiles
                   .Select(v => new vVariable
            {
                Name = v.FileName,
                Value = v.FileName
            })
                   .Distinct()
                   .OrderBy(v => v.Name)
                   .ToList());
        }
    }
Exemple #16
0
    public static AcceptStatsLog GetLatestAcceptedStatsLog()
    {
        using (ApsimDBContext context = new ApsimDBContext())
        {
            //Need to ignore any records with LogStats = false, as these may have been deleted Pull Requests, or 'Updates (below).
            //Need to ignore any records with a StatsPullRequestId, as these mean that the stats were updated to this pull request,
            //and they are not a 'Stats' Accepted it.
            var acceptStats = context.AcceptStatsLogs
                              .Where(a => a.LogStatus == true && a.StatsPullRequestId == 0)
                              .OrderByDescending(a => a.LogAcceptDate)
                              .ThenByDescending(a => a.PullRequestId)
                              .FirstOrDefault();

            return(acceptStats);
        }
    }
Exemple #17
0
 /// <summary>
 /// Returns a list of the Variables being reported on, in the PredictedObservedValues table,
 /// for a specific PredictedObservedDetailsID (int)
 /// </summary>
 /// <param name="predictedObservedId"></param>
 /// <returns></returns>
 public static List <vVariable> GetVariablesByPredictedObservedID(int predictedObservedId)
 {
     using (ApsimDBContext context = new ApsimDBContext())
     {
         return(context.PredictedObservedValues
                .Where(v => v.PredictedObservedDetailsID == predictedObservedId)
                .Select(v => new vVariable
         {
             Name = v.ValueName,
             Value = v.ValueName
         })
                .Distinct()
                .OrderBy(v => v.Name)
                .ToList());
     }
 }
Exemple #18
0
 public static List <vVariable> GetDistinctTableNames(string fileName)
 {
     using (ApsimDBContext context = new ApsimDBContext())
     {
         return((from pod in context.PredictedObservedDetails
                 join af in context.ApsimFiles on pod.ApsimFilesID equals af.ID
                 where af.FileName == fileName
                 select new vVariable
         {
             Name = pod.TableName,
             Value = pod.TableName
         })
                .Distinct()
                .OrderBy(v => v.Name)
                .ToList());
     }
 }
Exemple #19
0
    /// <summary>
    /// This is used tor retrieve the Tests details for a specifice Predicted Observed Id and variable.
    /// </summary>
    /// <param name="currentPoID"></param>
    /// <returns>List<PredictedObservedTest></returns>
    public static List <PredictedObservedTest> GetCurrentAcceptedTestsSubset(int currentPoID)
    {
        List <string> testList = new List <string>();

        testList.Add("n");
        testList.Add("R2");
        testList.Add("RMSE");
        testList.Add("NSE");
        testList.Add("RSR");

        using (ApsimDBContext context = new ApsimDBContext())
        {
            //modLMC - 24/08/2017 - only retrieve reduced set of stats data (n, R2, RMSE, NSE and RSR) as per email from Dean.
            //modLMC - 31/01/2018 - modified to exclude records where both Current and Accepted are null (fudge until 'Service' is udpated to not add them).
            return(context.PredictedObservedTests
                   .Where(v => testList.Contains(v.Test) && v.PredictedObservedDetailsID == currentPoID && !(v.Current == null && v.Accepted == null))
                   .Distinct()
                   .OrderBy(v => v.PassedTest)
                   .ThenByDescending(v => v.DifferencePercent)
                   .ThenBy(v => v.SortOrder)
                   .ThenBy(v => v.Test)
                   .ToList());
        }
    }
Exemple #20
0
    //public static vApsimFile GetLatestAcceptedPullRequestDetails()
    //{
    //    using (ApsimDBContext context = new ApsimDBContext())
    //    {
    //        return context.ApsimFiles
    //            .Where(a => a.StatsAccepted == true)
    //            .OrderByDescending(a => a.RunDate)
    //            .ThenByDescending(a => a.PullRequestId)
    //            .Select(a => new vApsimFile
    //            {
    //                PullRequestId = a.PullRequestId,
    //                RunDate = a.RunDate,
    //                SubmitDetails = a.SubmitDetails,
    //                StatsAccepted = a.StatsAccepted
    //            })
    //            .First();
    //    }
    //}

    /// <summary>
    /// Get limited details (Pull Request ID, Run Date and Is Merged status, as well as the number of Apsim Files that
    /// make up each Pull Request, and the Percentage of these files that have Passed Tests) for all Apsim Files
    /// in reverse date order
    /// </summary>
    /// <returns></returns>
    public static List <vApsimFile> GetPullRequestsWithStatus()
    {
        using (ApsimDBContext context = new ApsimDBContext())
        {
            return((from pod in context.PredictedObservedDetails
                    join af in context.ApsimFiles on pod.ApsimFilesID equals af.ID
                    select new { pod, af } into t1
                    group t1 by new { t1.af.PullRequestId, t1.af.RunDate, t1.af.SubmitDetails, t1.af.StatsAccepted } into grp
                    select new vApsimFile
            {
                PullRequestId = grp.FirstOrDefault().af.PullRequestId,
                RunDate = grp.FirstOrDefault().af.RunDate,
                SubmitDetails = grp.FirstOrDefault().af.SubmitDetails,
                StatsAccepted = grp.FirstOrDefault().af.StatsAccepted,
                PercentPassed = 100 * grp.Count(m => m.pod.PassedTests == 100) / grp.Count(m => m.pod.PassedTests != null),
                Total = grp.Count(),
                AcceptedPullRequestId = grp.FirstOrDefault().af.AcceptedPullRequestId,
                AcceptedRunDate = grp.FirstOrDefault().af.AcceptedRunDate
            })
                   .OrderByDescending(h => h.RunDate)
                   .ThenByDescending(h => h.PullRequestId)
                   .ToList());
        }
    }