|
|
| Line 1: | |||
| + | 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:'' | ||
| + | <pre>//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; | ||
| + | </pre> | ||
| + | ---- | ||
| + | ''Context Script:'' | ||
| + | <pre>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; | ||
| + | </pre> | ||
| + | ---- | ||
| + | '''Related Content''' | ||
| + | [[AnthillPro Template Reports]]<br/> | ||
| + | [[Report Templates]] | ||