Esempio n. 1
0
        public void GetWebsiteDetailsTest()
        {
            // dummy data
            var dummyList = new List <ArtifactTest>();

            dummyList.Add(new ArtifactTest("Your retrospection for the 7/14/2015 - Microsoft Edge", "Microsoft Edge", "Your retrospection for the 7/14/2015"));
            dummyList.Add(new ArtifactTest("Your retrospection for the 7/15/2015 ?- Microsoft Edge", "Microsoft Edge", "Your retrospection for the 7/15/2015"));
            dummyList.Add(new ArtifactTest("SiriusXM - Channel Line up - Google Chrome", "chrome", "SiriusXM - Channel Line up"));
            dummyList.Add(new ArtifactTest("Grant access to Visual Studio Online for Power BI - Internet Explorer", "iexplore", "Grant access to Visual Studio Online for Power BI"));
            dummyList.Add(new ArtifactTest("Search | King County Library System | BiblioCommons - Mozilla Firefox", "firefox", "Search | King County Library System | BiblioCommons"));
            dummyList.Add(new ArtifactTest("ProductsWeb - Internet Explorer", "iexplore", "ProductsWeb"));
            dummyList.Add(new ArtifactTest("(1) WhatsApp Web - Internet Explorer", "iexplore", "WhatsApp Web"));
            dummyList.Add(new ArtifactTest("(2) WhatsApp Web ?- Microsoft Edge", "microsoftedge", "WhatsApp Web"));
            dummyList.Add(new ArtifactTest("(3) WhatsApp Web - Microsoft Edge", "microsoftedge", "WhatsApp Web"));
            dummyList.Add(new ArtifactTest("(4) WhatsApp Web - Google Chrome", "chrome", "WhatsApp Web"));
            dummyList.Add(new ArtifactTest("Testing.pptx [Geschuetzte Ansicht] - Mozilla Firefox", "firefox", "Testing.pptx"));
            dummyList.Add(new ArtifactTest("Testing.pptx [Geschuetzte Ansicht] (4) - Mozilla Firefox", "firefox", "Testing.pptx"));
            dummyList.Add(new ArtifactTest("Testing.pptx (4) (4) [Geschuetzte Ansicht] - Mozilla Firefox", "firefox", "Testing.pptx"));

            //dummyList.Add(new ArtifactTest("chrome", "Save as", ""));

            // run method
            foreach (var row in dummyList)
            {
                var website = WindowTitleWebsitesExtractor.GetWebsiteDetails(row.InputProcess, row.InputTitle);

                Debug.WriteLine(row.OutputExpected + " - vs - " + website);
                Assert.AreEqual(row.OutputExpected, website);
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Fetches the activities a developer has on his computer for a given date in an
        /// ordered list according to time. Each activity matched to a single window ** temporary **
        /// </summary>
        /// <param name="date"></param>
        /// <returns></returns>
        internal static List <WindowsActivity> GetDayWindowTitleData(DateTimeOffset date)
        {
            var orderedActivityList = new List <WindowsActivity>();

            try
            {
                var query = "SELECT tsStart, tsEnd, window, process, (strftime('%s', tsEnd) - strftime('%s', tsStart)) as 'durInSec' "
                            + "FROM " + Settings.DbTable + " "
                            + "WHERE " + Database.GetInstance().GetDateFilteringStringForQuery(VisType.Day, date, "tsStart") + " AND " + Database.GetInstance().GetDateFilteringStringForQuery(VisType.Day, date, "tsEnd") + " "
                            + "ORDER BY tsStart;";

                var table = Database.GetInstance().ExecuteReadQuery(query);

                if (table != null)
                {
                    WindowsActivity previousWindowsActivityEntry = null;

                    foreach (DataRow row in table.Rows)
                    {
                        // fetch items from database
                        var e = new WindowsActivity();
                        e.StartTime         = DateTime.Parse((string)row["tsStart"], CultureInfo.InvariantCulture);
                        e.EndTime           = DateTime.Parse((string)row["tsEnd"], CultureInfo.InvariantCulture);
                        e.DurationInSeconds = row.IsNull("durInSec") ? 0 : Convert.ToInt32(row["durInSec"], CultureInfo.InvariantCulture);
                        var processName = (string)row["process"];

                        // make window titles more readable (TODO: improve!)
                        var windowTitle = (string)row["window"];
                        windowTitle = WindowTitleWebsitesExtractor.GetWebsiteDetails(processName, windowTitle);
                        //windowTitle = WindowTitleArtifactExtractor.GetArtifactDetails(processName, windowTitle);
                        //windowTitle = WindowTitleCodeExtractor.GetProjectName(windowTitle);

                        // map process and window to activity
                        e.ActivityCategory = ProcessToActivityMapper.Map(processName, windowTitle);


                        // check if we add a as first item or not
                        if (previousWindowsActivityEntry != null)
                        {
                            e.WindowProcessList.Add(new WindowProcessItem(processName, windowTitle));
                            orderedActivityList.Add(e);
                        }
                        else // first item
                        {
                            orderedActivityList.Add(e);
                        }
                        previousWindowsActivityEntry = e;
                    }
                    table.Dispose();
                }
            }
            catch (Exception e)
            {
                Logger.WriteToLogFile(e);
            }

            return(orderedActivityList);
        }
Esempio n. 3
0
        /// <summary>
        /// Fetches the visited websites, cleanes it for the MinDuration.
        /// Hint: no need to sort, as they already comed sorted by duration.
        /// </summary>
        /// <param name="date"></param>
        /// <returns></returns>
        internal static List <TimeSpentItem> GetCleanedWebsites(DateTimeOffset date)
        {
            var maxWebsites      = 25;
            var websites         = WindowTitleWebsitesExtractor.GetWebsitesVisited(date);
            var websitesFiltered = websites.Where(w => w.DurationInMins > MinDurationInMins).Take(maxWebsites).ToList();

            var list = new List <TimeSpentItem>();

            foreach (var w in websitesFiltered)
            {
                var item = new TimeSpentItem(TimeSpentType.Website, w.ItemName, w.DurationInMins);
                list.Add(item);
            }

            return(list);
        }
Esempio n. 4
0
        /// <summary>
        /// Fetches the activities a developer has on his computer for a given date in an
        /// ordered list according to time.
        /// </summary>
        /// <param name="date"></param>
        /// <returns></returns>
        internal static List <WindowsActivity> GetDayTimelineData(DateTimeOffset date)
        {
            var orderedActivityList = new List <WindowsActivity>();

            try
            {
                var query = "SELECT t1.time as 'tsStart', t2.time as 'tsEnd', t1.window, t1.process, (strftime('%s', t2.time) - strftime('%s', t1.time)) as 'durInSec' " //t1.id, t1.time as 'from', t2.time as 'to'
                            + "FROM " + Settings.DbTable + " t1 LEFT JOIN " + Settings.DbTable + " t2 on t1.id + 1 = t2.id "
                            + "WHERE " + Database.GetInstance().GetDateFilteringStringForQuery(VisType.Day, date, "t1.time") + " and " + Database.GetInstance().GetDateFilteringStringForQuery(VisType.Day, date, "t2.time") + " "
                            + "ORDER BY t1.time;";

                var table = Database.GetInstance().ExecuteReadQuery(query);

                WindowsActivity _previousWindowsActivityEntry = null;

                foreach (DataRow row in table.Rows)
                {
                    // fetch items from database
                    var e = new WindowsActivity();
                    e.StartTime         = DateTime.Parse((string)row["tsStart"], CultureInfo.InvariantCulture);
                    e.EndTime           = DateTime.Parse((string)row["tsEnd"], CultureInfo.InvariantCulture);
                    e.DurationInSeconds = row.IsNull("durInSec") ? 0 : Convert.ToInt32(row["durInSec"], CultureInfo.InvariantCulture);
                    var processName = (string)row["process"];

                    // make window titles more readable (TODO: improve!)
                    var windowTitle = (string)row["window"];
                    windowTitle = WindowTitleWebsitesExtractor.GetWebsiteDetails(processName, windowTitle);
                    windowTitle = WindowTitleArtifactExtractor.GetArtifactDetails(processName, windowTitle);
                    windowTitle = WindowTitleCodeExtractor.GetProjectName(windowTitle);

                    // map process and window to activity
                    ProcessToActivityMapper.Map(e, processName, windowTitle);

                    // check if we add a new item, or merge with the previous one
                    if (_previousWindowsActivityEntry != null)
                    {
                        // previous item is same, update it (duration and tsEnd)
                        if (e.ActivityCategory == _previousWindowsActivityEntry.ActivityCategory)
                        {
                            var lastItem = orderedActivityList.Last();
                            lastItem.DurationInSeconds += e.DurationInSeconds;
                            lastItem.EndTime            = e.EndTime;
                            lastItem.WindowProcessList.Add(new WindowProcessItem(processName, windowTitle));
                        }
                        // previous item is different, add it to list
                        else
                        {
                            e.WindowProcessList.Add(new WindowProcessItem(processName, windowTitle));
                            orderedActivityList.Add(e);
                        }
                    }
                    else // first item
                    {
                        orderedActivityList.Add(e);
                    }
                    _previousWindowsActivityEntry = e;
                }
                table.Dispose();
            }
            catch (Exception e)
            {
                Logger.WriteToLogFile(e);
            }

            return(orderedActivityList);
        }
Esempio n. 5
0
        /// <summary>
        /// Fetches window titles organized into specifed blocks of time
        /// </summary>
        /// <param name="date"></param>
        /// <param name="numSecs"></param>
        /// <returns></returns>
        internal static List <List <string> > GetWindowTitles(int numSecs, DateTimeOffset date)
        {
            int currBlock   = 0; // current time block
            int currentTime = 0;

            List <List <string> > titles = new List <List <string> >();

            try
            {
                var query = "SELECT tsStart, tsEnd, window, process, (strftime('%s', tsEnd) - strftime('%s', tsStart)) as 'durInSec' "
                            + "FROM " + Settings.DbTable + " "
                            + "WHERE " + Database.GetInstance().GetDateFilteringStringForQuery(VisType.Day, date, "tsStart") + " AND " + Database.GetInstance().GetDateFilteringStringForQuery(VisType.Day, date, "tsEnd") + " "
                            + "ORDER BY tsStart;";

                var table = Database.GetInstance().ExecuteReadQuery(query);

                if (table != null)
                {
                    foreach (DataRow row in table.Rows)
                    {
                        // fetch items from database
                        int duration    = row.IsNull("durInSec") ? 0 : Convert.ToInt32(row["durInSec"], CultureInfo.InvariantCulture); // in seconds
                        var processName = (string)row["process"];
                        var startTime   = DateTime.Parse((string)row["tsStart"], CultureInfo.InvariantCulture);
                        var endTime     = DateTime.Parse((string)row["tsEnd"], CultureInfo.InvariantCulture);

                        // make window titles more readable (TODO: improve!)
                        var windowTitle = (string)row["window"];
                        windowTitle = WindowTitleWebsitesExtractor.GetWebsiteDetails(processName, windowTitle);


                        int startBlock = currentTime / numSecs; // block of time in which the window title began
                        currentTime += duration;
                        int endBlock = currentTime / numSecs;   // block of time in which the window title ended


                        // add the window title to all blocks of time it occured in
                        for (int i = startBlock; i <= endBlock; i++)
                        {
                            if (i >= titles.Count) // if there is no block for this time window in the list
                            {
                                List <string> newBlock = new List <string>();
                                newBlock.Add(windowTitle + " - (" + processName + ")");
                                titles.Add(newBlock);
                            }
                            else
                            {
                                titles[i].Add(windowTitle + " - (" + processName + ")");
                            }
                            currBlock++;
                        }
                    }
                    table.Dispose();
                }
            }
            catch (Exception e)
            {
                Logger.WriteToLogFile(e);
            }

            return(titles);
        }