public async Task AwaitRestart(IDialogContext context, LuisResult result) { context.ConversationData.RemoveValue("Complement"); context.ConversationData.RemoveValue("Bye"); context.ConversationData.RemoveValue("FormalQuestions"); context.ConversationData.RemoveValue("ClusterStatus"); context.ConversationData.RemoveValue("RestartService"); context.ConversationData.RemoveValue("NoRestart"); context.ConversationData.SetValue("Awaiting", result.Intents[0].Intent); String responseStr; responseStr = MethodGlossary.LoadHttpPageWithBasicAuthentication(context, serviceInProcess); // parse response, // If Completed await context.PostAsync(serviceInProcess.ToUpper() + " is ready now."); serviceInProcess = null; // if not completed yet, wait 30 secs & call AwaitRestart Thread.Sleep(30000); await AwaitRestart(context, result); }
public async Task RestartService(IDialogContext context, LuisResult result) { context.ConversationData.RemoveValue("Complement"); context.ConversationData.RemoveValue("Bye"); context.ConversationData.RemoveValue("FormalQuestions"); context.ConversationData.RemoveValue("ClusterStatus"); context.ConversationData.RemoveValue("NoRestart"); context.ConversationData.RemoveValue("Awaiting"); context.ConversationData.SetValue("RestartService", result.Intents[0].Intent); string serviceClusterName = null; string serviceCommonName = null; String responseStr; // Parse Service name first if (String.IsNullOrEmpty(faultyServName)) { if (String.IsNullOrEmpty(result.Entities[0].Entity)) { serviceClusterName = MethodGlossary.GetClusterServiceName(context, result.Entities[0].Entity); } } else { serviceClusterName = faultyServName; } // Check service Status before restarting/starting String serviceStatus = MethodGlossary.LoadHttpPageWithBasicAuthentication(context, serviceClusterName); JToken serviceToken = JToken.Parse(serviceStatus); var serviceState = serviceToken.SelectToken("serviceState").ToString(); // JObject jsonServiceStat = JObject.Parse(serviceStatus); // if "serviceState" is Started if (serviceState.Equals("STARTED", StringComparison.InvariantCultureIgnoreCase)) { responseStr = await MethodGlossary.LoadHttpPageWithBasicAuthentication(context, serviceClusterName, "restart"); } // Else else { responseStr = await MethodGlossary.LoadHttpPageWithBasicAuthentication(context, serviceClusterName, "start"); } // Parse o/p for success/failure serviceToken = JToken.Parse(responseStr); var opStatus = serviceToken.SelectToken("active").ToString(); // JObject jsonServiceBoot = JObject.Parse(responseStr); if (opStatus.Equals(true)) { // Store started service name for next stage serviceInProcess = serviceClusterName; // inform user of status await context.PostAsync(serviceClusterName.ToUpper() + " has been re/started. Will ping you once it's available. "); context.Wait(MessageReceived); await AwaitRestart(context, result); } else { await context.PostAsync("There was some problem re/starting " + serviceClusterName.ToUpper() + ". Here's the relevant response"); await context.PostAsync(serviceToken.SelectToken("resultMessage").ToString()); context.Wait(MessageReceived); } }
public async Task ClusterStatusService(IDialogContext context, LuisResult result) { context.ConversationData.RemoveValue("Complement"); context.ConversationData.RemoveValue("Bye"); context.ConversationData.RemoveValue("FormalQuestions"); context.ConversationData.RemoveValue("RestartService"); context.ConversationData.RemoveValue("NoRestart"); context.ConversationData.RemoveValue("Awaiting"); context.ConversationData.SetValue("ClusterStatus", result.Intents[0].Intent); // String clusterStatus = await methodObj.CurlClouderaManager(context); String clusterStatus = MethodGlossary.LoadHttpPageWithBasicAuthentication(context, null); // dynamic resultJson = JsonConvert.DeserializeObject<dynamic>(clusterStatus); JToken jsonToken = JObject.Parse(clusterStatus); // jsonObject. if (jsonToken.SelectToken("entityStatus").ToString().Equals("GOOD", StringComparison.InvariantCultureIgnoreCase)) { //if Cluster status is good. Stop here. No need to investigate further. await context.PostAsync("Cluster seems to be in a good shape right now."); await context.PostAsync("Let me know if you need more help"); context.Wait(MessageReceived); } // Else Continue else { await context.PostAsync("Looks like there is some issue with the cluster. Wait up while I gather more details."); String allServiceStatus = MethodGlossary.LoadHttpPageWithBasicAuthentication(context, "ALL_SERVICES"); await context.PostAsync("Cluster Status string" + allServiceStatus); // dynamic allServiceJson = JsonConvert.DeserializeObject<dynamic>(allServiceStatus); JToken allServiceToken = JToken.Parse(allServiceStatus); var countServices = allServiceToken.Value <JArray>("items").Count; List <String> listOfConcerningServices = new List <String>(); Dictionary <String, String> concerningServices = new Dictionary <String, String>(); for (int i = 0; i < countServices; i++) { var servName = allServiceToken.Value <JArray>("items")[i].SelectToken("name").ToString(); var servStatus = allServiceToken.Value <JArray>("items")[i].SelectToken("healthSummary").ToString(); if (!servStatus.Equals("GOOD", StringComparison.InvariantCultureIgnoreCase)) { concerningServices.Add(servName, servStatus); listOfConcerningServices.Add(servName); } } // Loop all services. List down all in Concerning health & in Stopped status separately if (listOfConcerningServices.Count > 1) { StringBuilder stringOfConcServ = null; for (int i = 0; i < listOfConcerningServices.Count; i++) { if (listOfConcerningServices.Count - 1 == i) { stringOfConcServ.Append(listOfConcerningServices[i]); } else { stringOfConcServ.Append(listOfConcerningServices[i]).Append(", "); } } await context.PostAsync("Here is the list of all services in either concerning or stopped status"); await context.PostAsync(stringOfConcServ.ToString()); await context.PostAsync("Let me know what you'd like to do"); context.Wait(MessageReceived); } else if (listOfConcerningServices.Count == 1) { String faultyServStatus = null; foreach (KeyValuePair <String, String> dysfunctServ in concerningServices) { faultyServName = dysfunctServ.Key; faultyServStatus = dysfunctServ.Value; } await context.PostAsync(faultyServName + " is in " + faultyServStatus + " status. Would you like me to re/start it for you?"); context.Wait(MessageReceived); } } }