public override MonitoringData InternalRunCheck() { MonitoringData monitoringData = new MonitoringData(); if (base.ExchangeServer.AdminDisplayVersion.Major < MailboxAssistantsWatermarks.minExpectedServerVersion.Major || (base.ExchangeServer.AdminDisplayVersion.Major == MailboxAssistantsWatermarks.minExpectedServerVersion.Major && base.ExchangeServer.AdminDisplayVersion.Minor < MailboxAssistantsWatermarks.minExpectedServerVersion.Minor)) { monitoringData.Events.Add(new MonitoringEvent(AssistantTroubleshooterBase.EventSource, 5101, EventTypeEnumeration.Warning, Strings.TSMinServerVersion(MailboxAssistantsWatermarks.minExpectedServerVersion.ToString()))); return(monitoringData); } using (ExRpcAdmin exRpcAdmin = ExRpcAdmin.Create("Client=Management", base.ExchangeServer.Name, null, null, null)) { List <MdbStatus> onlineMDBList = base.GetOnlineMDBList(exRpcAdmin); foreach (MdbStatus mdbStatus in onlineMDBList) { Guid empty = Guid.Empty; Watermark[] watermarksForMailbox = exRpcAdmin.GetWatermarksForMailbox(mdbStatus.MdbGuid, ref empty, Guid.Empty); MapiEventManager mapiEventManager = MapiEventManager.Create(exRpcAdmin, Guid.Empty, mdbStatus.MdbGuid); long eventCounter = mapiEventManager.ReadLastEvent().EventCounter; bool flag = false; foreach (Watermark watermark in watermarksForMailbox) { if (eventCounter - watermark.EventCounter > 50L) { flag = true; break; } } if (flag) { MailboxAssistantsWatermarks.WatermarkWithCreateTime[] array2 = MailboxAssistantsWatermarks.BuildWaterMarkWithCreateTimes(mapiEventManager, watermarksForMailbox); DateTime eventTime = MailboxAssistantsWatermarks.GetEventTime(mapiEventManager, eventCounter); List <MailboxAssistantsWatermarks.WatermarkWithCreateTime> list = new List <MailboxAssistantsWatermarks.WatermarkWithCreateTime>(watermarksForMailbox.Length); foreach (MailboxAssistantsWatermarks.WatermarkWithCreateTime watermarkWithCreateTime in array2) { if (eventTime - watermarkWithCreateTime.CreateTime > this.WatermarkBehindWarningThrehold) { list.Add(watermarkWithCreateTime); } } if (list.Count > 0) { monitoringData.Events.Add(new MonitoringEvent(AssistantTroubleshooterBase.EventSource, 5207, EventTypeEnumeration.Error, Strings.AIMDBWatermarksAreTooLow(base.ExchangeServer.Fqdn, mdbStatus.MdbName, ((int)this.WatermarkBehindWarningThrehold.TotalMinutes).ToString(), MailboxAssistantsWatermarks.BuildFormatedEventCounter(eventCounter, eventTime), MailboxAssistantsWatermarks.BuildFormatedWatermarks(list.ToArray())))); } } } } return(monitoringData); }
internal IEnumerable <DatabaseEventWatermark> ReadWatermarks(MapiSession mapiSession, Database database, Guid?consumerGuid, Guid?mailboxGuid) { if (mapiSession == null) { throw new ArgumentException("mapiSession"); } if (database == null) { throw new ArgumentException("database"); } Watermark[] wms = null; long lastCounter = 0L; DatabaseId databaseId = MapiTaskHelper.ConvertDatabaseADObjectToDatabaseId(database); if (consumerGuid != null) { MapiEventManager eventManager = MapiEventManager.Create(mapiSession.Administration, consumerGuid.Value, databaseId.Guid); mapiSession.InvokeWithWrappedException(delegate() { lastCounter = eventManager.ReadLastEvent().EventCounter; if (mailboxGuid != null) { Watermark watermark = eventManager.GetWatermark(mailboxGuid.Value); wms = ((watermark == null) ? new Watermark[0] : new Watermark[] { watermark }); return; } wms = eventManager.GetWatermarks(); }, Strings.ErrorCannotReadDatabaseWatermarks(databaseId.ToString()), databaseId); foreach (Watermark wm in wms) { yield return(new DatabaseEventWatermark(wm, databaseId, lastCounter, this.server, database.Server.ObjectGuid == this.server.Guid)); } } else { GetDatabaseEventWatermark.< > c__DisplayClass7 CS$ < > 8__locals3 = new GetDatabaseEventWatermark.< > c__DisplayClass7(); CS$ < > 8__locals3.eventManager = MapiEventManager.Create(mapiSession.Administration, Guid.Empty, databaseId.Guid); if (mailboxGuid != null) { CS$ < > 8__locals3.mailboxGuids = new Guid[] { mailboxGuid.Value }; } else if (database.IsPublicFolderDatabase) { CS$ < > 8__locals3.mailboxGuids = new Guid[] { Guid.Empty }; } else { PropValue[][] mailboxTable = null; mapiSession.InvokeWithWrappedException(delegate() { mailboxTable = mapiSession.Administration.GetMailboxTable(databaseId.Guid, new PropTag[] { PropTag.UserGuid }); }, Strings.ErrorCannotReadDatabaseWatermarks(databaseId.ToString()), databaseId); CS$ < > 8__locals3.mailboxGuids = new Guid[mailboxTable.Length + 1]; CS$ < > 8__locals3.mailboxGuids[0] = Guid.Empty; for (int j = 0; j < mailboxTable.Length; j++) { CS$ < > 8__locals3.mailboxGuids[j + 1] = new Guid(mailboxTable[j][0].GetBytes()); } } CS$ < > 8__locals3.databaseVersionGuid = Guid.Empty; int i; for (i = 0; i < CS$ < > 8__locals3.mailboxGuids.Length; i++) { mapiSession.InvokeWithWrappedException(delegate() { lastCounter = CS$ < > 8__locals3.eventManager.ReadLastEvent().EventCounter; wms = mapiSession.Administration.GetWatermarksForMailbox(databaseId.Guid, ref CS$ < > 8__locals3.databaseVersionGuid, CS$ < > 8__locals3.mailboxGuids[i]); }, Strings.ErrorCannotReadDatabaseWatermarks(databaseId.ToString()), databaseId); foreach (Watermark wm2 in wms) { yield return(new DatabaseEventWatermark(wm2, databaseId, lastCounter, this.server, database.Server.ObjectGuid == this.server.Guid)); } } } yield break; }