Beispiel #1
0
        /// <summary>
        /// Recursively scans tree for CanvasData at the specified render depth which intersects with the specified time period.
        /// Canvas Data is not pruned. All canvas data will be returned for a particular element, even if some of that data falls outside the time window.
        /// </summary>
        /// <param name="start">the start of the time period to scan</param>
        /// <param name="end">the end time of the periodd to scan</param>
        /// <param name="renderUnit">the unit size at which to render elements</param>
        /// <returns></returns>
        public CanvasData GetCanvasData(DateTime start, DateTime end, FrameNodeLevel renderUnit, FrameNodeLevel displayUnit)
        {
            Debug.Assert(renderUnit != FrameNodeLevel.Root); //ensure in range

            if (start < StartTime)
            {
                start = StartTime;
            }
            if (end > EndTime)
            {
                end = EndTime;
            }
            FileManager.CountCache.RequestCounts(start, end, renderUnit);

            List <FrameElement> elements = GenerateCanvasElements(start, end, renderUnit); //fill canvas with relevant elements

            FileManager.CountCache.CollectCounts(elements);

            var data = new CanvasData(start, end, renderUnit, displayUnit); //create a new, empty canvas

            foreach (var element in elements)
            {
                data.AddFrameElement(element);
            }

            return(data);
        }
Beispiel #2
0
        /// <summary>
        /// Creates a new CanvasData object, based on user specifications
        /// </summary>
        /// <param name="startTime">The time at wwhich the canvas view should start</param>
        /// <param name="endTime">The time at wwhich the canvas view should end</param>
        /// <param name="renderUnit">The basic rendering unit to use</param>
        /// <param name="displayUnit">The display unit to use</param>
        /// <param name="filterCount"></param>
        public CanvasData(DateTime startTime, DateTime endTime, FrameNodeLevel renderUnit, FrameNodeLevel displayUnit)
        {
            DisplayUnit = displayUnit;
            StartTime   = startTime;
            EndTime     = endTime;
            RenderUnit  = renderUnit;

            DataVolume    = new GraphData();
            PacketCount   = new GraphData();
            MatchingCount = new List <GraphData>();

            for (int k = 0; k < CanvasManager.FileManager.TotalFilters; k++)
            {
                MatchingCount.Add(new GraphData());
            }

            ScaleData = new GraphScaleData(displayUnit, startTime, endTime, CanvasManager.FileManager.TotalFilters);

            switch (displayUnit)
            {
            case FrameNodeLevel.Root:
                Description = "Global View: " + startTime.ToString(CultureInfo.InvariantCulture) + " - " + endTime.ToString(CultureInfo.InvariantCulture);
                break;

            case FrameNodeLevel.Year:
                Description = "Year View: " + startTime.Year;
                break;

            case FrameNodeLevel.Month:
                Description = "Month View: " + MonthString(startTime.Month) + " " + startTime.Year;
                break;

            case FrameNodeLevel.Day:
                Description = "Day View: " + DayString(startTime.Day) + " " + MonthString(startTime.Month) + " " + startTime.Year;
                break;

            case FrameNodeLevel.Hour:
                Description = "Hour View: " + TimeString(startTime.Hour) + " - " + TimeString(endTime.Hour) + " " + DayString(startTime.Day) + " " + MonthString(startTime.Month) + " " + startTime.Year;
                break;

            case FrameNodeLevel.PartHour:
                Description = "Part Hour View: " + TimeString(startTime.Hour, startTime.Minute) + " - " + TimeString(endTime.Hour, endTime.Minute) + " " + DayString(startTime.Day) + " " + MonthString(startTime.Month) + " " + startTime.Year;
                break;

            case FrameNodeLevel.Minute:
                Description = "Minute View: " + TimeString(startTime.Hour, startTime.Minute) + " - " + TimeString(endTime.Hour, endTime.Minute) + " " + DayString(startTime.Day) + " " + MonthString(startTime.Month) + " " + startTime.Year;
                break;

            default:
                throw new ArgumentOutOfRangeException("displayUnit");
            }
        }
 public void RequestCounts(DateTime start, DateTime end, FrameNodeLevel renderUnit)
 {
     if (FilterFiles.Count == 0)
     {
         return;
     }
     if (thread != null)
     {
         MessageBox.Show("Error: Count Request already in progress");
         return;
     }
     current = new CountProcessOptions(start, end, renderUnit);
     thread  = new Thread(ProcessFilterFiles);
     thread.Start(current);
 }
        private DateTime Increment(DateTime time, FrameNodeLevel renderUnit)
        {
            DateTime tmp;

            switch (renderUnit)
            {
            case FrameNodeLevel.Year:
                tmp = new DateTime(time.Year + 1, 1, 1);
                break;

            case FrameNodeLevel.Month:
                tmp = new DateTime(time.Year, time.Month, 1).AddMonths(1);
                break;

            case FrameNodeLevel.Day:
                tmp = new DateTime(time.Year, time.Month, time.Day).AddDays(1);
                break;

            case FrameNodeLevel.Hour:
                tmp = new DateTime(time.Year, time.Month, time.Day, time.Hour, 0, 0).AddHours(1);
                break;

            case FrameNodeLevel.PartHour:
                tmp = new DateTime(time.Year, time.Month, time.Day, time.Hour, time.Minute - (time.Minute % 5), 0).AddMinutes(5);
                break;

            case FrameNodeLevel.Minute:
                tmp = new DateTime(time.Year, time.Month, time.Day, time.Hour, time.Minute, 0).AddMinutes(1);
                break;

            case FrameNodeLevel.Second:
                tmp = new DateTime(time.Year, time.Month, time.Day, time.Hour, time.Minute, time.Second).AddSeconds(1);
                break;

            default:
                throw new ArgumentOutOfRangeException("renderUnit invalid: Root cannot be rendered.");
            }
            return(tmp);
        }
Beispiel #5
0
        private bool SafeEquals(DateTime one, DateTime two, FrameNodeLevel unitDifference)
        {
            long errorTolerance;

            switch (unitDifference)
            {
            case FrameNodeLevel.Year:
            case FrameNodeLevel.Month:
                errorTolerance = new TimeSpan(1, 0, 0, 0).Ticks;
                break;

            case FrameNodeLevel.Day:
                errorTolerance = new TimeSpan(0, 1, 0, 0).Ticks;
                break;

            case FrameNodeLevel.Hour:
                errorTolerance = new TimeSpan(0, 0, 1, 0).Ticks;
                break;

            case FrameNodeLevel.PartHour:
                errorTolerance = new TimeSpan(0, 0, 0, 10).Ticks;
                break;

            case FrameNodeLevel.Minute:
                errorTolerance = new TimeSpan(0, 0, 0, 1).Ticks;
                break;

            case FrameNodeLevel.Second:
                errorTolerance = new TimeSpan(0, 0, 0, 0, 100).Ticks;
                break;

            default:
                throw new ArgumentOutOfRangeException("unitDifference");
            }

            return(Math.Abs(one.Ticks - two.Ticks) < errorTolerance);
        }
Beispiel #6
0
 public static FrameElement FindFrameElement(DateTime start, FrameNodeLevel level)
 {
     return(TimeTree.GetFrameElement(start, level));
 }
Beispiel #7
0
 public static FrameElement FindFrameElement(float startOffset, DateTime zeroTime, FrameNodeLevel level)
 {
     return(TimeTree.GetFrameElement(zeroTime.AddSeconds(startOffset), level));
 }
Beispiel #8
0
 public static FrameElement FindFrameElement(float startOffset, FrameNodeLevel level)
 {
     return(FindFrameElement(startOffset, FileManager.StartTime, level));
 }
Beispiel #9
0
        /// <summary>
        /// Generates and stores the default scaling information for the current canvas
        /// </summary>
        /// <param name="displayUnit">the unit of time covered by the viewport at one time</param>
        /// <param name="startTime">the time at which the canvas starts</param>
        /// <param name="endTime">the time at which the canvas ends</param>
        public GraphScaleData(FrameNodeLevel displayUnit, DateTime startTime, DateTime endTime, int totalFilters = 0)
        {
            DisplayUnit = displayUnit;
            Debug.Assert(displayUnit != FrameNodeLevel.Second);
            DateTime spanStart;

            _empty = true; //graph is initially empty
            TimeSpan span;

            switch (displayUnit)
            {
            case FrameNodeLevel.Root:
                span      = endTime.Subtract(startTime);
                spanStart = CanvasManager.FileManager.StartTime;
                break;

            case FrameNodeLevel.Year:
                spanStart = new DateTime(startTime.Year, 1, 1);
                span      = new DateTime(startTime.Year + 1, 1, 1).Subtract(spanStart);

                break;

            case FrameNodeLevel.Month:
                spanStart = new DateTime(startTime.Year, startTime.Month, 1);
                span      = spanStart.AddMonths(1).Subtract(spanStart);
                break;

            case FrameNodeLevel.Day:
                spanStart = new DateTime(startTime.Year, startTime.Month, startTime.Day);
                span      = spanStart.AddDays(1).Subtract(spanStart);
                break;

            case FrameNodeLevel.Hour:
                spanStart = new DateTime(startTime.Year, startTime.Month, startTime.Day, startTime.Hour, 0, 0);
                span      = spanStart.AddHours(1).Subtract(spanStart);
                break;

            case FrameNodeLevel.PartHour:
                spanStart = new DateTime(startTime.Year, startTime.Month, startTime.Day, startTime.Hour,
                                         startTime.Minute - (startTime.Minute % 5), 0);
                span = spanStart.AddMinutes(5).Subtract(spanStart);
                break;

            case FrameNodeLevel.Minute:
                spanStart = new DateTime(startTime.Year, startTime.Month, startTime.Day, startTime.Hour,
                                         startTime.Minute, 0);
                span = spanStart.AddMinutes(1).Subtract(spanStart);
                break;

            default:
                throw new ArgumentOutOfRangeException("displayUnit", displayUnit, "GraphScaleData Constructor: RenderUnit out of range. Seconds cannot be subdivided, and are not valid.");
            }
            XShift       = (float)startTime.Subtract(spanStart).TotalSeconds;
            XShift      -= CanvasManager.TimeToOffset(spanStart);
            BaseScale    = (float)(span.TotalSeconds);
            TotalPackets = 0;
            TotalData    = 0;
            VertexCount  = 0;

            TotalMatchingPackets = new List <long>(totalFilters);
            MinMatchingCount     = new List <long>(totalFilters);
            MaxMatchingCount     = new List <long>(totalFilters);
            for (int k = 0; k < totalFilters; k++)
            {
                TotalMatchingPackets.Add(0);
                MinMatchingCount.Add(0);
                MaxMatchingCount.Add(0);
            }
        }
 public CountProcessOptions(DateTime start, DateTime end, FrameNodeLevel renderUnit) : this()
 {
     this.Start      = start;
     this.End        = end;
     this.RenderUnit = renderUnit;
 }
Beispiel #11
0
        public void Generate(CanvasData data)
        {
            Debug.Assert(data.RenderUnit != FrameNodeLevel.Root); //cannot render at the root level

            var start = data.StartTime;
            var end   = data.EndTime;

            MajorOffsets.Clear();
            MinorOffsets.Clear();

            DateTime currMajor, currMinor, tmp;

            switch (data.RenderUnit)
            {
            case FrameNodeLevel.Year:
            case FrameNodeLevel.Month:
                currMinor = new DateTime(start.Year, 1, 1);
                tmp       = new DateTime(end.Year, 1, 1);
                if (end != tmp)
                {
                    end = tmp.AddYears(1);
                }

                while (currMinor <= end)
                {
                    MinorOffsets.Add(CanvasManager.TimeToOffset(currMinor));
                    currMinor = currMinor.AddYears(1);
                }
                MinorTickLevel = FrameNodeLevel.Year;
                break;

            case FrameNodeLevel.Day:
                currMajor = new DateTime(start.Year, 1, 1);
                currMinor = currMajor;     // end of first month
                tmp       = new DateTime(end.Year, 1, 1);
                if (end != tmp)
                {
                    end = tmp.AddYears(1);
                }

                while (currMajor <= end)
                {
                    MajorOffsets.Add(CanvasManager.TimeToOffset(currMajor));
                    currMajor = currMajor.AddYears(1);
                    while (currMinor < currMajor)
                    {
                        MinorOffsets.Add(CanvasManager.TimeToOffset(currMinor));
                        currMinor = currMinor.AddMonths(1);
                    }
                }
                MinorTickLevel = FrameNodeLevel.Month;
                break;

            case FrameNodeLevel.Hour:
                currMajor = new DateTime(start.Year, start.Month, 1);
                currMinor = currMajor;     // 2nd day
                tmp       = new DateTime(end.Year, end.Month, 1);
                if (end != tmp)
                {
                    end = tmp.AddMonths(1);
                }

                while (currMajor <= end)
                {
                    MajorOffsets.Add(CanvasManager.TimeToOffset(currMajor));
                    currMajor = currMajor.AddMonths(1);
                    while (currMinor < currMajor)
                    {
                        MinorOffsets.Add(CanvasManager.TimeToOffset(currMinor));
                        currMinor = currMinor.AddDays(1);
                    }
                }
                MinorTickLevel = FrameNodeLevel.Day;
                break;

            case FrameNodeLevel.PartHour:
                currMajor = new DateTime(start.Year, start.Month, start.Day);
                currMinor = currMajor;     // 2nd day
                tmp       = new DateTime(end.Year, end.Month, end.Day);
                if (end != tmp)
                {
                    end = tmp.AddDays(1);
                }

                while (currMajor <= end)
                {
                    MajorOffsets.Add(CanvasManager.TimeToOffset(currMajor));
                    currMajor = currMajor.AddDays(1);
                    while (currMinor < currMajor)
                    {
                        MinorOffsets.Add(CanvasManager.TimeToOffset(currMinor));
                        currMinor = currMinor.AddHours(1);
                    }
                }
                MinorTickLevel = FrameNodeLevel.Hour;
                break;

            case FrameNodeLevel.Minute:
                currMajor = new DateTime(start.Year, start.Month, start.Day, start.Hour, 0, 0);
                currMinor = currMajor;     // 2nd day
                tmp       = new DateTime(end.Year, end.Month, end.Day, start.Hour, 0, 0);
                if (end != tmp)
                {
                    end = tmp.AddHours(1);
                }

                while (currMajor <= end)
                {
                    MajorOffsets.Add(CanvasManager.TimeToOffset(currMajor));
                    currMajor = currMajor.AddHours(1);
                    while (currMinor < currMajor)
                    {
                        MinorOffsets.Add(CanvasManager.TimeToOffset(currMinor));
                        currMinor = currMinor.AddMinutes(10);
                    }
                }
                MinorTickLevel = FrameNodeLevel.PartHour;
                break;

            case FrameNodeLevel.Second:
                currMajor = new DateTime(start.Year, start.Month, start.Day, start.Hour, start.Minute - (start.Minute % 5), 0);
                currMinor = currMajor;     // 2nd day
                tmp       = new DateTime(end.Year, end.Month, end.Day, end.Hour, end.Minute - (start.Minute % 5), 0);
                if (end != tmp)
                {
                    end = tmp.AddMinutes(5);
                }

                while (currMajor <= end)
                {
                    MajorOffsets.Add(CanvasManager.TimeToOffset(currMajor));
                    currMajor = data.DisplayUnit == FrameNodeLevel.Minute ? currMajor.AddMinutes(1) : currMajor.AddMinutes(5);
                    while (currMinor < currMajor)
                    {
                        MinorOffsets.Add(CanvasManager.TimeToOffset(currMinor));
                        currMinor = data.DisplayUnit == FrameNodeLevel.Minute ? currMinor.AddSeconds(1) : currMinor.AddMinutes(1);
                    }
                }
                MinorTickLevel = FrameNodeLevel.Minute;
                break;

            default:
                throw new ArgumentOutOfRangeException("axisMajorLevel");
            }

            //generate major axis
            if (MajorOffsets.Count > 0)
            {
                _majorTick = new Vector2[MajorOffsets.Count * 2];
                _majorGrid = new Vector2[MajorOffsets.Count * 2];

                for (int k = 0; k < MajorOffsets.Count; k++)
                {
                    _majorTick[k * 2] = new Vector2(MajorOffsets[k], 0);
                    _majorGrid[k * 2] = new Vector2(MajorOffsets[k], 0);

                    _majorTick[k * 2 + 1] = new Vector2(MajorOffsets[k], -CanvasManager.TickSize * 2 * CanvasManager.PixelSize.X);
                    _majorGrid[k * 2 + 1] = new Vector2(MajorOffsets[k], 2);
                }

                _tickMajorBuffer.BindData(_majorTick);
                _gridMajorBuffer.BindData(_majorGrid);
            }
            else
            {
                _majorTick = null;
            }

            //generate minor axis if possible
            if (MinorOffsets.Count > 0)
            {
                _minorTick = new Vector2[MinorOffsets.Count * 2];
                _minorGrid = new Vector2[MinorOffsets.Count * 2];

                for (int k = 0; k < MinorOffsets.Count; k++)
                {
                    _minorTick[k * 2] = new Vector2(MinorOffsets[k], 0);
                    _minorGrid[k * 2] = new Vector2(MinorOffsets[k], 0);

                    _minorTick[k * 2 + 1] = new Vector2(MinorOffsets[k],
                                                        -(CanvasManager.TickSize * 2) * MinorTickScale * CanvasManager.PixelSize.X);
                    _minorGrid[k * 2 + 1] = new Vector2(MinorOffsets[k], 2);
                }
                _tickMinorBuffer.BindData(_minorTick);
                _gridMinorBuffer.BindData(_minorGrid);
            }
            else
            {
                _minorTick = null;
            }
        }
Beispiel #12
0
        public FrameElement GetFrameElement(DateTime start, FrameNodeLevel level)
        {
            FrameElement element;
            DateTime     end;

            switch (level)
            {
            case FrameNodeLevel.Year:
                if (SafeEquals(start, new DateTime(start.Year, 1, 1), level))
                {
                    start = new DateTime(start.Year, 1, 1);
                }
                else
                {
                    start = new DateTime(start.Year + 1, 1, 1);      //if error caused year value to decrease
                }
                end = start.AddYears(1);
                break;

            case FrameNodeLevel.Month:
                if (SafeEquals(start, new DateTime(start.Year, start.Month, 1), level))
                {
                    start = new DateTime(start.Year, start.Month, 1);
                }
                else
                {
                    start = new DateTime(start.Year, start.Month, 1).AddMonths(1);      //if error caused year value to decrease
                }
                end = start.AddMonths(1);
                break;

            case FrameNodeLevel.Day:
                if (SafeEquals(start, new DateTime(start.Year, start.Month, start.Day), level))
                {
                    start = new DateTime(start.Year, start.Month, start.Day);
                }
                else
                {
                    start = new DateTime(start.Year, start.Month, start.Day).AddMonths(1);      //if error caused year value to decrease
                }
                end = start.AddDays(1);
                break;

            case FrameNodeLevel.Hour:
                if (SafeEquals(start, new DateTime(start.Year, start.Month, start.Day, start.Hour, 0, 0), level))
                {
                    start = new DateTime(start.Year, start.Month, start.Day, start.Hour, 0, 0);
                }
                else
                {
                    start = new DateTime(start.Year, start.Month, start.Day, start.Hour, 0, 0).AddHours(1);      //if error caused year value to decrease
                }
                end = start.AddHours(1);
                break;

            case FrameNodeLevel.PartHour:
                if (SafeEquals(start, new DateTime(start.Year, start.Month, start.Day, start.Hour, start.Minute - (start.Minute % 5), 0), level))
                {
                    start = new DateTime(start.Year, start.Month, start.Day, start.Hour, start.Minute - (start.Minute % 5), 0);
                }
                else
                {
                    start = new DateTime(start.Year, start.Month, start.Day, start.Hour, start.Minute - (start.Minute % 5), 0).AddMinutes(5);    //if error caused year value to decrease
                }
                end = start.AddMinutes(10);
                break;

            case FrameNodeLevel.Minute:
                if (SafeEquals(start, new DateTime(start.Year, start.Month, start.Day, start.Hour, start.Minute, 0), level))
                {
                    start = new DateTime(start.Year, start.Month, start.Day, start.Hour, start.Minute, 0);
                }
                else
                {
                    start = new DateTime(start.Year, start.Month, start.Day, start.Hour, start.Minute, 0).AddMinutes(1);      //if error caused year value to decrease
                }
                end = start.AddMinutes(1);
                break;

            case FrameNodeLevel.Second:
                if (SafeEquals(start, new DateTime(start.Year, start.Month, start.Day, start.Hour, start.Minute, start.Second), level))
                {
                    start = new DateTime(start.Year, start.Month, start.Day, start.Hour, start.Minute, start.Second);
                }
                else
                {
                    start = new DateTime(start.Year, start.Month, start.Day, start.Hour, start.Minute, start.Second).AddSeconds(1);      //if error caused year value to decrease
                }
                end = start.AddSeconds(1);
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            return(FindFrameElement(start, end, level, out element) ? element : null);
        }
Beispiel #13
0
        protected internal bool FindFrameElement(DateTime start, DateTime end, FrameNodeLevel level, out FrameElement element)
        {
            element = null;
            if (start >= EndTime || end <= StartTime)
            {
                return(false);
            }

            if (level == Level)
            {
                bool test;
                switch (level)
                {
                case FrameNodeLevel.Year:
                    test = start.Year == StartTime.Year;
                    break;

                case FrameNodeLevel.Month:
                    test = start.Year == StartTime.Year && start.Month == StartTime.Month;
                    break;

                case FrameNodeLevel.Day:
                    test = start.Date == StartTime.Date;
                    break;

                case FrameNodeLevel.Hour:
                    test = start.Date == StartTime.Date && start.Hour == StartTime.Hour;
                    break;

                case FrameNodeLevel.PartHour:
                    test = start.Date == StartTime.Date && start.Hour == StartTime.Hour && start.Minute - (start.Minute % 5) == StartTime.Minute - (StartTime.Minute % 5);
                    break;

                case FrameNodeLevel.Minute:
                    test = start.Date == StartTime.Date && start.Hour == StartTime.Hour && start.Minute == StartTime.Minute;
                    break;

                case FrameNodeLevel.Second:
                    test = start == StartTime;
                    break;

                default:
                    throw new ArgumentOutOfRangeException("level");
                }
                if (test)
                {
                    element = this;
                    return(true);
                }
                return(false);
            }

            if ((int)level > (int)Level && start <= EndTime && end >= StartTime) //check children
            {
                foreach (FrameElement child in Children)
                {
                    if (child.FindFrameElement(start, end, level, out element))
                    {
                        return(true);
                    }
                }
            }
            return(false);
        }
Beispiel #14
0
        /// <summary>
        /// Internal recursive method to build a graph canvas over a specified period at the the specified depth
        /// </summary>
        /// <param name="start">the start of the period to draw</param>
        /// <param name="end">the end of the period to draw</param>
        /// <param name="renderUnit">the depth at which to render</param>
        /// <param name="data">the canvas to fill</param>
        protected internal List <FrameElement> GenerateCanvasElements(DateTime start, DateTime end, FrameNodeLevel renderUnit)
        {
            Debug.Assert(Level != FrameNodeLevel.Second);

            //if definitely overlaps to some degree
            if (end <= StartTime || start >= EndTime)
            {
                return(new List <FrameElement>());
            }

            if (Children.Count == 0)
            {
                FileManager.FillFrameElement(this);
            }

            var valid = Children.Where(c => end > c.StartTime && start < c.EndTime).ToList();

            return(Children[0].Level == renderUnit
                ? valid
                : valid.SelectMany(v => v.GenerateCanvasElements(start, end, renderUnit)).ToList());
        }