/// <summary> /// at this time, there is always only one feature to be activated or deactivated in a location with same scope /// </summary> /// <param name="message"></param> private void HandleFeatureToggleRequest(FeatureToggleRequest message) { _log.Debug("Entered LocationActor-HandleFeatureToggleRequest"); if (message.Activate) { ActivatedFeature af; var error = dataService.ActivateFeature( message.FeatureDefinition , message.Location , message.ElevatedPrivileges , message.Force , out af); var completed = new Core.Messages.Completed.FeatureActivationCompleted( message.TaskId , message.Location.Id , af , string.Empty ); Sender.Tell(completed); } else { var completed = new Core.Messages.Completed.FeatureDeactivationCompleted( message.TaskId , message.Location.Id , string.Empty ); Sender.Tell(completed); } }
public FeatureToggleResponse IsEnabled(FeatureToggleRequest request) { var response = new FeatureToggleResponse { Enabled = IsEnabled(request.ServiceName, request.UserName, request.MachineName, request.Feature) }; _logger.Debug("FeatureToggle retrieved {@Request} {@Response}", request, response); return(response); }
private bool Get(string feature) { var request = new FeatureToggleRequest { ServiceName = _serviceName, UserName = _userName, MachineName = _machineName, Feature = feature }; var response = _messageBus.Request <FeatureToggleRequest, FeatureToggleResponse>(FeatureToggleConfig.RequestFeatureToggle, request); _logger.Information("Feature Toggle {Feature} {Enabled} {@Request}", feature, response.Enabled, request); return(response.Enabled); }
private void HandleFeatureToggleRequest([NotNull] FeatureToggleRequest message) { _log.Debug("Entered HandleFeatureToggleRequest with Id " + Id.ToString()); IEnumerable <Location> actionLocations; if (message.Activate) { // retrieve locations where to activate actionLocations = repository.GetLocationsCanActivate(message.FeatureDefinition, message.Location); } else { // retrieve locations where to deactivate actionLocations = repository.GetLocationsCanDeactivate(message.FeatureDefinition, message.Location); } // create Location actors and trigger feature actions foreach (Location l in actionLocations) { var toggleRequestForThisLocation = new FeatureToggleRequest( message.FeatureDefinition , l , message.Activate ); if (!executingActors.ContainsKey(l.Id)) { IActorRef newLocationActor = Context.ActorOf(Context.DI().Props <LocationActor>()); executingActors.Add(l.Id, newLocationActor); newLocationActor.Tell(toggleRequestForThisLocation); } else { executingActors[l.Id].Tell(toggleRequestForThisLocation); } } }
/// <summary> /// at this time, there is always only one feature to be activated or deactivated in a location with same scope /// </summary> /// <param name="message"></param> private void ReceiveFeatureToggleRequest(FeatureToggleRequest message) { _log.Debug("Entered LocationActor-HandleFeatureToggleRequest"); if (!TaskCanceled) { try { switch (message.Action) { case Core.Models.Enums.FeatureAction.Activate: HandleActivation(message); break; case Core.Models.Enums.FeatureAction.Deactivate: HandleDeactivation(message); break; case Core.Models.Enums.FeatureAction.Upgrade: HandleUpgrade(message); break; default: throw new NotImplementedException("this action verb is not known to location actor for task id " + message.TaskId); } } catch (Exception ex) { var cancelationMsg = new CancelMessage( message.TaskId, ex.Message, true, ex ); Sender.Tell(cancelationMsg); } } }
private void HandleUpgradeFeaturesRequest(UpgradeFeaturesRequest message) { _log.Debug("Entered HandleUpgradeFeaturesRequest with Id " + Id.ToString()); if (!TaskCanceled) { Title = message.Title; if (isSubTaskActor) { ParentTaskActor = Sender; } requestsToBeConfirmed = new List <FeatureToggleRequest>(); foreach (ActivatedFeatureSpecial af in message.Features) { var toggleRequest = new FeatureToggleRequest( af.Definition, af.Location, Enums.FeatureAction.Upgrade, message.Force, message.ElevatedPrivileges ); requestsToBeConfirmed.Add(toggleRequest); } var confirmRequest = new ConfirmationRequest( "Please confirm Feature upgrade", Title, message.TaskId, true ); eventAggregator.PublishOnUIThread(confirmRequest); } }
private void HandleFeatureToggleRequest([NotNull] FeatureToggleRequest message) { _log.Debug("Entered HandleFeatureToggleRequest with Id " + Id.ToString()); if (!TaskCanceled) { if (isSubTaskActor) { ParentTaskActor = Sender; } Title = message.Title; IEnumerable <Location> targetLocations; if (message.Action == Enums.FeatureAction.Activate) { // retrieve locations where to activate targetLocations = repository.GetLocationsCanActivate(message.FeatureDefinition, message.Location); } else if (message.Action == Enums.FeatureAction.Deactivate) { // retrieve locations where to deactivate targetLocations = repository.GetLocationsCanDeactivate(message.FeatureDefinition, message.Location); } else { throw new NotImplementedException("Received feature toggle requests in feature task actor only support activation and deactivation!"); } requestsToBeConfirmed = new List <FeatureToggleRequest>(); foreach (Location l in targetLocations) { var toggleRequestForThisLocation = new FeatureToggleRequest( message.FeatureDefinition , l , message.Action , message.Force , message.ElevatedPrivileges ); requestsToBeConfirmed.Add(toggleRequestForThisLocation); } var action = message.Action.ToString().ToLower(); var locationPrefix = message.FeatureDefinition.Scope < message.Location.Scope ? "across" : "at"; var confirmRequest = new ConfirmationRequest( Title, string.Format("Please confirm to {0} feature \n\n{1} \n\n{4} location \n\n{2}\n\n\nFeatureAdmin found '{3}' location(s) where to {0}.", action, message.FeatureDefinition.ToString(), message.Location.ToString(), targetLocations.Count(), locationPrefix), Id ); eventAggregator.PublishOnUIThread(confirmRequest); } }
private void HandleDeactivateFeaturesRequest(DeactivateFeaturesRequest message) { _log.Debug("Entered HandleDeactivateFeaturesRequest with Id " + Id.ToString()); if (!TaskCanceled) { if (isSubTaskActor) { ParentTaskActor = Sender; } Title = message.Title; requestsToBeConfirmed = new List <FeatureToggleRequest>(); foreach (ActivatedFeatureSpecial af in message.Features) { FeatureDefinition definition; if (af.Definition == null) { definition = Factories.FeatureDefinitionFactory.GetFaultyDefinition( af.ActivatedFeature.FeatureId, af.Location.Scope, af.ActivatedFeature.Version); } else { definition = af.Definition; } var toggleRequest = new FeatureToggleRequest( definition, af.Location, // force is already set to true, so now it is same as deactivation ... // message.Action, Enums.FeatureAction.Deactivate, message.Force, message.ElevatedPrivileges ); requestsToBeConfirmed.Add(toggleRequest); } if (isSubTaskActor) { var skipConfirmation = new Confirmation( Id ); HandleConfirmation(skipConfirmation); } else { var confirmRequest = new ConfirmationRequest( string.Format( "Please confirm Feature {0}", message.Action.ToString().ToLower() ), Title, message.TaskId, true ); eventAggregator.PublishOnUIThread(confirmRequest); } } }
private void HandleUpgrade(FeatureToggleRequest message) { string errorMsg = null; ActivatedFeature af; switch (message.Location.Scope) { case Core.Models.Enums.Scope.Web: errorMsg += dataService.WebFeatureAction( message.FeatureDefinition, message.Location, Core.Models.Enums.FeatureAction.Upgrade, message.ElevatedPrivileges.Value, message.Force.Value, out af); break; case Core.Models.Enums.Scope.Site: errorMsg += dataService.SiteFeatureAction( message.FeatureDefinition, message.Location, Core.Models.Enums.FeatureAction.Upgrade, message.ElevatedPrivileges.Value, message.Force.Value, out af); break; case Core.Models.Enums.Scope.WebApplication: errorMsg += dataService.WebAppFeatureAction( message.FeatureDefinition, message.Location, Core.Models.Enums.FeatureAction.Upgrade, message.Force.Value, out af); break; case Core.Models.Enums.Scope.Farm: errorMsg += dataService.FarmFeatureAction( message.FeatureDefinition, message.Location, Core.Models.Enums.FeatureAction.Upgrade, message.Force.Value, out af); break; case Core.Models.Enums.Scope.ScopeInvalid: errorMsg += string.Format("Location '{0}' has invalid scope - not supported for feature upgrade.", message.Location.Id); af = null; break; default: errorMsg += string.Format("Location '{0}' has unidentified scope - not supported for feature upgrade.", message.Location.Id); af = null; break; } if (string.IsNullOrEmpty(errorMsg)) { var completed = new Core.Messages.Completed.FeatureUpgradeCompleted( message.TaskId, message.Location.UniqueId, af ); Sender.Tell(completed); } else { var cancelationMsg = new CancelMessage( message.TaskId, errorMsg, true ); Sender.Tell(cancelationMsg); } }
public void Handle(FeatureToggleRequest message) { var requestWithCorrectSettings = message.GetWithUpdatedSettings(force, elevatedPrivileges); SetupNewFeatureTaskActor(requestWithCorrectSettings); }