Here is a small but efficient piece of Java code (+JAPI library) made to list, verify and validate Essbase filters.
I was inspired by the JAPI code samples available in APS (Provider Services) directory (%APS_HOME%\samples\japi) and the rest was guided by my imagination and needs. By the way it also displays user and groups assigned to the filter.
We run this script every night and then add it to the server export package together with other maxl exports, Essbase.cfg and SEC's backup. So we have a daily file ready for any security audit.
I did not post any compiled code as this is not a big deal doing it in Eclipse or Netbeans. just don't forget adding JAPI library before compiling (%APS_HOME%\lib\ess_japi.jar).
I did not post any compiled code as this is not a big deal doing it in Eclipse or Netbeans. just don't forget adding JAPI library before compiling (%APS_HOME%\lib\ess_japi.jar).
import com.essbase.api.base.EssException;
import com.essbase.api.base.IEssIterator;
import com.essbase.api.datasource.IEssCube;
import com.essbase.api.datasource.IEssCube.IEssSecurityFilter;
import com.essbase.api.datasource.IEssOlapApplication;
import com.essbase.api.datasource.IEssOlapServer;
import com.essbase.api.domain.IEssDomain;
import com.essbase.api.session.IEssbase;
import java.util.Arrays;
/* Liste, détaille et valide les filtres Essbase
* Liste les utilisateurs et groupes associés au filtre
*
* Display, detail and validate Essbase filters
* Display filter associated users and groups
*
* Version : 1.0 (20 mars 2010)
* Paramètres : utilisateur, mot de passe, serveur
* Auteur : Sébastien Roux
* Mail : roux.sebastien@gmail.com
*
* Disclaimer : you may freely use, reuse, modify and distribute
* the following code at your own risks.
*/
public class ValidateEssFilter {
private static String essuser = "";
private static String esspwd = "";
private static String esssvr = "";
private static final int FAILURE_CODE = 1;
private static final String DELIM = "\t";
public static void main(String[] args) {
int sts = 0;
IEssbase essbase = null;
IEssOlapServer olapSvr = null;
try {
// Check arguments
acceptArgs(args);
essbase = IEssbase.Home.create(IEssbase.JAPI_VERSION);
IEssDomain dom = essbase.signOn(essuser, esspwd, false, null, "http://" + esssvr + ":13080/aps/JAPI");
olapSvr = (IEssOlapServer) dom.getOlapServer(esssvr);
olapSvr.connect();
getApplications(olapSvr);
} catch (EssException x) {
System.out.println("Erreur " + x.getLocalizedMessage());
//x.printStackTrace();
sts = FAILURE_CODE;
} catch (Exception e) {
System.out.println("Erreur " + e.getLocalizedMessage());
//e.printStackTrace();
} finally {
try {
if (essbase != null && essbase.isSignedOn() == true) {
essbase.signOff();
}
} catch (EssException x) {
System.err.println("Error: " + x.getLocalizedMessage());
}
}
if (sts == FAILURE_CODE) {
System.exit(FAILURE_CODE);
}
}
static void getApplications(IEssOlapServer olapSvr) {
try {
// List applications
IEssIterator usrApp = olapSvr.getApplications();
// Header
System.out.println("Application" + DELIM + "Database" + DELIM
+ "Filtre" + DELIM + "Accès" + DELIM + "Détail" + DELIM
+ "Validation" + DELIM + "Utilisateurs et groupes affectés");
// Loop through applications
for (int i = 0; i < usrApp.getCount(); i++) {
IEssOlapApplication app = (IEssOlapApplication) usrApp.getAt(i);
// List databases for each application
IEssIterator usrDb = app.getCubes();
// Loop through each database
for (int j = 0; j < usrDb.getCount(); j++) {
IEssCube db = (IEssCube) usrDb.getAt(j);
// List filters for each database
IEssIterator dbFilter = db.getSecurityFilters();
// Loop through filters
for (int k = 0; k < dbFilter.getCount(); k++) {
IEssSecurityFilter filter = (IEssSecurityFilter) dbFilter.getAt(k);
// List filter content
IEssCube.IEssSecurityFilter.IEssFilterRow filterRow = filter.getFilterRow();
while (filterRow.getRowString() != null) {
// Verify/validate filter
String[] rowStrings = {filterRow.getRowString()};
String verify = "";
try {
//filter OK
filter.verifyFilter(rowStrings);
verify = "Filtre OK";
} catch (Exception e) {
//filter KO - error in filter
verify = "Filtre KO " + e.getLocalizedMessage();
}
// List filter associated users and groups
String[] filterUsers = filter.getSecurityFilterList();
// Sort asc
Arrays.sort(filterUsers);
String userList = "";
// Array to comma delimiter string
if (filterUsers.length == 0) {
// Filter is not associated to any user or group
userList = "Aucune affectation";
} else {
for (int l = 0; l < filterUsers.length; l++) {
if (l == 0) {
userList = filterUsers[0];
} else {
userList = userList + ", " + filterUsers[l];
}
}
}
// Output
System.out.println(
app.getName()
+ DELIM + db.getName()
+ DELIM + filter.getName()
+ DELIM + getAccessLabel(filterRow.getAccess())
+ DELIM + filterRow.getRowString()
+ DELIM + verify
+ DELIM + userList);
filterRow = filter.getFilterRow();
}
}
}
}
} catch (Exception x) {
System.out.println("Erreur " + x.getLocalizedMessage());
//x.printStackTrace();
}
}
// Access level translation
static String getAccessLabel(short accessID) {
String access = "";
switch (accessID) {
case 0:
access = "none";
break;
case 273:
access = "read";
break;
case 275:
access = "write";
break;
case 280:
access = "metaread";
break;
}
return access;
}
// Arguments management
static void acceptArgs(String[] args) throws EssException {
if (args.length == 3) {
essuser = args[0];
esspwd = args[1];
esssvr = args[2];
} else if (args.length < 3 || args.length > 3) {
System.err.println("Execution error");
System.err.println(
"Usage: java -jar " + ValidateEssFilter.class.getName() + " user password server" + "\n"
+ "Description: display, detail and validate Essbase filters. Display filter associated users and groups" + "\n"
+ "Requirements: JRE 1.5 or higher" + "\n"
+ "Version: 1.0" + "\n"
+ "Author: Sebastien Roux roux.sebastien@mail.com");
System.exit(1);
}
}
}
Aucun commentaire:
Enregistrer un commentaire
your comment here please!