Пример #1
0
        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);
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        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);
                }
            }
        }