예제 #1
0
        public async Task <IActionResult> GetAllTimelines(int id, string areaName)
        {
            string functionDates = StringSwapper.ByArea(
                areaName,
                null,
                SqlFunctionTimeSeries.DatesSubFund,
                SqlFunctionTimeSeries.DatesShareClass);
            string functionProviders = StringSwapper.ByArea(
                areaName,
                null,
                SqlFunctionTimeSeries.ProvidersSubFund,
                SqlFunctionTimeSeries.ProvidersShareClass);
            string functionPrices = StringSwapper.ByArea(
                areaName,
                null,
                SqlFunctionTimeSeries.PricesSubFund,
                SqlFunctionTimeSeries.PricesShareClass);

            var dates = await this.service.GetDates(functionDates, id, 1).ToListAsync();

            var providers = await this.service.GetProviders(functionProviders, id, 1).ToListAsync();

            var prices = await this.service.GetPrices(functionPrices, id).ToListAsync();

            var model = new TimeSeriesViewModel()
            {
                AreaName         = areaName,
                TSPriceDates     = dates,
                TSTypeProviders  = providers,
                TSAllPriceValues = prices,
                Id = id,
            };

            return(this.PartialView("SpecificEntity/_TimeSeries", model));
        }
예제 #2
0
        public async Task <IActionResult> GetAllTimeSeries(int id, string areaName)
        {
            string functionProviders = StringSwapper.ByArea(
                areaName,
                null,
                SqlFunctionTimeSeries.ProvidersSubFund,
                SqlFunctionTimeSeries.ProvidersShareClass);

            string functionTimeSeries = StringSwapper.ByArea(
                areaName,
                null,
                SqlFunctionTimeSeries.TimeSeriesSF,
                SqlFunctionTimeSeries.TimeSeriesSC);

            bool isMainProvider = true;

            var provider = await this.service.GetProviders(string.Format(functionProviders, id), 1, isMainProvider).FirstOrDefaultAsync();

            var dates = await this.service.GetDates(string.Format(functionTimeSeries, id, provider), 1).ToListAsync();

            var prices = await this.service.GetPrices(string.Format(functionTimeSeries, id, provider), 1).ToListAsync();

            var model = new TimeSeriesViewModel()
            {
                AreaName         = areaName,
                TSPriceDates     = dates,
                TSTypeProvider   = provider,
                TSAllPriceValues = prices,
                Id = id,
            };

            return(this.PartialView("SpecificEntity/_TimeSeries", model));
        }
예제 #3
0
        public string LookupValueFromTitle(clientDataSource cds, TimeSeriesViewModel tsvm)
        {
            string value = String.Empty;

            //Validate/initialize input parameters
            if (null == cds || null == tsvm)
            {
                return(value);                  //Invalid parameter(s) - return early
            }

            switch (cds.title)
            {
            case "Service URL":                                 //Data Service URL (NOT the WSDL URL)

                //On the client's Data page, the DataTable's Service URL column lists the organization name.  The entry contains a link to the DescriptionUrl.
                // On a search, the DataTable references the organization name value not the DescriptionUrl value...
                //value = webServiceList.Find(wsn => wsn.ServiceCode.Equals(tsvm.ServCode, StringComparison.CurrentCultureIgnoreCase)).DescriptionUrl;
                value = tsvm.Organization;
                break;

            default:
                //Unknown title, take no action...
                break;
            }

            //Processing complete - return
            return(value);
        }
예제 #4
0
        public async Task <IActionResult> GetTimeSeriesChart()
        {
            var viewModel = new TimeSeriesViewModel();

            viewModel.BuildingSelectList  = buildingRepository.BuildingSelectModels();
            viewModel.DataFieldSelectList = dataFieldRepository.DataFieldSelectModels();
            viewModel.ObjectsSelectList   = objectsRepository.ObjectsSelectModels();

            return(Ok(viewModel));
        }
예제 #5
0
        private TimeSeriesViewModel mapDataCartToTimeseries(BusinessObjects.Models.SeriesDataCartModel.SeriesDataCart dc, int id)
        {
            var allWebservices = (List <WebServiceNode>)Session["webServiceList"];

            var dict = allWebservices.Distinct().ToDictionary(i => i.ServiceCode, i => i.Organization);

            var dict1 = allWebservices.Distinct().ToDictionary(i => i.ServiceCode, i => i.Title);

            var obj = new TimeSeriesViewModel();

            obj.SeriesId     = id;
            obj.ServCode     = dc.ServCode;
            obj.ServTitle    = dict1.FirstOrDefault(x => x.Key == dc.ServCode).Value;
            obj.ServURL      = dc.ServURL;
            obj.SiteCode     = dc.SiteCode;
            obj.VariableCode = dc.VariableCode;
            obj.SiteName     = dc.SiteName;
            obj.VariableName = dc.VariableName;
            obj.BeginDate    = dc.BeginDate;
            obj.EndDate      = dc.EndDate;
            obj.ValueCount   = dc.ValueCount;
            obj.Latitude     = dc.Latitude;
            obj.Longitude    = dc.Longitude;
            obj.DataType     = dc.DataType;
            obj.ValueType    = dc.ValueType;
            obj.SampleMedium = dc.SampleMedium;
            //BCC - 08-Aug-2016 - Assign view model general category...
            obj.GeneralCategory = dc.GeneralCategory;
            obj.TimeUnit        = dc.TimeUnit;
            obj.TimeSupport     = dc.TimeSupport;
            obj.ConceptKeyword  = dc.ConceptKeyword;
            //BCC - 15-Oct-2015 -  Suppress display of IsRegular
            //obj.IsRegular = dc.IsRegular;
            obj.VariableUnits = dc.VariableUnits;
            obj.Organization  = dict.FirstOrDefault(x => x.Key == dc.ServCode).Value;

            //BCC - 07-Sep-2016 - Add additional fields for use with GetSeriesCatalogForBox3...
            obj.QCLID   = dc.QCLID;
            obj.QCLDesc = dc.QCLDesc;

            obj.SourceId  = dc.SourceId;
            obj.SourceOrg = dc.SourceOrg;

            obj.MethodId   = dc.MethodId;
            obj.MethodDesc = dc.MethodDesc;

            return(obj);
        }
예제 #6
0
        public ActionResult updateMarkers(FormCollection collection)
        {
            if (bFirstCall)
            {
                //First time called since last web site restart - log selected <appSettings> values...
                bFirstCall = false;

                dblogcontext.clearParameters();
                dblogcontext.clearReturns();

                dblogcontext.addParameter("ServiceUrl", ConfigurationManager.AppSettings["ServiceUrl"]);
                dblogcontext.addParameter("ServiceUrl_1_1_EndPoint", ConfigurationManager.AppSettings["ServiceUrl1_1_EndPoint"]);
                dblogcontext.addParameter("ByuUrl", ConfigurationManager.AppSettings["ByuUrl"]);
                dblogcontext.addParameter("MaxClustercount", ConfigurationManager.AppSettings["MaxClustercount"].ToString());
                dblogcontext.addParameter("maxAllowedTimeseriesReturn", ConfigurationManager.AppSettings["maxAllowedTimeseriesReturn"].ToString());
                dblogcontext.addParameter("maxCombinedExportValues", ConfigurationManager.AppSettings["maxCombinedExportValues"].ToString());
                dblogcontext.addParameter("blobContainer", ConfigurationManager.AppSettings["blobContainer"]);
                dblogcontext.addParameter("aspnet:MaxJsonDeserializerMembers", ConfigurationManager.AppSettings["aspnet:MaxJsonDeserializerMembers"].ToString());
                dblogcontext.addParameter("currentVersion", ConfigurationManager.AppSettings["currentVersion"].ToString());

                DateTime dtNow = DateTime.UtcNow;
                dblogcontext.createLogEntry(System.Web.HttpContext.Current, dtNow, dtNow, "updateMarkers(...)", "first call - selected appSettings values...", Level.Info);
            }

            var    searchSettings = new SearchSettings();
            string markerjSON     = string.Empty;

            //get map geometry
            double xMin, xMax, yMin, yMax;
            int    zoomLevel;

            int CLUSTERWIDTH       = 50;                                                                              //Cluster region width, all pin within this area are clustered
            int CLUSTERHEIGHT      = 50;                                                                              //Cluster region height, all pin within this area are clustered
            int CLUSTERINCREMENT   = 5;                                                                               //increment for clusterwidth
            int MINCLUSTERDISTANCE = 25;
            int MAXCLUSTERCOUNT    = Convert.ToInt32(ConfigurationManager.AppSettings["MaxClustercount"].ToString()); //maximum ammount of clustered markers

            UniversalTypeConverter.TryConvertTo <double>(collection["xMin"], out xMin);
            UniversalTypeConverter.TryConvertTo <double>(collection["xMax"], out xMax);
            UniversalTypeConverter.TryConvertTo <double>(collection["yMin"], out yMin);
            UniversalTypeConverter.TryConvertTo <double>(collection["yMax"], out yMax);
            Box box = new Box(xMin, xMax, yMin, yMax);

            UniversalTypeConverter.TryConvertTo <int>(collection["zoomLevel"], out zoomLevel);
            var activeWebservices = new List <WebServiceNode>();

            //Attempt to retrieve filtered timeseries ids, if indicated
            string strFilterAndSearchCriteria = collection["filterAndSearchCriteria"];

            clientFilterAndSearchCriteria filterAndSearchCriteria = null;

            if (!String.IsNullOrWhiteSpace(strFilterAndSearchCriteria))
            {
                filterAndSearchCriteria = JsonConvert.DeserializeObject <clientFilterAndSearchCriteria>(strFilterAndSearchCriteria);
            }

            //if it is a new request
            if (collection["isNewRequest"].ToString() == "true")
            {
                bool canConvert = false;

                var        keywords      = Regex.Split(collection["keywords"], @"##");
                var        tileWidth     = 10;
                var        tileHeight    = 10;
                List <int> webServiceIds = null;
                try
                {
                    //Increase date range by one day to accomodate one day searches, if indicated...
                    //Set begin date time to 00:00:00, set end date time to 23:59:59
                    searchSettings.DateSettings.StartDate = Convert.ToDateTime(collection["startDate"]);
                    searchSettings.DateSettings.StartDate = searchSettings.DateSettings.StartDate.Date.AddHours(0).AddMinutes(0).AddSeconds(0);

                    searchSettings.DateSettings.EndDate = Convert.ToDateTime(collection["endDate"]);
                    if (searchSettings.DateSettings.StartDate.Date == searchSettings.DateSettings.EndDate.Date)
                    {
                        searchSettings.DateSettings.EndDate = searchSettings.DateSettings.EndDate.Date.AddDays(1);
                    }
                    searchSettings.DateSettings.EndDate = searchSettings.DateSettings.EndDate.Date.AddHours(23).AddMinutes(59).AddSeconds(59);

                    //Convert to int Array
                    if (collection["services"].Length > 0)
                    {
                        webServiceIds = collection["services"].Split(',').Select(s => Convert.ToInt32(s)).ToList();
                    }

                    var dataWorker = new DataWorker();

                    var allWebservices = dataWorker.getWebServiceList();


                    //filter list
                    if (webServiceIds != null)
                    {
                        activeWebservices = dataWorker.filterWebservices(allWebservices, webServiceIds);
                    }
                    Session["webServiceList"] = allWebservices;

                    //Clear parameters...
                    dblogcontext.clearParameters();
                    dberrorcontext.clearParameters();

                    //Add call parameters...
                    dblogcontext.addParameter("box", box);
                    dberrorcontext.addParameter("box", box);
                    if (1 == keywords.Length && "" == keywords[0])
                    {
                        dblogcontext.addParameter("keywords", "All");
                        dberrorcontext.addParameter("keywords", "All");
                    }
                    else
                    {
                        StringBuilder sb1 = new StringBuilder();
                        foreach (string keyword in keywords)
                        {
                            sb1.AppendFormat("{0}, ", keyword);
                        }

                        dblogcontext.addParameter("keywords", sb1.ToString());
                        dberrorcontext.addParameter("keywords", sb1.ToString());
                    }

                    dblogcontext.addParameter("tileWidth", tileWidth);
                    dberrorcontext.addParameter("tileWidth", tileWidth);

                    dblogcontext.addParameter("tileHeight", tileHeight);
                    dberrorcontext.addParameter("tileHeight", tileHeight);

                    dblogcontext.addParameter("startDate", searchSettings.DateSettings.StartDate);
                    dberrorcontext.addParameter("startDate", searchSettings.DateSettings.StartDate);

                    dblogcontext.addParameter("endDate", searchSettings.DateSettings.EndDate);
                    dberrorcontext.addParameter("endDate", searchSettings.DateSettings.EndDate);

                    if (0 >= activeWebservices.Count)
                    {
                        dblogcontext.addParameter("activeWebServices", "All");
                        dberrorcontext.addParameter("activeWebServices", "All");
                    }
                    else
                    {
                        StringBuilder sb1 = new StringBuilder();
                        activeWebservices.ForEach(wsn => sb1.AppendFormat("{0},", wsn.Title));

                        dblogcontext.addParameter("activeWebServices", sb1.ToString());
                        dberrorcontext.addParameter("activeWebServices", sb1.ToString());
                    }

                    DateTime startDtUtc = DateTime.UtcNow;

                    var series = dataWorker.getSeriesData(box, keywords.ToArray(), tileWidth, tileHeight,
                                                          searchSettings.DateSettings.StartDate,
                                                          searchSettings.DateSettings.EndDate,
                                                          activeWebservices);
                    DateTime endDtUtc = DateTime.UtcNow;

                    //Clear returns
                    dblogcontext.clearReturns();

                    //Add returned series count...
                    dblogcontext.addReturn("seriesCount", series.Count);

                    //Create log entry...
                    dblogcontext.createLogEntry(System.Web.HttpContext.Current, startDtUtc, endDtUtc, "updateMarkers(...)", "calls dataWorker.getSeriesData(...)", Level.Info);

                    var list = new List <TimeSeriesViewModel>();

                    if (!EnvironmentContext.LocalEnvironment())
                    {
                        //Non-local environment - do not attempt to create debug files...
                        //Watch out for similar loop code in 'else' block...
                        if (series.Count > 0)
                        {
                            for (int i = 0; i < series.Count; i++)
                            {
                                var tvm = new TimeSeriesViewModel();
                                tvm = mapDataCartToTimeseries(series[i], i);
                                list.Add(tvm);
                            }
                        }
                    }
                    else
                    {
                        //Local environment - create debug files, if indicated...
#if (DEBUG)
                        //BCC - Test - write data cart and time series objects to files...
                        using (System.IO.StreamWriter swSdc = System.IO.File.CreateText(@"C:\CUAHSI\SeriesDataCart.json"))
                        {
                            using (System.IO.StreamWriter swTsvm = System.IO.File.CreateText(@"C:\CUAHSI\TimeSeriesViewModel.json"))
                            {
                                JsonSerializer jsonser = new JsonSerializer();

                                swSdc.Write('[');                                       //Write start of array...
                                swTsvm.Write('[');
#endif
                        //Watch out for similar loop code in 'if' block...
                        if (series.Count > 0)
                        {
                            for (int i = 0; i < series.Count; i++)
                            {
                                var tvm = new TimeSeriesViewModel();
                                tvm = mapDataCartToTimeseries(series[i], i);
                                list.Add(tvm);
#if (DEBUG)
                                jsonser.Serialize(swSdc, series[i]);
                                jsonser.Serialize(swTsvm, tvm);

                                if ((i + 1) < series.Count)
                                {
                                    swSdc.Write(',');                                                           //Separate array element...
                                    swTsvm.Write(',');
                                }
#endif
                            }
                        }
#if (DEBUG)
                        swSdc.Write(']');                                               //Write end of array...
                        swTsvm.Write(']');
                    }
                }
#endif
                    }

                    var markerClustererHelper = new MarkerClustererHelper();

                    //save list for later
                    Session["Series"] = list;

                    //transform list int clusteredpins
                    var pins = transformSeriesDataCartIntoClusteredPin(list, filterAndSearchCriteria);

                    var clusteredPins = markerClustererHelper.clusterPins(pins, CLUSTERWIDTH, CLUSTERHEIGHT, CLUSTERINCREMENT, zoomLevel, MAXCLUSTERCOUNT, MINCLUSTERDISTANCE);
                    Session["ClusteredPins"] = clusteredPins;

                    var centerPoint = new LatLong(0, 0);
                    markerjSON = markerClustererHelper.createMarkersGEOJSON(clusteredPins, zoomLevel, centerPoint, "");
                }

                catch (Exception ex)
                {
                    //NOTE: Override 'standard' IIS error handling since we are using 'standard' HTTP error codes - RequestEntityTooLarge and RequestTimeout...
                    //Sources:	http://stackoverflow.com/questions/22071211/when-performing-post-via-ajax-bad-request-is-returned-instead-of-the-json-resul
                    //			http://stackoverflow.com/questions/3993941/in-iis7-5-what-module-removes-the-body-of-a-400-bad-request/4029197#4029197
                    //			http://weblog.west-wind.com/posts/2009/Apr/29/IIS-7-Error-Pages-taking-over-500-Errors

                    //Find the 'inner-most' exception...
                    while (null != ex.InnerException)
                    {
                        ex = ex.InnerException;
                    }

                    if (typeof(WebException) == ex.GetType())
                    {
                        //Web exception - return the error message...
                        WebException wex = (WebException)ex;

                        Response.StatusCode             = (int)wex.Status;
                        Response.StatusDescription      = wex.Message;
                        Response.TrySkipIisCustomErrors = true;                         //Tell IIS to use your error text not the 'standard' error text!!
                        //ALSO clues jQuery to add the parsed responseJSON object to the jqXHR object!!
                        dberrorcontext.createLogEntry(System.Web.HttpContext.Current, DateTime.UtcNow, "updateMarkers(...)", wex, "Web Exception: " + wex.Message);

                        return(Json(new { Message = wex.Message }, "application/json"));
                    }
                    else if (typeof(System.InvalidOperationException) == ex.GetType())
                    {
                        //Recover the returned error message...
                        Response.StatusCode             = (int)HttpStatusCode.RequestEntityTooLarge;
                        Response.StatusDescription      = ex.Message;
                        Response.TrySkipIisCustomErrors = true;                         //Tell IIS to use your error text not the 'standard' error text!!
                        //ALSO clues jQuery to add the parsed responseJSON object to the jqXHR object!!
                        dberrorcontext.createLogEntry(System.Web.HttpContext.Current, DateTime.UtcNow, "updateMarkers(...)", ex, "NON-Web Exception" + ex.Message);

                        return(Json(new { Message = ex.Message }, "application/json"));
                    }
                    else
                    {
                        //Assume a timeout has occurred...
                        string message = "The execution of the search took too long. Please limit search area and/or Keywords.";
                        Response.StatusCode             = (int)HttpStatusCode.RequestTimeout;
                        Response.StatusDescription      = message;
                        Response.TrySkipIisCustomErrors = true;                         //Tell IIS to use your error text not the 'standard' error text!!
                        //ALSO clues jQuery to add the parsed responseJSON object to the jqXHR object!!
                        dberrorcontext.createLogEntry(System.Web.HttpContext.Current, DateTime.UtcNow, "updateMarkers(...)", ex, "Defaults to timeout exception: " + message);

                        return(Json(new { Message = message }, "application/json"));
                    }
                }

                //var session2 =(List<BusinessObjects.Models.SeriesDataCartModel.SeriesDataCart>) Session["Series"];
            }
            else
            {
                //BCC - 19-Nov-2015 - GitHub Issues #67 - Application unresponsive after session timeout and zoom out...
                var retrievedSeries = (List <TimeSeriesViewModel>)Session["Series"];

                if (null != retrievedSeries)                    //If a session timeout has occurred, the new session object will not contain the 'Series' element!!
                {
                    var markerClustererHelper = new MarkerClustererHelper();
                    //transform list int clusteredpins
                    var pins = transformSeriesDataCartIntoClusteredPin(retrievedSeries, filterAndSearchCriteria);

                    var clusteredPins = markerClustererHelper.clusterPins(pins, CLUSTERWIDTH, CLUSTERHEIGHT, CLUSTERINCREMENT, zoomLevel, MAXCLUSTERCOUNT, MINCLUSTERDISTANCE);
                    Session["ClusteredPins"] = clusteredPins;

                    var centerPoint = new LatLong(0, 0);
                    markerjSON = markerClustererHelper.createMarkersGEOJSON(clusteredPins, zoomLevel, centerPoint, "");
                }
                else
                {
                    //Likely session timeout - return a Request Timeout error (408)...
                    string message = "User session has expired!!";

                    Response.StatusCode             = (int)HttpStatusCode.RequestTimeout;
                    Response.StatusDescription      = message;
                    Response.TrySkipIisCustomErrors = true;                     //Tell IIS to use your error text not the 'standard' error text!!

                    return(Json(new { Message = message }, "application/json"));
                }
            }
            return(Json(markerjSON));
        }