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