public ServiceStatus GetStatus(ServiceEnum serviceName)
 {
     log.DebugFormat("GetStatus: serviceName = {0}", serviceName);
     try
     {
         using (var xplatServiceController = XplatServiceController.GetXplatServiceController(serviceName))
         {
             return(xplatServiceController.GetServiceStatus());
         }
     }
     catch (Exception ex)
     {
         log.ErrorFormat("Error on GetStatus. {0} {1} {2}", ex.ToString(), ex.StackTrace, ex.InnerException != null ? ex.InnerException.Message : string.Empty);
         return(ServiceStatus.NotFound);
     }
 }
        public string StopService(ServiceEnum serviceName)
        {
            string status;

            try
            {
                log.DebugFormat("StopService: serviceName = {0}", serviceName);
                using (var xplatServiceController = XplatServiceController.GetXplatServiceController(serviceName))
                {
                    var serviceStatus = xplatServiceController.GetServiceStatus();

                    switch (serviceStatus)
                    {
                    case ServiceStatus.Running:
                        status = xplatServiceController.StopService();
                        if (status != string.Empty)
                        {
                            serviceRepository.SetStates(serviceName, ServiceStatus.Stopped.GetStringStatus(), string.Empty);
                            log.DebugFormat("Service stopped on the local machine: serviceName = {0}, serviceStatus = {1}", serviceName, serviceStatus);
                        }
                        break;

                    case ServiceStatus.Stopped:
                    case ServiceStatus.StopPending:
                    case ServiceStatus.StartPending:
                        log.ErrorFormat("Service still not started on the current machine: serviceName = {0}, serviceStatus = {1}", serviceName, serviceStatus);
                        status = HealthCheckResource.ServiceStillNotStarted;
                        break;

                    default:
                        log.ErrorFormat("Service not found on the current machine: serviceName = {0}, serviceStatus = {1}", serviceName, serviceStatus);
                        status = ServiceStatus.NotFound.GetStringStatus();
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                status = HealthCheckResource.ServiceStopError;
                log.ErrorFormat("Error on StopService. {0} {1} {2}",
                                ex.Message, ex.StackTrace, ex.InnerException != null ? ex.InnerException.Message : string.Empty);
            }
            return(status);
        }
예제 #3
0
        private static void IdleTimeout(object e)
        {
            var healthCheckSettings = HealthCheckSettingsAccessor.GetHealthCheckSettings();

            /*
             * var tenants = CoreContext.TenantManager.GetTenants().Where(t => t.TenantId != healthCheckSettings.FakeTenantId).ToList();
             * if (tenants.Count() <= 0 || !CoreContext.TenantManager.GetTenantQuota(tenants.First().TenantId).HealthCheck)
             * {
             *  log.Debug("Service wasn't started. There is no correct license for HealthCheck.");
             *  return;
             * }*/
            log.Debug("Begin IdleTimeout");

            CoreContext.TenantManager.SetCurrentTenant(healthCheckSettings.FakeTenantId);
            Thread.CurrentThread.CurrentCulture = CoreContext.TenantManager.GetCurrentTenant().GetCulture();

            try
            {
                var serviceName = (ServiceEnum)e;

                ServiceStatus serviceStatus;
                using (var xplatServiceController = XplatServiceController.GetXplatServiceController(serviceName))
                {
                    serviceStatus = xplatServiceController.GetServiceStatus();
                }

                switch (serviceStatus)
                {
                case ServiceStatus.StartPending:
                    // wait till started
                    break;

                case ServiceStatus.Running:
                    var result = serviceRepository.GetService(serviceName).Check(healthCheckSettings.FakeTenantId);

                    if (result != null)
                    {
                        serviceRepository.SetStates(serviceName,
                                                    (result == string.Empty
                                    ? ServiceStatus.Running
                                    : ServiceStatus.NotFound).GetStringStatus(), result);
                        //if (result != string.Empty)
                        //{
                        //    HasAttempt(serviceName);
                        //}
                        //else
                        //{
                        //    serviceRepository.DropAttempt(serviceName);
                        //}
                    }
                    break;

                case ServiceStatus.NotFound:
                    serviceRepository.SetStates(serviceName, ServiceStatus.NotFound.GetStringStatus(), ServiceStatus.NotFound.GetMessageStatus());
                    //HasAttempt(serviceName);
                    break;

                default:
                    serviceRepository.SetStates(serviceName, ServiceStatus.Stopped.GetStringStatus(), ServiceStatus.Stopped.GetMessageStatus());
                    //HasAttempt(serviceName);
                    break;
                }
            }
            catch (Exception ex)
            {
                log.ErrorFormat("Error on IdleTimeout. {0} {1}", ex.ToString(),
                                ex.InnerException != null ? ex.InnerException.Message : string.Empty);
            }
            finally
            {
                log.Debug("End IdleTimeout");
            }
        }