private bool IsCachedEventNewerThanRefreshedEvent(SituationRecord cachedEvent, SituationRecord refreshEvent)
        {
            DateTime cachedVersionTime  = cachedEvent.situationRecordVersionTime;
            DateTime refreshVersionTime = refreshEvent.situationRecordVersionTime;

            return(cachedVersionTime > refreshVersionTime);
        }
        private void RefreshEvent(SituationRecord situationRecord, Dictionary <String, SituationRecord> tempEventCache)
        {
            SituationRecord cachedSituationRecord = null;
            string          eventId = situationRecord.id;

            if (tempEventCache.ContainsKey(eventId))
            {
                cachedSituationRecord = tempEventCache[eventId];
                tempEventCache.Remove(eventId);
            }

            if (cachedSituationRecord != null)
            {
                if (IsCachedEventNewerThanRefreshedEvent(cachedSituationRecord, situationRecord))
                {
                    EventCache.Add(eventId, cachedSituationRecord);
                    log.Info("Full Refresh version of Event: " + eventId + " is older than cached version, keeping cached version and ignoring the Full Refresh version.");
                }
                else
                {
                    EventCache.Add(eventId, situationRecord);
                    log.Info("Full Refresh version of Event: " + eventId + " is newer than cached version, keeping the Full Refresh version and ignoring the cached version.");
                }
            }

            else
            {
                EventCache.Add(eventId, situationRecord);
                log.Info("New event: " + eventId + " received from the Full Refresh and stored in the cache.");
            }
        }
        private static void processClearedEvents(object source, ElapsedEventArgs e)
        {
            lock (eventDataStore){
                foreach (EventData eventData in eventDataStore.getAllEventData())
                {
                    DateTime            publicationTime = eventData.getPublicationTime();
                    bool                isClear         = false;
                    SituationRecord     situationRecord = eventData.getEventData().situationRecord[0];
                    LifeCycleManagement lifeCycleManagement;
                    if (situationRecord.management != null)
                    {
                        lifeCycleManagement = situationRecord.management.lifeCycleManagement;
                    }
                    else
                    {
                        lifeCycleManagement = null;
                    }
                    if (lifeCycleManagement != null && (lifeCycleManagement.cancel || lifeCycleManagement.end))
                    {
                        isClear = true;
                    }

                    DateTime currentTime = DateTime.Now;
                    DateTime expireTime  = publicationTime.AddSeconds(expireClearedEventsAfterMins * SECONDS_IN_MINUTE);
                    if (isClear && currentTime.CompareTo(expireTime) >= 0)
                    {
                        eventDataStore.removeData(eventData.getEventIdentifier());
                        logWrapper.Info("Removed Expired Event: " + eventData.getEventIdentifier());
                    }
                }
            }
        }
Ejemplo n.º 4
0
        private void HandleEventUpdate(D2LogicalModel d2LogicalModel)
        {
            lock (LockEventUpdates)
            {
                try
                {
                    SituationPublication situationPublication = (SituationPublication)d2LogicalModel.payloadPublication;
                    if (situationPublication != null)
                    {
                        Situation[] situations = situationPublication.situation;
                        log.Info(NumberOfEventsInPayload + situations.Length);

                        foreach (Situation situation in situations)
                        {
                            // Only have 1 situationRecord per situation (index=0)
                            SituationRecord situationRecord = situation.situationRecord[0];
                            EventCache.Remove(situationRecord.id);
                            EventCache.Add(situationRecord.id, situationRecord);
                            ProcessEventData(situationRecord);
                        }
                    }
                }
                catch (Exception e)
                {
                    log.Error(e.Message);
                }
            }
        }
Ejemplo n.º 5
0
 private void processCommonEventData(SituationRecord situationRecord)
 {
     log.Info("Event ID: " + situationRecord.id);
     log.Info("Severity: " + situationRecord.severity);
     log.Info("Current status: " + situationRecord.validity.validityStatus);
     log.Info("Overall start time: " + situationRecord.validity.validityTimeSpecification.overallStartTime);
     log.Info("Overall end time: " + situationRecord.validity.validityTimeSpecification.overallEndTime);
 }
 /* Different types of event/situation record contain some common information
  * and some type-specific data items and should be handled accordingly
  * @param situationRecord */
 private void ProcessEventData(SituationRecord situationRecord)
 {
     ProcessCommonEventData(situationRecord);
     if (typeof(MaintenanceWorks) == (situationRecord.GetType()))
     {
         ProcessMaintenanceWorksEvent((MaintenanceWorks)situationRecord);
     }
 }
Ejemplo n.º 7
0
 private void processCommonEventData(SituationRecord situationRecord)
 {
     log.Info("Event ID: " + situationRecord.id);
     log.Info("Severity: " + situationRecord.severity);
     log.Info("Current status: " + situationRecord.validity.validityStatus);
     log.Info("Overall start time: " + situationRecord.validity.validityTimeSpecification.overallStartTime);
     log.Info("Overall end time: " + situationRecord.validity.validityTimeSpecification.overallEndTime);
 }
        private void processEventData(Situation situation)
        {
            SituationRecord situationRecord = situation.situationRecord[0];

            EventCache.Remove(situationRecord.id);
            EventCache.Add(situationRecord.id, situationRecord);
            ProcessEventData(situationRecord);

            _AssociatedEvent associatedEvent = situation.situationExtension.associatedEvent[0];

            if (null != associatedEvent)
            {
                log.Info("Associated event ID: " + associatedEvent.relatedSituation.id);
                log.Info("Associated event reference: " + associatedEvent.relatedSituationReference);
                log.Info("Association type: {}" + associatedEvent.associationType);
            }
        }
Ejemplo n.º 9
0
        public void Handle(D2LogicalModel deliverEventDataRequest)
        {
            log.Info("New EventData received.");

            // Validate the D2Logical Model
            if (!ExampleDataCheckOk(deliverEventDataRequest))
            {
                throw new SoapException("Incoming request does not appear to be valid!", SoapException.ClientFaultCode);
            }

            SituationPublication situationPublication = null;

            try
            {
                situationPublication = (SituationPublication)deliverEventDataRequest.payloadPublication;

                if (situationPublication != null)
                {
                    Situation[] situations = situationPublication.situation;

                    log.Info("Number of Events in payload: " + situations.Length);

                    foreach (Situation situation in situations)
                    {
                        // Only have 1 situationRecord per situation (index=0)
                        SituationRecord situationRecord = situation.situationRecord[0];

                        // Different types of event/situation record contain some common information and
                        // some type-specific data items and should be handled accordingly
                        processCommonEventData(situationRecord);

                        if (situationRecord.GetType() == typeof(MaintenanceWorks))
                        {
                            processMaintenanceWorksEvent((MaintenanceWorks)situationRecord);
                        }
                    }

                    log.Info("EventData: processed successfully.");
                }
            }
            catch (Exception e)
            {
                log.Error(e.Message);
            }
        }
        private bool IsEventUpdatedAfterFullRefreshPublicationTime(SituationRecord situationRecord, DateTime dateTime)
        {
            DateTime eventVersionTime = situationRecord.situationRecordVersionTime;

            return(eventVersionTime > dateTime);
        }