コード例 #1
0
        public Task InitializeAsync(IVostokHostingEnvironment environment)
        {
            SetupEventsLimitMetric(environment, () => environment.ConfigurationProvider.Get <AggregatorSettings>().EventsLimitMetric);

            var           settings       = environment.ConfigurationProvider.Get <AggregatorSettings>();
            Func <string> apiKeyProvider = () => environment.SecretConfigurationProvider.Get <AggregatorSecretSettings>().HerculesApiKey;

            var binaryWriterSettings = new StreamBinaryWriterSettings(
                apiKeyProvider,
                new AdHocClusterProvider(() => null))
            {
                MetricContext             = environment.Metrics.Instance,
                GateClientAdditionalSetup = environment.HostExtensions.Get <ClusterClientSetup>(Constants.GateClientSetupKey)
            };

            var binaryWriter = new StreamBinaryWriter(binaryWriterSettings, environment.Log);

            var eventsWriterSettings = new StreamBinaryEventsWriterSettings(binaryWriter, settings.TargetStream)
            {
                BufferCapacityLimit = settings.EventsWriteBufferCapacityLimit
            };

            var eventsWriter = new StreamBinaryEventsWriter(eventsWriterSettings, environment.Log);

            var consumerSettings = new WindowedStreamConsumerSettings <MetricEvent, MetricTags>(
                settings.SourceStream,
                apiKeyProvider,
                new AdHocClusterProvider(() => null),
                s => s.Tags,
                s => s.Timestamp,
                _ => new MetricProcessor(environment.HostExtensions.Get <Func <IAggregateFunction> >(Constants.AggregateFunctionKey)(), eventsWriter),
                r => new HerculesMetricEventReader(r),
                environment.HostExtensions.Get <IStreamCoordinatesStorage>(Constants.LeftCoordinatesStorageKey),
                environment.HostExtensions.Get <IStreamCoordinatesStorage>(Constants.RightCoordinatesStorageKey),
                () => new StreamShardingSettings(environment.ApplicationReplicationInfo.InstanceIndex, environment.ApplicationReplicationInfo.InstancesCount)
                )
            {
                EventsReadBatchSize = settings.EventsReadBatchSize,
                Lag            = settings.Lag,
                Period         = settings.Period,
                LagProvider    = e => e.AggregationParameters?.GetAggregationLag(),
                PeriodProvider = e => e.AggregationParameters?.GetAggregationPeriod(),
                MetricContext  = environment.Metrics.Instance,
                StreamApiClientAdditionalSetup = environment.HostExtensions.Get <ClusterClientSetup>(Constants.StreamClientSetupKey),
                MaximumDeltaAfterNow           = settings.MaximumDeltaAfterNow,
                OnBatchBegin = _ => writeTask?.GetAwaiter().GetResult(),
                OnBatchEnd   = _ =>
                {
                    writeTask = eventsWriter.WriteAsync().SilentlyContinue();
                }
            };

            consumer = new WindowedStreamConsumer <MetricEvent, MetricTags>(consumerSettings, environment.Log);

            return(Task.CompletedTask);
        }
コード例 #2
0
 internal Window(WindowedStreamConsumerSettings <T, TKey> .IWindow implementation, StreamCoordinates firstEventCoordinates, DateTimeOffset start, DateTimeOffset end, TimeSpan period, TimeSpan lag)
 {
     this.implementation   = implementation;
     FirstEventCoordinates = firstEventCoordinates;
     Start          = start;
     End            = end;
     this.period    = period;
     this.lag       = lag;
     lastEventAdded = DateTimeOffset.Now;
 }
コード例 #3
0
 public Windows(TKey key, WindowedStreamConsumerSettings <T, TKey> settings)
 {
     this.key       = key;
     this.settings  = settings;
     LastEventAdded = DateTimeOffset.UtcNow;
 }