Beispiel #1
0
        async Task <APIGatewayProxyResponse> CreatePostResponse(JObject input, ILambdaContext context)
        {
            JObject preference = new Preference().preference;

            int statusCode = (input != null) ?
                             (int)HttpStatusCode.OK :
                             (int)HttpStatusCode.InternalServerError;

            string sn = input["sn"].ToString();

            AllMeta allMeta = new AllMeta(tableRegion: preference["Dynamo"]["MetaGenotype"]["Region"].ToString(),
                                          tableName: preference["Dynamo"]["MetaGenotype"]["Name"].ToString());

            HashSet <string> codes = input.ContainsKey("codes") ? ((JArray)input["codes"]).Select(x => x.ToString()).ToHashSet() : allMeta.codes;

            string apiKey = preference == null?System.Environment.GetEnvironmentVariable("APIKey") : preference["API"]["InternalCalcGenoRiskAPIFunction-API"]["key"].ToString();

            string apiUrl = preference == null?System.Environment.GetEnvironmentVariable("APIUrl") : preference["API"]["InternalCalcGenoRiskAPIFunction-API"]["url"].ToString();

            JObject apiBody = new JObject();

            apiBody["sn"]    = sn;
            apiBody["codes"] = new JArray(codes);
            HttpClient client = new HttpClient();

            client.DefaultRequestHeaders.Add("X-API-Key", apiKey);
            client.DefaultRequestHeaders.Add("X-Amz-Invocation-Type", "Event");

            await client.PostAsync(apiUrl, new StringContent(apiBody.ToString()));

            var response = new APIGatewayProxyResponse
            {
                StatusCode = statusCode,
                Body       = "",
                Headers    = new Dictionary <string, string>
                {
                    { "Content-Type", "application/json" },
                    { "Access-Control-Allow-Origin", "*" }
                }
            };

            return(response);
        }
Beispiel #2
0
        async Task <APIGatewayProxyResponse> CreatePostResponse(JObject input, ILambdaContext context)
        {
            JObject preference = new Preference().preference;

            int statusCode = (input != null) ?
                             (int)HttpStatusCode.OK :
                             (int)HttpStatusCode.InternalServerError;

            string sn = input["sn"].ToString();

            string tableRegionResult = input.ContainsKey("tableRegionResult") ?
                                       input["tableRegionResult"].ToString() :
                                       preference["Dynamo"]["Result"]["Region"].ToString();

            string tableNameResult = input.ContainsKey("tableNameResult") ?
                                     input["tableNameResult"].ToString() :
                                     preference["Dynamo"]["Result"]["Name"].ToString();

            AllMeta allMeta = new AllMeta(tableRegion: preference["Dynamo"]["MetaGenotype"]["Region"].ToString(),
                                          tableName: preference["Dynamo"]["MetaGenotype"]["Name"].ToString());

            HashSet <string> codes = input.ContainsKey("codes") ? JArray.Parse(input["codes"].ToString()).Select(code => code.ToString()).ToHashSet() : allMeta.codes;

            Plink.Plink plink = readPlinkS3(bucketRegion: preference["S3"]["Plink"]["Region"].ToString(),
                                            bucketName: preference["S3"]["Plink"]["Name"].ToString(),
                                            keyFAM: sn + ".fam",
                                            keyBED: sn + ".bed",
                                            keyBIMFile: sn + "_bim.txt",
                                            bucketRegionBIM: preference["S3"]["BPM"]["Region"].ToString(),
                                            bucketNameBIM: preference["S3"]["BPM"]["Name"].ToString());

            foreach (string code in codes)
            {
                var result = Calculate.calcGenotype(code: code,
                                                    sn: sn,
                                                    plink: plink);
                List <Document> resultDocs = readDynamoTable(tableRegion: tableRegionResult,
                                                             tableName: tableNameResult,
                                                             hashKey: sn,
                                                             queryFilter: new QueryFilter()).Where(doc => doc["code"].ToString() == code).ToList();
                Document resultDoc  = resultDocs.Count > 0 ? resultDocs[0] : new Document();
                JObject  resultJobj = resultDoc.ContainsKey("result") ? JObject.Parse(resultDoc["result"].ToString()) : new JObject();
                resultDoc["sn"]   = sn;
                resultDoc["code"] = code;

                JObject resultGenotype = new JObject();
                resultGenotype["risk"] = result.result.ToString();

                resultJobj["genotype"] = resultGenotype;

                resultDoc["result"] = resultJobj.ToString();

                await writeDynamoTable(tableRegion : tableRegionResult,
                                       tableName : tableNameResult,
                                       writeDocument : resultDoc);


                string apiKey = preference == null?System.Environment.GetEnvironmentVariable("APIKey") : preference["API"]["InternalSimulationAPIFunction-API"]["key"].ToString();

                string apiUrl = preference == null?System.Environment.GetEnvironmentVariable("APIUrl") : preference["API"]["InternalSimulationAPIFunction-API"]["url"].ToString();

                JObject apiBody = new JObject();
                apiBody["sn"]   = sn;
                apiBody["code"] = code;
                apiBody["type"] = "genotype";
                apiBody["meta"] = new JArray(result.metas.Select(meta =>
                {
                    JToken jt = meta["meta"];
                    jt["var"] = meta["var"];
                    return(jt);
                }).ToList());
                HttpClient client = new HttpClient();
                client.DefaultRequestHeaders.Add("X-API-Key", apiKey);
                client.DefaultRequestHeaders.Add("X-Amz-Invocation-Type", "Event");

                await client.PostAsync(apiUrl, new StringContent(apiBody.ToString()));
            }


            var response = new APIGatewayProxyResponse
            {
                StatusCode = statusCode,
                Body       = "",
                Headers    = new Dictionary <string, string>
                {
                    { "Content-Type", "application/json" },
                    { "Access-Control-Allow-Origin", "*" }
                }
            };

            return(response);
        }