LearnPAd/learnpad

View on GitHub
lp-simulation-environment/monitoring/src/main/java/eu/learnpad/simulator/mon/impl/RuleTemplateManager.java

Summary

Maintainability
D
1 day
Test Coverage
package eu.learnpad.simulator.mon.impl;

import it.cnr.isti.labse.glimpse.xml.complexEventRule.ComplexEventRuleActionListDocument;
import it.cnr.isti.labse.glimpse.xml.complexEventRule.ComplexEventRuleActionType;
import it.cnr.isti.labse.glimpse.xml.complexEventRule.ComplexEventRuleType;

import org.apache.commons.net.ntp.TimeStamp;

import eu.learnpad.simulator.mon.exceptions.IncorrectRuleFormatException;
import eu.learnpad.simulator.mon.rules.RulesManager;
import eu.learnpad.simulator.mon.utils.DebugMessages;
import eu.learnpad.simulator.mon.utils.Manager;

public class RuleTemplateManager {

    public static String localDroolsRequestTemplatesFilePathOne;
    public static String localDroolsRequestTemplatesFilePathTwo;
    public static String localDroolsRequestTemplatesFilePathThree_1;
    public static String localDroolsRequestTemplatesFilePathThree_2;
    public static RuleTemplateManager instance = null;
    public static RulesManager rulesManager;
    private String finalString;
    private int startReplace;
    
    public RuleTemplateManager(String droolsRequestTemplatesFilePathOne, String droolsRequestTemplatesFilePathTwo, String droolsRequestTemplatesFilePathThree_1, String droolsRequestTemplatesFilePathThree_2) {
        
        RuleTemplateManager.localDroolsRequestTemplatesFilePathOne = droolsRequestTemplatesFilePathOne;
        RuleTemplateManager.localDroolsRequestTemplatesFilePathTwo = droolsRequestTemplatesFilePathTwo;
        RuleTemplateManager.localDroolsRequestTemplatesFilePathThree_1 = droolsRequestTemplatesFilePathThree_1;
        RuleTemplateManager.localDroolsRequestTemplatesFilePathThree_2 = droolsRequestTemplatesFilePathThree_2;
    }
    
    public static synchronized RuleTemplateManager getSingleton() {
        if (instance == null) 
            instance = new RuleTemplateManager(localDroolsRequestTemplatesFilePathOne,localDroolsRequestTemplatesFilePathTwo, localDroolsRequestTemplatesFilePathThree_1, localDroolsRequestTemplatesFilePathThree_2);
        return instance;
    }

    public String setBody(String machineIP, String serviceName, 
                            RuleTemplateEnum templateType, long timeStamp,
                            String filterService) {
        String ruleSelected;
        switch(templateType) {
          case EVENTAAFTEREVENTB: {
              ruleSelected = Manager.ReadTextFromFile(localDroolsRequestTemplatesFilePathOne);
              ruleSelected.replaceAll("$$MACHINEIP$$", machineIP);
              ruleSelected.replaceAll("$$SERVICENAME$$", serviceName);
          }
            break;
         
          case EVENTABETWEENEVENTB: {
              ruleSelected = Manager.ReadTextFromFile(localDroolsRequestTemplatesFilePathOne);
              ruleSelected.replaceAll("$$MACHINEIP$$", machineIP);
              ruleSelected.replaceAll("$$SERVICENAME$$", serviceName);
          }
           break;
           
          case NOEVENTFROMINFRASTRUCTURE: {
              ruleSelected = Manager.ReadTextFromFile(localDroolsRequestTemplatesFilePathTwo);
              startReplace = ruleSelected.indexOf("MACHINE_IP");
              finalString = ruleSelected.substring(0, startReplace) +
                      machineIP +
                      ruleSelected.substring(startReplace+10,ruleSelected.length());
              
              ruleSelected = finalString;
              
              startReplace = ruleSelected.indexOf("MACHINE_IP");
              finalString = ruleSelected.substring(0, startReplace) +
                      machineIP +
                      ruleSelected.substring(startReplace+10,ruleSelected.length());
              startReplace = finalString.indexOf("SERVICE_NAME");
              ruleSelected = finalString.substring(0, startReplace) +
                      serviceName 
                      + finalString.substring(startReplace+12,finalString.length());
              
              startReplace = ruleSelected.indexOf("SERVICE_NAME");
              ruleSelected = ruleSelected.substring(0, startReplace) +
                      serviceName 
                      + ruleSelected.substring(startReplace+12,ruleSelected.length());
              
              startReplace = ruleSelected.indexOf("_TIMESTAMP_");
              ruleSelected = ruleSelected.substring(0,startReplace) + String.valueOf(timeStamp) +
                      ruleSelected.substring(startReplace+11,ruleSelected.length());
              System.out.println(ruleSelected);

          }
           break;
          
          case INFRASTRUCTUREVIOLATION: {
              ruleSelected = Manager.ReadTextFromFile(localDroolsRequestTemplatesFilePathOne);
              startReplace = ruleSelected.indexOf("MACHINE_IP");
              finalString = ruleSelected.substring(0, startReplace) +
                      machineIP +
                      ruleSelected.substring(startReplace+10,ruleSelected.length());
              
              ruleSelected = finalString;
              
              startReplace = ruleSelected.indexOf("MACHINE_IP");
              finalString = ruleSelected.substring(0, startReplace) +
                      machineIP +
                      ruleSelected.substring(startReplace+10,ruleSelected.length());
              
              startReplace = finalString.indexOf("SERVICE_NAME");
              ruleSelected = finalString.substring(0, startReplace) +
                      serviceName 
                      + finalString.substring(startReplace+12,finalString.length());

              startReplace = ruleSelected.indexOf("SERVICE_NAME");
              ruleSelected = ruleSelected.substring(0, startReplace) +
                      serviceName 
                      + ruleSelected.substring(startReplace+12,ruleSelected.length());
              
              startReplace = ruleSelected.indexOf("_TIMESTAMP_");
              ruleSelected = ruleSelected.substring(0,startReplace) + String.valueOf(timeStamp) +
                      ruleSelected.substring(startReplace+11,ruleSelected.length());
              System.out.println(ruleSelected);

              }
             break;
             
          case CHECKSERVICESLAFAILURE3TIMES_FIRSTPART: { 
              //must use FilterService the new rule
              ruleSelected = Manager.ReadTextFromFile(localDroolsRequestTemplatesFilePathThree_1);
              
              startReplace = ruleSelected.indexOf("SERVICE_NAME");
              finalString = ruleSelected.substring(0, startReplace) +
                      serviceName +
                      ruleSelected.substring(startReplace+12,ruleSelected.length());
              
              ruleSelected = finalString;
              
              startReplace = ruleSelected.indexOf("_SERVICE_FILTER_");
              finalString = ruleSelected.substring(0, startReplace) +
                      filterService +
                      ruleSelected.substring(
                              startReplace+16,ruleSelected.length());
              ruleSelected = finalString;
              
              startReplace = ruleSelected.indexOf("_SERVICE_FILTER_");
              finalString = ruleSelected.substring(0, startReplace) +
                      filterService 
                      + ruleSelected.substring(startReplace+16,ruleSelected.length());
              ruleSelected = finalString;

              startReplace = ruleSelected.indexOf("_SERVICE_FILTER_");
              if (startReplace != -1) {
              finalString = ruleSelected.substring(0, startReplace) +
                      filterService 
                      + ruleSelected.substring(startReplace+16,ruleSelected.length());
              ruleSelected = finalString;
              }
              startReplace = ruleSelected.indexOf("SERVICE_NAME");
              finalString = ruleSelected.substring(0, startReplace) +
                      serviceName 
                      + ruleSelected.substring(startReplace+12,ruleSelected.length());
              ruleSelected = finalString;
              System.out.println(ruleSelected);

             }
             break;
             
          case CHECKSERVICESLAFAILURE3TIMES_SECONDPART: {
                  
              ruleSelected = Manager.ReadTextFromFile(localDroolsRequestTemplatesFilePathThree_2);
              
              startReplace = ruleSelected.indexOf("SERVICE_NAME");
              finalString = ruleSelected.substring(0, startReplace) +
                      serviceName +
                      ruleSelected.substring(startReplace+12,ruleSelected.length());
              
              ruleSelected = finalString;
              
//              startReplace = ruleSelected.indexOf("MACHINE_IP");
//              finalString = ruleSelected.substring(0, startReplace) +
//                      machineIP +
//                      ruleSelected.substring(
//                              startReplace+10,ruleSelected.length());
//              ruleSelected = finalString;
              
              startReplace = ruleSelected.indexOf("SERVICE_NAME");
              finalString = ruleSelected.substring(0, startReplace) +
                      serviceName 
                      + ruleSelected.substring(startReplace+12,ruleSelected.length());
              ruleSelected = finalString;
              System.out.println(ruleSelected);
          }
          break;
             
          default:
              ruleSelected = "";
              break;
        }
        return ruleSelected;
    }
    
    
    public ComplexEventRuleActionListDocument generateNewRuleToInjectInKnowledgeBase(
            String machineIP, String serviceName,
            RuleTemplateEnum ruleTemplateType, 
            Long timeStamp, String filterService) {
        
        ComplexEventRuleActionListDocument ruleDoc;            
        ruleDoc = ComplexEventRuleActionListDocument.Factory.newInstance();
        ComplexEventRuleActionType ruleActions = ruleDoc.addNewComplexEventRuleActionList();
        ComplexEventRuleType ruleType = ruleActions.addNewInsert();
        ruleType.setRuleName(machineIP);
        ruleType.setRuleType("drools");
        
        ruleType.setRuleBody(
                setBody(
                        machineIP, serviceName, 
                                        ruleTemplateType, timeStamp, filterService));
        return ruleDoc;
    }

    public int insertRule(ComplexEventRuleActionListDocument newRuleToInsert, RulesManager engine) {
        try {
            rulesManager = engine;
            DebugMessages.println(TimeStamp.getCurrentTime(), ServiceLocatorImpl.class.getCanonicalName(), "Updating knowledgeBase " +
            rulesManager.getLoadedKnowledgePackageCardinality());

            rulesManager.loadRules(newRuleToInsert.getComplexEventRuleActionList());
            DebugMessages.println(TimeStamp.getCurrentTime(), ServiceLocatorImpl.class.getCanonicalName(), "KnowledgeBase updated");
        } catch (IncorrectRuleFormatException e) {
            e.printStackTrace();
        }
        return 0;
    }
    
    public int unloadRule(int ruleInsertionID) {
        return 0;
    }
}