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); }
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)); }
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; } }
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; } }