public IEventSink CreateInstance(string sinkType, IPlugInContext context)
        {
            var            appDataFileProvider = context.Services.GetService <IAppDataFileProvider>();
            IConfiguration config          = context.Configuration;
            ILogger        logger          = context.Logger;
            var            failoverEnabled = false;

            switch (sinkType.ToLower())
            {
            // Extending old sinks to support the functionality.
            case CLOUD_WATCH_LOG:
            case CLOUD_WATCH_LOG_EMF:
                var cwlOptions = new AWSBufferedSinkOptions();
                ParseBufferedSinkOptions(config, cwlOptions);
                // Failover
                if (bool.TryParse(config["FailoverEnabled"], out failoverEnabled) && failoverEnabled)
                {
                    return((config["FailoverStrategy"]) switch
                    {
                        PriorityFailover => CreateInstance(CloudWatchLogsWithPriorityFailover, context),
                        WeightedLoadBalanceFailover => CreateInstance(CloudWatchLogsWithWeightedLoadBalanceFailover, context),
                        RoundTripTimeBasedFailover => CreateInstance(CloudWatchLogsWithRoundTripTimeBasedFailover, context),
                        _ => CreateInstance(CloudWatchLogsWithLoadBalanceFailover, context),
                    });
                }
Exemple #2
0
        public AWSBufferedSink(string id, string sessionName,
                               IAppDataFileProvider appDataFileProvider,
                               ILogger logger,
                               IMetrics metrics,
                               IBookmarkManager bookmarkManager,
                               NetworkStatus networkStatus,
                               AWSBufferedSinkOptions options)
        {
            Id                        = id;
            _logger                   = logger;
            _metrics                  = metrics;
            _bookmarkManager          = bookmarkManager;
            _networkStatus            = networkStatus;
            _bufferIntervalMs         = options.BufferIntervalMs;
            _format                   = options.Format;
            _maxSecondaryQueueBatches = options.QueueMaxBatches;
            var secondaryQueue = CreateSecondaryQueue(options, sessionName, appDataFileProvider, logger);

            _queue = new AsyncBatchQueue <Envelope <T> >(options.QueueSizeItems,
                                                         new long[] { options.MaxBatchSize, options.MaxBatchBytes },
                                                         new Func <Envelope <T>, long>[] { r => 1, GetRecordSize },
                                                         secondaryQueue);

            _maxAttempts             = options.MaxAttempts;
            _jittingFactor           = options.JittingFactor;
            _backoffFactor           = options.BackoffFactor;
            _recoveryFactor          = options.RecoveryFactor;
            _minRateAdjustmentFactor = options.MinRateAdjustmentFactor;
            _uploadNetworkPriority   = options.UploadNetworkPriority;

            if (options.TextDecoration is not null)
            {
                _textDecorationEvaluator = new TextDecorationEvaluator(options.TextDecoration, ResolveRecordVariables);
            }

            if (options.TextDecorationEx is not null)
            {
                _textDecorationEvaluator = new TextDecorationExEvaluator(options.TextDecorationEx, EvaluateVariable, ResolveRecordVariable, logger);
            }

            if (options.ObjectDecoration is not null)
            {
                _objectDecorationEvaluator = new ObjectDecorationEvaluator(options.ObjectDecoration, ResolveRecordVariables);
            }

            if (options.ObjectDecorationEx is not null)
            {
                _objectDecorationEvaluator = new ObjectDecorationExEvaluator(options.ObjectDecorationEx, EvaluateVariable, ResolveRecordVariable, logger);
            }
        }
Exemple #3
0
 public AsyncCloudWatchLogsSink(string id, string sessionName, string logGroup, string logStream,
                                IAmazonCloudWatchLogs cloudWatchLogsClient,
                                IAppDataFileProvider appDataFileProvider,
                                ILogger logger,
                                IMetrics metrics,
                                IBookmarkManager bookmarkManager,
                                NetworkStatus networkStatus,
                                AWSBufferedSinkOptions options)
     : base(id, sessionName, appDataFileProvider, logger, metrics, bookmarkManager, networkStatus, options)
 {
     Id                    = id;
     _logGroup             = logGroup;
     _logStream            = logStream;
     _cloudWatchLogsClient = cloudWatchLogsClient;
     // Set throttle at 5 requests per second
     _throttle = new AdaptiveThrottle(new TokenBucket(1, 5), _backoffFactor, _recoveryFactor, _minRateAdjustmentFactor);
 }
Exemple #4
0
        private ISimpleQueue <List <Envelope <T> > > CreateSecondaryQueue(AWSBufferedSinkOptions options, string sessionName, IAppDataFileProvider appDataFileProvider, ILogger logger)
        {
            if (options.SecondaryQueueType is null || options.QueueMaxBatches < 1)
            {
                return(null);
            }

            if (options.SecondaryQueueType.Equals(ConfigConstants.QUEUE_TYPE_MEMORY, StringComparison.OrdinalIgnoreCase))
            {
                return(new InMemoryQueue <List <Envelope <T> > >(options.QueueMaxBatches));
            }

            if (options.SecondaryQueueType.Equals(ConfigConstants.QUEUE_TYPE_FILE, StringComparison.OrdinalIgnoreCase))
            {
                var queuePath = Path.Combine(Utility.GetSessionQueuesDirectoryRelativePath(sessionName), Id);
                return(new FilePersistentQueue <List <Envelope <T> > >(options.QueueMaxBatches, queuePath, GetPersistentQueueSerializer(), appDataFileProvider, logger));
            }

            return(null);
        }