/// <summary>
        /// Builds the available parkades model with the a default entry
        /// </summary>
        /// TODO Refactor
        /// <param name="analyticsModes">analytics Model</param>
        /// <returns>Filled Available Dates Model</returns>
        private static IEnumerable <SelectListItem> BuildAvailableParkadeDropDown(IParkingFinderAnalyticsModel analyticsModes)
        {
            IList <SelectListItem> availableDates = BuildAvailableParkadesEntries(analyticsModes);

            BuildDefaultEntry(ref availableDates, "Choose a Parkade", string.Empty);
            return(availableDates.GroupBy(x => x.Value).Select(g => g.First()));
        }
Esempio n. 2
0
        /// <summary>
        /// Base Execute Method for all Analytics Services
        /// </summary>
        /// <param name="requestedDateTime">the reuested Date time to get analytics data</param>
        /// <param name="requestedId">the requested id to get data for</param>
        /// <param name="analyticsModel">Reference to the current Analytics data</param>
        /// <returns>output string with the analytics result</returns>
        public string Execute(DateTime requestedDateTime, string requestedId, IParkingFinderAnalyticsModel analyticsModel)
        {
            IEnumerable <IParkingFinderAnalyticsData> analyticsDataFromDayAndId = PrepareAnalyticsData(requestedDateTime, requestedId, analyticsModel);
            Tuple <int, IList <IList <DateTime> > >   calculatedTimeSpans       = CalculateBestTimeSpans(analyticsDataFromDayAndId);

            return(BuildResultString(calculatedTimeSpans.Item1, requestedDateTime, calculatedTimeSpans.Item2));
        }
        /// <summary>
        /// Analyses the Best Parking times for a given date and a parkade
        /// </summary>
        /// <param name="requestModel">given data in as request model</param>
        /// <returns>The Result of the best parking analytics in a model</returns>
        public IBestParkingAnalyticsModel AnalyseBestParking(IAnalyticsRequestModel requestModel)
        {
            if (!requestModel.IsValid())
            {
                Logger.Error("AnalyseBestParking: Request Model is not valid");
                return(new BestParkingAnalyticsModel());
            }

            IParkingFinderAnalyticsModel analyticsModel = this.GetAnalyticsModel;

            string resultString = this.BestParkingService.Execute(
                requestModel.DateAsDatetime,
                requestModel.Id,
                analyticsModel);

            IEnumerable <IParkingFinderAnalyticsData> analyticsModelForId = analyticsModel
                                                                            .AnalyticsData
                                                                            .FirstOrDefault(element => element.Key.ToString().Equals(requestModel.Id))
                                                                            .Value
                                                                            .Where(element => element
                                                                                   .TimeStamp
                                                                                   .ToString(Labels.DateFormat)
                                                                                   .Equals(requestModel
                                                                                           .DateAsDatetime
                                                                                           .ToString(Labels.DateFormat)))
                                                                            .OrderBy(element => element.TimeStamp);

            return(new BestParkingAnalyticsModel()
            {
                ResultText = resultString,
                AnalyticsData = analyticsModelForId
            });
        }
        /// <summary>
        /// Requests the Data Collection View
        /// </summary>
        /// <returns>Partial View</returns>
        public ActionResult BestParkingFormView()
        {
            IParkingFinderAnalyticsModel analyticsModel   = this.AnalyticsServiceFacade.GetAnalyticsModel;
            IEnumerable <SelectListItem> availableDate    = BuildAvailableDateDropDown(analyticsModel);
            IEnumerable <SelectListItem> availableParkade = BuildAvailableParkadeDropDown(analyticsModel);

            return(PartialView("Partial/BestParkingForm", BuildAnalyticsBestParkingFormViewModel(availableDate, availableParkade)));
        }
 /// <summary>
 /// Builds the complete List for available Dates
 /// </summary>
 /// <param name="analyticsModel">analytics Model</param>
 /// <returns>Filled Available Dates Model</returns>
 private static IList <SelectListItem> BuildAvailableDatesEntries(IParkingFinderAnalyticsModel analyticsModel)
 {
     return((from analyticsElement in analyticsModel.AnalyticsData
             from analyticsElementEntry in analyticsElement.Value
             select analyticsElementEntry.TimeStamp.ToString(Labels.DateFormat)
             into dateOfData
             select new SelectListItem()
     {
         Value = dateOfData,
         Text = dateOfData,
         Disabled = false,
     }).ToList());
 }
 /// <summary>
 /// Builds the DropDown List Entries for the available Parkades
 /// </summary>
 /// TODO Refactor
 /// <param name="analyticsModel">current analytics Model</param>
 /// <returns>Filled Select List for Dropdown</returns>
 private static IList <SelectListItem> BuildAvailableParkadesEntries(IParkingFinderAnalyticsModel analyticsModel)
 {
     return((from analyticsElement in analyticsModel.AnalyticsData
             from analyticsElementEntry in analyticsElement.Value
             select new Tuple <int, string>(analyticsElementEntry.OccupancyModel.Site.Id, analyticsElementEntry.OccupancyModel.Site.DisplayName)
             into dateOfData
             orderby dateOfData.Item2
             select new SelectListItem()
     {
         Value = dateOfData.Item1.ToString(),
         Text = dateOfData.Item2.ToUtf8(),
         Disabled = false,
     }).ToList());
 }
Esempio n. 7
0
        /// <summary>
        /// Application Start
        /// Is Called one time on Startup
        /// </summary>
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);

            // Deserialize and set the result in cache
            IParkingFinderAnalyticsModel deserializedAnalyticsModel = this.PredefinedServiceFacade
                                                                      .SerializationService
                                                                      .Deserialize <ParkingFinderAnalyticsModel>(Settings.AnaylticsSerializationPath);

            this.PredefinedServiceFacade
            .CachingService
            .SetModel <ParkingFinderAnalyticsModel>(deserializedAnalyticsModel);
        }
        /// <summary>
        /// The Loop which gets the Price every x minutes
        /// x can be adjusted via web.config entry "DelayWhileDataCollection"
        /// TODO Raus hier
        /// </summary>
        /// <param name="threadGuid">the guid of the current thread</param>
        private void DataCollectionLoop(Guid threadGuid)
        {
            // Check if the shut down should be forced
            while (!this.PredefinedServiceFacade.ThreadService.ShutDownForced(threadGuid))
            {
                // Get the station data from json dynamically based on the ids of the input
                IOccupanciesModel            occupancies    = this.ParkingFnderFacade.RequestParkadeOccupancies <OccupanciesModel>();
                IParkingFinderAnalyticsModel analyticsModel = (IParkingFinderAnalyticsModel)this.PredefinedServiceFacade.CachingService.GetModel <ParkingFinderAnalyticsModel>();

                foreach (OccupancyModel occupancy in occupancies.Occupancies)
                {
                    IParkingFinderAnalyticsData specificAnalyticsData = new ParkingFinderAnalyticsData()
                    {
                        OccupancyModel = occupancy,
                        TimeStamp      = DateTime.Now
                    };

                    IList <IParkingFinderAnalyticsData> analyticsData;
                    if (analyticsModel.AnalyticsData.TryGetValue(occupancy.Site.Id, out analyticsData))
                    {
                        analyticsData.Add(specificAnalyticsData);
                    }
                    else
                    {
                        analyticsData = new List <IParkingFinderAnalyticsData>()
                        {
                            specificAnalyticsData
                        };

                        analyticsModel.AnalyticsData.Add(occupancy.Site.Id, analyticsData);
                    }
                }

                // Serialize and save the Result
                this.PredefinedServiceFacade.CachingService.SetModel <ParkingFinderAnalyticsModel>(analyticsModel);
                this.PredefinedServiceFacade.SerializationService.Serialize(analyticsModel, Settings.AnaylticsSerializationPath);

                // Sleep in Web.config
                // Sleep again
                System.Threading.Thread.Sleep(600000);
            }
            // Remove this thread from the static list
            Logger.Info("DataCollectionLoop: shutdown triggered");
            this.PredefinedServiceFacade.ThreadService.RemoveDataCollectionThread(threadGuid);
        }
Esempio n. 9
0
        /// <summary>
        /// Helper to prepare the analytics data vor evaluation
        /// </summary>
        /// <param name="requestedDateTime">the reuested date time</param>
        /// <param name="requestedId">the requested parkade id </param>
        /// <param name="analyticsModel">all analytics data</param>
        /// <returns>filtered analytics data based on the input</returns>
        private static IEnumerable <IParkingFinderAnalyticsData> PrepareAnalyticsData(DateTime requestedDateTime, string requestedId, IParkingFinderAnalyticsModel analyticsModel)
        {
            KeyValuePair <int, IList <IParkingFinderAnalyticsData> > specificAnalyticsModel = analyticsModel
                                                                                              .AnalyticsData
                                                                                              .FirstOrDefault(element => element.Key.ToString().Equals(requestedId));

            return(specificAnalyticsModel.Value.Where(
                       listElement =>
                       listElement.TimeStamp.ToString(CoreLabels.DateFormat)
                       .Equals(requestedDateTime.ToString(CoreLabels.DateFormat))));
        }
 /// <summary>
 /// Base Execute Method for all Analytics Services
 /// </summary>
 /// <param name="requestedDateTime">the reuested Date time to get analytics data</param>
 /// <param name="requestedId">the requested id to get data for</param>
 /// <param name="analyticsModel">Reference to the current Analytics data</param>
 /// <returns>output string with the analytics result</returns>
 public string Execute(DateTime requestedDateTime, string requestedId, IParkingFinderAnalyticsModel analyticsModel)
 {
     throw new NotImplementedException();
 }