This report will show who has access to which agents in the system, meaning read permissions. This report has to be used in conjunction with a report template such as the Bar Chart Template.
Meta-Data Script:
//Meta Data Script import com.urbancode.anthill3.domain.reporting.*; ReportMetaData rmd = new ReportMetaData(); TextParamMetaData folderParam = new TextParamMetaData(); folderParam.setName("folderName"); folderParam.setLabel("Folder"); folderParam.setDescription("The Team/Group Folder name or All for All Envs"); folderParam.setRequired(true); folderParam.setDefaultValue("All"); rmd.addParameter(folderParam); // Configure columns rmd.addColumn("AgentName"); rmd.addColumn("Environment"); rmd.addColumn("Username"); rmd.addColumn("First"); rmd.addColumn("Last"); rmd.addColumn("Realm"); rmd.addColumn("Relevant Roles"); // Lastly, return the meta data return rmd;
Context Script:
import com.urbancode.anthill3.domain.agent.*; import com.urbancode.anthill3.domain.folder.*; import com.urbancode.anthill3.domain.project.*; import com.urbancode.anthill3.domain.reporting.*; import com.urbancode.anthill3.domain.security.*; import com.urbancode.anthill3.domain.servergroup.*; import com.urbancode.anthill3.domain.userprofile.*; import com.urbancode.devilfish.client.ServiceEndpoint; import org.apache.commons.lang.StringUtils; ReportRow createReportRow(Agent agent, ServerGroup environment, User user, UserProfile profile, String relevantRoles) { ReportRow result = null; result = new ReportRow(output, "User"); result.setColumnValue("AgentName", agent.getName()); result.setColumnValue("Environment", environment.getName()); result.setColumnValue("Username", user.getName()); if (profile != null) { if (StringUtils.isNotEmpty(profile.getFirstName())) { result.setColumnValue("First", profile.getFirstName()); } if (StringUtils.isNotEmpty(profile.getLastName())) { result.setColumnValue("Last", profile.getLastName()); } } result.setColumnValue("Realm", user.getAuthenticationRealm().getName()); result.setColumnValue("Relevant Roles", relevantRoles); return result; } Set retrieveEnvironmentsForFolder(Folder folder) { Set result = new HashSet(); Folder[] childFolders = folder.getChildren(); for (int i = 0; i < childFolders.length; i++) { Folder childFolder = childFolders[i]; result.addAll(retrieveEnvironmentsForFolder(childFolder)); } Project[] folderProjects = folder.getProjects(); for (int i = 0; i < folderProjects.length; i++) { Project project = folderProjects[i]; ServerGroup[] serverGroups = project.getEnvironmentGroup().getServerGroupArray(); result.addAll(Arrays.asList(serverGroups)); } return result; } List retrieveRelevantRoles(ServerGroup environment) { List result = new ArrayList(); Resource envResource = ResourceFactory.getInstance().restoreForPersistent(environment); Permission[] permissions = PermissionFactory.getInstance().restoreAllForResource(envResource); for (int i = 0; i < permissions.length; i++) { Permission perm = permissions[i]; if (perm.getAction().equals("read")) { result.add(perm.getRole()); } } return result; } Agent retrieveAgentForEndpoint(ServiceEndpoint endpoint) { Agent result = null; if (endpointsToAgents.containsKey(endpoint)) { result = (Agent) endpointsToAgents.get(endpoint); } else { result = AgentFactory.getInstance().restoreByEndpoint(endpoint); endpointsToAgents.put(endpoint, result); } return result; } Folder resolveFolderFromName() { Folder result = null; String pathStr = folderName.replaceAll("\\\\", "/"); String[] path = pathStr.split("/"); result = FolderFactory.getInstance().restoreForName(path[0]); for (int i = 1; result != null && i < path.length; i++) { Folder[] childFolders = result.getChildren(); boolean found = false; for (int j = 0; !found && j < childFolders.length; j++) { Folder childFolder = childFolders[j]; if (childFolder.getName().equals(path[i])) { result = childFolder; found = true; } } if (!found) { result = null; } } return result; } void populateAndSortEnvironmentsArray(Folder folder) { Set envSet = retrieveEnvironmentsForFolder(folder); environments = new ServerGroup[envSet.size()]; envSet.toArray(environments); Arrays.sort(environments, new Comparator() { public int compare(Object obj1, Object obj2) { ServerGroup env1 = (ServerGroup) obj1; ServerGroup env2 = (ServerGroup) obj2; return env1.getName().compareTo(env2.getName()); } } ); } ServerGroup[] environments = null; if (folderName.equals("All")) { environments = ServerGroupFactory.getInstance().restoreAll(); } else { Folder folder = resolveFolderFromName(); if (folder != null) { populateAndSortEnvironmentsArray(folder); } } Map endpointsToAgents = new HashMap(); ReportOutput output = new ReportOutput(metaData); for (int i = 0; environments != null && i < environments.length; i++) { ServerGroup environment = environments[i]; List relevantRoles = retrieveRelevantRoles(environment); User[] users = Authority.getInstance().getUsersWithPermissionToPersistent(environment, "read"); ServiceEndpoint[] endpoints = environment.getServerArray(); for (int j = 0; j < endpoints.length; j++) { Agent agent = retrieveAgentForEndpoint(endpoints[j]); for (int k = 0; k < users.length; k++) { User user = users[k]; UserProfile profile = UserProfileFactory.getInstance().restoreForUser(user); String relevantRolesStr = ""; for (int l = 0; l < relevantRoles.size(); l++) { Role role = (Role) relevantRoles.get(l); if (user.hasRole(role)) { if (StringUtils.isNotEmpty(relevantRolesStr)) { relevantRolesStr += ", "; } relevantRolesStr += role.getName(); } } ReportRow row = null; if (StringUtils.isNotEmpty(relevantRolesStr)) { row = createReportRow(agent, environment, user, profile, relevantRolesStr); } else { row = createReportRow(agent, environment, user, profile, "Protected"); } output.addRow(row); } } } return output;
Related Content