This is a GSH script change log consumer that send email if a group is too large
Add a daemon
Note: customize the group name in the JEXL filter
Daemon config
Note: customize the group name in the EL filter
changeLog.consumer.maxGroupSizeTestGroup.changeLogFileType = script changeLog.consumer.maxGroupSizeTestGroup.class = edu.internet2.middleware.grouper.changeLog.esb.consumer.EsbConsumer changeLog.consumer.maxGroupSizeTestGroup.elfilter = (event.eventType == 'MEMBERSHIP_DELETE' || event.eventType == 'MEMBERSHIP_ADD') && event.groupName == 'test\u003AtestGroup' changeLog.consumer.maxGroupSizeTestGroup.publisher.class = edu.internet2.middleware.grouper.app.loader.EsbPublisherChangeLogScript changeLog.consumer.maxGroupSizeTestGroup.quartzCron = 0 * * * * ?
Daemon GSH source
Note, customize these variables
String groupIdPath = "test:testGroup"; String subjectSourceId = "jdbc"; int maxSize = 3; String emailToCommaSeparated = "whomever@school.edu"; String emailSubject = "Group test:testGroup got big"; String emailBody = "The group too large";
import java.util.List; import java.util.Map; import edu.internet2.middleware.grouper.GrouperSession; import edu.internet2.middleware.grouper.app.loader.EsbPublisherChangeLogScript; import edu.internet2.middleware.grouper.app.loader.db.Hib3GrouperLoaderLog; import edu.internet2.middleware.grouper.changeLog.ChangeLogProcessorMetadata; import edu.internet2.middleware.grouper.changeLog.esb.consumer.EsbEvent; import edu.internet2.middleware.grouper.changeLog.esb.consumer.EsbEventContainer; import edu.internet2.middleware.grouper.esb.listener.ProvisioningSyncConsumerResult; import edu.internet2.middleware.grouper.util.GrouperEmail; import edu.internet2.middleware.grouperClient.jdbc.GcDbAccess; //public class Test70changeLogGshMaxSize { // // public static void main(String[] args) { // // EsbPublisherChangeLogScript esbPublisherChangeLogScript = EsbPublisherChangeLogScript.retrieveFromThreadLocal(); // Map<String, Object> gsh_builtin_debugMap = esbPublisherChangeLogScript.getDebugMap(); // ChangeLogProcessorMetadata gsh_builtin_changeLogProcessorMetadata = esbPublisherChangeLogScript.getChangeLogProcessorMetadata(); // ProvisioningSyncConsumerResult gsh_builtin_provisioningSyncConsumerResult = esbPublisherChangeLogScript.getProvisioningSyncConsumerResult(); // List<EsbEventContainer> gsh_builtin_esbEventContainers = esbPublisherChangeLogScript.getEsbEventContainers(); // GrouperSession gsh_builtin_grouperSession = GrouperSession.staticGrouperSession(); // Hib3GrouperLoaderLog gsh_builtin_hib3GrouperLoaderLog = gsh_builtin_changeLogProcessorMetadata.getHib3GrouperLoaderLog(); String groupIdPath = "test:testGroup"; String subjectSourceId = "jdbc"; int maxSize = 3; String emailToCommaSeparated = "whomever@school.edu"; String emailSubject = "Group test:testGroup got big"; String emailBody = "The group too large"; int size = new GcDbAccess().sql("select count(1) from grouper_memberships_lw_v gmlv where group_name = ? and list_name = 'members' and subject_source = ?"). addBindVar(groupIdPath).addBindVar(subjectSourceId).select(int.class); gsh_builtin_debugMap.put("currentSize", size); if (size > maxSize) { new GrouperEmail().setTo(emailToCommaSeparated).setSubject(emailSubject).setBody(emailBody).send(); gsh_builtin_debugMap.put("tooBig", true); gsh_builtin_hib3GrouperLoaderLog.addUpdateCount(1); } else { gsh_builtin_debugMap.put("tooBig", false); } long lastSequenceProcessed = -1; for (EsbEventContainer esbEventContainer : gsh_builtin_esbEventContainers) { EsbEvent esbEvent = esbEventContainer.getEsbEvent(); lastSequenceProcessed = esbEventContainer.getSequenceNumber(); } return lastSequenceProcessed; // // } // //}
Daemon output
Note if update count is 1 an email was sent out
method: dispatchEventList, eventCount: 1, lastSequenceAvailable: 6493, changeLogFileType: script, currentSize: 7, tooBig: true, lastSequenceProcessed: 6493, tookMillis: 387