예제 #1
0
        private JObject BuildLocator(InstrumentationEvent instrumentationEvent)
        {
            var locator = new JObject();

            try
            {
                var senderId       = instrumentationEvent.SenderId;
                var senderParentId = instrumentationEvent.SenderParentId;
                if (string.IsNullOrWhiteSpace(senderId) || string.IsNullOrWhiteSpace(senderParentId))
                {
                    return(null);
                }
                locator.Add(TARGET_KEY, senderId);
                locator.Add(SCOPE_KEY, senderParentId);

                var senderContext = instrumentationEvent.SenderContext;
                if (senderContext != null)
                {
                    locator.Add(CONTEXT_KEY, senderContext);
                }
            }
            catch (Exception ex)
            {
                throw new Exception("Exception thrown while transforming JSON", ex);
            }

            return(locator);
        }
        /// <summary>
        /// Publishes an event to all registered network endpoints after
        /// applying the required event format transforms. Stored event will be
        /// deleted if publishing was successful for all registered endpoints.
        /// This method should NOT be called from the main thread
        /// </summary>
        /// <param name="instrumentationEvent"></param>
        /// <returns></returns>
        public async Task PublishEvent(InstrumentationEvent instrumentationEvent)
        {
            if (instrumentationEvent == null)
            {
                return;
            }
            var events = new List <InstrumentationEvent>();

            events.Add(instrumentationEvent);
            await PublishEventsAsync(events);
        }
        public async Task TestStoreOneEvent()
        {
            await EventStoreManager.DeleteAllEventsAsync().ConfigureAwait(false);

            InstrumentationEvent instrumentationEvent = createTestEvent();

            Assert.IsNotNull(instrumentationEvent, "Generated event stored should not be null");
            await EventStoreManager.StoreEventAsync(instrumentationEvent).ConfigureAwait(false);

            var events = await EventStoreManager.FetchAllEventsAsync();

            Assert.IsNotNull(events, "List of events stored should not be null");
            Assert.AreEqual(1, events.Count, "Number of events stored should be 1");
            Assert.IsTrue(instrumentationEvent.Equals(events.ElementAt(0)), "Stored event should be the same as generated event");
        }
        public async Task TestFetchOneEvent()
        {
            await EventStoreManager.DeleteAllEventsAsync().ConfigureAwait(false);

            InstrumentationEvent instrumentationEvent = createTestEvent();

            Assert.IsNotNull(instrumentationEvent, "Generated event stored should not be null");
            await EventStoreManager.StoreEventAsync(instrumentationEvent).ConfigureAwait(false);

            var eventId      = instrumentationEvent.EventId;
            var fetchedEvent = await EventStoreManager.FetchEventAsync(eventId);

            Assert.IsNotNull(fetchedEvent, "Event stored should not be null");
            Assert.IsTrue(instrumentationEvent.Equals(fetchedEvent), "Stored event should be the same as generated event");
        }
        public async Task StoreEventAsync(InstrumentationEvent instrumentationEvent)
        {
            if (string.IsNullOrEmpty(instrumentationEvent?.ToJson().ToString()))
            {
                LoggingService.Log("Invalid Event", LoggingLevel.Error);
                return;
            }
            if (await ShouldStoreEventAsync().ConfigureAwait(false))
            {
                var fileName = instrumentationEvent.EventId + FilenameSuffix;
                //Open file
                IFile file = await _rootDir.CreateFileAsync(fileName, CreationCollisionOption.OpenIfExists);

                //Wrtie to file after encrypting contents
                await file.WriteAllTextAsync(Encrypt(instrumentationEvent.ToJson().ToString(), EncryptionKey)).ConfigureAwait(false);
            }
        }
예제 #6
0
        private JObject BuildDeviceAttributes(InstrumentationEvent instrumentationEvent)
        {
            var deviceAttributes = new JObject();

            try
            {
                var deviceAppAttributes = instrumentationEvent.DeviceAppAttributes;
                if (deviceAppAttributes != null)
                {
                    deviceAttributes = deviceAppAttributes.ToJson();
                }
                deviceAttributes.Add(CONNECTION_TYPE_KEY, instrumentationEvent.ConnectionType);
            }
            catch (Exception ex)
            {
                throw new Exception("Exception thrown while transforming JSON", ex);
            }
            return(deviceAttributes);
        }
예제 #7
0
        public JObject Transform(InstrumentationEvent instrumentationEvent)
        {
            if (instrumentationEvent == null)
            {
                return(null);
            }
            JObject logLine = BuildPayload(instrumentationEvent);

            try
            {
                logLine?.Add(DEVICE_ATTRIBUTES_KEY, BuildDeviceAttributes(instrumentationEvent));
            }
            catch (Exception ex)
            {
                throw new Exception("Exception thrown while transforming JSON", ex);
            }

            return(logLine);
        }
        public async Task TestSotreMultipleEvents()
        {
            await EventStoreManager.DeleteAllEventsAsync().ConfigureAwait(false);

            InstrumentationEvent instrumentationEvent1 = createTestEvent();

            Assert.IsNotNull(instrumentationEvent1, "Generated event stored should not be null");
            InstrumentationEvent instrumentationEvent2 = createTestEvent();

            Assert.IsNotNull(instrumentationEvent2, "Generated event stored should not be null");
            var generatedEvents = new List <InstrumentationEvent>();

            generatedEvents.Add(instrumentationEvent1);
            generatedEvents.Add(instrumentationEvent2);
            await EventStoreManager.StoreEventsAsync(generatedEvents);

            var storedEvents = await EventStoreManager.FetchAllEventsAsync();

            Assert.IsNotNull(storedEvents, "List of events stored should not be null");
            Assert.AreEqual(2, storedEvents.Count, "Number of events stored should be 2");
            Assert.IsTrue(storedEvents.Contains(instrumentationEvent1), "Stored event should be the same as generated event");
            Assert.IsTrue(storedEvents.Contains(instrumentationEvent2), "Stored event should be the same as generated event");
        }
예제 #9
0
        private JObject BuildPayload(InstrumentationEvent instrumentationEvent)
        {
            var payload = new JObject();

            try
            {
                payload.Add(VERSION_KEY, VERSION_VALUE);
                var schemaType = instrumentationEvent.Schema;
                payload.Add(SCHEMA_TYPE_KEY, schemaType.ToString());
                payload.Add(ID_KEY, instrumentationEvent.EventId);
                payload.Add(EVENT_SOURCE_KEY, instrumentationEvent.Name);
                payload.Add(TS_KEY, instrumentationEvent.StartTime);
                payload.Add(PAGE_START_TIME_KEY, instrumentationEvent.SessionStartTime);
                var duration = instrumentationEvent.EndTime - instrumentationEvent.StartTime;
                if (duration > 0)
                {
                    if (schemaType == InstrumentationEvent.SchemaType.LightningInteraction ||
                        schemaType == InstrumentationEvent.SchemaType.LightningPerformance)
                    {
                        payload.Add(DURATION_KEY, duration);
                    }
                    else if (schemaType == InstrumentationEvent.SchemaType.LightningPageView)
                    {
                        payload.Add(EPT_KEY, duration);
                    }
                }
                if (!string.IsNullOrWhiteSpace(instrumentationEvent.SessionId))
                {
                    payload.Add(CLIENT_SESSION_ID_KEY, instrumentationEvent.SessionId);
                }

                if (schemaType != InstrumentationEvent.SchemaType.LightningPerformance)
                {
                    payload.Add(SEQUENCE_KEY, instrumentationEvent.SequenceId);
                }
                if (instrumentationEvent.Attributes != null)
                {
                    payload.Add(ATTRIBUTES_KEY, instrumentationEvent.Attributes);
                }
                if (schemaType != InstrumentationEvent.SchemaType.LightningPerformance &&
                    instrumentationEvent.Page != null)
                {
                    payload.Add(PAGE_KEY, instrumentationEvent.Page);
                }
                if (instrumentationEvent.PreviousPage != null &&
                    schemaType == InstrumentationEvent.SchemaType.LightningPageView)
                {
                    payload.Add(PREVIOUS_PAGE_KEY, instrumentationEvent.PreviousPage);
                }
                if (instrumentationEvent.Marks != null &&
                    schemaType == InstrumentationEvent.SchemaType.LightningPageView)
                {
                    payload.Add(MARKS_KEY, instrumentationEvent.Marks);
                }
                if (schemaType == InstrumentationEvent.SchemaType.LightningInteraction ||
                    schemaType == InstrumentationEvent.SchemaType.LightningPageView)
                {
                    var locator = BuildLocator(instrumentationEvent);
                    if (locator != null)
                    {
                        payload.Add(LOCATOR_KEY, locator);
                    }
                }
                var    eventType       = instrumentationEvent.Event;
                string eventTypeString = null;
                if (schemaType == InstrumentationEvent.SchemaType.LightningPerformance)
                {
                    eventTypeString = PERF_EVENT_TYPE;
                }
                else if (schemaType == InstrumentationEvent.SchemaType.LightningInteraction)
                {
                    eventTypeString = eventType.ToString();
                }
                if (!string.IsNullOrWhiteSpace(eventTypeString))
                {
                    payload.Add(EVENT_TYPE_KEY, eventTypeString);
                }
                var errorType = instrumentationEvent.Error;
                if (schemaType == InstrumentationEvent.SchemaType.LightningError)
                {
                    payload.Add(ERROR_TYPE_KEY, errorType.ToString());
                }
            }
            catch (Exception ex)
            {
                throw new Exception("Exception thrown while transforming JSON", ex);
            }

            return(payload);
        }
예제 #10
0
 /// <summary>
 /// Store information in a Database
 /// </summary>
 /// <param name="flushInfo">The buffered Event Information</param>
 private void StoreToDB(WebBaseEvent flushInfo)
 {
     InstrumentationEvent evt = (flushInfo as InstrumentationEvent);
  
  
 }
 /// <summary>
 /// 
 /// </summary>
 /// 
 private void FireEntitySavedEvent()
 {
     InstrumentationEvent instrumentationEvent = new InstrumentationEvent();
     instrumentationEvent.Message = "Entity entity-1 has been saved.";
     instrumentationEvent.Id = 100;
     instrumentationEvent.Fire();
 }
 public void TestFireInstrumentationEvent()
 {
     for (int i = 0; i < 10; i++)
     {
         InstrumentationEvent instrumentationEvent = new InstrumentationEvent();
         instrumentationEvent.Message = string.Format("Entity entity-{0} has been saved.", i);
         instrumentationEvent.Id = (i * 100);
         instrumentationEvent.Fire();
     }
 }