Example #1
0
        /// <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);
                }
            }
        }
Example #2
0
        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));
            }
        }
Example #3
0
        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.");
                }
            }
        }
Example #4
0
        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();
                }
            }
        }
Example #5
0
        /// <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.");
            }
        }
Example #6
0
        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);
            }
        }