/// <summary> /// Emulates authentication (login process) for existing user. /// Password is skipped since not used in emulation. /// </summary> /// <param name="email">User email that is used as a login.</param> /// <returns> /// Session ID in case of successful authentication. /// Null or empty string if authentication fails. /// </returns> public static string Authenticate(string email) { using (var scope = CreateTagScope(ClassHelper.GetCurrentMethodName())) { scope.Tags[AppTag.Email] = email; // Bind further log entries to user ID. lock ( Locker ) { scope.Tags[AppTag.UserId] = Users[email].UserId; } if (RandomHelper.GenerateBoolean()) { var sessionId = Guid.NewGuid().ToString("D"); lock ( Locker ) { Sessions.Add(sessionId, email); } scope.Tags[AppTag.SessionId] = sessionId; Logger.Info("Authentication succeeded."); return(sessionId); } else { Logger.Error("Authentication failed."); return(null); } } }
public static void StopVirtualMachine(string sessionId, string virtualMachineName) { using (var scope = CreateTagScope(ClassHelper.GetCurrentMethodName())) { scope.Tags[AppTag.SessionId] = sessionId; scope.Tags[AppTag.UserId] = GetUserBySession(sessionId).UserId; scope.Tags[AppTag.VirtualMachine] = virtualMachineName; Logger.Info("User requested to stop virtual machine."); ThreadPool.QueueUserWorkItem(_ => DataCenter.StopVirtualMachine(virtualMachineName)); } }
public static void CreateNewVirtualMachine(string userId, string virtualMachineName) { using (var scope = CreateTagScope(ClassHelper.GetCurrentMethodName())) { lock ( VirtualMachinesLock ) { var virtualMachine = new VirtualMachine(userId, virtualMachineName); VirtualMachines[virtualMachineName] = virtualMachine; scope.Tags[AppTag.UserId] = userId; scope.Tags[AppTag.VirtualMachine] = virtualMachineName; Logger.Info("New virtual machine was created."); } } }
public static void StopVirtualMachine(string virtualMachineName) { using (var scope = CreateTagScope(ClassHelper.GetCurrentMethodName())) { lock ( VirtualMachinesLock ) { var virtualMachine = VirtualMachines[virtualMachineName]; scope.Tags[AppTag.UserId] = virtualMachine.UserId; scope.Tags[AppTag.VirtualMachine] = virtualMachineName; Logger.Info("Stopping virtual machine..."); virtualMachine.Stop(); } } }
/// <summary> /// Emulates process of creating a new user. /// Password is skipped since not used in emulation. /// </summary> public static void RegisterNewUser(string email, string firstName, string lastName) { using (var scope = CreateTagScope(ClassHelper.GetCurrentMethodName())) { scope.Tags[AppTag.Email] = email; scope.Tags[AppTag.FirstName] = firstName; scope.Tags[AppTag.LastName] = lastName; Logger.Info("Request to register new user."); lock ( Locker ) { var user = new User(email); Users.Add(email, user); // Bind further log entries to user ID. scope.Tags[AppTag.UserId] = user.UserId; } Logger.Info("New user registered."); } }
public static bool OrderNewVirtualMachine(string sessionId, string virtualMachineName, decimal amount) { using (var scope = CreateTagScope(ClassHelper.GetCurrentMethodName())) { var user = GetUserBySession(sessionId); scope.Tags[AppTag.UserId] = user.UserId; scope.Tags[AppTag.SessionId] = sessionId; Logger.InfoFormat("Redirect user to external payment system. Amount = {0}", amount); if (RandomHelper.GenerateBoolean()) { scope.Tags[AppTag.VirtualMachine] = virtualMachineName; Logger.Info("Creating virtual machine..."); ThreadPool.QueueUserWorkItem(_ => DataCenter.CreateNewVirtualMachine(user.UserId, virtualMachineName)); return(true); } var errorId = Guid.NewGuid().ToString("D"); scope.Tags[AppTag.ErrorId] = errorId; Logger.Error("Payment failed. Unique error ID was displayed."); return(false); } }