Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.example.fms.fms_rules;
- import com.example.model.NetworkElement
- import com.example.model.Event
- import com.example.model.Fall
- import com.example.model.Notification
- import com.example.model.BasicAbstract
- import com.example.model.CurrentTime
- import com.example.model.Masker
- import java.util.Set
- import java.util.HashSet
- import java.util.Date
- global com.example.model.TypeNetworkElement elements
- global com.example.model.TypeEvent events
- global com.example.model.TypeNotification notifications
- global com.example.model.TypeOppEvent counterEvents
- global com.example.model.TypeOppEvent higherEvents
- global org.slf4j.Logger logger;
- global org.kie.api.time.SessionClock clock;
- global java.lang.String uniqueId;
- declare Event
- @role ( event )
- @timestamp( creationDate )
- end
- declare Notification
- @role ( event )
- @expires ( 5m )
- end
- declare NetworkElement
- @role ( event )
- @expires ( 5m )
- end
- rule "01 CurrentTime removal oldest"
- when
- $currentTimeA : CurrentTime()
- $currentTimeB : CurrentTime(time >= $currentTimeA.time, this != $currentTimeA)
- then
- logger.debug("*** Rule ["+drools.getRule().getName()+"]");
- try {
- retract($currentTimeA);
- } catch(Exception e) {
- logger.error(e.getMessage() + ". " + $currentTimeA);
- }
- end
- rule "02 Elimination event counter input for arrival event"
- when
- $counterEvent : Event(inputEvent == true, counterEvents.get(events.getReverse(type)) != "")
- $event : Event(inputEvent == true, networkElement == $counterEvent.networkElement, counterEvents.contains(events.getReverse($counterEvent.getType()), events.getReverse(type)), this != $counterEvent)
- then
- logger.debug("*** Rule ["+drools.getRule().getName()+"]");
- try {
- retract($event);
- } catch(Exception e) {
- logger.error(e.getMessage() + ". " + $event);
- }
- end
- rule "03 Elimination of no use against event"
- when
- $counterEvent : Event(inputEvent == true, counterEvents.get(events.getReverse(type)) != "")
- not Event(inputEvent == true, networkElement == $counterEvent.networkElement, counterEvents.contains(events.getReverse($counterEvent.getType()), events.getReverse(type)), this != $counterEvent)
- then
- logger.debug("*** Rule ["+drools.getRule().getName()+"]");
- try {
- retract($counterEvent);
- } catch(Exception e) {
- logger.error(e.getMessage() + ". " + $counterEvent);
- }
- end
- rule "04 Elimination of input event by event of arrival of mayor hierarchy"
- when
- $higherEvent : Event(inputEvent == true, higherEvents.get(events.getReverse(type)) != "")
- $event : Event(inputEvent == true, creationDate < $higherEvent.creationDate, networkElement == $higherEvent.networkElement, higherEvents.contains(events.getReverse($higherEvent.getType()), events.getReverse(type)), this != $higherEvent)
- then
- logger.debug("*** Rule ["+drools.getRule().getName()+"]");
- try {
- retract($event);
- } catch(Exception e) {
- logger.error(e.getMessage() + ". " + $event);
- }
- end
- rule "05 Normalization General Fall of P"
- when
- $epc: Fall(type == events.get("CG"))
- $items : Set() from collect(
- Event(networkElement.parents.contains($epc.networkElement), type == events.get("CG"))
- )
- (
- (
- eval ($epc.getNetworkElement().getRealChildCount() > 0)
- &&
- eval(Double.valueOf($items.size()) / Double.valueOf($epc.getNetworkElement().getRealChildCount()) < 0.70)
- )
- ||
- (
- eval($epc.getNetworkElement().getCmCount() >= 6)
- &&
- not Fall(networkElement == $epc.networkElement, type == events.get("CGCMD"))
- )
- )
- then
- logger.debug("*** Rule ["+drools.getRule().getName()+"]");
- Set copiedItems = new HashSet<>($items);
- for (Object object : copiedItems) {
- Event event = (Event)object;
- event.setMasked(false);
- event.setGenerator(false);
- try {
- update(event);
- } catch(Exception e) {
- logger.error(e.getMessage());
- }
- }
- try {
- retract($epc);
- } catch(Exception e) {
- logger.error(e.getMessage() + ". " + $epc);
- }
- end
- rule "06 Normalization P Partial Loss"
- when
- $epc: Fall(type == events.get("CP"))
- $items : Set() from collect(
- Fall(networkElement.parents.contains($epc.networkElement),
- (type == events.get("CPCMD") ||
- type == events.get("CGCMD") ||
- type == events.get("CP") ||
- type == events.get("CG")))
- )
- (
- eval(Double.valueOf($items.size()) / Double.valueOf($epc.getNetworkElement().getRealChildCount() ) < 0.30)
- ||
- (
- eval(Integer.valueOf($epc.getNetworkElement().getRealChildCount()) == 0)
- &&
- not Fall(networkElement == $epc.networkElement, type == events.get("CPCMD"))
- )
- )
- then
- logger.debug("*** Rule ["+drools.getRule().getName()+"]");
- Set copiedItems = new HashSet<>($items);
- for (Object object : copiedItems) {
- Fall event = (Fall)object;
- event.setMasked(false);
- event.setGenerator(false);
- try {
- update(event);
- } catch(Exception e) {
- logger.error(e.getMessage());
- }
- }
- try {
- retract($epc);
- } catch(Exception e) {
- logger.error(e.getMessage() + ". " + $epc);
- }
- end
- rule "07 Normalization Caida General of CMs Directly connected to P"
- when
- $epc: Fall(type == events.get("CGCMD"))
- $items : Set(Double.valueOf(size) / Double.valueOf($epc.networkElement.cmCount ) < 0.60) from collect(
- Event(type == events.get("CMDown"),
- networkElement.parent == $epc.networkElement)
- )
- then
- logger.debug("*** Rule ["+drools.getRule().getName()+"]");
- Set copiedItems = new HashSet<>($items);
- for (Object object : copiedItems) {
- Event event = (Event)object;
- event.setMasked(false);
- event.setGenerator(false);
- try {
- update(event);
- } catch(Exception e) {
- logger.error(e.getMessage());
- }
- }
- try {
- retract($epc);
- } catch(Exception e) {
- logger.error(e.getMessage() + ". " + $epc);
- }
- end
- rule "08 Normalization Caida CMs Partial Directly connected to P"
- when
- $epc: Fall(type == events.get("CPCMD"))
- $items : Set(Double.valueOf(size) / Double.valueOf($epc.networkElement.cmCount ) < 0.30) from collect(
- Event(type == events.get("CMDown"),
- networkElement.parent == $epc.networkElement)
- )
- then
- logger.debug("*** Rule ["+drools.getRule().getName()+"]");
- Set copiedItems = new HashSet<>($items);
- for (Object object : copiedItems) {
- Event event = (Event)object;
- event.setMasked(false);
- event.setGenerator(false);
- try {
- update(event);
- } catch(Exception e) {
- logger.error(e.getMessage());
- }
- }
- try {
- retract($epc);
- } catch(Exception e) {
- logger.error(e.getMessage() + ". " + $epc);
- }
- end
- rule "09 Replace XP by CG"
- when
- $eventA : Fall(type == events.get("CG"))
- $eventB : Fall(type == events.get("CP"), networkElement == $eventA.networkElement)
- then
- logger.debug("*** Rule ["+drools.getRule().getName()+"]");
- try {
- retract($eventB);
- } catch(Exception e) {
- logger.error(e.getMessage() + ". " + $eventB);
- }
- end
- rule "10 General drop P"
- when
- $notification : Notification(type == notifications.get("Fall"),
- (
- networkElement.type != elements.get("FA") &&
- networkElement.type != elements.get("CE") &&
- networkElement.type != elements.get("CMTS") &&
- networkElement.type != elements.get("MEQ") &&
- networkElement.type != elements.get("OM") &&
- networkElement.type != elements.get("CE_A") &&
- networkElement.type != elements.get("SR_CATV") &&
- networkElement.type != elements.get("SR_MMDS") &&
- networkElement.type != elements.get("SR_HUB") &&
- networkElement.type != elements.get("MOD") &&
- networkElement.type != elements.get("CONT")
- )
- )
- not Fall(networkElement == $notification.networkElement, type == events.get("CG"))
- (
- (
- eval($notification.getNetworkElement().getCmCount() < 6)
- &&
- eval ($notification.getNetworkElement().getRealChildCount() > 0)
- )
- ||
- (
- eval($notification.getNetworkElement().getCmCount() >= 6)
- &&
- Fall(networkElement == $notification.getNetworkElement(), type == events.get("CGCMD"))
- )
- )
- $epcs : Set( ) from collect(
- Fall(networkElement.parents.contains($notification.networkElement), type == events.get("CG"))
- )
- (
- eval ($notification.getNetworkElement().getRealChildCount() == 0)
- ||
- (
- eval ($notification.getNetworkElement().getRealChildCount() > 0)
- &&
- eval(Double.valueOf($epcs.size()) / Double.valueOf($notification.getNetworkElement().getRealChildCount() ) >= 0.90)
- )
- )
- then
- logger.debug("*** Rule ["+drools.getRule().getName()+"]");
- retract($notification);
- Fall $epc = new Fall($notification.getNetworkElement(), events.get("CG"), uniqueId);
- Set copiedItems = new HashSet<>($epcs);
- for (Object object : copiedItems) {
- Event event = (Event)object;
- event.setMasked(true);
- event.setGenerator(true);
- try {
- update(event);
- $epc.add(event);
- } catch(Exception e) {
- logger.error(e.getMessage());
- }
- }
- insert($epc);
- for (NetworkElement element : $notification.getNetworkElement().getParents()) {
- Notification notification = new Notification(element, notifications.get("Fall"));
- insert(notification);
- }
- end
- rule "11 IP masking CMD / C CMD CP / CG"
- when
- $eventA : Fall((type == events.get("CPCMD") || type == events.get("CGCMD")), masked == false)
- $eventB : Fall((type == events.get("CP") || type == events.get("CG")), networkElement == $eventA.networkElement)
- then
- logger.debug("*** Rule ["+drools.getRule().getName()+"]");
- $eventA.setMasked(true);
- $eventA.setGenerator(true);
- try {
- logger.debug("### about to update event: " + $eventA);
- update($eventA);
- $eventB.add($eventA);
- } catch(Exception e) {
- logger.error(e.getMessage());
- }
- end
- rule "12 Partial Caida P"
- when
- $notification : Notification(type == notifications.get("Fall"),
- (
- networkElement.type != elements.get("FA") &&
- networkElement.type != elements.get("CE") &&
- networkElement.type != elements.get("CMTS") &&
- networkElement.type != elements.get("MEQ") &&
- networkElement.type != elements.get("OM") &&
- networkElement.type != elements.get("CE_A") &&
- networkElement.type != elements.get("SR_CATV") &&
- networkElement.type != elements.get("SR_HUB") &&
- networkElement.type != elements.get("SR_MMDS") &&
- networkElement.type != elements.get("MOD") &&
- networkElement.type != elements.get("CONT")
- )
- )
- not Fall(networkElement == $notification.networkElement, (type == events.get("CG") || type == events.get("CP")))
- $epcs : Set() from collect(
- Fall(networkElement.parents.contains($notification.networkElement),
- (type == events.get("CPCMD") ||
- type == events.get("CGCMD") ||
- type == events.get("CP") ||
- type == events.get("CG")), masked == false)
- )
- (
- eval(Double.valueOf($epcs.size()) / Double.valueOf($notification.getNetworkElement().getRealChildCount() ) >= 0.40)
- ||
- Fall(networkElement == $notification.getNetworkElement(), type == events.get("CPCMD"), networkElement.realChildCount == 0)
- )
- then
- logger.debug("*** Rule ["+drools.getRule().getName()+"]");
- logger.debug("### retracting notification : "+$notification);
- retract($notification);
- Fall $epc = new Fall($notification.getNetworkElement(), events.get("CP"), uniqueId);
- Set copiedItems = new HashSet<>($epcs);
- for (Object object : copiedItems) {
- Fall event = (Fall)object;
- event.setMasked(true);
- event.setGenerator(true);
- try {
- logger.debug("### updating event : "+event);
- update(event);
- $epc.add(event);
- } catch(Exception e) {
- logger.error(e.getMessage());
- }
- }
- logger.debug("### inserting new Fall : "+$epc);
- insert($epc);
- for (NetworkElement element : $notification.getNetworkElement().getParents()) {
- Notification notification = new Notification(element, notifications.get("Fall"));
- logger.debug("### inserting new Notification for Fall : "+notification);
- insert(notification);
- }
- end
- rule "13 Replace CPCMD by CMD"
- when
- $eventA : Fall(type == events.get("CGCMD"))
- $eventB : Fall(type == events.get("CPCMD"), networkElement == $eventA.networkElement)
- then
- logger.debug("*** Rule ["+drools.getRule().getName()+"]");
- try {
- retract($eventB);
- } catch(Exception e) {
- logger.error(e.getMessage() + ". " + $eventB);
- }
- end
- rule "14 General CMs drop directly connected to P"
- when
- $ne : NetworkElement()
- not Fall(networkElement == $ne, type == events.get("CGCMD"))
- $items : Set(Double.valueOf(size) / Double.valueOf($ne.getCmCount()) >= 0.75) from collect(
- Event(type == events.get("CMDown"),
- networkElement.parent == $ne,
- (
- ($ne.type == elements.get("ED") && $ne.cmCount >= 6) ||
- ($ne.type != elements.get("ED") && $ne.cmCount >= 6)
- ) ) over window:time ( 10m )
- )
- then
- logger.debug("*** Rule ["+drools.getRule().getName()+"]");
- Fall $epc = new Fall($ne, events.get("CGCMD"), uniqueId);
- Set copiedItems = new HashSet<>($items);
- for (Object object : copiedItems) {
- Event event = (Event)object;
- event.setMasked(true);
- event.setGenerator(true);
- try {
- update(event);
- $epc.add(event);
- } catch(Exception e) {
- logger.error(e.getMessage());
- }
- }
- insert($epc);
- insert(new Notification($ne, notifications.get("Fall")));
- for (NetworkElement element : $ne.getParents()) {
- insert(new Notification(element, notifications.get("Fall")));
- }
- end
- rule "15 Partial CMs fall directly connected to P"
- when
- $ne : NetworkElement()
- not Fall(networkElement == $ne, (
- type == events.get("CPCMD") ||
- type == events.get("CGCMD") ||
- type == events.get("CG") ||
- type == events.get("CP")))
- $items : Set() from collect(
- Event(type == events.get("CMDown"),
- networkElement.parent == $ne,
- (
- ($ne.type == elements.get("ED") && $ne.cmCount >= 6) ||
- ($ne.type != elements.get("ED") && $ne.cmCount >= 6)
- ) ) over window:time ( 10m )
- )
- eval(Double.valueOf($items.size()) / Double.valueOf($ne.getCmCount()) >= 0.40)
- eval(Double.valueOf($items.size()) / Double.valueOf($ne.getCmCount()) < 0.75)
- then
- logger.debug("*** Rule ["+drools.getRule().getName()+"]");
- Fall $epc = new Fall($ne, events.get("CPCMD"), uniqueId);
- Set copiedItems = new HashSet<>($items);
- for (Object object : copiedItems) {
- Event event = (Event)object;
- event.setMasked(true);
- event.setGenerator(true);
- try {
- logger.debug("### updating event : "+event);
- update(event);
- $epc.add(event);
- } catch(Exception e) {
- logger.error(e.getMessage());
- }
- }
- logger.debug("### inserting new Fall : "+$epc);
- insert($epc);
- logger.debug("### inserting new Notification for Fall : "+$ne);
- insert(new Notification($ne, notifications.get("Fall")));
- for (NetworkElement element : $ne.getParents()) {
- logger.debug("### inserting new Notification for Fall : "+element);
- insert(new Notification(element, notifications.get("Fall")));
- }
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement