Beispiel #1
0
        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);
        }
Beispiel #2
0
        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;
        }