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]]
|