private void UpdateStatusDisplay(DelayPrediction prediction, ForecastResult forecast) { weatherForecast.ImageUrl = forecast.ForecastIconUrl; weatherForecast.ToolTip = forecast.Condition; if (String.IsNullOrWhiteSpace(mlApiKey)) { lblPrediction.Text = "(not configured)"; lblConfidence.Text = "(not configured)"; return; } if (prediction == null) { throw new Exception("Prediction did not succeed. Check the Settings for mlWorkspaceId, mlServiceId, and mlApiKey."); } if (prediction.ExpectDelays) { lblPrediction.Text = "expect delays"; } else { lblPrediction.Text = "no delays expected"; } lblConfidence.Text = string.Format("{0:N2}", (prediction.Confidence * 100.0)); }
private async Task PredictDelays(DepartureQuery query, ForecastResult forecast) { if (String.IsNullOrEmpty(mlApiKey)) { return; } string fullMLUri = string.Format(BASE_ML_URI, !String.IsNullOrWhiteSpace(mlServiceLocation) ? mlServiceLocation : DEFAULT_ML_SERVICE_LOCATION, mlWorkspaceId, mlServiceId); var departureDate = DateTime.Parse(txtDepartureDate.Text); prediction = new DelayPrediction(); try { using (var client = new HttpClient()) { var scoreRequest = new { Inputs = new Dictionary <string, StringTable>() { { "input1", new StringTable() { ColumnNames = new string[] { "OriginAirportCode", "Month", "DayofMonth", "CRSDepHour", "DayOfWeek", "Carrier", "DestAirportCode", "WindSpeed", "SeaLevelPressure", "HourlyPrecip" }, Values = new string[, ] { { query.OriginAirportCode, query.DepartureDate.Month.ToString(), query.DepartureDate.Day.ToString(), query.DepartureDate.Hour.ToString(), query.DepartureDayOfWeek.ToString(), query.Carrier, query.DestAirportCode, forecast.WindSpeed.ToString(), forecast.Pressure.ToString(), forecast.Precipitation.ToString() } } } }, }, GlobalParameters = new Dictionary <string, string>() { } }; client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", mlApiKey); client.BaseAddress = new Uri(fullMLUri); HttpResponseMessage response = await client.PostAsJsonAsync("", scoreRequest).ConfigureAwait(false); if (response.IsSuccessStatusCode) { string result = await response.Content.ReadAsStringAsync(); JObject jsonObj = JObject.Parse(result); string prediction = jsonObj["Results"]["output1"]["value"]["Values"][0][10].ToString(); string confidence = jsonObj["Results"]["output1"]["value"]["Values"][0][11].ToString(); if (prediction.Equals("1")) { this.prediction.ExpectDelays = true; this.prediction.Confidence = double.Parse(confidence); } else if (prediction.Equals("0")) { this.prediction.ExpectDelays = false; this.prediction.Confidence = double.Parse(confidence); } else { this.prediction = null; } } else { prediction = null; Trace.Write(string.Format("The request failed with status code: {0}", response.StatusCode)); // Print the headers - they include the request ID and the timestamp, which are useful for debugging the failure Trace.Write(response.Headers.ToString()); string responseContent = await response.Content.ReadAsStringAsync(); Trace.Write(responseContent); } } } catch (Exception ex) { prediction = null; System.Diagnostics.Trace.TraceError("Failed retrieving delay prediction: " + ex.ToString()); throw; } }
private async Task PredictDelays(DepartureQuery query, ForecastResult forecast) { if (string.IsNullOrEmpty(mlUrl)) { return; } var departureDate = DateTime.Parse(txtDepartureDate.Text); prediction = new DelayPrediction(); try { using (var client = new HttpClient()) { var predictionRequest = new PredictionRequest { OriginAirportCode = query.OriginAirportCode, Month = query.DepartureDate.Month, DayofMonth = query.DepartureDate.Day, CRSDepHour = query.DepartureDate.Hour, DayOfWeek = query.DepartureDayOfWeek, Carrier = query.Carrier, DestAirportCode = query.DestAirportCode, WindSpeed = forecast.WindSpeed, SeaLevelPressure = forecast.Pressure, HourlyPrecip = forecast.Precipitation }; client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", mlApiKey); client.BaseAddress = new Uri(mlUrl); var response = await client.PostAsJsonAsync("", predictionRequest).ConfigureAwait(false); if (response.IsSuccessStatusCode) { var result = await response.Content.ReadAsStringAsync(); var token = JToken.Parse(result); var parsedResult = JsonConvert.DeserializeObject <PredictionResult>((string)token); if (parsedResult.prediction == 1) { this.prediction.ExpectDelays = true; this.prediction.Confidence = parsedResult.probability; } else if (parsedResult.prediction == 0) { this.prediction.ExpectDelays = false; this.prediction.Confidence = parsedResult.probability; } else { this.prediction = null; } } else { prediction = null; Trace.Write($"The request failed with status code: {response.StatusCode}"); // Print the headers - they include the request ID and the timestamp, which are useful for debugging the failure Trace.Write(response.Headers.ToString()); var responseContent = await response.Content.ReadAsStringAsync(); Trace.Write(responseContent); } } } catch (Exception ex) { prediction = null; System.Diagnostics.Trace.TraceError("Failed retrieving delay prediction: " + ex.ToString()); throw; } }