예제 #1
0
        public static void Ad2PortalSyncFinalizer(Content content, SnTaskResult result)
        {
            SnTaskManager.OnTaskFinished(result);

            // not enough information
            if (result.Task == null)
            {
                return;
            }

            try
            {
                if (!string.IsNullOrEmpty(result.ResultData))
                {
                    dynamic resultData = JsonConvert.DeserializeObject(result.ResultData);

                    SnLog.WriteInformation("AD sync finished. See details below.", EventId.DirectoryServices,
                                           properties: new Dictionary <string, object>
                    {
                        { "SyncedObjects", resultData.SyncedObjects },
                        { "ObjectErrorCount", resultData.ObjectErrorCount },
                        { "ErrorCount", resultData.ErrorCount },
                        { "ElapsedTime", resultData.ElapsedTime }
                    });
                }
                else
                {
                    SnLog.WriteWarning("AD sync finished with no results.", EventId.DirectoryServices);
                }
            }
            catch (Exception ex)
            {
                SnLog.WriteException(ex, "Error during AD sync finalizer.", EventId.DirectoryServices);
            }

            // the task was executed successfully without an error message
            if (result.Successful && result.Error == null)
            {
                return;
            }

            SnLog.WriteError("Error during AD sync. " + result.Error);
        }
예제 #2
0
        private static void StartADSync()
        {
            if (!_adsyncAvailable.HasValue)
            {
                _adsyncAvailable = Settings.IsSettingsAvailable(ADSyncSettingsName);
                SnLog.WriteInformation("Active Directory synch feature is " + (_adsyncAvailable.Value ? string.Empty : "not ") + "available.");
            }
            if (!_adsyncAvailable.Value)
            {
                return;
            }

            // skip check if not enough cycles have passed or the feature is not enabled
            if (!IsTaskExecutable(ADSYNC_CYCLECOUNT) || !Settings.GetValue(ADSyncSettingsName, "Enabled", null, false))
            {
                return;
            }

            if (!AdSyncTimeArrived())
            {
                return;
            }

            var requestData = new RegisterTaskRequest
            {
                Type        = "SyncAD2Portal",
                Title       = "SyncAD2Portal",
                Priority    = TaskPriority.Immediately,
                AppId       = Settings.GetValue(SnTaskManager.Settings.SETTINGSNAME, SnTaskManager.Settings.TASKMANAGEMENTAPPID, null, "SenseNet"),
                TaskData    = JsonConvert.SerializeObject(new { SiteUrl = Settings.GetValue <string>(SnTaskManager.Settings.SETTINGSNAME, SnTaskManager.Settings.TASKMANAGEMENTAPPLICATIONURL) }),
                Tag         = string.Empty,
                FinalizeUrl = "/odata.svc/('Root')/Ad2PortalSyncFinalizer"
            };

            // Fire and forget: we do not need the result of the register operation.
            // (we have to start a task here instead of calling RegisterTaskAsync
            // directly because the asp.net sync context callback would fail)
            Task.Run(() => SnTaskManager.RegisterTaskAsync(requestData));
        }
예제 #3
0
        private void StartManagers()
        {
            object          dummy;
            IClusterChannel channel = null;

            try
            {
                BlobStorageComponents.DataProvider     = Providers.Instance.BlobMetaDataProvider;
                BlobStorageComponents.ProviderSelector = Providers.Instance.BlobProviderSelector;

                ConsoleWrite("Initializing cache ... ");
                dummy = Cache.Count;
                ConsoleWriteLine("ok.");

                ConsoleWrite("Starting message channel ... ");
                channel = DistributedApplication.ClusterChannel;
                ConsoleWriteLine("ok.");

                ConsoleWrite("Sending greeting message ... ");
                new PingMessage(new string[0]).SendAsync(CancellationToken.None).GetAwaiter().GetResult();
                ConsoleWriteLine("ok.");

                ConsoleWrite("Starting NodeType system ... ");
                dummy = ActiveSchema.NodeTypes[0];
                ConsoleWriteLine("ok.");

                ConsoleWrite("Starting ContentType system ... ");
                dummy = ContentType.GetByName("GenericContent");
                ConsoleWriteLine("ok.");

                ConsoleWrite("Starting AccessProvider ... ");
                dummy = User.Current;
                ConsoleWriteLine("ok.");

                SnQuery.SetPermissionFilterFactory(Providers.Instance.PermissionFilterFactory);

                if (_settings.StartIndexingEngine)
                {
                    StartIndexingEngine();
                }
                else
                {
                    ConsoleWriteLine("IndexingEngine is not started.");
                }

                // switch on message processing after IndexingEngine was started.
                channel.AllowMessageProcessing = true;

                if (_settings.StartWorkflowEngine)
                {
                    StartWorkflowEngine();
                }
                else
                {
                    ConsoleWriteLine("Workflow subsystem is not started.");
                }

                ConsoleWrite("Loading string resources ... ");
                dummy = SenseNetResourceManager.Current;
                ConsoleWriteLine("ok.");

                serviceInstances = new List <ISnService>();
                foreach (var serviceType in TypeResolver.GetTypesByInterface(typeof(ISnService)))
                {
                    var service = (ISnService)Activator.CreateInstance(serviceType);
                    service.Start();
                    ConsoleWriteLine("Service started: ", serviceType.Name);
                    serviceInstances.Add(service);
                }

                // register this application in the task management component
                SnTaskManager.RegisterApplication();
            }
            catch
            {
                // If an error occoured, shut down the cluster channel.
                channel?.ShutDownAsync(CancellationToken.None).GetAwaiter().GetResult();

                throw;
            }
        }
예제 #4
0
        private void StartManagers()
        {
            object dummy;

            SenseNet.Communication.Messaging.IClusterChannel channel = null;

            try
            {
                ConsoleWrite("Initializing cache ... ");
                dummy = SenseNet.ContentRepository.DistributedApplication.Cache.Count;
                ConsoleWriteLine("ok.");

                ConsoleWrite("Starting message channel ... ");
                channel = SenseNet.ContentRepository.DistributedApplication.ClusterChannel;
                ConsoleWriteLine("ok.");

                ConsoleWrite("Sending greeting message ... ");
                (new PingMessage(new string[0])).Send();
                ConsoleWriteLine("ok.");

                ConsoleWrite("Starting NodeType system ... ");
                dummy = ActiveSchema.NodeTypes[0];
                ConsoleWriteLine("ok.");

                ConsoleWrite("Starting ContentType system ... ");
                dummy = SenseNet.ContentRepository.Schema.ContentType.GetByName("GenericContent");
                ConsoleWriteLine("ok.");

                ConsoleWrite("Starting AccessProvider ... ");
                dummy = User.Current;
                ConsoleWriteLine("ok.");

                if (_settings.StartLuceneManager)
                {
                    StartLucene();
                }
                else
                {
                    ConsoleWriteLine("LuceneManager is not started.");
                }

                // switch on message processing after LuceneManager was started
                channel.AllowMessageProcessing = true;

                SenseNet.Search.Indexing.IndexHealthMonitor.Start(_settings.Console);

                if (_settings.StartWorkflowEngine)
                {
                    StartWorkflowEngine();
                }
                else
                {
                    ConsoleWriteLine("Workflow subsystem is not started.");
                }

                ConsoleWrite("Loading string resources ... ");
                dummy = SenseNetResourceManager.Current;
                ConsoleWriteLine("ok.");

                serviceInstances = new List <ISnService>();
                foreach (var serviceType in TypeResolver.GetTypesByInterface(typeof(ISnService)))
                {
                    var service = (ISnService)Activator.CreateInstance(serviceType);
                    service.Start();
                    ConsoleWriteLine("Service started: ", serviceType.Name);
                    serviceInstances.Add(service);
                }

                // register this application in the task management component
                SnTaskManager.RegisterApplication();
            }
            catch
            {
                // If an error occoured, shut down the cluster channel.
                if (channel != null)
                {
                    channel.ShutDown();
                }

                throw;
            }
        }