private void SessionStartupTransitionReceived(object sender, SessionStartupTransitionEventArgs e) { if (initializationStatus_Label.InvokeRequired) { initializationStatus_Label.Invoke(new Action(() => SessionStartupTransitionReceived(sender, e))); return; } // This special event handler isolates this specific client as the one to handle // this next transition. Without it, every client monitoring the dispatcher // would respond to this event and try to validate, which would be a problem. switch (e.Transition) { case SessionStartupTransition.ReadyToValidate: SessionClient.Instance.Validate(_sessionId); break; case SessionStartupTransition.ReadyToRevalidate: retry_Button.Visible = true; _finishButton.Enabled = false; initializationStatus_Label.Text = "Validation failed. Fix the specified errors and press Retry to validate again."; break; case SessionStartupTransition.ReadyToPowerUp: retry_Button.Visible = true; _finishButton.Enabled = true; initializationStatus_Label.Text = "Validation complete. Press Start Session to begin test execution."; break; } // When a transition comes in, force the grid view to refresh completely // This takes care of any stragglers that haven't refreshed in the UI assetStatus_GridView.DataSource = null; assetStatus_GridView.DataSource = _statusRows; }
private void Instance_SessionStartupTransitionReceived(object sender, SessionStartupTransitionEventArgs e) { // Your code here WriteLine("{0}".FormatWith(e.Transition)); switch (e.Transition) { case SessionStartupTransition.ReadyToValidate: { UpdateStatus("Validating session"); SessionClient.Instance.Validate(_ticket.SessionId); } break; case SessionStartupTransition.ReadyToPowerUp: { UpdateStatus("Powering up"); _revalidated = false; SessionClient.Instance.PowerUp(_ticket.SessionId); } break; case SessionStartupTransition.ReadyToRun: { UpdateStatus("Starting"); SessionClient.Instance.Run(_ticket.SessionId); } break; case SessionStartupTransition.StartupComplete: { UpdateStatus("Running"); } break; case SessionStartupTransition.ReadyToRevalidate: { if (_revalidated) { SessionClient.Instance.Shutdown(_ticket.SessionId, _shutdownOptions); } else { UpdateStatus("Error, check VM and retry"); WriteLine("Waiting one minute before retrying, please fix the errors in the meantime"); Delay.Wait(TimeSpan.FromMinutes(1)); SessionClient.Instance.Revalidate(_ticket.SessionId); _revalidated = true; } } break; } }
//protected void OnStart(string[] args) //{ // if (args == null) // { // throw new ArgumentNullException("args"); // } // GlobalSettings.Load(args[0]); // using (EnterpriseTestContext dataContext = new EnterpriseTestContext()) // { // GlobalSettings.IsDistributedSystem = dataContext.VirtualResources.Any(r => r.ResourceType == "OfficeWorker"); // } // string dispatcherHostName = "localhost"; // if (GlobalSettings.IsDistributedSystem) // { // using (AssetInventoryContext context = DbConnect.AssetInventoryContext()) // { // var dispatcher = context.FrameworkServers.FirstOrDefault(x => x.Active && x.ServerTypes.Any(n => n.Name == "BTF")); // if (dispatcher == null) // { // TraceFactory.Logger.Error("Could not find any dispatchers reserved for BTF Execution."); // return; // } // } // } // SessionClient.Instance.Initialize(dispatcherHostName); // SessionClient.Instance.SessionStartupTransitionReceived += Instance_SessionStartupTransitionReceived; // SessionClient.Instance.SessionStateReceived += Instance_SessionStateReceived; // _server = WebApp.Start<Startup>(url: _baseAddress); // _executionTimer.Start(); //} //protected void OnStop() //{ // _server.Dispose(); // _executionTimer.Stop(); // _executionTimer.Dispose(); // SessionClient.Instance.SessionStateReceived -= Instance_SessionStateReceived; // SessionClient.Instance.SessionStartupTransitionReceived -= Instance_SessionStartupTransitionReceived; //} private void Instance_SessionStartupTransitionReceived(object sender, SessionStartupTransitionEventArgs e) { TraceFactory.Logger.Debug($"Session Startup State received: {e.Transition} for Session {e.SessionId}"); switch (e.Transition) { case SessionStartupTransition.ReadyToValidate: SessionClient.Instance.Validate(e.SessionId); break; case SessionStartupTransition.ReadyToPowerUp: { _revalidated = false; SessionClient.Instance.PowerUp(e.SessionId); } break; case SessionStartupTransition.ReadyToRun: { SessionClient.Instance.Run(e.SessionId); } break; case SessionStartupTransition.StartupComplete: { TraceFactory.Logger.Debug("Running"); } break; case SessionStartupTransition.ReadyToRevalidate: { if (_revalidated) { SessionClient.Instance.Shutdown(e.SessionId, _shutdownOptions); } else { TraceFactory.Logger.Error("Error, check VM and retry"); TraceFactory.Logger.Info("Waiting one minute before retrying, please fix the errors in the meantime"); Delay.Wait(TimeSpan.FromMinutes(1)); SessionClient.Instance.Revalidate(e.SessionId); _revalidated = true; } } break; } }
private void SessionClient_StartupTransitionReceived(object sender, SessionStartupTransitionEventArgs e) { UpdateStatus("Startup Transition: {0}".FormatWith(e.Transition)); switch (e.Transition) { case SessionStartupTransition.ReadyToValidate: SessionClient.Instance.Validate(_ticket.SessionId); break; case SessionStartupTransition.ReadyToPowerUp: SessionClient.Instance.PowerUp(_ticket.SessionId); break; case SessionStartupTransition.ReadyToRun: SessionClient.Instance.Run(_ticket.SessionId); break; } }
static void SessionStartupTransitionReceived(object sender, SessionStartupTransitionEventArgs e) { Console.WriteLine("{0}".FormatWith(e.Transition)); switch (e.Transition) { case SessionStartupTransition.ReadyToValidate: SessionClient.Instance.Validate(_ticket.SessionId); break; case SessionStartupTransition.ReadyToPowerUp: SessionClient.Instance.PowerUp(_ticket.SessionId); break; case SessionStartupTransition.ReadyToRun: SessionClient.Instance.Run(_ticket.SessionId); break; } }
private void SessionStartupTransitionReceived(object sender, SessionStartupTransitionEventArgs e) { if (e != null && !string.IsNullOrEmpty(e.SessionId)) { TraceFactory.Logger.Debug($"Incoming transition state: {e.Transition}"); var execInfo = GetExecutingSessionInfo(e.SessionId); if (execInfo != null) { TraceFactory.Logger.Debug($"Session state: {execInfo.State}"); execInfo.StartupTransition = e.Transition; // SessionExecutionManager is subscribed to the same SessionClient events as the startup wizard. // The startup wizard handles all SessionStartupTransitions except for "Run". When the session finally // transitions to "ReadyToRun", SessionExecutionManager is the only one listening (the wizard is gone). // This is true also when the session is resetting. if (e.Transition == SessionStartupTransition.ReadyToRun) { TraceFactory.Logger.Debug("Sending Run request to dispatcher"); SessionClient.Instance.Run(e.SessionId); _sessionResetting = false; } else if (_sessionResetting) { // SessionExecutionManager should only handle the following transition states if the session is resetting. // Otherwise, it is assumed that these are being handled by the startup wizard. switch (e.Transition) { case SessionStartupTransition.ReadyToValidate: TraceFactory.Logger.Debug("Calling Validate"); SessionClient.Instance.Validate(e.SessionId); break; case SessionStartupTransition.ReadyToPowerUp: TraceFactory.Logger.Debug("Calling PowerUp"); SessionClient.Instance.PowerUp(e.SessionId); break; } } } } }