public void DeserializeCSV(String input)
        {
            StreamReader data    = new StreamReader(input);
            String       version = data.ReadLine();

            if (version == Constants.Version1509 ||
                version == Constants.Version1510)
            {
                // Skip over the headers
                data.ReadLine();

                var consoleData = new PerConsoleData();
                m_perConsoleData.Add("Console", consoleData);

                while (!data.EndOfStream)
                {
                    String          row  = data.ReadLine();
                    ServiceCallItem item = ServiceCallItem.FromCSV1509(row);
                    item.m_logVersion = version;
                    if (item != null)
                    {
                        if (!consoleData.m_servicesHistory.ContainsKey(item.m_host))
                        {
                            consoleData.m_servicesHistory.Add(item.m_host, new LinkedList <ServiceCallItem>());
                        }
                        consoleData.m_servicesHistory[item.m_host].AddLast(item);
                    }
                }

                foreach (var endpoint in consoleData.m_servicesHistory)
                {
                    consoleData.m_servicesStats.Add(endpoint.Key, new ServiceCallStats(endpoint.Value));
                }
            }
        }
        public void DeserializeJson(String input)
        {
            String data = File.ReadAllText(input);

            data = "{\"Data\":" + data + "}";
            XmlDocument doc = JsonConvert.DeserializeXmlNode(data, "Root");

            var consoleData = new PerConsoleData();

            m_perConsoleData.Add("Console", consoleData);

            //gather data from every endpoint
            foreach (XmlNode endpointNode in doc.FirstChild.ChildNodes)
            {
                String endpointName = endpointNode.FirstChild.InnerText;

                for (int j = 1; j < endpointNode.ChildNodes.Count; ++j)
                {
                    XmlNode         itemNode = endpointNode.ChildNodes[j];
                    ServiceCallItem item     = ServiceCallItem.FromJson(itemNode);
                    item.m_host = endpointName;
                    if (!consoleData.m_servicesHistory.ContainsKey(item.m_host))
                    {
                        consoleData.m_servicesHistory.Add(item.m_host, new LinkedList <ServiceCallItem>());
                    }
                    consoleData.m_servicesHistory[item.m_host].AddLast(item);
                }
            }

            foreach (var endpoint in consoleData.m_servicesHistory)
            {
                consoleData.m_servicesStats.Add(endpoint.Key, new ServiceCallStats(endpoint.Value));
            }
        }
        public void DeserializeFiddlerTrace(String filePath, String customAgent)
        {
            // Open the SAZ
            var archive = System.IO.Compression.ZipFile.Open(filePath, ZipArchiveMode.Read);

            // Group the archive entries by frame number
            var result = from e in archive.Entries
                         where e.Name.Contains("_c.txt") || e.Name.Contains("_s.txt") || e.Name.Contains("_m.xml")
                         group e by Utils.GetFrameNumber(e.Name) into g
                         select new { Frame = g.Key, Data = g };

            m_dataTelemetry.m_totalCalls = result.Count();

            List <ServiceCallItem> frameData = new List <ServiceCallItem>();

            int frameNumber = 1;

            // Process data per frame
            foreach (var group in result)
            {
                // Grab the individual files
                ZipArchiveEntry cFileArchive = group.Data.ElementAt(0);
                ZipArchiveEntry mFileArchive = group.Data.ElementAt(1);
                ZipArchiveEntry sFileArchive = group.Data.ElementAt(2);

                ServiceCallItem frame = null;

                System.Diagnostics.Debug.WriteLine("Analyzing Frame# " + frameNumber);
                frameNumber++;

                frame = ServiceCallItem.FromFiddlerFrame((UInt32)group.Frame, cFileArchive, mFileArchive, sFileArchive, o => m_allEndpoints || Utils.IsAnalyzedService(o, customAgent));

                // If this is not an Xbox Service Endpoint that we are checking, then move along.
                if (frame == null)
                {
                    System.Diagnostics.Debug.WriteLine("Skipping\r\n");
                    continue;
                }
                else
                {
                    System.Diagnostics.Debug.WriteLine("Processing Call\r\n");
                }

                frameData.Add(frame);
                m_dataTelemetry.m_callsProcessed++;
            }

            var consoleGroups = from f in frameData
                                group f by f.m_consoleIP;

            foreach (var consoleFrames in consoleGroups.Where(g => g.Key != String.Empty))
            {
                var consoleData = new PerConsoleData();

                var xboxServiceFrames = consoleFrames.GroupBy(f => f.m_host)
                                        .Select(group => new { Host = group.Key, History = group.AsEnumerable() });

                consoleData.m_servicesHistory = xboxServiceFrames.ToDictionary(g => g.Host, g => new LinkedList <ServiceCallItem>(g.History.OrderBy(call => call.m_reqTimeUTC)));

                // Xbox telemetry endpoint
                if (consoleData.m_servicesHistory.ContainsKey("data-vef.xboxlive.com"))
                {
                    ConvertCS1ToEvent(consoleData.m_servicesHistory);
                }

                // Windows Telemetry endpoint
                if (consoleData.m_servicesHistory.Any(k => k.Key.Contains(".data.microsoft.com")))
                {
                    ConvertCS2ToEvent(consoleData.m_servicesHistory);
                }

                // clear empty items
                consoleData.m_servicesHistory = consoleData.m_servicesHistory.Where(o => o.Value.Count > 0).ToDictionary(x => x.Key, x => x.Value);

                foreach (var endpoint in consoleData.m_servicesHistory)
                {
                    consoleData.m_servicesStats.Add(endpoint.Key, new ServiceCallStats(endpoint.Value));
                }

                m_perConsoleData.Add(consoleFrames.Key, consoleData);
            }
        }