Ejemplo n.º 1
0
        public ProviderDefinitionDescription(IXPathNavigable inputProvider, StringTable strings)
        {
            if (strings == null)
            {
                throw new ArgumentNullException("strings");
            }

            if (inputProvider == null)
            {
                throw new ArgumentNullException("inputProvider");
            }

            XmlElement provider = inputProvider as XmlElement;

            if (provider == null)
            {
                throw new ArgumentException(StringResources.ETLReaderError_InvalidXmlElement_InputProvider);
            }

            this.guid = new Guid(provider.GetAttribute("guid"));
            bool wellKnownProviderId = WellKnownProviderList.IsWellKnownProvider(this.guid);
            bool dynamicManifest     = WellKnownProviderList.IsDynamicProvider(this.guid);

            this.name   = provider.GetAttribute("name");
            this.events = new Dictionary <int, EventDefinitionDescription>();

            XmlElement mapElements = provider["maps"];

            this.valueMaps = new ValueMaps(mapElements, strings);

            XmlElement eventElements   = provider["events"];
            XmlElement templates       = provider["templates"];
            string     eventSourceName = dynamicManifest ? this.name : null;

            foreach (XmlElement evt in eventElements.GetElementsByTagName("event"))
            {
                string     tid      = evt.GetAttribute("template");
                XmlElement template = null;

                foreach (XmlElement t in templates.GetElementsByTagName("template"))
                {
                    if (tid == t.GetAttribute("tid"))
                    {
                        template = t;
                        break;
                    }
                }

                var eventDef = new EventDefinitionDescription(evt, template, strings, wellKnownProviderId, eventSourceName);

                // We are not using Version information as key here. This is intentional while we make some structural changes
                // to handle scenarios where a single file can have events with multiple versions. Till these changes can materialize,
                // we have to handle scenario where we have same events with multiple versions in the same .etl file.
                this.events.Add(eventDef.Id, eventDef);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Processes an EventSource event embedded in eventstream.
        /// </summary>
        /// <param name="eventRecord"></param>
        /// <returns>true if its an eventsource event</returns>
        private bool ProcessEventSourceEvent(EventRecord eventRecord)
        {
            if (WellKnownProviderList.IsDynamicProvider(eventRecord.EventHeader.ProviderId))
            {
                if (EventSourceHelper.CheckForDynamicManifest(eventRecord.EventHeader.EventDescriptor))
                {
                    ApplicationDataReader reader = new ApplicationDataReader(eventRecord.UserData,
                                                                             eventRecord.UserDataLength);
                    byte[] rawData          = reader.ReadBytes(eventRecord.UserDataLength);
                    byte[] completeManifest = partialManifest.AddChunk(rawData);

                    if (completeManifest != null)
                    {
                        this.LoadManifest(completeManifest);
                    }

                    return(true);
                }
            }

            return(false);
        }