private async Task CalculateProbability(PredictionRequestFile predictionRequestFile, PredictionResponseItem predictionResponseItem) { string apiKey = this.serviceConfiguration.PredictionServiceKey; string apiUrl = this.serviceConfiguration.PredictionServiceUrl; var configurationTypeFullyQualifiedName = this.serviceConfiguration.PredictionServiceConfigurationType; var configurationType = Type.GetType(configurationTypeFullyQualifiedName, true); var configuration = (IPredictionServiceConfiguration)Activator.CreateInstance(configurationType); predictionResponseItem.SuccessProbability = 0; predictionResponseItem.ProbableSuccess = false; using (var client = new HttpClient()) { client.BaseAddress = new Uri(apiUrl); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", apiKey); HttpResponseMessage httpResponse = await client.PostAsync("", new StringContent(configuration.Serialize(predictionRequestFile))); if (httpResponse.IsSuccessStatusCode) { string result = await httpResponse.Content.ReadAsStringAsync(); JObject jObject = JObject.Parse(result); var scoredProbabilities = jObject.SelectToken("Results.output1[0]['Scored Probabilities']").ToObject <double>(); var scoredLabels = jObject.SelectToken("Results.output1[0]['Scored Labels']").ToObject <int>(); predictionResponseItem.SuccessProbability = scoredProbabilities; predictionResponseItem.ProbableSuccess = scoredLabels == 1 ? true : false; } } }
public string Serialize(PredictionRequestFile predictionRequestFile) { var scoreRequest = new { Inputs = new Dictionary <string, List <Dictionary <string, string> > > { { "input1", new List <Dictionary <string, string> > { new Dictionary <string, string> { { "NumberOfRevisions", predictionRequestFile.NumberOfRevisions.ToString() }, { "NumberOfDistinctCommitters", predictionRequestFile.NumberOfDistinctCommitters.ToString() }, { "NumberOfModifiedLines", predictionRequestFile.NumberOfModifiedLines.ToString() }, { "BuildResult", "0" }, { "TotalNumberOfRevisions", predictionRequestFile.TotalNumberOfRevisions.ToString() }, { "BuildCommitDateTimeLocal", "" }, { "PreviousBuildResult", predictionRequestFile.PreviousBuildResult.ToString() }, { "CCMMax", predictionRequestFile.CCMMax.ToString() }, { "CCMMd", predictionRequestFile.CCMMd.GetValueOrDefault().ToString(System.Globalization.CultureInfo.InvariantCulture) }, { "CCMAvg", predictionRequestFile.CCMAvg.GetValueOrDefault().ToString(System.Globalization.CultureInfo.InvariantCulture) }, } } }, }, GlobalParameters = new Dictionary <string, string> { { "Append score columns to output1", "true" }, } }; return(JsonConvert.SerializeObject(scoreRequest)); }
private static void UpdatePrediction(PredictionRequestFile predictionRequestFile, Metric metric) { predictionRequestFile.NumberOfDistinctCommitters = 1; predictionRequestFile.NumberOfRevisions = 1; predictionRequestFile.TotalNumberOfRevisions = (metric.TotalNumberOfRevisions ?? 0) + 1; predictionRequestFile.PreviousBuildResult = metric.PreviousBuildResult; }
public string Serialize(PredictionRequestFile predictionRequestFile) { var scoreRequest = new { Inputs = new Dictionary <string, List <Dictionary <string, string> > > { { "input1", new List <Dictionary <string, string> > { new Dictionary <string, string> { { "NumberOfRevisions", predictionRequestFile.NumberOfRevisions.ToString() }, { "CCMMax", predictionRequestFile.CCMMax.ToString() }, { "NumberOfDistinctCommitters", predictionRequestFile.NumberOfDistinctCommitters.ToString() }, { "NumberOfModifiedLines", predictionRequestFile.NumberOfModifiedLines.ToString() }, { "TotalNumberOfRevisions", predictionRequestFile.TotalNumberOfRevisions.ToString() }, { // Do as if the change was made now - minutes from mindnight are used in the model "BuildCommitDateTimeLocal", (DateTime.Now.Hour * 60 + DateTime.Now.Minute).ToString() }, } } }, }, GlobalParameters = new Dictionary <string, string> { { "Append score columns to output1", "true" }, } }; return(JsonConvert.SerializeObject(scoreRequest)); }