public async Task <APIGatewayProxyResponse> FunctionHandler(APIGatewayProxyRequest apigProxyEvent, ILambdaContext context) { var regionFromEnv = Environment.GetEnvironmentVariable("AWS_REGION"); Console.WriteLine($"System.Environment.GetEnvironmentVariable(\"AWS_REGION\") = {regionFromEnv}"); var region = RegionEndpoint.GetBySystemName(regionFromEnv); Console.WriteLine($"Detected region = {region}"); Console.WriteLine(JsonConvert.SerializeObject(apigProxyEvent)); IForgeUploadJobHanlder uploadJob; try { uploadJob = new S3ForgeUploadJobHandler(region, Environment.GetEnvironmentVariable("JOB_BUCKET")); } catch (Exception ex) { var response = new APIGatewayProxyResponse { StatusCode = (int)HttpStatusCode.InternalServerError, Body = JsonConvert.SerializeObject(new { message = ex.Message }), Headers = new Dictionary <string, string> { { "Content-Type", "application/json" } } }; return(response); } try { bool.TryParse(apigProxyEvent.QueryStringParameters.GetValueOrDefault("warmup", "false"), out bool warmUp); if (warmUp) { Console.WriteLine("Warm up request. Writing something to S3..."); await uploadJob.CreateJob(new StartJobRequest { ForgeBucketKey = "StartJob", ForgeModelName = "StartJob", S3ObjectKey = "StartJob", S3BucketName = "StartJob", }); Console.WriteLine("Warm up request. Exiting..."); return(WarmUpResponse()); } string jobId = apigProxyEvent.QueryStringParameters["jobId"]; Console.WriteLine($"Getting status for Job with id: {jobId}..."); var job = await uploadJob.GetJob(jobId); Console.WriteLine($"Status is: {job.State}"); if (job.State == IForgeUploadJobHanlder.JobState.CONVERTING) { if (job.ConversionStartResult != null) { var urn = job.ConversionStartResult.urn.ToString(); Console.WriteLine($"urn = {urn}"); Console.WriteLine($"Retrieving conversion status from Forge..."); var conversionStatus = await ModelDerivative.CheckTranslationStatus(urn); Console.WriteLine($"Conversion status = {conversionStatus?.progress?.ToString()}"); if (conversionStatus?.progress?.ToString() == "complete") { job = await uploadJob.FromConvertingToCompleted(jobId, conversionStatus.ToJson()); } else { job = await uploadJob.UpdateConversionStatus(jobId, conversionStatus.ToJson()); } } } var response = new APIGatewayProxyResponse { StatusCode = (int)HttpStatusCode.OK, Body = JsonConvert.SerializeObject(job), Headers = new Dictionary <string, string> { { "Content-Type", "application/json" } } }; return(response); } catch (Exception ex) { Console.WriteLine($"Error: {ex.Message}"); var response = new APIGatewayProxyResponse { StatusCode = (int)HttpStatusCode.InternalServerError, Body = JsonConvert.SerializeObject(new { message = ex.Message }), Headers = new Dictionary <string, string> { { "Content-Type", "application/json" } } }; return(response); } }
public async Task <UploadResponse> FunctionHandler(UploadRequest uploadRequest, ILambdaContext context) { var regionFromEnv = Environment.GetEnvironmentVariable("AWS_REGION"); Console.WriteLine($"System.Environment.GetEnvironmentVariable(\"AWS_REGION\") = {regionFromEnv}"); var region = RegionEndpoint.GetBySystemName(regionFromEnv); IForgeUploadJobHanlder uploadJob; string jobId = ""; try { uploadJob = new S3ForgeUploadJobHandler(region, Environment.GetEnvironmentVariable("JOB_BUCKET")); } catch (Exception ex) { var response = new UploadResponse { StatusCode = (int)HttpStatusCode.InternalServerError, Error = JsonConvert.SerializeObject(new { message = ex.Message }) }; return(response); } try { string bucketName = uploadRequest.S3BucketName; string bucketKey = uploadRequest.S3ObjectKey; string forgeBucketKey = uploadRequest.ForgeBucketKey; string fileName = uploadRequest.ForgeModelName; jobId = uploadRequest.JobId; Console.WriteLine($"Request: {JsonConvert.SerializeObject(uploadRequest)}"); Console.WriteLine($"jobId = {jobId}"); await uploadJob.FromRequestToUploading(jobId); //Eventualmente qui prevedere altro parametro che se specificato permette di sovrascrivere il default per il bucket di origine using var client = new AmazonS3Client(region); var size = await GetObjectSize(client, bucketName, bucketKey); using var s3bucketStream = await GetS3Stream(client, bucketName, bucketKey); var uploadResult = await OSS.UploadObject(s3bucketStream, size, forgeBucketKey, fileName); var translationRequest = new ModelDerivative.TranslateObjectModel { bucketKey = forgeBucketKey, objectName = Base64Encode(uploadResult.objectId) }; Console.WriteLine($"Requesting translation with {JsonConvert.SerializeObject(translationRequest)}"); var convertResult = await ModelDerivative.TranslateObject(translationRequest); await uploadJob.FromUploadingToConverting(jobId, uploadResult, convertResult.ToJson()); var response = new UploadResponse { StatusCode = (int)HttpStatusCode.OK, UploadResult = uploadResult }; return(response); } catch (Exception ex) { Console.WriteLine($"Error uploading file: {ex.Message}"); try { if (!string.IsNullOrEmpty(jobId)) { await uploadJob.SetError(jobId, ex.Message); } } catch { }; var response = new UploadResponse { StatusCode = (int)HttpStatusCode.InternalServerError, Error = JsonConvert.SerializeObject(new { message = ex.Message }) }; return(response); } }