Exemple #1
0
        public virtual async Task <(Result Result, TimeSpan Elapsed)> InvokeAsync(string actionName, string job)
        {
            var actionWatch = ValueStopwatch.StartNew();

            Result result;

            try
            {
                var actionType    = typeNameRegistry.GetType(actionName);
                var actionHandler = ruleActionHandlers[actionType];

                var deserialized = jsonSerializer.Deserialize <object>(job, actionHandler.DataType);

                using (var cts = new CancellationTokenSource(GetTimeoutInMs()))
                {
                    result = await actionHandler.ExecuteJobAsync(deserialized, cts.Token).WithCancellation(cts.Token);
                }
            }
            catch (Exception ex)
            {
                result = Result.Failed(ex);
            }

            var elapsed = TimeSpan.FromMilliseconds(actionWatch.Stop());

            result.Enrich(elapsed);

            return(result, elapsed);
        }
Exemple #2
0
        public Envelope <IEvent> Parse(StoredEvent storedEvent)
        {
            Guard.NotNull(storedEvent, nameof(storedEvent));

            var eventData = storedEvent.Data;

            var payloadType  = typeNameRegistry.GetType(eventData.Type);
            var payloadValue = serializer.Deserialize <IEvent>(eventData.Payload, payloadType);

            if (payloadValue is IMigrated <IEvent> migratedEvent)
            {
                payloadValue = migratedEvent.Migrate();

                if (ReferenceEquals(migratedEvent, payloadValue))
                {
                    Debug.WriteLine("Migration should return new event.");
                }
            }

            var envelope = new Envelope <IEvent>(payloadValue, eventData.Headers);

            envelope.SetEventPosition(storedEvent.EventPosition);
            envelope.SetEventStreamNumber(storedEvent.EventStreamNumber);

            return(envelope);
        }
Exemple #3
0
        public virtual Envelope <IEvent> Parse(EventData eventData)
        {
            var headers = ReadJson <PropertiesBag>(eventData.Metadata);

            var eventType    = typeNameRegistry.GetType(eventData.Type);
            var eventContent = ReadJson <IEvent>(eventData.Payload, eventType);

            var envelope = new Envelope <IEvent>(eventContent, headers);

            return(envelope);
        }
        public Envelope <IEvent> Parse(EventData eventData, Func <string, string> stringConverter = null)
        {
            var payloadType = typeNameRegistry.GetType(eventData.Type);
            var payloadObj  = serializer.Deserialize <IEvent>(eventData.Payload, payloadType, stringConverter);

            if (payloadObj is IMigratedEvent migratedEvent)
            {
                payloadObj = migratedEvent.Migrate();
            }

            var envelope = new Envelope <IEvent>(payloadObj, eventData.Headers);

            return(envelope);
        }
Exemple #5
0
        public virtual Envelope <IEvent> Parse(EventData eventData, bool migrate = true)
        {
            var headers = ReadJson <PropertiesBag>(eventData.Metadata);

            var eventType    = typeNameRegistry.GetType(eventData.Type);
            var eventPayload = ReadJson <IEvent>(eventData.Payload, eventType);

            if (migrate && eventPayload is IMigratedEvent migratedEvent)
            {
                eventPayload = migratedEvent.Migrate();
            }

            var envelope = new Envelope <IEvent>(eventPayload, headers);

            return(envelope);
        }
        public Envelope <IEvent> Parse(EventData eventData, bool migrate = true)
        {
            var eventType = typeNameRegistry.GetType(eventData.Type);

            var headers = eventData.Metadata.ToObject <EnvelopeHeaders>();
            var content = eventData.Payload.ToObject(eventType, serializer) as IEvent;

            if (migrate && content is IMigratedEvent migratedEvent)
            {
                content = migratedEvent.Migrate();
            }

            var envelope = new Envelope <IEvent>(content, headers);

            return(envelope);
        }
        public void Subscribe(string recipient, Action <object> handler)
        {
            Guard.NotNullOrEmpty(recipient, nameof(recipient));

            pubSub.Subscribe(ChannelName, json =>
            {
                var envelope = JsonConvert.DeserializeObject <Envelope>(json);

                if (string.Equals(envelope.Recipient, recipient, StringComparison.OrdinalIgnoreCase))
                {
                    var messageType = typeNameRegistry.GetType(envelope.PayloadType);
                    var messageBody = ReadJson(envelope.Payload, messageType);

                    handler?.Invoke(messageBody);
                }
            });
        }
        public Envelope <IEvent> Parse(EventData eventData, bool migrate = true)
        {
            var headers = ReadJson <EnvelopeHeaders>(eventData.Metadata);

            var eventType    = typeNameRegistry.GetType(eventData.Type);
            var eventPayload = ReadJson <IEvent>(eventData.Payload, eventType);

            if (migrate && eventPayload is IMigratedEvent migratedEvent)
            {
                eventPayload = migratedEvent.Migrate();
            }

            var envelope = new Envelope <IEvent>(eventPayload, headers);

            envelope.SetEventId(eventData.EventId);

            return(envelope);
        }
        public Envelope <IEvent> Parse(EventData eventData, Func <string, string> stringConverter = null)
        {
            var payloadType = typeNameRegistry.GetType(eventData.Type);
            var payloadObj  = serializer.Deserialize <IEvent>(eventData.Payload, payloadType, stringConverter);

            if (payloadObj is IMigrated <IEvent> migratedEvent)
            {
                payloadObj = migratedEvent.Migrate();

                if (ReferenceEquals(migratedEvent, payloadObj))
                {
                    Debug.WriteLine("Migration should return new event.");
                }
            }

            var envelope = new Envelope <IEvent>(payloadObj, eventData.Headers);

            return(envelope);
        }
Exemple #10
0
        public virtual async Task <(string Dump, RuleResult Result, TimeSpan Elapsed)> InvokeAsync(string actionName, string job)
        {
            try
            {
                var actionType  = typeNameRegistry.GetType(actionName);
                var actionWatch = Stopwatch.StartNew();

                var actionHandler = ruleActionHandlers[actionType];

                var deserialized = jsonSerializer.Deserialize <object>(job, actionHandler.DataType);

                var result = await actionHandler.ExecuteJobAsync(deserialized);

                actionWatch.Stop();

                var dumpBuilder = new StringBuilder(result.Dump);

                dumpBuilder.AppendLine();
                dumpBuilder.AppendFormat("Elapsed {0}.", actionWatch.Elapsed);
                dumpBuilder.AppendLine();

                if (result.Exception is TimeoutException || result.Exception is OperationCanceledException)
                {
                    dumpBuilder.AppendLine();
                    dumpBuilder.AppendLine("Action timed out.");

                    return(dumpBuilder.ToString(), RuleResult.Timeout, actionWatch.Elapsed);
                }
                else if (result.Exception != null)
                {
                    return(dumpBuilder.ToString(), RuleResult.Failed, actionWatch.Elapsed);
                }
                else
                {
                    return(dumpBuilder.ToString(), RuleResult.Success, actionWatch.Elapsed);
                }
            }
            catch (Exception ex)
            {
                return(ex.ToString(), RuleResult.Failed, TimeSpan.Zero);
            }
        }
Exemple #11
0
        public override Type BindToType(string assemblyName, string typeName)
        {
            var type = typeNameRegistry.GetType(typeName);

            return(type ?? base.BindToType(assemblyName, typeName));
        }