public async Task HandleAsync()

in processing-pipelines/image-v2/labeler/csharp/Function.cs [45:81]


        public async Task HandleAsync(HttpContext context)
        {
            _logger.LogInformation("Function received request");

            try
            {
                var (bucket, file) = await _requestReader.ReadCloudStorageData(context);

                var storageUrl = $"gs://{bucket}/{file}";
                _logger.LogInformation($"Storage url: {storageUrl}");

                var labels = await ExtractLabelsAsync(storageUrl);
                var allLabels = string.Join(",", labels);
                _logger.LogInformation($"This picture is labelled: {allLabels}");

                using (var outputStream = new MemoryStream(Encoding.UTF8.GetBytes(allLabels)))
                {
                    var outputObjectName = $"{Path.GetFileNameWithoutExtension(file)}-labels.txt";
                    var client = await StorageClient.CreateAsync();
                    await client.UploadObjectAsync(_outputBucket, outputObjectName, "text/plain", outputStream);
                    _logger.LogInformation($"Uploaded '{outputObjectName}' to bucket '{_outputBucket}'");
                }

                var topThreeLabels = string.Join(",", labels.Take(3));
                var replyData = new {labels = topThreeLabels};
                var json = JsonConvert.SerializeObject(replyData);
                _logger.LogInformation($"Replying back with json: {json}");

                context.Response.ContentType = "application/json";
                await context.Response.WriteAsync(json);
            }
            catch (Exception e)
            {
                _logger.LogError($"Error processing: " + e.Message);
                throw e;
            }
        }