예제 #1
0
        public void UpdateAdminEnabled(Dto.ServerProvidersAdminSettings source)
        {
            var session = _sessionFactory.OpenSession();
            var statuses = session.Query<Models.ServerStatus>().Where(s => s.ServerId == source.ServerId).ToArray();

            if (statuses.Any())
            {
                using (var tran = session.BeginTransaction())
                {
                    var yahoo = statuses.FirstOrDefault(s => s.Provider == Provider.Yahoo);

                    if (yahoo == null)
                    {
                        yahoo = new Models.ServerStatus()
                        {
                            ServerId = source.ServerId,
                            Provider = Provider.Yahoo,
                            AdminEnabled = source.YahooEnabled,
                            LastStatus = Status.Stopped,
                            LastStatusChange = DateTime.Now,
                            DateModified = DateTime.Now,
                            LastIsAliveReceived = (DateTime) SqlDateTime.MinValue
                        };
                        session.Save(yahoo);
                    }
                    else if (yahoo.AdminEnabled != source.YahooEnabled)
                    {
                        yahoo.AdminEnabled = source.YahooEnabled;
                        session.Update(yahoo);
                    }

                    var hotmail = statuses.FirstOrDefault(s => s.Provider == Provider.Hotmail);

                    if (hotmail == null)
                    {
                        hotmail = new Models.ServerStatus()
                        {
                            ServerId = source.ServerId,
                            Provider = Provider.Hotmail,
                            AdminEnabled = source.HotmailEnabled,
                            LastStatus = Status.Stopped,
                            LastStatusChange = DateTime.Now,
                            DateModified = DateTime.Now,
                            LastIsAliveReceived = (DateTime) SqlDateTime.MinValue
                        };
                        session.Save(hotmail);
                    }
                    else if (hotmail.AdminEnabled != source.HotmailEnabled)
                    {
                        hotmail.AdminEnabled = source.HotmailEnabled;
                        session.Update(hotmail);
                    }

                    var aol = statuses.FirstOrDefault(s => s.Provider == Provider.Aol);

                    if (aol == null)
                    {
                        aol = new Models.ServerStatus()
                        {
                            ServerId = source.ServerId,
                            Provider = Provider.Aol,
                            AdminEnabled = source.AolEnabled,
                            LastStatus = Status.Stopped,
                            LastStatusChange = DateTime.Now,
                            DateModified = DateTime.Now,
                            LastIsAliveReceived = (DateTime) SqlDateTime.MinValue
                        };
                        session.Save(aol);
                    }
                    else if (aol.AdminEnabled != source.AolEnabled)
                    {
                        aol.AdminEnabled = source.AolEnabled;
                        session.Update(aol);
                    } 
                    tran.Commit();
                }
            }
            session.Close();
        }
예제 #2
0
        public void EngagerPhoneHome(Provider provider, Status status)
        {
            if (_serverId == -1) { return; }
            try
            {
                var session = _sessionFactory.OpenSession();

                using (var tran = session.BeginTransaction())
                {
                    var serverStatus = session.Query<Models.ServerStatus>().FirstOrDefault(s => s.ServerId == _serverId && s.Provider == provider);

                    if (serverStatus == null && !session.Query<Models.Server>().Any(s => s.ServerId == _serverId))
                    {
                        session.Save(new Models.Server()
                        {
                            ServerId = _serverId,
                            Name = Environment.MachineName,
                            Address = Environment.MachineName,
                        });
                    }

                    if (serverStatus == null)
                    {
                        serverStatus = new Models.ServerStatus()
                        {
                            ServerId = _serverId,
                            Provider = provider,
                            AdminEnabled = true
                        };
                    }

                    if ((int) serverStatus.LastStatus != (int) status || IsInTimeoutState(serverStatus.LastStatus, serverStatus.LastIsAliveReceived))
                    {
                        serverStatus.LastStatusChange = DateTime.Now;
                        serverStatus.LastStatus = status;
                    }
                    serverStatus.LastIsAliveReceived = DateTime.Now;
                    serverStatus.DateModified = DateTime.Now;
                    session.SaveOrUpdate(serverStatus);
                    tran.Commit();
                }

                session.Close();
            }
            catch (Exception ex)
            {
                if (_log != null)
                {
                    _log.Error("Phone Home Failed, Server Status not updated");
                    _log.Trace(ex);
                }
            }
        }