Beispiel #1
0
 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);
     }
 }
Beispiel #2
0
        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();
            }
        }
Beispiel #3
0
 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);
     }
 }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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;
            }
        }
Beispiel #6
0
        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);
        }