Advertisement
Guest User

Untitled

a guest
Sep 27th, 2016
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.82 KB | None | 0 0
  1. package com.example.fms.fms_rules;
  2.  
  3. import com.example.model.NetworkElement
  4. import com.example.model.Event
  5. import com.example.model.Fall
  6. import com.example.model.Notification
  7. import com.example.model.BasicAbstract
  8. import com.example.model.CurrentTime
  9. import com.example.model.Masker
  10. import java.util.Set
  11. import java.util.HashSet
  12. import java.util.Date
  13.  
  14. global com.example.model.TypeNetworkElement elements
  15. global com.example.model.TypeEvent events
  16. global com.example.model.TypeNotification notifications
  17. global com.example.model.TypeOppEvent counterEvents
  18. global com.example.model.TypeOppEvent higherEvents
  19. global org.slf4j.Logger logger;
  20. global org.kie.api.time.SessionClock clock;
  21. global java.lang.String uniqueId;
  22.  
  23. declare Event
  24. @role ( event )
  25. @timestamp( creationDate )
  26. end
  27.  
  28. declare Notification
  29. @role ( event )
  30. @expires ( 5m )
  31. end
  32.  
  33. declare NetworkElement
  34. @role ( event )
  35. @expires ( 5m )
  36. end
  37.  
  38. rule "01 CurrentTime removal oldest"
  39. when
  40. $currentTimeA : CurrentTime()
  41. $currentTimeB : CurrentTime(time >= $currentTimeA.time, this != $currentTimeA)
  42. then
  43. logger.debug("*** Rule ["+drools.getRule().getName()+"]");
  44. try {
  45. retract($currentTimeA);
  46. } catch(Exception e) {
  47. logger.error(e.getMessage() + ". " + $currentTimeA);
  48. }
  49. end
  50.  
  51. rule "02 Elimination event counter input for arrival event"
  52. when
  53. $counterEvent : Event(inputEvent == true, counterEvents.get(events.getReverse(type)) != "")
  54. $event : Event(inputEvent == true, networkElement == $counterEvent.networkElement, counterEvents.contains(events.getReverse($counterEvent.getType()), events.getReverse(type)), this != $counterEvent)
  55. then
  56. logger.debug("*** Rule ["+drools.getRule().getName()+"]");
  57. try {
  58. retract($event);
  59. } catch(Exception e) {
  60. logger.error(e.getMessage() + ". " + $event);
  61. }
  62. end
  63.  
  64. rule "03 Elimination of no use against event"
  65. when
  66. $counterEvent : Event(inputEvent == true, counterEvents.get(events.getReverse(type)) != "")
  67. not Event(inputEvent == true, networkElement == $counterEvent.networkElement, counterEvents.contains(events.getReverse($counterEvent.getType()), events.getReverse(type)), this != $counterEvent)
  68. then
  69. logger.debug("*** Rule ["+drools.getRule().getName()+"]");
  70. try {
  71. retract($counterEvent);
  72. } catch(Exception e) {
  73. logger.error(e.getMessage() + ". " + $counterEvent);
  74. }
  75. end
  76.  
  77. rule "04 Elimination of input event by event of arrival of mayor hierarchy"
  78. when
  79. $higherEvent : Event(inputEvent == true, higherEvents.get(events.getReverse(type)) != "")
  80. $event : Event(inputEvent == true, creationDate < $higherEvent.creationDate, networkElement == $higherEvent.networkElement, higherEvents.contains(events.getReverse($higherEvent.getType()), events.getReverse(type)), this != $higherEvent)
  81. then
  82. logger.debug("*** Rule ["+drools.getRule().getName()+"]");
  83. try {
  84. retract($event);
  85. } catch(Exception e) {
  86. logger.error(e.getMessage() + ". " + $event);
  87. }
  88. end
  89.  
  90. rule "05 Normalization General Fall of P"
  91. when
  92. $epc: Fall(type == events.get("CG"))
  93. $items : Set() from collect(
  94. Event(networkElement.parents.contains($epc.networkElement), type == events.get("CG"))
  95. )
  96. (
  97. (
  98. eval ($epc.getNetworkElement().getRealChildCount() > 0)
  99. &&
  100. eval(Double.valueOf($items.size()) / Double.valueOf($epc.getNetworkElement().getRealChildCount()) < 0.70)
  101. )
  102. ||
  103. (
  104. eval($epc.getNetworkElement().getCmCount() >= 6)
  105. &&
  106. not Fall(networkElement == $epc.networkElement, type == events.get("CGCMD"))
  107. )
  108. )
  109. then
  110. logger.debug("*** Rule ["+drools.getRule().getName()+"]");
  111. Set copiedItems = new HashSet<>($items);
  112. for (Object object : copiedItems) {
  113. Event event = (Event)object;
  114. event.setMasked(false);
  115. event.setGenerator(false);
  116. try {
  117. update(event);
  118. } catch(Exception e) {
  119. logger.error(e.getMessage());
  120. }
  121. }
  122. try {
  123. retract($epc);
  124. } catch(Exception e) {
  125. logger.error(e.getMessage() + ". " + $epc);
  126. }
  127. end
  128.  
  129. rule "06 Normalization P Partial Loss"
  130. when
  131. $epc: Fall(type == events.get("CP"))
  132. $items : Set() from collect(
  133. Fall(networkElement.parents.contains($epc.networkElement),
  134. (type == events.get("CPCMD") ||
  135. type == events.get("CGCMD") ||
  136. type == events.get("CP") ||
  137. type == events.get("CG")))
  138. )
  139. (
  140. eval(Double.valueOf($items.size()) / Double.valueOf($epc.getNetworkElement().getRealChildCount() ) < 0.30)
  141. ||
  142. (
  143. eval(Integer.valueOf($epc.getNetworkElement().getRealChildCount()) == 0)
  144. &&
  145. not Fall(networkElement == $epc.networkElement, type == events.get("CPCMD"))
  146. )
  147. )
  148. then
  149. logger.debug("*** Rule ["+drools.getRule().getName()+"]");
  150. Set copiedItems = new HashSet<>($items);
  151. for (Object object : copiedItems) {
  152. Fall event = (Fall)object;
  153. event.setMasked(false);
  154. event.setGenerator(false);
  155. try {
  156. update(event);
  157. } catch(Exception e) {
  158. logger.error(e.getMessage());
  159. }
  160. }
  161. try {
  162. retract($epc);
  163. } catch(Exception e) {
  164. logger.error(e.getMessage() + ". " + $epc);
  165. }
  166. end
  167.  
  168. rule "07 Normalization Caida General of CMs Directly connected to P"
  169. when
  170. $epc: Fall(type == events.get("CGCMD"))
  171. $items : Set(Double.valueOf(size) / Double.valueOf($epc.networkElement.cmCount ) < 0.60) from collect(
  172. Event(type == events.get("CMDown"),
  173. networkElement.parent == $epc.networkElement)
  174. )
  175. then
  176. logger.debug("*** Rule ["+drools.getRule().getName()+"]");
  177. Set copiedItems = new HashSet<>($items);
  178. for (Object object : copiedItems) {
  179. Event event = (Event)object;
  180. event.setMasked(false);
  181. event.setGenerator(false);
  182. try {
  183. update(event);
  184. } catch(Exception e) {
  185. logger.error(e.getMessage());
  186. }
  187. }
  188. try {
  189. retract($epc);
  190. } catch(Exception e) {
  191. logger.error(e.getMessage() + ". " + $epc);
  192. }
  193. end
  194.  
  195. rule "08 Normalization Caida CMs Partial Directly connected to P"
  196. when
  197. $epc: Fall(type == events.get("CPCMD"))
  198. $items : Set(Double.valueOf(size) / Double.valueOf($epc.networkElement.cmCount ) < 0.30) from collect(
  199. Event(type == events.get("CMDown"),
  200. networkElement.parent == $epc.networkElement)
  201. )
  202. then
  203. logger.debug("*** Rule ["+drools.getRule().getName()+"]");
  204. Set copiedItems = new HashSet<>($items);
  205. for (Object object : copiedItems) {
  206. Event event = (Event)object;
  207. event.setMasked(false);
  208. event.setGenerator(false);
  209. try {
  210. update(event);
  211. } catch(Exception e) {
  212. logger.error(e.getMessage());
  213. }
  214. }
  215. try {
  216. retract($epc);
  217. } catch(Exception e) {
  218. logger.error(e.getMessage() + ". " + $epc);
  219. }
  220. end
  221.  
  222. rule "09 Replace XP by CG"
  223. when
  224. $eventA : Fall(type == events.get("CG"))
  225. $eventB : Fall(type == events.get("CP"), networkElement == $eventA.networkElement)
  226. then
  227. logger.debug("*** Rule ["+drools.getRule().getName()+"]");
  228. try {
  229. retract($eventB);
  230. } catch(Exception e) {
  231. logger.error(e.getMessage() + ". " + $eventB);
  232. }
  233. end
  234.  
  235. rule "10 General drop P"
  236. when
  237. $notification : Notification(type == notifications.get("Fall"),
  238. (
  239. networkElement.type != elements.get("FA") &&
  240. networkElement.type != elements.get("CE") &&
  241. networkElement.type != elements.get("CMTS") &&
  242. networkElement.type != elements.get("MEQ") &&
  243. networkElement.type != elements.get("OM") &&
  244. networkElement.type != elements.get("CE_A") &&
  245. networkElement.type != elements.get("SR_CATV") &&
  246. networkElement.type != elements.get("SR_MMDS") &&
  247. networkElement.type != elements.get("SR_HUB") &&
  248. networkElement.type != elements.get("MOD") &&
  249. networkElement.type != elements.get("CONT")
  250. )
  251. )
  252. not Fall(networkElement == $notification.networkElement, type == events.get("CG"))
  253. (
  254. (
  255. eval($notification.getNetworkElement().getCmCount() < 6)
  256. &&
  257. eval ($notification.getNetworkElement().getRealChildCount() > 0)
  258. )
  259. ||
  260. (
  261. eval($notification.getNetworkElement().getCmCount() >= 6)
  262. &&
  263. Fall(networkElement == $notification.getNetworkElement(), type == events.get("CGCMD"))
  264. )
  265. )
  266. $epcs : Set( ) from collect(
  267. Fall(networkElement.parents.contains($notification.networkElement), type == events.get("CG"))
  268. )
  269. (
  270. eval ($notification.getNetworkElement().getRealChildCount() == 0)
  271. ||
  272. (
  273. eval ($notification.getNetworkElement().getRealChildCount() > 0)
  274. &&
  275. eval(Double.valueOf($epcs.size()) / Double.valueOf($notification.getNetworkElement().getRealChildCount() ) >= 0.90)
  276. )
  277. )
  278. then
  279. logger.debug("*** Rule ["+drools.getRule().getName()+"]");
  280. retract($notification);
  281. Fall $epc = new Fall($notification.getNetworkElement(), events.get("CG"), uniqueId);
  282. Set copiedItems = new HashSet<>($epcs);
  283. for (Object object : copiedItems) {
  284. Event event = (Event)object;
  285. event.setMasked(true);
  286. event.setGenerator(true);
  287. try {
  288. update(event);
  289. $epc.add(event);
  290. } catch(Exception e) {
  291. logger.error(e.getMessage());
  292. }
  293. }
  294. insert($epc);
  295. for (NetworkElement element : $notification.getNetworkElement().getParents()) {
  296. Notification notification = new Notification(element, notifications.get("Fall"));
  297. insert(notification);
  298. }
  299. end
  300.  
  301. rule "11 IP masking CMD / C CMD CP / CG"
  302. when
  303. $eventA : Fall((type == events.get("CPCMD") || type == events.get("CGCMD")), masked == false)
  304. $eventB : Fall((type == events.get("CP") || type == events.get("CG")), networkElement == $eventA.networkElement)
  305. then
  306. logger.debug("*** Rule ["+drools.getRule().getName()+"]");
  307. $eventA.setMasked(true);
  308. $eventA.setGenerator(true);
  309. try {
  310. logger.debug("### about to update event: " + $eventA);
  311. update($eventA);
  312. $eventB.add($eventA);
  313. } catch(Exception e) {
  314. logger.error(e.getMessage());
  315. }
  316.  
  317. end
  318.  
  319. rule "12 Partial Caida P"
  320. when
  321. $notification : Notification(type == notifications.get("Fall"),
  322. (
  323. networkElement.type != elements.get("FA") &&
  324. networkElement.type != elements.get("CE") &&
  325. networkElement.type != elements.get("CMTS") &&
  326. networkElement.type != elements.get("MEQ") &&
  327. networkElement.type != elements.get("OM") &&
  328. networkElement.type != elements.get("CE_A") &&
  329. networkElement.type != elements.get("SR_CATV") &&
  330. networkElement.type != elements.get("SR_HUB") &&
  331. networkElement.type != elements.get("SR_MMDS") &&
  332. networkElement.type != elements.get("MOD") &&
  333. networkElement.type != elements.get("CONT")
  334. )
  335. )
  336. not Fall(networkElement == $notification.networkElement, (type == events.get("CG") || type == events.get("CP")))
  337. $epcs : Set() from collect(
  338. Fall(networkElement.parents.contains($notification.networkElement),
  339. (type == events.get("CPCMD") ||
  340. type == events.get("CGCMD") ||
  341. type == events.get("CP") ||
  342. type == events.get("CG")), masked == false)
  343. )
  344. (
  345. eval(Double.valueOf($epcs.size()) / Double.valueOf($notification.getNetworkElement().getRealChildCount() ) >= 0.40)
  346. ||
  347. Fall(networkElement == $notification.getNetworkElement(), type == events.get("CPCMD"), networkElement.realChildCount == 0)
  348. )
  349. then
  350. logger.debug("*** Rule ["+drools.getRule().getName()+"]");
  351. logger.debug("### retracting notification : "+$notification);
  352. retract($notification);
  353. Fall $epc = new Fall($notification.getNetworkElement(), events.get("CP"), uniqueId);
  354. Set copiedItems = new HashSet<>($epcs);
  355. for (Object object : copiedItems) {
  356. Fall event = (Fall)object;
  357. event.setMasked(true);
  358. event.setGenerator(true);
  359. try {
  360. logger.debug("### updating event : "+event);
  361. update(event);
  362. $epc.add(event);
  363. } catch(Exception e) {
  364. logger.error(e.getMessage());
  365. }
  366. }
  367. logger.debug("### inserting new Fall : "+$epc);
  368. insert($epc);
  369. for (NetworkElement element : $notification.getNetworkElement().getParents()) {
  370. Notification notification = new Notification(element, notifications.get("Fall"));
  371. logger.debug("### inserting new Notification for Fall : "+notification);
  372. insert(notification);
  373. }
  374. end
  375.  
  376. rule "13 Replace CPCMD by CMD"
  377. when
  378. $eventA : Fall(type == events.get("CGCMD"))
  379. $eventB : Fall(type == events.get("CPCMD"), networkElement == $eventA.networkElement)
  380. then
  381. logger.debug("*** Rule ["+drools.getRule().getName()+"]");
  382. try {
  383. retract($eventB);
  384. } catch(Exception e) {
  385. logger.error(e.getMessage() + ". " + $eventB);
  386. }
  387. end
  388.  
  389. rule "14 General CMs drop directly connected to P"
  390. when
  391. $ne : NetworkElement()
  392. not Fall(networkElement == $ne, type == events.get("CGCMD"))
  393. $items : Set(Double.valueOf(size) / Double.valueOf($ne.getCmCount()) >= 0.75) from collect(
  394. Event(type == events.get("CMDown"),
  395. networkElement.parent == $ne,
  396. (
  397. ($ne.type == elements.get("ED") && $ne.cmCount >= 6) ||
  398. ($ne.type != elements.get("ED") && $ne.cmCount >= 6)
  399. ) ) over window:time ( 10m )
  400. )
  401. then
  402. logger.debug("*** Rule ["+drools.getRule().getName()+"]");
  403. Fall $epc = new Fall($ne, events.get("CGCMD"), uniqueId);
  404. Set copiedItems = new HashSet<>($items);
  405. for (Object object : copiedItems) {
  406. Event event = (Event)object;
  407. event.setMasked(true);
  408. event.setGenerator(true);
  409. try {
  410. update(event);
  411. $epc.add(event);
  412. } catch(Exception e) {
  413. logger.error(e.getMessage());
  414. }
  415. }
  416. insert($epc);
  417. insert(new Notification($ne, notifications.get("Fall")));
  418. for (NetworkElement element : $ne.getParents()) {
  419. insert(new Notification(element, notifications.get("Fall")));
  420. }
  421. end
  422.  
  423. rule "15 Partial CMs fall directly connected to P"
  424. when
  425. $ne : NetworkElement()
  426. not Fall(networkElement == $ne, (
  427. type == events.get("CPCMD") ||
  428. type == events.get("CGCMD") ||
  429. type == events.get("CG") ||
  430. type == events.get("CP")))
  431. $items : Set() from collect(
  432. Event(type == events.get("CMDown"),
  433. networkElement.parent == $ne,
  434. (
  435. ($ne.type == elements.get("ED") && $ne.cmCount >= 6) ||
  436. ($ne.type != elements.get("ED") && $ne.cmCount >= 6)
  437. ) ) over window:time ( 10m )
  438. )
  439. eval(Double.valueOf($items.size()) / Double.valueOf($ne.getCmCount()) >= 0.40)
  440. eval(Double.valueOf($items.size()) / Double.valueOf($ne.getCmCount()) < 0.75)
  441. then
  442. logger.debug("*** Rule ["+drools.getRule().getName()+"]");
  443. Fall $epc = new Fall($ne, events.get("CPCMD"), uniqueId);
  444. Set copiedItems = new HashSet<>($items);
  445. for (Object object : copiedItems) {
  446. Event event = (Event)object;
  447. event.setMasked(true);
  448. event.setGenerator(true);
  449. try {
  450. logger.debug("### updating event : "+event);
  451. update(event);
  452. $epc.add(event);
  453. } catch(Exception e) {
  454. logger.error(e.getMessage());
  455. }
  456. }
  457. logger.debug("### inserting new Fall : "+$epc);
  458. insert($epc);
  459. logger.debug("### inserting new Notification for Fall : "+$ne);
  460. insert(new Notification($ne, notifications.get("Fall")));
  461. for (NetworkElement element : $ne.getParents()) {
  462. logger.debug("### inserting new Notification for Fall : "+element);
  463. insert(new Notification(element, notifications.get("Fall")));
  464. }
  465. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement