예제 #1
0
        internal void TimerTicked()
        {
            if (ApplicationModel.Current.Server.Value.CreateNewDatabase && ApplicationModel.Current.Server.Value.UserInfo != null &&
                ApplicationModel.Current.Server.Value.UserInfo.IsAdminGlobal)
            {
                ApplicationModel.Current.Server.Value.CreateNewDatabase = false;
                ApplicationModel.Current.Server.Value.DocumentStore
                .AsyncDatabaseCommands
                .ForSystemDatabase()
                .GetAsync("Raven/StudioConfig")
                .ContinueOnSuccessInTheUIThread(doc =>
                {
                    if (doc != null && doc.DataAsJson.ContainsKey("WarnWhenUsingSystemDatabase"))
                    {
                        if (doc.DataAsJson.Value <bool>("WarnWhenUsingSystemDatabase") == false)
                        {
                            return;
                        }
                    }
                    Command.ExecuteCommand(new CreateDatabaseCommand());
                });
            }

            if (currentTask != null)
            {
                return;
            }

            lock (this)
            {
                if (currentTask != null)
                {
                    return;
                }

                var timeFromLastRefresh = SystemTime.UtcNow - lastRefresh;
                var refreshRate         = GetRefreshRate();
                if (timeFromLastRefresh < refreshRate)
                {
                    return;
                }

                using (OnWebRequest(request => request.DefaultRequestHeaders.Add("Raven-Timer-Request", "true")))
                    currentTask = TimerTickedAsync();

                if (currentTask == null)
                {
                    return;
                }

                currentTask
                .Catch()
                .Finally(() =>
                {
                    lastRefresh = SystemTime.UtcNow;
                    IsForced    = false;
                    currentTask = null;
                });
            }
        }
예제 #2
0
파일: Model.cs 프로젝트: webmonger/ravendb
        internal void TimerTicked()
        {
            if (ApplicationModel.Current.Server.Value.CreateNewDatabase)
            {
                ApplicationModel.Current.Server.Value.CreateNewDatabase = false;
                ApplicationModel.Current.Server.Value.DocumentStore
                .AsyncDatabaseCommands
                .ForSystemDatabase()
                .GetAsync("Raven/StudioConfig")
                .ContinueWith(task =>
                {
                    if (task.IsFaulted == false)
                    {
                        Execute.OnTheUI(() =>
                        {
                            if (task.Result != null && task.Result.DataAsJson.ContainsKey("WarnWhenUsingSystemDatabase"))
                            {
                                if (task.Result.DataAsJson.Value <bool>("WarnWhenUsingSystemDatabase") == false)
                                {
                                    return;
                                }
                            }
                            Command.ExecuteCommand(new CreateDatabaseCommand());
                        });
                    }
                    else
                    {
                        GC.KeepAlive(task.Exception);                                 // ignoring the exeption
                    }
                });
            }

            ApplicationModel.Current.UpdateAlerts();

            if (currentTask != null)
            {
                return;
            }

            lock (this)
            {
                if (currentTask != null)
                {
                    return;
                }

                var timeFromLastRefresh = SystemTime.UtcNow - lastRefresh;
                var refreshRate         = GetRefreshRate();
                if (timeFromLastRefresh < refreshRate)
                {
                    return;
                }

                using (OnWebRequest(request => request.Headers["Raven-Timer-Request"] = "true"))
                    currentTask = TimerTickedAsync();

                if (currentTask == null)
                {
                    return;
                }

                currentTask
                .Catch()
                .Finally(() =>
                {
                    lastRefresh = SystemTime.UtcNow;
                    IsForced    = false;
                    currentTask = null;
                });
            }
        }