Exemplo n.º 1
0
        // public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
        // {
        //     FunctionsHostBuilderContext context = builder.GetContext();

        //     Envs.Load();

        //     // KeyVault
        //     var secretClient = new SecretClient(new Uri(Env.GetString("AZURE_KEYVAULT_ENDPOINT")), Identity.GetCredentialChain());
        //     var storageConnectionString = secretClient.GetSecret(Env.GetString("AZURE_STORAGE_CONNECTION_STRING_SECRET_NAME"));
        //     var signalRConnectionString = secretClient.GetSecret(Env.GetString("AZURE_SIGNALR_CONNECTION_STRING_SECRET_NAME"));

        //     //Environment.SetEnvironmentVariable("Values:AzureWebJobsStorage", storageConnectionString.Value.Value);

        //     builder.ConfigurationBuilder
        //     .AddInMemoryCollection(new Dictionary<string, string> {
        //         { "ClientSyncQueueConnectionString", storageConnectionString.Value.Value },
        //         { "AzureSignalRConnectionString", signalRConnectionString.Value.Value }
        //     })
        //     .AddEnvironmentVariables();
        // }

        public override void Configure(IFunctionsHostBuilder builder)
        {
            //FunctionsHostBuilderContext context = builder.GetContext();

            Envs.Load();

            // KeyVault
            var secretClient            = new SecretClient(new Uri(Env.GetString("AZURE_KEYVAULT_ENDPOINT")), Identity.GetCredentialChain());
            var storageConnectionString = secretClient.GetSecret(Env.GetString("AZURE_STORAGE_CONNECTION_STRING_SECRET_NAME"));
            var signalRConnectionString = secretClient.GetSecret(Env.GetString("AZURE_SIGNALR_CONNECTION_STRING_SECRET_NAME"));

            //Environment.SetEnvironmentVariable("Values:AzureWebJobsStorage", storageConnectionString.Value.Value);
            var config = new ConfigurationBuilder()
                         .AddInMemoryCollection(new Dictionary <string, string> {
                { "ClientSyncQueueConnectionString", storageConnectionString.Value.Value },
                { "AzureSignalRConnectionString", signalRConnectionString.Value.Value }
            })
                         .AddEnvironmentVariables().Build();

            builder.Services.AddSingleton <IConfiguration>(config);
        }
Exemplo n.º 2
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            Envs.Load();

            services.AddSingleton(typeof(Clients));
            services.AddHostedService <DataHostedService>();
            services.AddSignalR();
            services.AddControllers();
            services.AddCors(options =>
            {
                options.AddPolicy(CorsOrigins,
                                  builder => builder.AllowAnyOrigin()
                                  .AllowAnyMethod()
                                  .AllowAnyHeader());
            });

            services.AddResponseCompression(opts =>
            {
                opts.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(
                    new[] { "application/octet-stream" });
            });
        }
Exemplo n.º 3
0
        static async Task Main(string[] args)
        {
            Envs.Load();

            //using var listener = AzureEventSourceListener.CreateConsoleLogger();

            var clients = new Clients();
            await clients.InitializeAsync();

            while (true)
            {
                Console.WriteLine("Receiving Messages...");

                // Get Messages
                var messages = await clients.QueueClient.ReceiveMessagesAsync(maxMessages : Env.GetInt("AZURE_STORAGE_QUEUE_MSG_COUNT", 10));

                foreach (var message in messages.Value)
                {
                    try
                    {
                        Console.WriteLine(message.MessageText);

                        // Deserialize Message
                        var image = clients.DataProvider.DeserializeImage(message.MessageText);

                        // Extract Text from Image
                        try
                        {
                            var recognizeContentOperation = await clients.FormRecognizerClient.StartRecognizeContentFromUriAsync(new Uri(image.BlobUri));

                            var recognizeContentCompletion = await recognizeContentOperation.WaitForCompletionAsync();

                            var content = recognizeContentCompletion.Value;
                            var text    = content.SelectMany(page => page.Lines).Aggregate(new StringBuilder(), (a, b) =>
                            {
                                a.Append($"{b.Text} ");
                                return(a);
                            });

                            image.Text = text.ToString();
                        }
                        catch (Exception ex)
                        {
                            image.Error = ex.Message.ToString();
                            Console.WriteLine(ex.ToString());
                        }


                        if (!string.IsNullOrEmpty(image.Text))
                        {
                            try
                            {
                                Console.WriteLine($"Image Text: {image.Text}");

                                // Analyize Text Sentiment
                                var documentSentiment = await clients.TextAnalyticsClient.AnalyzeSentimentAsync(image.Text);

                                image.Sentiment = documentSentiment.Value.Sentiment.ToString();

                                Console.WriteLine($"Image Sentiment: {image.Sentiment}");
                            }
                            catch (Exception ex)
                            {
                                image.Error = ex.Message.ToString();
                                Console.WriteLine(ex.ToString());
                            }
                        }
                        else
                        {
                            image.Text = "No Text Extracted from Image.";
                            Console.WriteLine(image.Text);
                        }

                        image.Status = "Completed";

                        // Save Document
                        image = await clients.DataProvider.UpsertImageAsync(image);

                        Console.WriteLine($"Document Saved: {image.Id}");

                        // Delete Queue Message
                        var deleteResponse = await clients.QueueClient.DeleteMessageAsync(message.MessageId, message.PopReceipt);

                        Console.WriteLine($"Queue Message Deleted: {message.MessageId}");

                        // Enqueue message to Client Sync Queue
                        var sendReceipt = await clients.ClientSyncQueueClient.SendMessageAsync(
                            Convert.ToBase64String(Encoding.UTF8.GetBytes(JsonSerializer.Serialize <IImage>(image,
                                                                                                            new JsonSerializerOptions {
                            PropertyNamingPolicy = JsonNamingPolicy.CamelCase
                        })
                                                                          )));

                        Console.WriteLine($"Added to Client Sync Queue: {sendReceipt.Value.MessageId}");
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.ToString());
                    }
                }
                await Task.Delay(TimeSpan.FromSeconds(Env.GetInt("AZURE_STORAGE_QUEUE_RECEIVE_SLEEP", 1)));
            }
        }