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); }
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; }
public Windows(TKey key, WindowedStreamConsumerSettings <T, TKey> settings) { this.key = key; this.settings = settings; LastEventAdded = DateTimeOffset.UtcNow; }