Пример #1
0
        public void Log <TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func <TState, Exception, string> formatter)
        {
            try
            {
                var messageLogEntity = new MessageLogEntity
                {
                    Id             = Guid.NewGuid(),
                    Timestamp      = TimeZoneExtensions.GetCurrentTime(),
                    TypeId         = _logLevelMapper.Map(logLevel),
                    Message        = $"{formatter(state, exception)}",
                    Exception      = exception?.ToString(),
                    InnerException = exception?.InnerException?.ToString(),
                    StackTrace     = exception?.StackTrace,
                    Source         = exception?.Source,
                    CreatedOn      = TimeZoneExtensions.GetCurrentTime(),
                    CreatedBy      = _createdBy
                };

                Task.Run(() =>
                {
                    _tableStorageRepository.InsertAsync(messageLogEntity);
                }).Wait();
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                // do nothing
            }
        }
        private void Save(IEvent @event, DateTime enqueueTime)
        {
            var message = new MessageLogEntity {
                Payload       = serializer.Serialize(@event),
                PartitionKey  = enqueueTime.ToString("yyyMM"),
                RowKey        = enqueueTime.Ticks.ToString("D20") + "_" + @event.GetHashCode(),
                MessageId     = Guid.NewGuid().ToString(),
                CorrelationId = Guid.NewGuid().ToString()
            };

            foreach (var metadata in this.metadata.GetMetadata(@event))
            {
                message.GetType().GetProperty(metadata.Key).SetValue(message, metadata.Value, null);
            }

            writer.Save(message);
        }
Пример #3
0
        public void GeneratePastEventLogMessagesForConferenceManagement(
            CloudTableClient messageLogClient, string messageLogName,
            string conferenceManagementConnectionString,
            IMetadataProvider metadataProvider, ITextSerializer serializer)
        {
            retryPolicy.ExecuteAction(() => messageLogClient.CreateTableIfNotExist(messageLogName));

            // set the creation date to just before releasing V1 (previous month).
            var eventCreationDate = new DateTime(2012, 04, 01, 0, 0, 0, DateTimeKind.Utc);

            var generatedEvents = this.GenerateMissedConferenceManagementIntegrationEvents(conferenceManagementConnectionString);

            foreach (var evt in generatedEvents)
            {
                // generate events in ascending order. If there is a conflict when saving (currently silently swallowed by AzureEventLogWriter),
                // then the migration process is being run for the second time, which is wrong.
                // TODO: what happens if the process crashes middleway.
                eventCreationDate = eventCreationDate.AddSeconds(1);
                var metadata = metadataProvider.GetMetadata(evt);
                var entry    = new MessageLogEntity
                {
                    PartitionKey = eventCreationDate.ToString("yyyMM"),
                    // could have a prefix instead of suffix to be able to search
                    RowKey        = eventCreationDate.Ticks.ToString("D20") + "_Generated",
                    CreationDate  = eventCreationDate.ToString("o"),
                    MessageId     = null,
                    CorrelationId = null,
                    SourceType    = null,
                    SourceId      = evt.SourceId.ToString(),
                    AssemblyName  = metadata[StandardMetadata.AssemblyName],
                    FullName      = metadata[StandardMetadata.FullName],
                    Namespace     = metadata[StandardMetadata.Namespace],
                    TypeName      = metadata[StandardMetadata.TypeName],
                    Kind          = StandardMetadata.EventKind,
                    Payload       = serializer.Serialize(evt),
                };

                var context = messageLogClient.GetDataServiceContext();
                context.AddObject(messageLogName, entry);
                retryPolicy.ExecuteAction(() => context.SaveChanges());
            }
        }
Пример #4
0
        public void Save(IEvent @event)
        {
            var metadata = this.metadataProvider.GetMetadata(@event);
            var msgLog   = new MessageLogEntity
            {
                Id           = Guid.NewGuid(),
                SourceId     = @event.SourceId.ToString(),
                Kind         = metadata.TryGetValue(StandardMetadata.Kind),
                AssemblyName = metadata.TryGetValue(StandardMetadata.AssemblyName),
                FullName     = metadata.TryGetValue(StandardMetadata.FullName),
                Namespace    = metadata.TryGetValue(StandardMetadata.Namespace),
                TypeName     = metadata.TryGetValue(StandardMetadata.TypeName),
                SourceType   = metadata.TryGetValue(StandardMetadata.SourceType) as string,
                CreationDate = DateTime.UtcNow.ToString("o"),
                Payload      = serializer.Serialize <string>(@event),
            };

            using (var context = new MessageLogDbContext())
            {
                context.Set <MessageLogEntity>().Add(msgLog);
                context.SaveChanges();
            }
        }