public int SelectStatisticsSum(EventStatisticsData statisticsFilter) { lock (_lockObjecct) { var query = Connection.From <EventStatisticsEntry>().Select(Sql.Sum(nameof(EventStatisticsData.Count))); query.WhereExpression = GetStatisticsWhereClause(statisticsFilter, false); var sum = Connection.Scalar <int>(query); return(sum); } }
public static void Main(string[] args) { var appDataFolderPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); var appFolderPath = Path.Combine(appDataFolderPath, Assembly.GetEntryAssembly().GetName().Name); if (!Directory.Exists(appFolderPath)) { Directory.CreateDirectory(appFolderPath); } using (informationManager = new InformationManager(appFolderPath, allowAnonymousErrorFeedback: true)) { informationManager.JournalEntryRead += OnJournalEntryRead; informationManager.JournalEntryException += OnJournalEntryException; journalFilenames = informationManager.ListJournalFiles(); currentFilename = string.Empty; // Start will read and cache all historical events and then return // If this is the first time then it might take a few minutes informationManager.Start(); Console.WriteLine($"Hello Cmdr {informationManager.CurrentCommander?.Commander}!"); Console.WriteLine($"Current ship: {informationManager.CurrentShip?.Ship}"); Console.WriteLine($"Current star system: {informationManager.CurrentLocation?.StarSystem}"); var filter = new EventStatisticsData { Event = JournalEventType.Docked }; var statistics = informationManager.GetEventStatistics(filter); var stat = statistics.FirstOrDefault(); Console.WriteLine(); Console.WriteLine( $"Most docked station: {stat?.StationName} in {stat?.StarSystem} ({stat?.Count} times)"); filter = new EventStatisticsData { Event = JournalEventType.FsdJump, StarSystem = "Sol" }; statistics = informationManager.GetEventStatistics(filter); Console.WriteLine(); Console.WriteLine("Ships used to visit Sol system:"); foreach (var statistic in statistics) { Console.WriteLine($"{statistic.Ship} ({statistic.Count} times)"); } Console.WriteLine(); Console.WriteLine("Waiting for new entries to be written..."); Console.WriteLine("Press ENTER at any time to exit"); Console.ReadLine(); informationManager.Stop(); } }
public List <EventStatisticsData> SelectStatistics(EventStatisticsData statisticsFilter) { lock (_lockObjecct) { var query = Connection.From <EventStatisticsEntry>().OrderByDescending(se => se.Count); query.WhereExpression = GetStatisticsWhereClause(statisticsFilter, false); var statisticEntries = Connection.Select(query); var statisticDatas = statisticEntries.Select(ConvertToData).ToList(); return(statisticDatas); } }
private int GetStatisticsCount( List <string> tokenNames, bool filterOnCurrentCommander, JournalEntry journalEntry, List <PropertyInfo> journalEntryProperties, CurrentData currentData, List <PropertyInfo> currentDataProperties) { var statisticsData = new EventStatisticsData { Commander = filterOnCurrentCommander ? _informationManager.CurrentCommander .Commander : null, Event = journalEntry.Event }; var statisticsDataProperties = statisticsData.GetType().GetProperties().ToList(); // Remove properties that are not allowed to be overridden statisticsDataProperties.RemoveWhere(prop => prop.Name == nameof(EventStatisticsData.Commander)); statisticsDataProperties.RemoveWhere(prop => prop.Name == nameof(EventStatisticsData.Event)); statisticsDataProperties.RemoveWhere(prop => prop.Name == nameof(EventStatisticsData.Count)); foreach (var statisticsDataProperty in statisticsDataProperties) { if (!tokenNames.Any( tokenName => tokenName.Equals(statisticsDataProperty.Name, StringComparison.OrdinalIgnoreCase))) { continue; } var journalEntryProperty = journalEntryProperties.FirstOrDefault(prop => prop.Name.Equals(statisticsDataProperty.Name)); if (journalEntryProperty != null) { statisticsDataProperty.SetValue(statisticsData, journalEntryProperty.GetValue(journalEntry)); continue; } var currentDataProperty = currentDataProperties.FirstOrDefault(prop => prop.Name.Equals(statisticsDataProperty.Name)); if (currentDataProperty != null) { statisticsDataProperty.SetValue(statisticsData, currentDataProperty.GetValue(currentData)); } } var count = _informationManager.GetEventStatisticsSum(statisticsData); return(count); }
private static void OnJournalEntryRead(object sender, JournalEntryEventArgs eventArgs) { if (!eventArgs.IsLive) { if (eventArgs.Filename == currentFilename) { return; } currentFilename = eventArgs.Filename; // Do not react on historical events. There may be thousands of them. var index = journalFilenames.IndexOf(eventArgs.Filename); if (index >= 0) { var percentCompleted = (int)(index * 100 / (float)journalFilenames.Count); Console.WriteLine($"{percentCompleted}% completed"); } return; } switch (eventArgs.JournalEntry.Event) { case JournalEventType.Docked: var dockedEntry = (DockedJournalEntry)eventArgs.JournalEntry; var filter = new EventStatisticsData { Commander = informationManager.CurrentCommander.Commander, Event = JournalEventType.Docked, StarSystem = dockedEntry.StarSystem, StationName = dockedEntry.StationName }; var statistics = informationManager.GetEventStatistics(filter); Console.WriteLine( $"Welcome to {dockedEntry.StationName}, Cmdr {informationManager.CurrentCommander.Commander}!"); var totalVisits = statistics.Sum(stat => stat.Count); var shipVisits = statistics .Where(stat => stat.Ship == informationManager.CurrentShip.Ship.ToString()) .Sum(stat => stat.Count); Console.WriteLine($"This is your visit #{totalVisits} (visit #{shipVisits} in current ship)."); break; default: Console.WriteLine($"{eventArgs.JournalEntry.Event} ({eventArgs.JournalEntry.Event.Description()})"); break; } }
private static EventStatisticsData ConvertToData(EventStatisticsEntry eventStatisticsEntry) { var statisticsData = new EventStatisticsData(); var dataType = typeof(EventStatisticsData); foreach (var property in typeof(IEventStatistics).GetProperties()) { var value = property.GetValue(eventStatisticsEntry, null); var dataProperty = dataType.GetProperty(property.Name); dataProperty?.SetValue(statisticsData, value, null); } statisticsData.Count = eventStatisticsEntry.Count; return(statisticsData); }