public QueueTriggerBinding(string parameterName,
                                   QueueServiceClient queueServiceClient,
                                   QueueClient queue,
                                   ITriggerDataArgumentBinding <QueueMessage> argumentBinding,
                                   QueuesOptions queueOptions,
                                   IWebJobsExceptionHandler exceptionHandler,
                                   SharedQueueWatcher messageEnqueuedWatcherSetter,
                                   ILoggerFactory loggerFactory,
                                   IQueueProcessorFactory queueProcessorFactory,
                                   QueueCausalityManager queueCausalityManager)
        {
            _queueServiceClient = queueServiceClient ?? throw new ArgumentNullException(nameof(queueServiceClient));
            _queue                        = queue ?? throw new ArgumentNullException(nameof(queue));
            _argumentBinding              = argumentBinding ?? throw new ArgumentNullException(nameof(argumentBinding));
            _bindingDataContract          = CreateBindingDataContract(argumentBinding.BindingDataContract);
            _queueOptions                 = queueOptions ?? throw new ArgumentNullException(nameof(queueOptions));
            _exceptionHandler             = exceptionHandler ?? throw new ArgumentNullException(nameof(exceptionHandler));
            _messageEnqueuedWatcherSetter = messageEnqueuedWatcherSetter ?? throw new ArgumentNullException(nameof(messageEnqueuedWatcherSetter));
            _queueCausalityManager        = queueCausalityManager ?? throw new ArgumentNullException(nameof(queueCausalityManager));

            _parameterName         = parameterName;
            _loggerFactory         = loggerFactory;
            _queueProcessorFactory = queueProcessorFactory;
            _converter             = CreateConverter(_queue);
            _logger = loggerFactory.CreateLogger <QueueTriggerBinding>();
        }
        public BlobTriggerAttributeBindingProvider(INameResolver nameResolver,
                                                   IStorageAccountProvider accountProvider,
                                                   IExtensionTypeLocator extensionTypeLocator,
                                                   IHostIdProvider hostIdProvider,
                                                   IQueueConfiguration queueConfiguration,
                                                   JobHostBlobsConfiguration blobsConfiguration,
                                                   IWebJobsExceptionHandler exceptionHandler,
                                                   IContextSetter <IBlobWrittenWatcher> blobWrittenWatcherSetter,
                                                   IContextSetter <IMessageEnqueuedWatcher> messageEnqueuedWatcherSetter,
                                                   ISharedContextProvider sharedContextProvider,
                                                   SingletonManager singletonManager,
                                                   ILoggerFactory loggerFactory)
        {
            if (extensionTypeLocator == null)
            {
                throw new ArgumentNullException(nameof(extensionTypeLocator));
            }

            _accountProvider              = accountProvider ?? throw new ArgumentNullException(nameof(accountProvider));
            _hostIdProvider               = hostIdProvider ?? throw new ArgumentNullException(nameof(hostIdProvider));
            _queueConfiguration           = queueConfiguration ?? throw new ArgumentNullException(nameof(queueConfiguration));
            _blobsConfiguration           = blobsConfiguration ?? throw new ArgumentNullException(nameof(blobsConfiguration));
            _exceptionHandler             = exceptionHandler ?? throw new ArgumentNullException(nameof(exceptionHandler));
            _blobWrittenWatcherSetter     = blobWrittenWatcherSetter ?? throw new ArgumentNullException(nameof(blobWrittenWatcherSetter));
            _messageEnqueuedWatcherSetter = messageEnqueuedWatcherSetter ?? throw new ArgumentNullException(nameof(messageEnqueuedWatcherSetter));
            _sharedContextProvider        = sharedContextProvider ?? throw new ArgumentNullException(nameof(sharedContextProvider));
            _singletonManager             = singletonManager ?? throw new ArgumentNullException(nameof(singletonManager));

            _nameResolver  = nameResolver;
            _loggerFactory = loggerFactory;
        }
        public QueueListenerFactory(
            QueueServiceClient queueServiceClient,
            QueueClient queue,
            QueuesOptions queueOptions,
            IWebJobsExceptionHandler exceptionHandler,
            SharedQueueWatcher messageEnqueuedWatcherSetter,
            ILoggerFactory loggerFactory,
            ITriggeredFunctionExecutor executor,
            IQueueProcessorFactory queueProcessorFactory,
            QueueCausalityManager queueCausalityManager,
            FunctionDescriptor descriptor
            )
        {
            _queue                        = queue ?? throw new ArgumentNullException(nameof(queue));
            _queueOptions                 = queueOptions ?? throw new ArgumentNullException(nameof(queueOptions));
            _exceptionHandler             = exceptionHandler ?? throw new ArgumentNullException(nameof(exceptionHandler));
            _messageEnqueuedWatcherSetter = messageEnqueuedWatcherSetter ?? throw new ArgumentNullException(nameof(messageEnqueuedWatcherSetter));
            _executor                     = executor ?? throw new ArgumentNullException(nameof(executor));
            _descriptor                   = descriptor ?? throw new ArgumentNullException(nameof(descriptor));
            _queueCausalityManager        = queueCausalityManager ?? throw new ArgumentNullException(nameof(queueCausalityManager));

            _poisonQueue           = CreatePoisonQueueReference(queueServiceClient, queue.Name);
            _loggerFactory         = loggerFactory;
            _queueProcessorFactory = queueProcessorFactory;
        }
        // This will throw if the client credentials are not valid.
        public static async Task <BlobLogListener> CreateAsync(BlobServiceClient blobClient,
                                                               IWebJobsExceptionHandler exceptionHandler, ILogger <BlobListener> logger, CancellationToken cancellationToken)
        {
            await EnableLoggingAsync(blobClient, cancellationToken).ConfigureAwait(false);

            return(new BlobLogListener(blobClient, exceptionHandler, logger));
        }
 public BlobListenerFactory(IHostIdProvider hostIdProvider,
                            QueuesOptions queueOptions,
                            BlobsOptions blobsOptions,
                            IWebJobsExceptionHandler exceptionHandler,
                            IContextSetter <IBlobWrittenWatcher> blobWrittenWatcherSetter,
                            SharedQueueWatcher messageEnqueuedWatcherSetter,
                            ISharedContextProvider sharedContextProvider,
                            ILoggerFactory loggerFactory,
                            string functionId,
                            StorageAccount hostAccount,
                            StorageAccount dataAccount,
                            CloudBlobContainer container,
                            IBlobPathSource input,
                            ITriggeredFunctionExecutor executor,
                            IHostSingletonManager singletonManager)
 {
     _hostIdProvider               = hostIdProvider ?? throw new ArgumentNullException(nameof(hostIdProvider));
     _queueOptions                 = queueOptions ?? throw new ArgumentNullException(nameof(queueOptions));
     _blobsOptions                 = blobsOptions ?? throw new ArgumentNullException(nameof(blobsOptions));
     _exceptionHandler             = exceptionHandler ?? throw new ArgumentNullException(nameof(exceptionHandler));
     _blobWrittenWatcherSetter     = blobWrittenWatcherSetter ?? throw new ArgumentNullException(nameof(blobWrittenWatcherSetter));
     _messageEnqueuedWatcherSetter = messageEnqueuedWatcherSetter ?? throw new ArgumentNullException(nameof(messageEnqueuedWatcherSetter));
     _sharedContextProvider        = sharedContextProvider ?? throw new ArgumentNullException(nameof(sharedContextProvider));
     _loggerFactory                = loggerFactory;
     _functionId       = functionId;
     _hostAccount      = hostAccount ?? throw new ArgumentNullException(nameof(hostAccount));
     _dataAccount      = dataAccount ?? throw new ArgumentNullException(nameof(dataAccount));
     _container        = container ?? throw new ArgumentNullException(nameof(container));
     _input            = input ?? throw new ArgumentNullException(nameof(input));
     _executor         = executor ?? throw new ArgumentNullException(nameof(executor));
     _singletonManager = singletonManager ?? throw new ArgumentNullException(nameof(singletonManager));
 }
Exemple #6
0
        public QueueTriggerAttributeBindingProvider(INameResolver nameResolver,
                                                    QueueServiceClientProvider queueServiceClientProvider,
                                                    IOptions <QueuesOptions> queueOptions,
                                                    IWebJobsExceptionHandler exceptionHandler,
                                                    SharedQueueWatcher messageEnqueuedWatcherSetter,
                                                    ILoggerFactory loggerFactory,
                                                    IQueueProcessorFactory queueProcessorFactory,
                                                    QueueCausalityManager queueCausalityManager)
        {
            _queueServiceClientProvider = queueServiceClientProvider ?? throw new ArgumentNullException(nameof(queueServiceClientProvider));
            _queueOptions                 = (queueOptions ?? throw new ArgumentNullException(nameof(queueOptions))).Value;
            _exceptionHandler             = exceptionHandler ?? throw new ArgumentNullException(nameof(exceptionHandler));
            _messageEnqueuedWatcherSetter = messageEnqueuedWatcherSetter ?? throw new ArgumentNullException(nameof(messageEnqueuedWatcherSetter));
            _queueCausalityManager        = queueCausalityManager ?? throw new ArgumentNullException(nameof(queueCausalityManager));

            _nameResolver          = nameResolver;
            _loggerFactory         = loggerFactory;
            _queueProcessorFactory = queueProcessorFactory;

            _innerProvider =
                new CompositeArgumentBindingProvider(
                    new ConverterArgumentBindingProvider <QueueMessage>(new CloudQueueMessageDirectConverter(), loggerFactory), // $$$: Is this the best way to handle a direct CloudQueueMessage? TODO (kasobol-msft) is this needed?
                    new ConverterArgumentBindingProvider <string>(new StorageQueueMessageToStringConverter(), loggerFactory),
                    new ConverterArgumentBindingProvider <byte[]>(new StorageQueueMessageToByteArrayConverter(), loggerFactory),
                    new ConverterArgumentBindingProvider <BinaryData>(new StorageQueueMessageToBinaryDataConverter(), loggerFactory),
                    new UserTypeArgumentBindingProvider(loggerFactory)); // Must come last, because it will attempt to bind all types.
        }
        public FunctionExecutor(IFunctionInstanceLogger functionInstanceLogger, IFunctionOutputLogger functionOutputLogger,
                                IWebJobsExceptionHandler exceptionHandler, TraceWriter trace, IAsyncCollector <FunctionInstanceLogEntry> functionEventCollector = null,
                                ILoggerFactory loggerFactory = null)
        {
            if (functionInstanceLogger == null)
            {
                throw new ArgumentNullException("functionInstanceLogger");
            }

            if (functionOutputLogger == null)
            {
                throw new ArgumentNullException("functionOutputLogger");
            }

            if (exceptionHandler == null)
            {
                throw new ArgumentNullException("exceptionHandler");
            }

            if (trace == null)
            {
                throw new ArgumentNullException("trace");
            }

            _functionInstanceLogger = functionInstanceLogger;
            _functionOutputLogger   = functionOutputLogger;
            _exceptionHandler       = exceptionHandler;
            _trace = trace;
            _functionEventCollector = functionEventCollector;
            _logger        = loggerFactory?.CreateLogger(LogCategories.Executor);
            _resultsLogger = loggerFactory?.CreateLogger(LogCategories.Results);
        }
 public HeartbeatFunctionExecutor(IRecurrentCommand heartbeatCommand,
                                  IWebJobsExceptionHandler exceptionHandler, IFunctionExecutor innerExecutor)
 {
     _heartbeatCommand = heartbeatCommand;
     _exceptionHandler = exceptionHandler;
     _innerExecutor    = innerExecutor;
 }
Exemple #9
0
 public HeartbeatListener(IRecurrentCommand heartbeatCommand,
                          IWebJobsExceptionHandler exceptionHandler, IListener innerListener)
 {
     _heartbeatCommand = heartbeatCommand;
     _innerListener    = innerListener;
     _timer            = CreateTimer(exceptionHandler);
 }
Exemple #10
0
        public static ITriggerBindingProvider Create(INameResolver nameResolver,
                                                     IStorageAccountProvider storageAccountProvider,
                                                     IExtensionTypeLocator extensionTypeLocator,
                                                     IHostIdProvider hostIdProvider,
                                                     IQueueConfiguration queueConfiguration,
                                                     JobHostBlobsConfiguration blobsConfiguration,
                                                     IWebJobsExceptionHandler exceptionHandler,
                                                     IContextSetter <IMessageEnqueuedWatcher> messageEnqueuedWatcherSetter,
                                                     IContextSetter <IBlobWrittenWatcher> blobWrittenWatcherSetter,
                                                     ISharedContextProvider sharedContextProvider,
                                                     IExtensionRegistry extensions,
                                                     SingletonManager singletonManager,
                                                     TraceWriter trace,
                                                     ILoggerFactory loggerFactory)
        {
            List <ITriggerBindingProvider> innerProviders = new List <ITriggerBindingProvider>();

            innerProviders.Add(new QueueTriggerAttributeBindingProvider(nameResolver, storageAccountProvider,
                                                                        queueConfiguration, exceptionHandler, messageEnqueuedWatcherSetter,
                                                                        sharedContextProvider, trace, loggerFactory));
            innerProviders.Add(new BlobTriggerAttributeBindingProvider(nameResolver, storageAccountProvider, extensionTypeLocator,
                                                                       hostIdProvider, queueConfiguration, blobsConfiguration, exceptionHandler, blobWrittenWatcherSetter,
                                                                       messageEnqueuedWatcherSetter, sharedContextProvider, singletonManager, trace, loggerFactory));

            // add any registered extension binding providers
            foreach (ITriggerBindingProvider provider in extensions.GetExtensions(typeof(ITriggerBindingProvider)))
            {
                innerProviders.Add(provider);
            }

            return(new CompositeTriggerBindingProvider(innerProviders));
        }
        public FunctionExecutor(IFunctionInstanceLogger functionInstanceLogger, IFunctionOutputLogger functionOutputLogger,
                                IWebJobsExceptionHandler exceptionHandler, TraceWriter trace, IAsyncCollector <FunctionInstanceLogEntry> fastLogger = null)
        {
            if (functionInstanceLogger == null)
            {
                throw new ArgumentNullException("functionInstanceLogger");
            }

            if (functionOutputLogger == null)
            {
                throw new ArgumentNullException("functionOutputLogger");
            }

            if (exceptionHandler == null)
            {
                throw new ArgumentNullException("exceptionHandler");
            }

            if (trace == null)
            {
                throw new ArgumentNullException("trace");
            }

            _functionInstanceLogger = functionInstanceLogger;
            _functionOutputLogger   = functionOutputLogger;
            _exceptionHandler       = exceptionHandler;
            _trace      = trace;
            _fastLogger = fastLogger;
        }
        public BlobTriggerAttributeBindingProvider(
            INameResolver nameResolver,
            BlobServiceClientProvider blobServiceClientProvider,
            QueueServiceClientProvider queueServiceClientProvider,
            IHostIdProvider hostIdProvider,
            IOptions <BlobsOptions> blobsOptions,
            IWebJobsExceptionHandler exceptionHandler,
            IContextSetter <IBlobWrittenWatcher> blobWrittenWatcherSetter,
            BlobTriggerQueueWriterFactory blobTriggerQueueWriterFactory,
            ISharedContextProvider sharedContextProvider,
            IHostSingletonManager singletonManager,
            ILoggerFactory loggerFactory)
        {
            _blobServiceClientProvider  = blobServiceClientProvider ?? throw new ArgumentNullException(nameof(blobServiceClientProvider));
            _queueServiceClientProvider = queueServiceClientProvider ?? throw new ArgumentNullException(nameof(queueServiceClientProvider));
            _hostIdProvider             = hostIdProvider ?? throw new ArgumentNullException(nameof(hostIdProvider));
            _blobsOptions                  = (blobsOptions ?? throw new ArgumentNullException(nameof(blobsOptions))).Value;
            _exceptionHandler              = exceptionHandler ?? throw new ArgumentNullException(nameof(exceptionHandler));
            _blobWrittenWatcherSetter      = blobWrittenWatcherSetter ?? throw new ArgumentNullException(nameof(blobWrittenWatcherSetter));
            _blobTriggerQueueWriterFactory = blobTriggerQueueWriterFactory ?? throw new ArgumentNullException(nameof(blobTriggerQueueWriterFactory));
            _sharedContextProvider         = sharedContextProvider ?? throw new ArgumentNullException(nameof(sharedContextProvider));
            _singletonManager              = singletonManager ?? throw new ArgumentNullException(nameof(singletonManager));

            _nameResolver  = nameResolver;
            _loggerFactory = loggerFactory;
            _logger        = loggerFactory.CreateLogger <BlobTriggerAttributeBindingProvider>();
        }
 public BlobListenerFactory(IHostIdProvider hostIdProvider,
                            BlobsOptions blobsOptions,
                            IWebJobsExceptionHandler exceptionHandler,
                            IContextSetter <IBlobWrittenWatcher> blobWrittenWatcherSetter,
                            SharedQueueWatcher messageEnqueuedWatcherSetter,
                            ISharedContextProvider sharedContextProvider,
                            ILoggerFactory loggerFactory,
                            FunctionDescriptor functionDescriptor,
                            BlobServiceClient hostBlobServiceClient,
                            QueueServiceClient hostQueueServiceClient,
                            BlobServiceClient dataBlobServiceClient,
                            QueueServiceClient dataQueueServiceClient,
                            BlobContainerClient container,
                            IBlobPathSource input,
                            ITriggeredFunctionExecutor executor,
                            IHostSingletonManager singletonManager)
 {
     _hostIdProvider               = hostIdProvider ?? throw new ArgumentNullException(nameof(hostIdProvider));
     _blobsOptions                 = blobsOptions ?? throw new ArgumentNullException(nameof(blobsOptions));
     _exceptionHandler             = exceptionHandler ?? throw new ArgumentNullException(nameof(exceptionHandler));
     _blobWrittenWatcherSetter     = blobWrittenWatcherSetter ?? throw new ArgumentNullException(nameof(blobWrittenWatcherSetter));
     _messageEnqueuedWatcherSetter = messageEnqueuedWatcherSetter ?? throw new ArgumentNullException(nameof(messageEnqueuedWatcherSetter));
     _sharedContextProvider        = sharedContextProvider ?? throw new ArgumentNullException(nameof(sharedContextProvider));
     _functionDescriptor           = functionDescriptor ?? throw new ArgumentNullException(nameof(functionDescriptor));
     _loggerFactory                = loggerFactory;
     _hostBlobServiceClient        = hostBlobServiceClient ?? throw new ArgumentNullException(nameof(hostBlobServiceClient));
     _hostQueueServiceClient       = hostQueueServiceClient ?? throw new ArgumentNullException(nameof(hostQueueServiceClient));
     _dataBlobServiceClient        = dataBlobServiceClient ?? throw new ArgumentNullException(nameof(dataBlobServiceClient));
     _dataQueueServiceClient       = dataQueueServiceClient ?? throw new ArgumentNullException(nameof(dataQueueServiceClient));
     _container        = container ?? throw new ArgumentNullException(nameof(container));
     _input            = input ?? throw new ArgumentNullException(nameof(input));
     _executor         = executor ?? throw new ArgumentNullException(nameof(executor));
     _singletonManager = singletonManager ?? throw new ArgumentNullException(nameof(singletonManager));
 }
Exemple #14
0
 public SharedBlobListener(string hostId, StorageAccount storageAccount,
                           IWebJobsExceptionHandler exceptionHandler)
 {
     _strategy = CreateStrategy(hostId, storageAccount);
     // Start the first iteration immediately.
     _timer = new TaskSeriesTimer(_strategy, exceptionHandler, initialWait: Task.Delay(0));
 }
Exemple #15
0
        public WebScriptHostManager(ScriptHostConfiguration config, ISecretManagerFactory secretManagerFactory, ScriptSettingsManager settingsManager, WebHostSettings webHostSettings, IScriptHostFactory scriptHostFactory = null, ISecretsRepositoryFactory secretsRepositoryFactory = null)
            : base(config, settingsManager, scriptHostFactory)
        {
            _config           = config;
            _metricsLogger    = new WebHostMetricsLogger();
            _exceptionHandler = new WebScriptHostExceptionHandler(this);
            _webHostSettings  = webHostSettings;

            var systemEventGenerator = config.HostConfig.GetService <IEventGenerator>() ?? new EventGenerator();
            var systemTraceWriter    = new SystemTraceWriter(systemEventGenerator, settingsManager, TraceLevel.Verbose);

            if (config.TraceWriter != null)
            {
                config.TraceWriter = new CompositeTraceWriter(new TraceWriter[] { config.TraceWriter, systemTraceWriter });
            }
            else
            {
                config.TraceWriter = systemTraceWriter;
            }

            config.IsSelfHost = webHostSettings.IsSelfHost;

            _performanceManager     = new HostPerformanceManager(settingsManager, config.TraceWriter);
            _swaggerDocumentManager = new SwaggerDocumentManager(config);

            var secretsRepository = secretsRepositoryFactory.Create(settingsManager, webHostSettings, config);

            _secretManager = secretManagerFactory.Create(settingsManager, config.TraceWriter, secretsRepository);
        }
Exemple #16
0
        private async Task RunTimeoutTest(IWebJobsExceptionHandler exceptionHandler, Type expectedExceptionType, string functionName)
        {
            TestTraceWriter trace = new TestTraceWriter(TraceLevel.Verbose);

            _hostConfig.Tracing.Tracers.Add(trace);
            _hostConfig.AddService <IWebJobsExceptionHandler>(exceptionHandler);
            JobHost host = new JobHost(_hostConfig);

            try
            {
                await host.StartAsync();

                MethodInfo methodInfo = GetType().GetMethod(functionName);
                Exception  ex         = await Assert.ThrowsAnyAsync <Exception>(async() =>
                {
                    await host.CallAsync(methodInfo);
                });

                Assert.IsType(expectedExceptionType, ex);
            }
            finally
            {
                host.Stop();
            }

            // We expect 3 error messages total
            TraceEvent[] traceErrors = trace.Traces.Where(p => p.Level == TraceLevel.Error).ToArray();
            Assert.Equal(3, traceErrors.Length);
            Assert.True(traceErrors[0].Message.StartsWith(string.Format("Timeout value of 00:00:01 exceeded by function 'AsyncChainEndToEndTests.{0}'", functionName)));
            Assert.True(traceErrors[1].Message.StartsWith(string.Format("Executed 'AsyncChainEndToEndTests.{0}' (Failed, Id=", functionName)));
            Assert.True(traceErrors[2].Message.Trim().StartsWith("Function had errors. See Azure WebJobs SDK dashboard for details."));
        }
        public BlobTriggerBinding(ParameterInfo parameter,
                                  BlobServiceClient hostBlobServiceClient,
                                  QueueServiceClient hostQueueServiceClient,
                                  BlobServiceClient dataBlobServiceClient,
                                  QueueServiceClient dataQueueServiceClient,
                                  IBlobPathSource path,
                                  IHostIdProvider hostIdProvider,
                                  BlobsOptions blobsOptions,
                                  IWebJobsExceptionHandler exceptionHandler,
                                  IContextSetter <IBlobWrittenWatcher> blobWrittenWatcherSetter,
                                  SharedQueueWatcher messageEnqueuedWatcherSetter,
                                  ISharedContextProvider sharedContextProvider,
                                  IHostSingletonManager singletonManager,
                                  ILoggerFactory loggerFactory)
        {
            _parameter              = parameter ?? throw new ArgumentNullException(nameof(parameter));
            _hostBlobServiceClient  = hostBlobServiceClient ?? throw new ArgumentNullException(nameof(hostBlobServiceClient));
            _hostQueueServiceClient = hostQueueServiceClient ?? throw new ArgumentNullException(nameof(hostQueueServiceClient));
            _dataBlobServiceClient  = dataBlobServiceClient ?? throw new ArgumentNullException(nameof(dataBlobServiceClient));
            _dataQueueServiceClient = dataQueueServiceClient ?? throw new ArgumentNullException(nameof(dataQueueServiceClient));

            _accountName                  = _dataBlobServiceClient.AccountName;
            _path                         = path ?? throw new ArgumentNullException(nameof(path));
            _hostIdProvider               = hostIdProvider ?? throw new ArgumentNullException(nameof(hostIdProvider));
            _blobsOptions                 = blobsOptions ?? throw new ArgumentNullException(nameof(blobsOptions));
            _exceptionHandler             = exceptionHandler ?? throw new ArgumentNullException(nameof(exceptionHandler));
            _blobWrittenWatcherSetter     = blobWrittenWatcherSetter ?? throw new ArgumentNullException(nameof(blobWrittenWatcherSetter));
            _messageEnqueuedWatcherSetter = messageEnqueuedWatcherSetter ?? throw new ArgumentNullException(nameof(messageEnqueuedWatcherSetter));
            _sharedContextProvider        = sharedContextProvider ?? throw new ArgumentNullException(nameof(sharedContextProvider));
            _singletonManager             = singletonManager ?? throw new ArgumentNullException(nameof(singletonManager));
            _loggerFactory                = loggerFactory;
            _converter                    = CreateConverter(_dataBlobServiceClient);
            _bindingDataContract          = CreateBindingDataContract(path);
        }
        public WebScriptHostManager(ScriptHostConfiguration config,
                                    ISecretManagerFactory secretManagerFactory,
                                    IScriptEventManager eventManager,
                                    ScriptSettingsManager settingsManager,
                                    WebHostSettings webHostSettings,
                                    IWebJobsRouter router,
                                    ILoggerFactory loggerFactory,
                                    IScriptHostFactory scriptHostFactory = null,
                                    ISecretsRepositoryFactory secretsRepositoryFactory = null,
                                    HostPerformanceManager hostPerformanceManager      = null,
                                    ILoggerProviderFactory loggerProviderFactory       = null,
                                    int hostTimeoutSeconds = 30,
                                    int hostPollingIntervalMilliseconds = 500)
            : base(config, settingsManager, scriptHostFactory, eventManager, environment: null,
                   hostPerformanceManager: hostPerformanceManager, loggerProviderFactory: loggerProviderFactory)
        {
            _config = config;

            _metricsLogger      = new WebHostMetricsLogger();
            _exceptionHandler   = new WebScriptHostExceptionHandler(this);
            _webHostSettings    = webHostSettings;
            _settingsManager    = settingsManager;
            _hostTimeoutSeconds = hostTimeoutSeconds;
            _hostRunningPollIntervalMilliseconds = hostPollingIntervalMilliseconds;
            _router = router;

            config.IsSelfHost = webHostSettings.IsSelfHost;

            secretsRepositoryFactory = secretsRepositoryFactory ?? new DefaultSecretsRepositoryFactory();
            var secretsRepository = secretsRepositoryFactory.Create(settingsManager, webHostSettings, config);

            _secretManager = secretManagerFactory.Create(settingsManager, loggerFactory.CreateLogger(ScriptConstants.LogCategoryHostGeneral), secretsRepository);

            _bindingWebHookProvider = new WebJobsSdkExtensionHookProvider(_secretManager);
        }
Exemple #19
0
        public BlobTriggerAttributeBindingProvider(INameResolver nameResolver,
                                                   StorageAccountProvider accountProvider,
                                                   IHostIdProvider hostIdProvider,
                                                   IOptions <QueuesOptions> queueOptions,
                                                   IOptions <BlobsOptions> blobsOptions,
                                                   IWebJobsExceptionHandler exceptionHandler,
                                                   IContextSetter <IBlobWrittenWatcher> blobWrittenWatcherSetter,
                                                   SharedQueueWatcher messageEnqueuedWatcherSetter,
                                                   ISharedContextProvider sharedContextProvider,
                                                   IHostSingletonManager singletonManager,
                                                   ILoggerFactory loggerFactory)
        {
            _accountProvider              = accountProvider ?? throw new ArgumentNullException(nameof(accountProvider));
            _hostIdProvider               = hostIdProvider ?? throw new ArgumentNullException(nameof(hostIdProvider));
            _queueOptions                 = (queueOptions ?? throw new ArgumentNullException(nameof(queueOptions))).Value;
            _blobsOptions                 = (blobsOptions ?? throw new ArgumentNullException(nameof(blobsOptions))).Value;
            _exceptionHandler             = exceptionHandler ?? throw new ArgumentNullException(nameof(exceptionHandler));
            _blobWrittenWatcherSetter     = blobWrittenWatcherSetter ?? throw new ArgumentNullException(nameof(blobWrittenWatcherSetter));
            _messageEnqueuedWatcherSetter = messageEnqueuedWatcherSetter ?? throw new ArgumentNullException(nameof(messageEnqueuedWatcherSetter));
            _sharedContextProvider        = sharedContextProvider ?? throw new ArgumentNullException(nameof(sharedContextProvider));
            _singletonManager             = singletonManager ?? throw new ArgumentNullException(nameof(singletonManager));

            _nameResolver  = nameResolver;
            _loggerFactory = loggerFactory;
        }
        public QueueListener(IStorageQueue queue,
                             IStorageQueue poisonQueue,
                             ITriggerExecutor <IStorageQueueMessage> triggerExecutor,
                             IWebJobsExceptionHandler exceptionHandler,
                             ILoggerFactory loggerFactory,
                             SharedQueueWatcher sharedWatcher,
                             IQueueConfiguration queueConfiguration,
                             QueueProcessor queueProcessor = null,
                             TimeSpan?maxPollingInterval   = null)
        {
            if (queueConfiguration == null)
            {
                throw new ArgumentNullException("queueConfiguration");
            }

            if (queueConfiguration.BatchSize <= 0)
            {
                throw new ArgumentException("BatchSize must be greater than zero.");
            }

            if (queueConfiguration.MaxDequeueCount <= 0)
            {
                throw new ArgumentException("MaxDequeueCount must be greater than zero.");
            }

            _timer              = new TaskSeriesTimer(this, exceptionHandler, Task.Delay(0));
            _queue              = queue;
            _poisonQueue        = poisonQueue;
            _triggerExecutor    = triggerExecutor;
            _exceptionHandler   = exceptionHandler;
            _queueConfiguration = queueConfiguration;

            // if the function runs longer than this, the invisibility will be updated
            // on a timer periodically for the duration of the function execution
            _visibilityTimeout = TimeSpan.FromMinutes(10);

            if (sharedWatcher != null)
            {
                // Call Notify whenever a function adds a message to this queue.
                sharedWatcher.Register(queue.Name, this);
                _sharedWatcher = sharedWatcher;
            }

            EventHandler <PoisonMessageEventArgs> poisonMessageEventHandler = _sharedWatcher != null ? OnMessageAddedToPoisonQueue : (EventHandler <PoisonMessageEventArgs>)null;

            _queueProcessor = queueProcessor ?? CreateQueueProcessor(
                _queue.SdkObject, _poisonQueue != null ? _poisonQueue.SdkObject : null,
                loggerFactory, _queueConfiguration, poisonMessageEventHandler);

            TimeSpan maximumInterval = _queueProcessor.MaxPollingInterval;

            if (maxPollingInterval.HasValue && maximumInterval > maxPollingInterval.Value)
            {
                // enforce the maximum polling interval if specified
                maximumInterval = maxPollingInterval.Value;
            }

            _delayStrategy = new RandomizedExponentialBackoffStrategy(QueuePollingIntervals.Minimum, maximumInterval);
        }
        private BlobLogListener(BlobServiceClient blobClient, IWebJobsExceptionHandler exceptionHandler, ILogger <BlobListener> logger)
        {
            _blobClient       = blobClient;
            _exceptionHandler = exceptionHandler ?? throw new ArgumentNullException(nameof(exceptionHandler));

            _logger = logger ?? throw new ArgumentNullException(nameof(logger));
            _parser = new StorageAnalyticsLogParser(logger);
        }
Exemple #22
0
        public static ITaskSeriesTimer CreateTimer(IRecurrentCommand command, TimeSpan initialInterval,
                                                   TimeSpan delayInterval, IWebJobsExceptionHandler exceptionHandler)
        {
            IDelayStrategy     delayStrategy = new FixedDelayStrategy(delayInterval);
            ITaskSeriesCommand timerCommand  = new RecurrentTaskSeriesCommand(command, delayStrategy);

            return(new TaskSeriesTimer(timerCommand, exceptionHandler, Task.Delay(initialInterval)));
        }
        public static ITaskSeriesTimer CreateTimer(IRecurrentCommand command, TimeSpan normalInterval,
                                                   TimeSpan minimumInterval, IWebJobsExceptionHandler exceptionHandler)
        {
            IDelayStrategy     delayStrategy = new LinearSpeedupStrategy(normalInterval, minimumInterval);
            ITaskSeriesCommand timerCommand  = new RecurrentTaskSeriesCommand(command, delayStrategy);

            return(new TaskSeriesTimer(timerCommand, exceptionHandler, Task.Delay(normalInterval)));
        }
Exemple #24
0
        // Begin watchers.
        public ValueWatcher(IReadOnlyDictionary <string, IWatcher> watches, CloudBlockBlob blobResults,
                            TextWriter consoleOutput, IWebJobsExceptionHandler exceptionHandler)
        {
            ValueWatcherCommand command = new ValueWatcherCommand(watches, blobResults, consoleOutput);

            _command = command;
            _timer   = ValueWatcherCommand.CreateTimer(command, exceptionHandler);
            _timer.Start();
        }
Exemple #25
0
        public QueueTriggerBinding(string parameterName,
                                   IStorageQueue queue,
                                   ITriggerDataArgumentBinding <IStorageQueueMessage> argumentBinding,
                                   IQueueConfiguration queueConfiguration,
                                   IWebJobsExceptionHandler exceptionHandler,
                                   IContextSetter <IMessageEnqueuedWatcher> messageEnqueuedWatcherSetter,
                                   ISharedContextProvider sharedContextProvider,
                                   TraceWriter trace,
                                   ILoggerFactory loggerFactory)
        {
            if (queue == null)
            {
                throw new ArgumentNullException("queue");
            }

            if (argumentBinding == null)
            {
                throw new ArgumentNullException("argumentBinding");
            }

            if (queueConfiguration == null)
            {
                throw new ArgumentNullException("queueConfiguration");
            }

            if (exceptionHandler == null)
            {
                throw new ArgumentNullException("exceptionHandler");
            }

            if (messageEnqueuedWatcherSetter == null)
            {
                throw new ArgumentNullException("messageEnqueuedWatcherSetter");
            }

            if (sharedContextProvider == null)
            {
                throw new ArgumentNullException("sharedContextProvider");
            }

            if (trace == null)
            {
                throw new ArgumentNullException("trace");
            }

            _parameterName                = parameterName;
            _queue                        = queue;
            _argumentBinding              = argumentBinding;
            _bindingDataContract          = CreateBindingDataContract(argumentBinding.BindingDataContract);
            _queueConfiguration           = queueConfiguration;
            _exceptionHandler             = exceptionHandler;
            _messageEnqueuedWatcherSetter = messageEnqueuedWatcherSetter;
            _sharedContextProvider        = sharedContextProvider;
            _trace                        = trace;
            _loggerFactory                = loggerFactory;
            _converter                    = CreateConverter(queue);
        }
Exemple #26
0
 public SingletonManager(IStorageAccountProvider accountProvider, IWebJobsExceptionHandler exceptionHandler, SingletonConfiguration config, TraceWriter trace, IHostIdProvider hostIdProvider, INameResolver nameResolver = null)
 {
     _accountProvider  = accountProvider;
     _nameResolver     = nameResolver;
     _exceptionHandler = exceptionHandler;
     _config           = config;
     _trace            = trace;
     _hostIdProvider   = hostIdProvider;
 }
 public ScanBlobScanLogHybridPollingStrategy(IBlobScanInfoManager blobScanInfoManager, IWebJobsExceptionHandler exceptionHandler, ILogger <BlobListener> logger) : base()
 {
     _blobScanInfoManager              = blobScanInfoManager;
     _scanInfo                         = new Dictionary <BlobContainerClient, ContainerScanInfo>(new CloudBlobContainerComparer());
     _pollLogStrategy                  = new PollLogsStrategy(exceptionHandler, logger, performInitialScan: false);
     _cancellationTokenSource          = new CancellationTokenSource();
     _blobsFoundFromScanOrNotification = new ConcurrentQueue <BlobNotification>();
     _exceptionHandler                 = exceptionHandler ?? throw new ArgumentNullException(nameof(exceptionHandler));
     _logger = logger ?? throw new ArgumentNullException(nameof(logger));
 }
Exemple #28
0
        public QueueListenerFactory(IStorageQueue queue,
                                    IQueueConfiguration queueConfiguration,
                                    IWebJobsExceptionHandler exceptionHandler,
                                    IContextSetter <IMessageEnqueuedWatcher> messageEnqueuedWatcherSetter,
                                    ISharedContextProvider sharedContextProvider,
                                    TraceWriter trace,
                                    ILoggerFactory loggerFactory,
                                    ITriggeredFunctionExecutor executor)
        {
            if (queue == null)
            {
                throw new ArgumentNullException("queue");
            }

            if (queueConfiguration == null)
            {
                throw new ArgumentNullException("queueConfiguration");
            }

            if (exceptionHandler == null)
            {
                throw new ArgumentNullException("exceptionHandler");
            }

            if (messageEnqueuedWatcherSetter == null)
            {
                throw new ArgumentNullException("messageEnqueuedWatcherSetter");
            }

            if (sharedContextProvider == null)
            {
                throw new ArgumentNullException("sharedContextProvider");
            }

            if (trace == null)
            {
                throw new ArgumentNullException("trace");
            }

            if (executor == null)
            {
                throw new ArgumentNullException("executor");
            }

            _queue                        = queue;
            _poisonQueue                  = CreatePoisonQueueReference(queue.ServiceClient, queue.Name);
            _queueConfiguration           = queueConfiguration;
            _exceptionHandler             = exceptionHandler;
            _messageEnqueuedWatcherSetter = messageEnqueuedWatcherSetter;
            _sharedContextProvider        = sharedContextProvider;
            _trace                        = trace;
            _loggerFactory                = loggerFactory;
            _executor                     = executor;
        }
Exemple #29
0
        public SharedBlobQueueListenerFactory(
            IStorageAccount hostAccount,
            SharedQueueWatcher sharedQueueWatcher,
            IStorageQueue hostBlobTriggerQueue,
            IQueueConfiguration queueConfiguration,
            IWebJobsExceptionHandler exceptionHandler,
            TraceWriter trace,
            ILoggerFactory loggerFactory,
            IBlobWrittenWatcher blobWrittenWatcher)
        {
            if (hostAccount == null)
            {
                throw new ArgumentNullException("hostAccount");
            }

            if (sharedQueueWatcher == null)
            {
                throw new ArgumentNullException("sharedQueueWatcher");
            }

            if (hostBlobTriggerQueue == null)
            {
                throw new ArgumentNullException("hostBlobTriggerQueue");
            }

            if (queueConfiguration == null)
            {
                throw new ArgumentNullException("queueConfiguration");
            }

            if (exceptionHandler == null)
            {
                throw new ArgumentNullException("exceptionHandler");
            }

            if (trace == null)
            {
                throw new ArgumentNullException("trace");
            }

            if (blobWrittenWatcher == null)
            {
                throw new ArgumentNullException("blobWrittenWatcher");
            }

            _hostAccount          = hostAccount;
            _sharedQueueWatcher   = sharedQueueWatcher;
            _hostBlobTriggerQueue = hostBlobTriggerQueue;
            _queueConfiguration   = queueConfiguration;
            _exceptionHandler     = exceptionHandler;
            _trace              = trace;
            _loggerFactory      = loggerFactory;
            _blobWrittenWatcher = blobWrittenWatcher;
        }
Exemple #30
0
        private ITaskSeriesTimer CreateLeaseRenewalTimer(IStorageBlockBlob leaseBlob, string leaseId, string lockId, TimeSpan leasePeriod,
                                                         IWebJobsExceptionHandler exceptionHandler)
        {
            // renew the lease when it is halfway to expiring
            TimeSpan normalUpdateInterval = new TimeSpan(leasePeriod.Ticks / 2);

            IDelayStrategy     speedupStrategy = new LinearSpeedupStrategy(normalUpdateInterval, MinimumLeaseRenewalInterval);
            ITaskSeriesCommand command         = new RenewLeaseCommand(leaseBlob, leaseId, lockId, speedupStrategy, _trace);

            return(new TaskSeriesTimer(command, exceptionHandler, Task.Delay(normalUpdateInterval)));
        }
        public WebScriptHostManager(ScriptHostConfiguration config, ISecretManagerFactory secretManagerFactory, ScriptSettingsManager settingsManager, WebHostSettings webHostSettings, IScriptHostFactory scriptHostFactory = null)
            : base(config, settingsManager, scriptHostFactory)
        {
            _config = config;
            _metricsLogger = new WebHostMetricsLogger();
            _exceptionHandler = new WebScriptHostExceptionHandler(this);
            _webHostSettings = webHostSettings;

            var systemEventGenerator = config.HostConfig.GetService<IEventGenerator>() ?? new EventGenerator();
            var systemTraceWriter = new SystemTraceWriter(systemEventGenerator, settingsManager, TraceLevel.Verbose);
            if (config.TraceWriter != null)
            {
                config.TraceWriter = new CompositeTraceWriter(new TraceWriter[] { config.TraceWriter, systemTraceWriter });
            }
            else
            {
                config.TraceWriter = systemTraceWriter;
            }

            _secretManager = secretManagerFactory.Create(settingsManager, config.TraceWriter, webHostSettings.SecretsPath);
        }