RAS_TYPE= "RsType"; RS_NAME= "RsName"; ROUTE_EXP_RSTYPE = "RouteExpression"; ROUTE_TEMP_RSTYPE = "RouteTemplate"; GROUP_TYPE="Group"; USER_TYPE="User"; GROUP_MEMBERS_RELATION_NAME = "Members"; rinfAdapter = RsApi.getRapidInformerAdapter(); sharedSpace = rinfAdapter.getSharedSpace(); ////////////////////////////// CONFIGURATION FOR EVERYBODY ///////////////////////////////////////////////////////////////// def publicConf = [ "AllEvents": ["Description":"All Events", "Expression":"true"], "CriticalEvents": ["Description":"Critical Events", "Expression":"Severity == 1"], ]; ////////////////////////////// CONFIGURATION FOR GROUP 1 ////////////////////////////////////////////////////////////////// def conf1 = [ "Last10Minutes": ["Description":"Events updated in last 10 minutes", "Expression":"LastNotifiedAt != null && (now() - (LastNotifiedAt) < 1000*60*10)"], "InMaintenance": ["Description":"Events of devices that are in maintenance", "Expression":"InMaintenance==\"true\""], "RouterEvents": ["Description":"Events of routers", "Expression":"ElementClassName==\"Router\" || (ElementClassName == null && ClassName==\"Router\")"], ]; ////////////////////////////// CONFIGURATION FOR GROUP 2 ////////////////////////////////////////////////////////////////// def conf2 = [ "RouterEvents": ["Description":"Events of routers", "Expression":"ElementClassName==\"Router\" || (ElementClassName == null && ClassName==\"Router\")"], ]; ////////////////////////////// NEW CONFIG MAP. "Public" IS KEYWORD. DO NOT CHANGE IT. CHANGE GROUPNAMES. ////////////////// // IF YOU WANT TO REMOVE ALL RULES FROM A GROUP INCLUDING "Public", "config" CAN BE CHANGED AS FOLLOWS: // config = ["Public":publicConf,"Group1Name":conf1,"Group2Name":conf2,"Group3Name":[:]]; config = ["Public":publicConf, "Group1Name":conf1, "Group2Name":conf2]; config.each(){groupname,conf -> def usersInGroup; def routeExpressions; def groupFlag; if (groupname == "Public"){ space = sharedSpace; usersInGroup = space.getObjects("RsType == \"${USER_TYPE}\""); groupFlag = "false"; } else{ def groupSpace = rinfAdapter.getGroupSpace(groupname); def group = sharedSpace.getObject(GROUP_TYPE, groupname); space = groupSpace; usersInGroup = group.getChildren(GROUP_MEMBERS_RELATION_NAME); groupFlag = "true"; } routeExpressions = space.getObjects("${RAS_TYPE} == \"" + ROUTE_EXP_RSTYPE + "\""); for(routeExp in routeExpressions){ def routeExpRsName = routeExp.RsName; if(conf.get(routeExpRsName) == null && ((groupname == "Public") || (groupname != "Public" && routeExp.Group=="true"))){ deleteRouteExpression(space, routeExpRsName, usersInGroup); } } conf.each{rsName,props-> props.put("Public", "true"); props.put("Group", groupFlag); if(!space.objectExists(ROUTE_EXP_RSTYPE, rsName)){ space.addObject(ROUTE_EXP_RSTYPE, rsName, props); } else{ for(user in usersInGroup){ def userName = user.UserName; def userSpace = rinfAdapter.getUserSpace(userName); def routesUsingThisExp = userSpace.getObjects("RsType==\"" + ROUTE_TEMP_RSTYPE + "\" && Filters ~=\"(.*,)?${rsName}(,.*)?\""); for(route in routesUsingThisExp){ def filters = Arrays.asList(route.Filters.split(",")); def expArray = []; for(filter in filters){ if(filter != rsName){ def filterObject = userSpace.getObject(ROUTE_EXP_RSTYPE,filter); expArray.add("(" + filterObject.Expression + ")"); } else{ expArray.add("(" + props.Expression + ")"); } } rinfAdapter.doWebRequest("/RapidInformer/Route/update", ["Name":route.RsName, "Expression":expArray.join(" || "), "loginas":userName, "DestinationName":route.Destination]); } } space.updateObject(ROUTE_EXP_RSTYPE, rsName, props); } } } def deleteRouteExpression(space, filterName, userNodes){ def filterObject = space.getObject(ROUTE_EXP_RSTYPE, filterName); for(user in userNodes){ def userName = user.UserName; def userSpace = rinfAdapter.getUserSpace(userName); def routesUsingOnlyThisExp = userSpace.getObjects("RsType==\"" + ROUTE_TEMP_RSTYPE + "\" && Filters ==\"${filterName}\""); for(route in routesUsingOnlyThisExp){ rinfAdapter.doWebRequest("/RapidInformer/Route/remove", ["Name":route.RsName, "loginas":userName]); userSpace.removeObject(ROUTE_TEMP_RSTYPE, route.RsName); } def routesUsingThisExp = userSpace.getObjects("RsType==\"" + ROUTE_TEMP_RSTYPE + "\" && Filters ~=\"(.*,)?${filterName}(,.*)?\""); for(route in routesUsingThisExp){ def filters = new ArrayList(Arrays.asList(route.Filters.split(","))); filters.remove(filterName); userSpace.updateObject(ROUTE_TEMP_RSTYPE, route.RsName, ["Filters":filters.join(",")]); def expStringArray = []; for(filter in filters){ filterObject = userSpace.getObject(ROUTE_EXP_RSTYPE, filter); expStringArray.add("(" + filterObject.Expression + ")"); } rinfAdapter.doWebRequest("/RapidInformer/Route/update", ["Name":route.RsName, "Expression":expStringArray.join(" || "), "DestinationName":route.Destination, "loginas":userName]); } } space.removeObject(ROUTE_EXP_RSTYPE, filterName); }