Example #1
0
        /// <summary>
        /// This is the main method that write the messages to the trace.
        /// All derived classes must use this method to write to the provider log.
        /// </summary>
        /// <param name="ed">EventDescriptor</param>
        /// <param name="payload">payload</param>
        protected void WriteEvent(EventDescriptor ed, params object[] payload)
        {
            EventProvider provider = GetProvider();

            if (!provider.IsEnabled())
            {
                return;
            }

            if (payload != null)
            {
                for (int i = 0; i < payload.Length; i++)
                {
                    if (payload[i] == null)
                    {
                        payload[i] = string.Empty;
                    }
                }
            }

            bool success = provider.WriteEvent(ref ed, payload);

            if (EventWritten != null)
            {
                EventWritten.Invoke(this, new EtwEventArgs(ed, success, payload));
            }
        }
Example #2
0
        /// <summary>
        /// Write to the Event Stream
        /// </summary>
        /// <remarks>
        /// If the event stream doesn't exist, create it.
        /// The data in the event parameter includes the original stream, the recorded event, and messageId.
        /// <seealso cref="EventWritten"/>
        /// Generate the name from the event type passed in the original stream. <see cref="GetOrCreateEventTypeStream"/>
        /// The caller sets up the Event Stream, append the events."/>
        /// </remarks>
        /// <param name="event">Event to be written to the event stream</param>
        private void WriteToByEventProjection(EventWritten @event)
        {
            if (!_connected || _disposed)
            {
                throw new Exception();
            }
            if (@event.ProjectedEvent)
            {
                return;
            }
            var stream     = GetOrCreateEventTypeStream(@event, out var streamName);
            var epochStart = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
            var created    = DateTime.UtcNow;
            var epochTime  = (long)(created - epochStart).TotalSeconds;

            var projectedEvent = new ProjectedEvent(
                streamName,
                @event.Event.EventNumber,
                @event.Event.EventStreamId,
                @event.Event.EventId, // reusing since the projection is linking to the original event
                stream.Count,
                @event.Event.EventType,
                @event.Event.Data,
                @event.Event.Metadata,
                @event.Event.IsJson,
                created,
                epochTime);

            stream.Add(projectedEvent);
            All.Add(projectedEvent);
            _inboundEventHandler.Handle(new EventWritten(streamName, projectedEvent, true, projectedEvent.EventNumber));
        }
Example #3
0
        /// <summary>
        /// Get or Create the By-Category projection Stream for Category
        /// </summary>
        /// <remarks>
        /// <see href="https://eventstore.org/docs/projections/system-projections/index.html"/>
        /// The category stream name is generated by spiting the event stream at the first dash. This is the default
        /// configuration setting (prefix (a category) by splitting a stream id by a configurable separator.)
        /// </remarks>
        /// <param name="event">Original event whose name is in the aggregate-GUID format</param>
        /// <param name="streamName">the generated name for the stream</param>
        /// <returns>categoryStreamName: string</returns>
        private List <RecordedEvent> GetOrCreateCategoryStream(EventWritten @event, out string streamName)
        {
            var category = @event.StreamName.Split('-')[0];

            streamName = $"{CategoryStreamNamePrefix}-{category}";
            return(GetOrCreateStream(streamName));
        }
Example #4
0
        /// <summary>
        /// Increases the number of messages.
        /// </summary>
        /// <param name="logEvent">The logging event.</param>
        protected override void Write(LogEventInfo logEvent)
        {
            if (BeforeWrite != null)
            {
                BeforeWrite.Invoke(null, null, Thread.CurrentThread.ManagedThreadId);
            }

            if (EventWritten != null)
            {
                var rendered = Layout == null ? null : Layout.Render(logEvent);
                EventWritten.Invoke(logEvent, rendered, Thread.CurrentThread.ManagedThreadId);
            }
        }
Example #5
0
 /// <summary>
 /// Get or Create the EventType Projection Stream for Event Type
 /// </summary>
 /// <remarks>
 /// <see href="https://eventstore.org/docs/projections/system-projections/index.html"/>
 /// The event stream name is generated from the event type. In the event store, this is not configurable.
 /// </remarks>
 /// <param name="event">Original event whose name is in the aggregate-GUID format</param>
 /// <param name="streamName">the generated name for the stream</param>
 /// <returns>eventStreamName: string</returns>
 private List <RecordedEvent> GetOrCreateEventTypeStream(EventWritten @event, out string streamName)
 {
     streamName = $"{EventTypeStreamNamePrefix}-{@event.Event.EventType}";
     return(GetOrCreateStream(streamName));
 }