// 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); }
// 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" }); }); }
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))); } }