public virtual void Emit <TAggregateEvent>(TAggregateEvent aggregateEvent, IMetadata?metadata = null)
            where TAggregateEvent : class, IAggregateEvent <TAggregate, TIdentity>
        {
            var committedEvent = From(aggregateEvent, Version, metadata);

            Persist(committedEvent, ApplyCommittedEvent);
        }
Esempio n. 2
0
        public MetadataHeadersCollection(IMetadata?headers)
        {
            if (headers is null)
            {
                ThrowHelper.ThrowArgumentNullException(nameof(headers));
            }

            _headers = headers;
        }
Esempio n. 3
0
        private static SpanContext?ExtractPropagatedContext(IMetadata?metadata)
        {
            try
            {
                if (metadata is not null)
                {
                    return(SpanContextPropagator.Instance.Extract(new MetadataHeadersCollection(metadata)));
                }
            }
            catch (Exception ex)
            {
                Log.Error(ex, "Error extracting propagated HTTP headers.");
            }

            return(null);
        }
Esempio n. 4
0
        public DataTemplateMetadata([CanBeNull] IMetadata?metadata)
        {
            if (metadata == null)
            {
                return;
            }

            if (metadata.TryGetValue(nameof(DataType), out var viewModel))
            {
                DataType = viewModel as Type;
            }

            if (metadata.TryGetValue(nameof(Role), out var role))
            {
                Role = role;
            }
        }
        protected virtual object FromObject(object aggregateEvent, long version, IMetadata?metadata = null)
        {
            if (aggregateEvent is IAggregateEvent)
            {
                _eventDefinitionService.Load(aggregateEvent.GetType());
                var eventDefinition         = _eventDefinitionService.GetDefinition(aggregateEvent.GetType());
                var aggregateSequenceNumber = version + 1;
                var eventId = EventId.NewDeterministic(
                    GuidFactories.Deterministic.Namespaces.Events,
                    $"{Id.Value}-v{aggregateSequenceNumber}");
                var now           = DateTimeOffset.UtcNow;
                var eventMetadata = new Metadata
                {
                    Timestamp = now,
                    AggregateSequenceNumber = aggregateSequenceNumber,
                    AggregateName           = Name.Value,
                    AggregateId             = Id.Value,
                    SourceId     = PinnedCommand.SourceId,
                    EventId      = eventId,
                    EventName    = eventDefinition.Name,
                    EventVersion = eventDefinition.Version
                };
                eventMetadata.Add(MetadataKeys.TimestampEpoch, now.ToUnixTime().ToString());
                if (metadata != null)
                {
                    eventMetadata.AddRange(metadata);
                }
                var genericType = typeof(CommittedEvent <, ,>)
                                  .MakeGenericType(typeof(TAggregate), typeof(TIdentity), aggregateEvent.GetType());


                var committedEvent = Activator.CreateInstance(
                    genericType,
                    Id,
                    aggregateEvent,
                    eventMetadata,
                    now,
                    aggregateSequenceNumber);

                return(committedEvent);
            }

            throw new InvalidOperationException("could not perform the required mapping for committed event.");
        }
        public VisualCompositionMetadata(IMetadata?metadata)
        {
            if (metadata == null)
            {
                return;
            }

            if (metadata.TryGetValue(nameof(Role), out var role))
            {
                Role = role;
            }

            if (metadata.TryGetValue(nameof(Sequence), out var sequence) && (sequence is double d))
            {
                Sequence = d;
            }

            if (metadata.TryGetValue(nameof(TargetRegions), out var targetRegions))
            {
                TargetRegions = targetRegions as string[];
            }
        }
        public virtual CommittedEvent <TAggregateSaga, TIdentity, TAggregateEvent> From <TAggregateEvent>(TAggregateEvent aggregateEvent,
                                                                                                          long version, IMetadata?metadata = null)
            where TAggregateEvent : class, IAggregateEvent <TAggregateSaga, TIdentity>
        {
            if (aggregateEvent == null)
            {
                throw new ArgumentNullException(nameof(aggregateEvent));
            }
            EventDefinitionService.Load(aggregateEvent.GetType());
            var eventDefinition         = EventDefinitionService.GetDefinition(aggregateEvent.GetType());
            var aggregateSequenceNumber = version + 1;
            var eventId = EventId.NewDeterministic(
                GuidFactories.Deterministic.Namespaces.Events,
                $"{Id.Value}-v{aggregateSequenceNumber}");
            var now           = DateTimeOffset.UtcNow;
            var eventMetadata = new Metadata
            {
                Timestamp = now,
                AggregateSequenceNumber = aggregateSequenceNumber,
                AggregateName           = Name.Value,
                AggregateId             = Id.Value,
                EventId      = eventId,
                EventName    = eventDefinition.Name,
                EventVersion = eventDefinition.Version
            };

            eventMetadata.Add(MetadataKeys.TimestampEpoch, now.ToUnixTime().ToString());
            if (metadata != null)
            {
                eventMetadata.AddRange(metadata);
            }

            var committedEvent = new CommittedEvent <TAggregateSaga, TIdentity, TAggregateEvent>(Id, aggregateEvent, eventMetadata, now, aggregateSequenceNumber);

            return(committedEvent);
        }
Esempio n. 8
0
        public static Scope?CreateServerSpan <TTarget>(Tracer tracer, TTarget target, IMetadata?metadata)
        {
            var   serverHandler = target.DuckCast <ServerCallHandlerStruct>();
            var   method        = serverHandler.Method;
            Scope?scope         = null;

            try
            {
                var tags = new GrpcServerTags();
                // Grpc.Core server tags are typically the root span, so use enabledWithGlobalSetting=true
                GrpcCommon.AddGrpcTags(tags, tracer, method.GrpcType, name: method.Name, path: method.FullName, serviceName: method.ServiceName, analyticsEnabledWithGlobalSetting: true);

                // If we have a local span (e.g. from aspnetcore) then use that as the parent
                // Otherwise, use the distributed context as the parent
                var spanContext = tracer.ActiveScope?.Span.Context;
                if (spanContext is null)
                {
                    spanContext = ExtractPropagatedContext(metadata);
                }

                var serviceName = tracer.DefaultServiceName ?? "grpc-server";

                scope = tracer.StartActiveInternal(GrpcCommon.OperationName, parent: spanContext, tags: tags, serviceName: serviceName);

                var span = scope.Span;
                span.Type         = SpanTypes.Grpc;
                span.ResourceName = method.FullName;

                if (metadata?.Count > 0)
                {
                    span.SetHeaderTags(new MetadataHeadersCollection(metadata), tracer.Settings.GrpcTags, GrpcCommon.RequestMetadataTagPrefix);
                }
            }
            catch (Exception ex)
            {
                Log.Error(ex, "Error creating server span for GRPC call");
            }

            return(scope);
        }
Esempio n. 9
0
 /// <summary>Initializes a new instance of the <see cref="ExportAdapter{T}"/> class.</summary>
 /// <param name="valueFactory">The value factory.</param>
 /// <param name="metadata">The metadata.</param>
 public ExportAdapter([NotNull] Func <T?> valueFactory, [CanBeNull] IMetadata?metadata)
 {
     _valueFactory = valueFactory;
     _metadata     = metadata;
 }
Esempio n. 10
0
 /// <summary>Initializes a new instance of the <see cref="ExportAdapter{T}"/> class.</summary>
 /// <param name="valueFactory">The value factory.</param>
 /// <param name="metadata">The metadata.</param>
 public ExportAdapter(Func <T?> valueFactory, IMetadata?metadata)
 {
     _valueFactory = valueFactory;
     _metadata     = metadata;
 }