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), }); }
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); } }
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); }
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); }