예제 #1
0
        static void Main()
        {
            // Ensure the storage emulator is running
            AzureEmulatorManager.EnsureStorageEmulatorIsStarted();

            // If you want to see tracing from the Picton libary, change the LogLevel to 'Trace'
            var minLogLevel = Logging.LogLevel.Debug;

            // Configure logging to the console
            var logProvider = new ColoredConsoleLogProvider(minLogLevel);
            var logger      = logProvider.GetLogger("Main");

            LogProvider.SetCurrentLogProvider(logProvider);

            // Ensure the Console is tall enough
            Console.WindowHeight = Math.Min(60, Console.LargestWindowHeight);

            // Configure where metrics are published to
            var datadogApiKey = Environment.GetEnvironmentVariable("DATADOG_APIKEY");
            var metrics       = new MetricsBuilder()
                                .Report.OverHttp(o =>
            {
                o.HttpSettings.RequestUri = new Uri($"https://app.datadoghq.com/api/v1/series?api_key={datadogApiKey}");
                o.MetricsOutputFormatter  = new DatadogFormatter(new DatadogFormatterOptions {
                    Hostname = Environment.MachineName
                });
                o.FlushInterval = TimeSpan.FromSeconds(2);
            })
                                .Build();

            // Send metrics to Datadog
            var sendMetricsJob = new AppMetricsTaskScheduler(
                TimeSpan.FromSeconds(2),
                async() =>
            {
                await Task.WhenAll(metrics.ReportRunner.RunAllAsync());
            });

            sendMetricsJob.Start();

            // Setup the message queue in Azure storage emulator
            var storageAccount = CloudStorageAccount.DevelopmentStorageAccount;
            var queueName      = "myqueue";

            logger(Logging.LogLevel.Info, () => "Begin integration tests...");

            var numberOfMessages = 25;

            logger(Logging.LogLevel.Info, () => $"Adding {numberOfMessages} string messages to the queue...");
            AddStringMessagesToQueue(numberOfMessages, queueName, storageAccount, logProvider).Wait();
            logger(Logging.LogLevel.Info, () => "Processing the messages in the queue...");
            ProcessSimpleMessages(queueName, storageAccount, logProvider, metrics);

            logger(Logging.LogLevel.Info, () => $"Adding {numberOfMessages} simple messages to the queue...");
            AddSimpleMessagesToQueue(numberOfMessages, queueName, storageAccount, logProvider).Wait();
            logger(Logging.LogLevel.Info, () => "Processing the messages in the queue...");
            ProcessSimpleMessages(queueName, storageAccount, logProvider, metrics);

            logger(Logging.LogLevel.Info, () => $"Adding {numberOfMessages} messages with handlers to the queue...");
            AddMessagesWithHandlerToQueue(numberOfMessages, queueName, storageAccount, logProvider).Wait();
            logger(Logging.LogLevel.Info, () => "Processing the messages in the queue...");
            ProcessMessagesWithHandlers(queueName, storageAccount, logProvider, metrics);

            // Flush the console key buffer
            while (Console.KeyAvailable)
            {
                Console.ReadKey(true);
            }

            // Wait for user to press a key
            logger(Logging.LogLevel.Info, () => "Press any key to exit...");
            Console.ReadKey();
        }
예제 #2
0
        public MyMessageHandler()
        {
            var logProvider = new ColoredConsoleLogProvider(Logging.LogLevel.Debug);

            _logger = logProvider.GetLogger("MyMessageHandler");
        }