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