public static CloudEventEntry TryConvertToCloudEventEntry(this EventEntry entry)
        {
            Guard.ArgumentNotNull(entry, "entry");

            var entity = new CloudEventEntry()
            {
                EventId      = entry.EventId,
                Keywords     = (long)entry.Schema.Keywords,
                ProviderId   = entry.ProviderId,
                ProviderName = entry.Schema.ProviderName,
                Level        = (int)entry.Schema.Level,
                Message      = entry.FormattedMessage,
                Opcode       = (int)entry.Schema.Opcode,
                Task         = (int)entry.Schema.Task,
                Version      = entry.Schema.Version,
                EventDate    = entry.Timestamp.UtcDateTime
            };

            if (!InitializePayload(entity, entry.Payload, entry.Schema))
            {
                return(null);
            }

            return(entity);
        }
        public void when_several_payload_values_then_takes_first_ones_as_columns()
        {
            int numberOfAllowedItems = 200;

            var entity = new CloudEventEntry(EventEntryTestHelper.Create(
                                                 payloadNames: Enumerable.Range(0, 300).Select(i => "arg" + i),
                                                 payload: Enumerable.Range(0, 300).Select(i => (object)i)));

            entity.CreateKey(true, 0);

            var dict = entity.CreateTableEntity().WriteEntity(null);

            for (int i = 0; i < numberOfAllowedItems; i++)
            {
                Assert.IsTrue(dict.ContainsKey("Payload_arg" + i), i.ToString());
                Assert.AreEqual <int>(i, dict["Payload_arg" + i].Int32Value.Value);
            }

            for (int i = numberOfAllowedItems; i < 300; i++)
            {
                Assert.IsFalse(dict.ContainsKey("Payload_arg" + i), i.ToString());
            }

            var deserializedPayloadField = JsonConvert.DeserializeObject <Dictionary <string, object> >(dict["Payload"].StringValue);

            foreach (var payloadItem in entity.Payload)
            {
                Assert.IsTrue(deserializedPayloadField.ContainsKey(payloadItem.Key));
                Assert.AreEqual <int>((int)payloadItem.Value, (int)(long)deserializedPayloadField[payloadItem.Key]);
            }
        }
        public void when_writing_entity_keeps_proper_type()
        {
            var guid   = Guid.NewGuid();
            var binary = new byte[] { 1, 2, 3, 4 };

            var entity = new CloudEventEntry();

            entity.CreateKey(true, 0);
            entity.Payload.Add("string1", "This is a string");
            entity.Payload.Add("int1", 123456);
            entity.Payload.Add("long1", 123456L);
            entity.Payload.Add("double1", 123456D);
            entity.Payload.Add("bool1", true);
            entity.Payload.Add("bool2", false);
            entity.Payload.Add("guid1", guid);
            entity.Payload.Add("binary1", binary);

            var dict = entity.CreateTableEntity().WriteEntity(null);

            Assert.AreEqual <string>("This is a string", dict["Payload_string1"].StringValue);
            Assert.AreEqual <int>(123456, dict["Payload_int1"].Int32Value.Value);
            Assert.AreEqual <long>(123456L, dict["Payload_long1"].Int64Value.Value);
            Assert.AreEqual <double>(123456D, dict["Payload_double1"].DoubleValue.Value);
            Assert.AreEqual <Guid>(guid, dict["Payload_guid1"].GuidValue.Value);
            Assert.AreEqual <bool>(true, dict["Payload_bool1"].BooleanValue.Value);
            Assert.AreEqual <bool>(false, dict["Payload_bool2"].BooleanValue.Value);
            Assert.AreEqual <byte[]>(binary, dict["Payload_binary1"].BinaryValue);
        }
 protected override void Act()
 {
     base.Act();
     this.entry = new CloudEventEntry(EventEntryTestHelper.Create(
                                          eventId: 12,
                                          providerId: Guid.NewGuid(),
                                          providerName: "Provider Name",
                                          timestamp: new DateTimeOffset(2013, 4, 10, 16, 0, 0, TimeSpan.Zero),
                                          keywords: (EventKeywords)16L,
                                          level: EventLevel.Informational,
                                          formattedMessage: "My message",
                                          opcode: (EventOpcode)4,
                                          task: (EventTask)24,
                                          version: 2,
                                          payloadNames: new string[] { "arg1" },
                                          payload: new object[] { "value arg1" },
                                          processId: 200,
                                          threadId: 300,
                                          activityId: Guid.Parse("{562D0422-F427-4849-A6CD-7990A46F1223}"),
                                          relatedActivityId: Guid.Parse("{23408E19-3133-47E1-9307-C99A4F9AC8CC}")))
     {
         InstanceName = "Instance Name"
     };
     sink.OnNext(this.entry);
 }
        public void when_having_big_message_value_then_truncates()
        {
            var entity = new CloudEventEntry(EventEntryTestHelper.Create(formattedMessage: new string('a', 500000)));

            entity.CreateKey(true, 0);

            var dict = entity.CreateTableEntity().WriteEntity(null);

            Assert.AreEqual(new string('a', 30000) + "--TRUNCATED--", dict["Message"].StringValue);
        }
        public void when_having_big_payload_then_truncates()
        {
            var entity = new CloudEventEntry(EventEntryTestHelper.Create(payloadNames: new string[] { "arg1" }, payload: new object[] { new string('a', 500000) }));

            entity.CreateKey(true, 0);

            var dict = entity.CreateTableEntity().WriteEntity(null);

            StringAssert.Contains(dict["Payload"].StringValue, "'payload_serialization_error'");
            Assert.IsFalse(dict.ContainsKey("Payload_arg1"));
        }
        public void when_writing_entity_adds_payload_to_dictionary()
        {
            var entity = new CloudEventEntry(EventEntryTestHelper.Create(payloadNames: new string[] { "message1", "message2" }, payload: new object[] { "value1", "value2" }));

            entity.CreateKey(true, 0);

            var dict = entity.CreateTableEntity().WriteEntity(null);

            Assert.IsTrue(dict.ContainsKey("Payload_message1"));
            Assert.IsTrue(dict.ContainsKey("Payload_message2"));
        }
        internal void OnNext(CloudEventEntry value)
        {
            if (value == null)
            {
                return;
            }

            value.InstanceName = value.InstanceName != null?NormalizeInstanceName(value.InstanceName) : this.instanceName;

            this.bufferedPublisher.TryPost(value);
        }
        public void when_generating_key_then_prefixes_with_instance_name()
        {
            var entity = new CloudEventEntry();

            entity.EventDate    = DateTime.UtcNow;
            entity.InstanceName = "MyInstanceName";

            entity.CreateKey(false, 0);

            StringAssert.StartsWith(entity.RowKey, "MyInstanceName");
        }
        public void when_having_big_overall_payloads_then_stores_warning_and_does_not_contain_payload()
        {
            var entity = new CloudEventEntry(EventEntryTestHelper.Create(payloadNames: Enumerable.Range(0, 50).Select(i => "arg" + i), payload: Enumerable.Range(0, 50).Select(i => new string('a', 2000))));

            entity.CreateKey(true, 0);

            var dict = entity.CreateTableEntity().WriteEntity(null);

            StringAssert.Contains(dict["Payload"].StringValue, "'payload_serialization_error'");

            Assert.AreEqual(0, dict.Keys.Count(x => x.StartsWith("Payload_")));
        }
        public void when_generating_key_then_prefixes_with_instance_name()
        {
            var entity = new CloudEventEntry(EventEntryTestHelper.Create(
                                                 timestamp: DateTimeOffset.UtcNow))
            {
                InstanceName = "MyInstanceName"
            };

            entity.CreateKey(false, 0);

            StringAssert.StartsWith(entity.RowKey, "MyInstanceName");
        }
        public void when_having_big_payload_then_truncates()
        {
            var entity = new CloudEventEntry();

            entity.CreateKey(true, 0);
            entity.Payload.Add("arg1", new string('a', 500000));

            var dict = entity.CreateTableEntity().WriteEntity(null);

            StringAssert.Contains(dict["Payload"].StringValue, "'payload_serialization_error'");
            Assert.IsFalse(dict.ContainsKey("Payload_arg1"));
        }
        public void when_writing_entity_adds_payload_to_dictionary()
        {
            var entity = new CloudEventEntry();

            entity.CreateKey(true, 0);
            entity.Payload.Add("message1", "value1");
            entity.Payload.Add("message2", "value2");

            var dict = entity.CreateTableEntity().WriteEntity(null);

            Assert.IsTrue(dict.ContainsKey("Payload_message1"));
            Assert.IsTrue(dict.ContainsKey("Payload_message2"));
        }
        public void when_having_big_overall_payloads_then_stores_warning_and_does_not_contain_payload()
        {
            var entity = new CloudEventEntry();

            entity.CreateKey(true, 0);

            for (int i = 0; i < 50; i++)
            {
                entity.Payload.Add("arg" + i, new string('a', 2000));
            }

            var dict = entity.CreateTableEntity().WriteEntity(null);

            StringAssert.Contains(dict["Payload"].StringValue, "'payload_serialization_error'");

            Assert.AreEqual(0, dict.Keys.Count(x => x.StartsWith("Payload_")));
        }
        private static bool InitializePayload(CloudEventEntry entity, IList <object> payload, EventSchema schema)
        {
            try
            {
                entity.Payload = new Dictionary <string, object>(payload.Count);

                for (int i = 0; i < payload.Count; i++)
                {
                    entity.Payload.Add(schema.Payload[i], payload[i]);
                }

                return(true);
            }
            catch (Exception e)
            {
                SemanticLoggingEventSource.Log.WindowsAzureTableSinkEntityCreationFailed(e.ToString());
                return(false);
            }
        }
 protected override void Act()
 {
     base.Act();
     this.entry = new CloudEventEntry
     {
         EventId      = 12,
         ProviderId   = Guid.NewGuid(),
         ProviderName = "Provider Name",
         EventDate    = new DateTime(2013, 4, 10, 16, 0, 0, DateTimeKind.Utc),
         Keywords     = 16,
         InstanceName = "Instance Name",
         Level        = (int)EventLevel.Informational,
         Message      = "My message",
         Opcode       = 4,
         Task         = 24,
         Version      = 2,
         Payload      = { { "arg1", "value arg1" } }
     };
     sink.OnNext(this.entry);
 }
        public void when_writing_entity_keeps_proper_type()
        {
            var guid   = Guid.NewGuid();
            var binary = new byte[] { 1, 2, 3, 4 };

            var entity = new CloudEventEntry(EventEntryTestHelper.Create(
                                                 payloadNames: new string[] { "string1", "int1", "long1", "double1", "bool1", "bool2", "guid1", "binary1" },
                                                 payload: new object[] { "This is a string", 123456, 123456L, 123456D, true, false, guid, binary }));

            entity.CreateKey(true, 0);

            var dict = entity.CreateTableEntity().WriteEntity(null);

            Assert.AreEqual <string>("This is a string", dict["Payload_string1"].StringValue);
            Assert.AreEqual <int>(123456, dict["Payload_int1"].Int32Value.Value);
            Assert.AreEqual <long>(123456L, dict["Payload_long1"].Int64Value.Value);
            Assert.AreEqual <double>(123456D, dict["Payload_double1"].DoubleValue.Value);
            Assert.AreEqual <Guid>(guid, dict["Payload_guid1"].GuidValue.Value);
            Assert.AreEqual <bool>(true, dict["Payload_bool1"].BooleanValue.Value);
            Assert.AreEqual <bool>(false, dict["Payload_bool2"].BooleanValue.Value);
            Assert.AreEqual <byte[]>(binary, dict["Payload_binary1"].BinaryValue);
        }
 protected override void Act()
 {
     base.Act();
     this.entry =
         new CloudEventEntry(EventEntryTestHelper.Create(
                                 eventId: 12,
                                 providerId: Guid.NewGuid(),
                                 providerName: "Provider Name",
                                 timestamp: new DateTimeOffset(2013, 4, 10, 16, 0, 0, TimeSpan.Zero),
                                 keywords: (EventKeywords)16,
                                 level: EventLevel.Informational,
                                 formattedMessage: "My message",
                                 opcode: (EventOpcode)4,
                                 task: (EventTask)24,
                                 version: 2,
                                 payloadNames: new string[] { "arg1" },
                                 payload: new object[] { "value arg1" }))
     {
         InstanceName = "Instance Name",
     };
     sink.OnNext(this.entry);
 }
 protected override void Act()
 {
     base.Act();
     this.entry = new CloudEventEntry
     {
         EventId           = 12,
         ProviderId        = Guid.NewGuid(),
         ProviderName      = "Provider Name",
         EventDate         = new DateTime(2013, 4, 10, 16, 0, 0, DateTimeKind.Utc),
         Keywords          = 16,
         InstanceName      = "Instance Name",
         Level             = (int)EventLevel.Informational,
         Message           = "My message",
         Opcode            = 4,
         Task              = 24,
         Version           = 2,
         Payload           = { { "arg1", "value arg1" } },
         ActivityId        = Guid.Parse("{562D0422-F427-4849-A6CD-7990A46F1223}"),
         RelatedActivityId = Guid.Parse("{23408E19-3133-47E1-9307-C99A4F9AC8CC}")
     };
     sink.OnNext(this.entry);
 }