Пример #1
0
        public void ServiceLayer_GetWeeklyStatsForNewWeek()
        {
            serviceLayer.ClearWeeklyStats();
            WeeklyStats stats = serviceLayer.GetCurrentWeekStats();

            Assert.IsNotNull(stats);
        }
Пример #2
0
        /// <summary>
        /// Get the current week stats
        /// </summary>
        /// <returns></returns>
        public WeeklyStats GetCurrentWeekStats()
        {
            int         currentWeekNumber = GetCurrentWeekNumber();
            WeeklyStats forTheWeek        = repoLayer.GetWeeklyStats(connection).ToList().Where(x => x.WeekNumber == currentWeekNumber).FirstOrDefault();

            return(forTheWeek != null ? forTheWeek : new WeeklyStats());
        }
Пример #3
0
        /// <summary>
        /// Update weekly stats
        /// </summary>
        public static void UpdateStatsWeek(IServiceLayer DBServiceLayer, bool updateInOuts = false)
        {
            WeeklyStats stats = DBServiceLayer.GetCurrentWeekStats();

            stats.WeekNumber     = DBServiceLayer.GetCurrentWeekNumber();
            stats.ScannedIn      = stats.ScannedIn + ModuleScanning.getScannedIn();
            stats.ScannedOut     = stats.ScannedOut + ModuleScanning.getScannedOut();
            stats.TotalListeners = DBServiceLayer.GetCurrentListenerCount();
            stats.PausedCount    = DBServiceLayer.GetListenersByStatus(ListenerStates.PAUSED).Count;

            // Just update it if it already exists
            if (DBServiceLayer.WeeklyStatExistsForWeek(stats.WeekNumber))
            {
                DBServiceLayer.UpdateWeeklyStats(stats);
            }
            else
            {
                DBServiceLayer.SaveWeekStats(stats);
            }

            // Update the in/outs if required
            if (updateInOuts)
            {
                // Update in/out stats.
                DBServiceLayer.UpdateListenerInOuts();
            }
        }
Пример #4
0
        /// <summary>
        /// Get the current week number
        /// </summary>
        /// <returns></returns>
        public int GetCurrentWeekNumber()
        {
            // Gets the latest weekly stats.
            WeeklyStats myStats = repoLayer.GetWeeklyStats(connection).OrderByDescending(x => x.WeekNumber).FirstOrDefault();

            // Safegaurd
            if (myStats == null)
            {
                return(1);
            }

            // Get the week number.
            int      weekNumber = myStats.WeekNumber;
            DateTime nowDate    = DateTime.Now;

            try
            {
                // Parse the date.
                DateTime weekDate = myStats.WeekDate;

                //if (addnewbit)
                //{
                // Is it within the current week if so dont add a new bit
                if (nowDate.AddDays(-5) > weekDate)
                {
                    return(weekNumber + 1);
                }
                //}
            }
            catch (Exception ex)
            {
                log.Error(ex, "Tried to check weekly stats. Are there any?");
            }
            return(weekNumber);
        }
Пример #5
0
        /// <summary>
        /// Delete from weekly stats
        /// </summary>
        /// <param name="objConn"></param>
        /// <param name="weeklyStats"></param>
        public void DeleteWeeklyStats(SQLiteConnection objConn, WeeklyStats weeklyStats)
        {
            if (weeklyStats == null)
            {
                throw new ArgumentNullException("weeklyStats");
            }

            DoNoResultQuery(objConn, "DELETE FROM WeekStats WHERE WeekNumber = " + weeklyStats.WeekNumber);
        }
Пример #6
0
        /// <summary>
        /// Update some week stats
        /// </summary>
        /// <param name="objConn"></param>
        /// <param name="weeklyStats"></param>
        public void UpdateWeeklyStats(SQLiteConnection objConn, WeeklyStats weeklyStats)
        {
            if (weeklyStats == null)
            {
                throw new ArgumentNullException("weeklyStats");
            }

            // Note: previosly this used the following style; 'ScannedIn = ScannedIn + .'
            DoNoResultQuery(objConn, "UPDATE WeekStats SET ScannedIn = " + weeklyStats.ScannedIn + ", ScannedOut = " + weeklyStats.ScannedOut + ", PausedCount = " + weeklyStats.PausedCount + ", TotalListeners = " + weeklyStats.TotalListeners + " WHERE WeekNumber = " + weeklyStats.WeekNumber + ";");
        }
Пример #7
0
        public void ServiceLayer_GetWeeklyStatsForWeek()
        {
            WeeklyStats stats = serviceLayer.GetCurrentWeekStats();

            Assert.IsNotNull(stats);
            Assert.AreEqual(20, stats.ScannedIn);
            Assert.AreEqual(14, stats.ScannedOut);
            Assert.AreEqual(17, stats.TotalListeners);
            Assert.AreEqual(3, stats.PausedCount);
            Assert.AreEqual(5, stats.WeekNumber);
        }
Пример #8
0
        /// <summary>
        /// Insert the weekly stats
        /// </summary>
        /// <param name="objConn"></param>
        /// <param name="weeklyStats"></param>
        public void InsertWeeklyStats(SQLiteConnection objConn, WeeklyStats weeklyStats)
        {
            if (weeklyStats == null)
            {
                throw new ArgumentNullException("weeklyStats");
            }

            string dateString = weeklyStats.WeekDate.ToSQLiteStr();

            DoNoResultQuery(objConn, "INSERT INTO WeekStats (WeekNumber, ScannedIn, ScannedOut, PausedCount, TotalListeners, Date) VALUES  (" + weeklyStats.WeekNumber + ", " + weeklyStats.ScannedIn + ", " + weeklyStats.ScannedOut + ", " + weeklyStats.PausedCount + ", " + weeklyStats.TotalListeners + ", date('" + dateString + "'));");
        }
Пример #9
0
        /// <summary>
        /// Get the weekly stats from a database object
        /// </summary>
        /// <param name="myReader"></param>
        /// <returns></returns>
        public static WeeklyStats WeeklyStatsFromObject(SQLiteDataReader myReader)
        {
            WeeklyStats tempStats = new WeeklyStats();

            tempStats.ScannedIn      = (int)(long)myReader["ScannedIn"];
            tempStats.ScannedOut     = (int)(long)myReader["ScannedOut"];
            tempStats.PausedCount    = (int)(long)myReader["PausedCount"];
            tempStats.TotalListeners = (int)(long)myReader["TotalListeners"];
            tempStats.WeekNumber     = (int)(long)myReader["WeekNumber"];
            tempStats.WeekDate       = (DateTime)myReader["Date"];

            return(tempStats);
        }
Пример #10
0
        /// <summary>
        /// Create dummy week stats
        /// </summary>
        /// <returns></returns>
        public static WeeklyStats DummyWeekStats()
        {
            WeeklyStats temp = new WeeklyStats()
            {
                WeekNumber     = 1,
                WeekDate       = DateTime.Parse("10/10/01"),
                ScannedIn      = 1,
                ScannedOut     = 2,
                PausedCount    = 4,
                TotalListeners = 10
            };

            return(temp);
        }
Пример #11
0
        private void SetYear(int year)
        {
            currentYear  = year;
            lblYear.Text = year.ToString();

            try {
                // Set the year stats.
                YearStats yearStats = serviceLayer.GetYearStats(year);
                lstYearStats.Items.Clear();

                //Add items in the listview
                string[]     arr = new string[7];
                ListViewItem itm = null;
                arr[0] = yearStats.StartListeners.ToString();
                arr[1] = yearStats.EndListeners.ToString();
                arr[2] = yearStats.SentTotal.ToString();
                arr[3] = yearStats.MagazinesSent.ToString();
                arr[4] = yearStats.MemStickPlayerLoanTotal.ToString();
                arr[5] = yearStats.NewListeners.ToString();
                itm    = new ListViewItem(arr);
                lstYearStats.Items.Add(itm);
            } catch (Exception ex) {
                // Do not log if the year is the current year as this would be expected.
                if (!(year == DateTime.Now.Year))
                {
                    log.Warn(ex, "Could not load yearly stats for year: " + year);
                }
            }

            // Set the weekly stats.
            lstWeekStats.Items.Clear();
            List <WeeklyStats> weeklyStats = serviceLayer.GetWeeklyStatsForYear(year);

            for (int index = 0; index <= weeklyStats.Count - 1; index++)
            {
                WeeklyStats weekStats = weeklyStats[index];
                //Add items in the listview
                string[]     arr = new string[7];
                ListViewItem itm = null;
                arr[0] = weekStats.WeekNumber.ToString();
                arr[1] = weekStats.ScannedIn.ToString();
                arr[2] = weekStats.ScannedOut.ToString();
                arr[3] = weekStats.PausedCount.ToString();
                arr[4] = weekStats.WeekDate.ToNiceStr();
                arr[5] = weekStats.TotalListeners.ToString();
                itm    = new ListViewItem(arr);
                lstWeekStats.Items.Add(itm);
            }
        }
Пример #12
0
        /// <summary>
        /// Get all weekly stats
        /// </summary>
        /// <param name="objConn"></param>
        /// <returns></returns>
        public List <WeeklyStats> GetWeeklyStats(SQLiteConnection objConn)
        {
            List <WeeklyStats> theWeeklyStats = new List <WeeklyStats>();
            SQLiteCommand      objCommand     = null;
            SQLiteDataReader   objReader      = null;

            try
            {
                //Create a new SQL command to read all records from the customer table
                objCommand             = objConn.CreateCommand();
                objCommand.CommandText = "SELECT * FROM WeekStats";
                log.Debug("QUERY: " + objCommand.CommandText);

                //Execute the command returning a reader object
                objReader = objCommand.ExecuteReader();

                //Iterate through the rows in the reader, if we have one, we have a match!
                while ((objReader.Read()))
                {
                    WeeklyStats tempStats = WeeklyStatsFromObject(objReader);
                    theWeeklyStats.Add(tempStats);
                }

                objReader.Close();
            }
            finally
            {
                //Cleanup and close the connection
                if ((objReader != null))
                {
                    objReader.Close();
                }
                if ((objCommand != null))
                {
                    objCommand.Dispose();
                }
            }

            // Return the weekly stats.
            return(theWeeklyStats);
        }
Пример #13
0
        public void Repo_WeekStats_Tests()
        {
            WeeklyStats toInsert = CreateExtensions.DummyWeekStats();

            // Insert the weekly stats
            repoLayer.InsertWeeklyStats(connection, toInsert);

            // Edit and re-insert.
            toInsert.TotalListeners = 1000;
            toInsert.WeekNumber     = 2;
            repoLayer.InsertWeeklyStats(connection, toInsert);

            // Check the results
            List <WeeklyStats> results = repoLayer.GetWeeklyStats(connection);

            Assert.AreEqual(2, results.Count);

            Assert.AreEqual(CreateExtensions.DummyWeekStats().Serialize(), results[0].Serialize());
            Assert.AreEqual(toInsert.Serialize(), results[1].Serialize());

            // Update one of the listeners
            results[1].ScannedOut = 19;
            WeeklyStats updated = results[1];

            repoLayer.UpdateWeeklyStats(connection, updated);

            // Check the results
            results = repoLayer.GetWeeklyStats(connection);
            Assert.AreEqual(2, results.Count);
            Assert.AreEqual(CreateExtensions.DummyWeekStats().Serialize(), results[0].Serialize());
            Assert.AreEqual(updated.Serialize(), results[1].Serialize());

            // Delete a listener
            repoLayer.DeleteWeeklyStats(connection, results[1]);

            // Check the results
            results = repoLayer.GetWeeklyStats(connection);
            Assert.AreEqual(1, results.Count);
            Assert.AreEqual(CreateExtensions.DummyWeekStats().Serialize(), results[0].Serialize());
        }
Пример #14
0
        /// <summary>
        /// Is it a new stats week
        /// </summary>
        /// <returns></returns>
        public bool IsNewStatsWeek()
        {
            // Get the latest one!
            int highestWeekNumber = GetHighestWeekNumber();

            // If we have no week number, it must be the first usage
            if (highestWeekNumber == 0)
            {
                return(true);
            }

            WeeklyStats stats = repoLayer.GetWeeklyStats(connection).SingleOrDefault(x => x.WeekNumber.Equals(highestWeekNumber));

            // If we are in a later year, its an easy decision
            if (DateTime.Today.Year > stats.WeekDate.Year)
            {
                return(true);
            }

            // Is it within the last few days?
            return(DateTime.Today.DayOfYear > (stats.WeekDate.DayOfYear + 5));
        }
Пример #15
0
        /// <summary>
        /// Insert example weekly stats.
        /// </summary>
        private void InsertWeeklyStats()
        {
            // Add past stats
            WeeklyStats p1 = new WeeklyStats()
            {
                WeekNumber = 1, PausedCount = 4, ScannedIn = 4, ScannedOut = 4, TotalListeners = 4, WeekDate = DateTime.Parse("01/01/2009")
            };

            serviceLayer.SaveWeekStats(p1);
            WeeklyStats p2 = new WeeklyStats()
            {
                WeekNumber = 2, PausedCount = 5, ScannedIn = 5, ScannedOut = 4, TotalListeners = 5, WeekDate = DateTime.Parse("12/12/2009")
            };

            serviceLayer.SaveWeekStats(p2);

            // Add some stats
            WeeklyStats w1 = new WeeklyStats()
            {
                WeekNumber = 3, PausedCount = 1, ScannedIn = 10, ScannedOut = 10, TotalListeners = 15, WeekDate = DateTime.Now
            };

            serviceLayer.SaveWeekStats(w1);
            WeeklyStats w2 = new WeeklyStats()
            {
                WeekNumber = 4, PausedCount = 2, ScannedIn = 15, ScannedOut = 12, TotalListeners = 16, WeekDate = DateTime.Now
            };

            serviceLayer.SaveWeekStats(w2);
            WeeklyStats w3 = new WeeklyStats()
            {
                WeekNumber = 5, PausedCount = 3, ScannedIn = 20, ScannedOut = 14, TotalListeners = 17, WeekDate = DateTime.Now
            };

            serviceLayer.SaveWeekStats(w3);
        }
Пример #16
0
 /// <summary>
 /// Insert some weekly stats
 /// </summary>
 /// <param name="stats"></param>
 /// <returns></returns>
 public bool SaveWeekStats(WeeklyStats stats)
 {
     repoLayer.InsertWeeklyStats(connection, stats);
     return(true);
 }
Пример #17
0
        public bool Analyze(string fileName, out RunStatistics runStats)
        {
            runStats = _cache.Fetch(fileName);
            var analysisRun = false;

            if (runStats == null)
            {
                analysisRun = true;
                var gpxNamespace = XNamespace.Get("http://www.topografix.com/GPX/1/1");
                var gpxDoc       = XDocument.Load(fileName);

                runStats = new RunStatistics();
                var firstPoint = true;

                foreach (var track in gpxDoc.Descendants(gpxNamespace + "trk"))
                {
                    foreach (var segment in track.Descendants(gpxNamespace + "trkseg"))
                    {
                        var points = from point in segment.Descendants(gpxNamespace + "trkpt")
                                     select new GpxTrackPoint(point);
                        var iterator = points.GetEnumerator();
                        if (iterator.MoveNext())
                        {
                            var pt = iterator.Current;
                            if (firstPoint)
                            {
                                runStats.StartTime = pt.Time;
                                firstPoint         = false;
                            }
                            runStats.SetStartPoint(pt);
                            while (iterator.MoveNext())
                            {
                                pt = iterator.Current;
                                runStats.RecordInterval(pt);
                            }
                            runStats.EndSegment();
                        }
                    }
                }

                _cache.Store(fileName, runStats);
            }

            AggregateStatistics monthlyStats;
            AggregateStatistics weeklyStats;

            var month = new DateTime(runStats.StartTime.Year, runStats.StartTime.Month, 1);

            if (MonthlyStats.ContainsKey(month))
            {
                monthlyStats = MonthlyStats[month];
            }
            else
            {
                MonthlyStats[month]    = monthlyStats = new AggregateStatistics();
                monthlyStats.StartTime = month;
            }
            monthlyStats.AddRun(runStats);
            var deltaDays = DayOfWeek.Monday - runStats.StartTime.DayOfWeek;

            if (deltaDays > 0)
            {
                deltaDays -= 7;
            }
            var week = runStats.StartTime.Date.AddDays(deltaDays);

            if (WeeklyStats.ContainsKey(week))
            {
                weeklyStats = WeeklyStats[week];
            }
            else
            {
                WeeklyStats[week]     = weeklyStats = new AggregateStatistics();
                weeklyStats.StartTime = week;
            }
            weeklyStats.AddRun(runStats);

            return(analysisRun);
        }
Пример #18
0
 /// <summary>
 /// Update some weekly stats
 /// </summary>
 /// <param name="stats"></param>
 /// <returns></returns>
 public bool UpdateWeeklyStats(WeeklyStats stats)
 {
     repoLayer.UpdateWeeklyStats(connection, stats);
     return(true);
 }