public void ServiceLayer_GetWeeklyStatsForNewWeek() { serviceLayer.ClearWeeklyStats(); WeeklyStats stats = serviceLayer.GetCurrentWeekStats(); Assert.IsNotNull(stats); }
/// <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()); }
/// <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(); } }
/// <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); }
/// <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); }
/// <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 + ";"); }
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); }
/// <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 + "'));"); }
/// <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); }
/// <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); }
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); } }
/// <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); }
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()); }
/// <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)); }
/// <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); }
/// <summary> /// Insert some weekly stats /// </summary> /// <param name="stats"></param> /// <returns></returns> public bool SaveWeekStats(WeeklyStats stats) { repoLayer.InsertWeeklyStats(connection, stats); return(true); }
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); }
/// <summary> /// Update some weekly stats /// </summary> /// <param name="stats"></param> /// <returns></returns> public bool UpdateWeeklyStats(WeeklyStats stats) { repoLayer.UpdateWeeklyStats(connection, stats); return(true); }