/// <summary>Snippet for CreateService</summary>
        /// <remarks>
        /// This snippet has been automatically generated for illustrative purposes only.
        /// It may require modifications to work in your environment.
        /// </remarks>
        public void CreateService()
        {
            // Create client
            ServiceManagerClient serviceManagerClient = ServiceManagerClient.Create();
            // Initialize request argument(s)
            ManagedService service = new ManagedService();
            // Make the request
            Operation <ManagedService, OperationMetadata> response = serviceManagerClient.CreateService(service);

            // Poll until the returned long-running operation is complete
            Operation <ManagedService, OperationMetadata> completedResponse = response.PollUntilCompleted();
            // Retrieve the operation result
            ManagedService result = completedResponse.Result;

            // Or get the name of the operation
            string operationName = response.Name;
            // This name can be stored, then the long-running operation retrieved later by name
            Operation <ManagedService, OperationMetadata> retrievedResponse = serviceManagerClient.PollOnceCreateService(operationName);

            // Check if the retrieved long-running operation has completed
            if (retrievedResponse.IsCompleted)
            {
                // If it has completed, then access the result
                ManagedService retrievedResult = retrievedResponse.Result;
            }
        }
        public async stt::Task GetServiceRequestObjectAsync()
        {
            moq::Mock <ServiceManager.ServiceManagerClient> mockGrpcClient = new moq::Mock <ServiceManager.ServiceManagerClient>(moq::MockBehavior.Strict);

            mockGrpcClient.Setup(x => x.CreateOperationsClient()).Returns(new moq::Mock <lro::Operations.OperationsClient>().Object);
            GetServiceRequest request = new GetServiceRequest
            {
                ServiceName = "service_named5df05d5",
            };
            ManagedService expectedResponse = new ManagedService
            {
                ServiceName       = "service_named5df05d5",
                ProducerProjectId = "producer_project_id18d0012a",
            };

            mockGrpcClient.Setup(x => x.GetServiceAsync(request, moq::It.IsAny <grpccore::CallOptions>())).Returns(new grpccore::AsyncUnaryCall <ManagedService>(stt::Task.FromResult(expectedResponse), null, null, null, null));
            ServiceManagerClient client = new ServiceManagerClientImpl(mockGrpcClient.Object, null);
            ManagedService       responseCallSettings = await client.GetServiceAsync(request, gaxgrpc::CallSettings.FromCancellationToken(st::CancellationToken.None));

            xunit::Assert.Same(expectedResponse, responseCallSettings);
            ManagedService responseCancellationToken = await client.GetServiceAsync(request, st::CancellationToken.None);

            xunit::Assert.Same(expectedResponse, responseCancellationToken);
            mockGrpcClient.VerifyAll();
        }
 /// <summary>Snippet for GetService</summary>
 /// <remarks>
 /// This snippet has been automatically generated for illustrative purposes only.
 /// It may require modifications to work in your environment.
 /// </remarks>
 public void GetService()
 {
     // Create client
     ServiceManagerClient serviceManagerClient = ServiceManagerClient.Create();
     // Initialize request argument(s)
     string serviceName = "";
     // Make the request
     ManagedService response = serviceManagerClient.GetService(serviceName);
 }
        /// <summary>Snippet for GetServiceAsync</summary>
        /// <remarks>
        /// This snippet has been automatically generated for illustrative purposes only.
        /// It may require modifications to work in your environment.
        /// </remarks>
        public async Task GetServiceAsync()
        {
            // Create client
            ServiceManagerClient serviceManagerClient = await ServiceManagerClient.CreateAsync();

            // Initialize request argument(s)
            string serviceName = "";
            // Make the request
            ManagedService response = await serviceManagerClient.GetServiceAsync(serviceName);
        }
Exemple #5
0
 /// <summary>Snippet for GetService</summary>
 /// <remarks>
 /// This snippet has been automatically generated for illustrative purposes only.
 /// It may require modifications to work in your environment.
 /// </remarks>
 public void GetServiceRequestObject()
 {
     // Create client
     ServiceManagerClient serviceManagerClient = ServiceManagerClient.Create();
     // Initialize request argument(s)
     GetServiceRequest request = new GetServiceRequest {
         ServiceName = "",
     };
     // Make the request
     ManagedService response = serviceManagerClient.GetService(request);
 }
        /// <summary>Snippet for GetServiceAsync</summary>
        /// <remarks>
        /// This snippet has been automatically generated for illustrative purposes only.
        /// It may require modifications to work in your environment.
        /// </remarks>
        public async Task GetServiceRequestObjectAsync()
        {
            // Create client
            ServiceManagerClient serviceManagerClient = await ServiceManagerClient.CreateAsync();

            // Initialize request argument(s)
            GetServiceRequest request = new GetServiceRequest {
                ServiceName = "",
            };
            // Make the request
            ManagedService response = await serviceManagerClient.GetServiceAsync(request);
        }
Exemple #7
0
        internal void CleanUpSemaphore(ManagedService svc)
        {
            MyLogger.Trace("Entering {0} for service: {1}", MethodBase.GetCurrentMethod().Name, svc.ConsulServiceName);
            MyLogger.Debug("Clean up Semaphore for {0}", svc.ConsulServiceName);

            var qr = ConsulClient.KV.List(Config.KvPrefix + Config.SemaPrefix + svc.ConsulServiceName);
            if (qr.Response != null)
            {
                KVPair[] sessions = qr.Response.Where(kv=>!kv.Key.EndsWith("/") && !kv.Key.EndsWith(".lock")).ToArray();
                foreach (var kv in sessions)
                {
                    var wr = ConsulClient.KV.Delete(kv.Key);
                }
            }
        }
        /// <summary>
        /// Additional operations to be performed when cloning an instance of <see cref="ManagedService" /> to an instance of <see cref="PSManagedService" />.
        /// </summary>
        /// <param name="managedService">The managed service being cloned.</param>
        private void CloneAdditionalOperations(ManagedService managedService)
        {
            ManagedServiceId = managedService.Id;

            if (managedService.Links != null)
            {
                if (managedService.Links.AdminService != null)
                {
                    Links.Add(nameof(managedService.Links.AdminService), managedService.Links.AdminService.Uri);
                }

                if (managedService.Links.ServiceHealth != null)
                {
                    Links.Add(nameof(managedService.Links.ServiceHealth), managedService.Links.ServiceHealth.Uri);
                }

                if (managedService.Links.ServiceTicket != null)
                {
                    Links.Add(nameof(managedService.Links.ServiceTicket), managedService.Links.ServiceTicket.Uri);
                }
            }
        }
        public void GetService()
        {
            moq::Mock <ServiceManager.ServiceManagerClient> mockGrpcClient = new moq::Mock <ServiceManager.ServiceManagerClient>(moq::MockBehavior.Strict);

            mockGrpcClient.Setup(x => x.CreateOperationsClient()).Returns(new moq::Mock <lro::Operations.OperationsClient>().Object);
            GetServiceRequest request = new GetServiceRequest
            {
                ServiceName = "service_named5df05d5",
            };
            ManagedService expectedResponse = new ManagedService
            {
                ServiceName       = "service_named5df05d5",
                ProducerProjectId = "producer_project_id18d0012a",
            };

            mockGrpcClient.Setup(x => x.GetService(request, moq::It.IsAny <grpccore::CallOptions>())).Returns(expectedResponse);
            ServiceManagerClient client   = new ServiceManagerClientImpl(mockGrpcClient.Object, null);
            ManagedService       response = client.GetService(request.ServiceName);

            xunit::Assert.Same(expectedResponse, response);
            mockGrpcClient.VerifyAll();
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="PSManagedService" /> class.
 /// </summary>
 /// <param name="managedService">The base managed service for this instance.</param>
 public PSManagedService(ManagedService managedService)
 {
     Links = new Dictionary <string, Uri>();
     this.CopyFrom(managedService, CloneAdditionalOperations);
 }
Exemple #11
0
        void AllInOne(ManagedService svc)
        {
            MyLogger.Trace("Entering {0} for service: {1}", MethodBase.GetCurrentMethod().Name, svc.ConsulServiceName);

            // Wait if service is ready to manage
            if (!svc.CanRun) MyLogger.Info("Wait for service {0} to get in a ready state", svc.ConsulServiceName);
            while (!_shouldStop && !svc.CanRun && svc.ShouldRun)
            {
                Thread.Sleep(1000);
            }
            MyLogger.Debug("Service {0} is ready, wait for lock", svc.ConsulServiceName);
            while (!_shouldStop && svc.ShouldRun)
            {
                var semaphoreOptions = new SemaphoreOptions(Config.KvPrefix + Config.SemaPrefix + svc.ConsulServiceName,
                    svc.Limit) { SessionName = svc.ConsulServiceName + "_Session", SessionTTL = TimeSpan.FromSeconds(10) };
                var semaphore = ConsulClient.Semaphore(semaphoreOptions);
                // Try to get a lock until it is aqcuired or the program should stop
                while (!_shouldStop && !semaphore.IsHeld && svc.ShouldRun)
                {
                    MyLogger.Info("Acquiring lock on semaphore for {0}", svc.ConsulServiceName);
                    try
                    {
                        semaphore.Acquire();
                    }
                    catch
                    {
                        Thread.Sleep(1000);

                    }
                }
                // if the program should not stop and the semaphore is aqcuired, start the service
                if (!_shouldStop && svc.ShouldRun && semaphore.IsHeld && (ServiceHelper.GetServiceStatus(svc.WindowsServiceName) != "Running"))
                {
                    bool svcstarted = StartService(svc);
                    MyLogger.Info("Service {0} send start command with success: {1}", svc.WindowsServiceName, svcstarted);
                }
                // Make sure the service runs while the lock is held or the program should stop, otherwise stop the service and releade the lock
                while (!_shouldStop && svc.ShouldRun && semaphore.IsHeld)
                {
                    ServiceController sc = new ServiceController(svc.WindowsServiceName);
                    if (sc.Status != ServiceControllerStatus.Running)
                    {
                        MyLogger.Debug("Service not running, releasing lock");
                        if (semaphore.IsHeld) semaphore.Release();
                    }
                    sc.Close();
                }
                if (_shouldStop || !svc.ShouldRun)
                {
                    if (ServiceHelper.GetServiceStatus(svc.WindowsServiceName) == "Running")
                    {
                        bool svcstopped = StopService(svc);
                        MyLogger.Info("Service {0} send stop command with success: {1}", svc.WindowsServiceName, svcstopped);
                    }
                    if (semaphore.IsHeld) semaphore.Release();
                    try
                    {
                        semaphore.Destroy();
                    }
                    catch (Exception ex)
                    {
                        MyLogger.Error("some error: {0}",ex.Message);
                        MyLogger.Debug(ex);
                    }
                }
                else
                {
                    MyLogger.Info("Lock no longer held for {0}",svc.WindowsServiceName);
                    //Release lock because it could be the lock isheld was set to false due to consistency timeout
                    try
                    {
                        semaphore.Release();
                    }
                    catch (SemaphoreNotHeldException)
                    {
                    }
                    catch (Exception ex1) {
                        MyLogger.Error("Some error: {0}",ex1.Message);
                        MyLogger.Debug(ex1);
                    }
                    if (ServiceHelper.GetServiceStatus(svc.WindowsServiceName) == "Running")
                    {
                        bool svcstopped = StopService(svc);
                        MyLogger.Info("Service {0} send stop command with success: {1}", svc.WindowsServiceName, svcstopped);
                    }
                }
            }
        }
Exemple #12
0
 private bool StopService(ManagedService svc)
 {
     MyLogger.Trace("Entering {0} for service: {1}", MethodBase.GetCurrentMethod().Name, svc.ConsulServiceName);
     try
     {
         PermissionSet ps = GetServicePermission(svc);
         ps.Assert();
     }
     catch (Exception ex)
     {
         MyLogger.Error("Cannot aquire service control permisison: {0}", ex.Message);
         MyLogger.Debug(ex);
         return false;
     }
     ServiceController sc = new ServiceController(svc.WindowsServiceName, Environment.MachineName);
     if (sc.Status != ServiceControllerStatus.Stopped)
     {
         if (sc.Status == ServiceControllerStatus.StopPending)
         {
             MyLogger.Debug("Stop pending");
         }
         else
         {
             MyLogger.Info("Service {0} send stop command", svc.WindowsServiceName);
             sc.Stop();
         }
         sc.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(10.0));
         if (sc.Status != ServiceControllerStatus.Stopped)
         {
             MyLogger.Error("Service did not stop correctly, current status: {0}", sc.Status);
             sc.Close();
             CodeAccessPermission.RevertAssert();
             return false;
         }
     }
     sc.Close();
     CodeAccessPermission.RevertAssert();
     return true;
 }
Exemple #13
0
 /// <summary>
 /// Monitors the service running and ready state.
 /// </summary>
 /// <param name="svc">The SVC.</param>
 void MonitorService(ManagedService svc)
 {
     MyLogger.Trace("Entering {0} for service: {1}", MethodBase.GetCurrentMethod().Name, svc.ConsulServiceName);
     MyLogger.Info("Start monitoring service {0} for cluster{1}",svc.WindowsServiceName,svc.ConsulServiceName);
     //Should we continue or is the Orek service stopping
     Stopwatch sw = new Stopwatch();
     while (!_shouldStop)
     {
         sw.Restart();
         //Check if service is ready
         svc.CanRun = CheckServiceReady(svc);
         //Check if service is running
         CheckServiceRunning(svc);
         if (sw.ElapsedMilliseconds < (svc.HeartBeatTtl/2))
         {
             Thread.Sleep(Convert.ToInt32((svc.HeartBeatTtl/2) - sw.ElapsedMilliseconds));
         }
         else
         {
             MyLogger.Warn("Monitoring Service takes longer than 50% of the Heartbeat ttl, Consider increasing the ttl value");
         }
     }
     MyLogger.Info("Stopped monitoring service {0} for cluster{1}", svc.WindowsServiceName, svc.ConsulServiceName);
 }
Exemple #14
0
 /// <summary>
 /// Gets the service control permission.
 /// </summary>
 /// <param name="svc">The SVC.</param>
 /// <returns></returns>
 /// <exception cref="System.Security.SecurityException">when the permission cannot be acquired</exception>
 private PermissionSet GetServicePermission(ManagedService svc)
 {
     MyLogger.Trace("Entering {0} for service: {1}", MethodBase.GetCurrentMethod().Name, svc.ConsulServiceName);
     // Creates a permission set that allows no access to the resource.
     PermissionSet ps = new PermissionSet(System.Security.Permissions.PermissionState.None);
     // Sets the security permission flag to use for this permission set.
     ps.AddPermission(new System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityPermissionFlag.Assertion));
     // Initializes a new instance of the System.ServiceProcess.ServiceControllerPermission class.
     ps.AddPermission(new ServiceControllerPermission(ServiceControllerPermissionAccess.Control, Environment.MachineName, svc.WindowsServiceName));
     ps.Demand();
     return ps;
 }
Exemple #15
0
 /// <summary>
 /// Checks if the service status is "Running" and puts either a Pass or a Fail to the TTL Check
 /// </summary>
 /// <param name="svc">The managed service.</param>
 private void CheckServiceRunning(ManagedService svc)
 {
     MyLogger.Trace("Entering {0} for service: {1}", MethodBase.GetCurrentMethod().Name, svc.ConsulServiceName);
     string stat = ServiceHelper.GetServiceStatus(svc.WindowsServiceName);
     if (stat == "Running")
     {
         SendPassTTL(svc.ConsulServiceName + "_Running", stat);
     }
     else
     {
         SendFailTTL(svc.ConsulServiceName + "_Running", stat);
     }
 }
Exemple #16
0
 /// <summary>
 /// Checks if the service is ready to run.
 /// For now that means the service startup should be set to Manual.
 /// </summary>
 /// <param name="svc">The managed service.</param>
 private bool CheckServiceReady(ManagedService svc)
 {
     MyLogger.Trace("Entering {0} for service: {1}", MethodBase.GetCurrentMethod().Name, svc.ConsulServiceName);
     try
     {
         GetServicePermission(svc);
     }
     catch (Exception ex)
     {
         MyLogger.Error("Service Control permission for service {0} cannot be acquired: {1}", svc.WindowsServiceName, ex.Message);
         MyLogger.Debug(ex);
         SendFailTTL(svc.ConsulServiceName + "_Ready", "Service Control Permission not granted");
         return false;
     }
     string stat = ServiceHelper.GetStartupType(svc.WindowsServiceName);
     if (stat != "Manual")
     {
         SendFailTTL(svc.ConsulServiceName + "_Ready","Service Startup not set to Manual");
         return false;
     }
     SendPassTTL(svc.ConsulServiceName + "_Ready", stat);
     return true;
 }