X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=auth%2Fauth-batch%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Faaf%2Fauth%2Fbatch%2FBatch.java;h=983ef819f76dffd14dffb2de03b427f3e43acd19;hb=083a7eb21620467ae1f7d5ba9341e12f75f9cc41;hp=ff605203ea8e7e9ebfa33803cf455187ec34d78e;hpb=27e133b8f3f189bb41354d0624dcdb0998bd4701;p=aaf%2Fauthz.git diff --git a/auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/Batch.java b/auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/Batch.java index ff605203..983ef819 100644 --- a/auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/Batch.java +++ b/auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/Batch.java @@ -7,9 +7,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -55,7 +55,6 @@ import org.onap.aaf.cadi.PropAccess; import org.onap.aaf.cadi.config.Config; import org.onap.aaf.misc.env.APIException; import org.onap.aaf.misc.env.Env; -import org.onap.aaf.misc.env.StaticSlot; import org.onap.aaf.misc.env.TimeTaken; import org.onap.aaf.misc.env.util.Chrono; import org.onap.aaf.misc.env.util.Split; @@ -68,27 +67,31 @@ import com.datastax.driver.core.Session; import com.datastax.driver.core.Statement; public abstract class Batch { - - private static StaticSlot ssargs; - protected static final String STARS = "*****"; - protected final Cluster cluster; + protected static Cluster cluster; protected static AuthzEnv env; protected static Session session; protected static Set specialNames; protected static List specialDomains; - protected static boolean dryRun; + protected static boolean dryRun; protected static String batchEnv; + private static File logdir; + + private static String[] batchArgs; + public static final String CASS_ENV = "CASS_ENV"; public static final String LOG_DIR = "LOG_DIR"; protected static final String MAX_EMAILS="MAX_EMAILS"; protected static final String VERSION="VERSION"; public static final String GUI_URL="GUI_URL"; - + protected final Organization org; - + protected String version; + protected static final Date now = new Date(); + protected static final Date never = new Date(0); + protected Batch(AuthzEnv env) throws APIException, IOException, OrganizationException { if (batchEnv != null) { env.info().log("Redirecting to ",batchEnv,"environment"); @@ -100,7 +103,8 @@ public abstract class Batch { CassAccess.CASSANDRA_CLUSTERS_PASSWORD, VERSION,GUI_URL,MAX_EMAILS, LOG_DIR, - "SPECIAL_NAMES" + "SPECIAL_NAMES", + "MAIL_TEST_TO" }) { if ((str = env.getProperty(batchEnv+'.'+key))!=null) { env.setProperty(key, str); @@ -109,7 +113,9 @@ public abstract class Batch { } // Setup for Dry Run - cluster = CassAccess.cluster(env,batchEnv); + if(cluster==null) { + cluster = CassAccess.cluster(env,batchEnv); + } env.info().log("cluster name - ",cluster.getClusterName()); String dryRunStr = env.getProperty( "DRY_RUN" ); if ( dryRunStr == null || "false".equals(dryRunStr.trim()) ) { @@ -120,6 +126,9 @@ public abstract class Batch { } org = OrganizationFactory.init(env); + if(org==null) { + throw new OrganizationException("Organization MUST be defined for Batch"); + } org.setTestMode(dryRun); // Special names to allow behaviors beyond normal rules @@ -132,42 +141,44 @@ public abstract class Batch { for (String s :names.split(",") ) { env.info().log("\tspecial: " + s ); if(s.indexOf('@')>0) { - specialNames.add( s.trim() ); + specialNames.add( s.trim() ); } else { - specialDomains.add(s.trim()); + specialDomains.add(s.trim()); } } } + + version = env.getProperty(VERSION,Config.AAF_DEFAULT_API_VERSION); } protected abstract void run(AuthzTrans trans); - protected abstract void _close(AuthzTrans trans); - + protected void _close(AuthzTrans trans) {} + public String[] args() { - return env.get(ssargs); + return batchArgs; } - + public boolean isDryRun() { return dryRun; } - + public boolean isSpecial(String user) { - if(user==null) { - return false; - } + if(user==null) { + return false; + } if (specialNames != null && specialNames.contains(user)) { env.info().log("specialName: " + user); return (true); } else { - if(specialDomains!=null) { - for(String sd : specialDomains) { - if(user.endsWith(sd)) { - env.info().log("specialDomain: " + user + " matches " + sd); - return (true); - } - } - } + if(specialDomains!=null) { + for(String sd : specialDomains) { + if(user.endsWith(sd)) { + env.info().log("specialDomain: " + user + " matches " + sd); + return (true); + } + } + } } return (false); } @@ -217,7 +228,7 @@ public abstract class Batch { return (organization); } - + public static Row executeDeleteQuery(Statement stmt) { Row row = null; if (!dryRun) { @@ -227,7 +238,7 @@ public abstract class Batch { return (row); } - + public static int acquireRunLock(String className) { Boolean testEnv = true; String envStr = env.getProperty("AFT_ENVIRONMENT"); @@ -251,8 +262,7 @@ public abstract class Batch { try { hostname = InetAddress.getLocalHost().getHostName(); } catch (UnknownHostException e) { - e.printStackTrace(); - env.warn().log("Unable to get hostname"); + env.warn().log("Unable to get hostname : "+e.getMessage()); return (0); } @@ -307,7 +317,7 @@ public abstract class Batch { } return (1); } - + private static void deleteLock( String className) { Row row = session.execute( String.format( "DELETE FROM authz.run_lock WHERE class = '%s' IF EXISTS", className ) ).one(); if (! row.getBool("[applied]")) { @@ -323,17 +333,23 @@ public abstract class Batch { } } } - - protected static String logDir() { - String ld = env.getProperty(LOG_DIR); - if (ld==null) { - if (batchEnv==null) { // Deployed Batch doesn't use different ENVs, and a common logdir - ld = "logs/"; - } else { - ld = "logs/"+batchEnv; + + protected static File logDir() { + if(logdir == null) { + String ld = env.getProperty(LOG_DIR); + if (ld==null) { + if (batchEnv==null) { // Deployed Batch doesn't use different ENVs, and a common logdir + ld = "logs/"; + } else { + ld = "logs/"+batchEnv; + } + } + logdir = new File(ld); + if(!logdir.exists()) { + logdir.mkdirs(); } } - return ld; + return logdir; } protected int count(String str, char c) { if (str==null || str.isEmpty()) { @@ -349,57 +365,64 @@ public abstract class Batch { public final void close(AuthzTrans trans) { _close(trans); - cluster.close(); + if(session!=null) { + session.close(); + session = null; + } + if(cluster!=null && !cluster.isClosed()) { + cluster.close(); + } } public static void main(String[] args) { - // Use a StringBuilder to save off logs until a File can be setup - StringBuilderOutputStream sbos = new StringBuilderOutputStream(); + // Use a StringBuilder to save off logs until a File can be setup + StringBuilderOutputStream sbos = new StringBuilderOutputStream(); PropAccess access = new PropAccess(new PrintStream(sbos),args); - access.log(Level.INIT, "------- Starting Batch ------\n Args: "); + access.log(Level.INFO, "------- Starting Batch ------\n Args: "); for(String s: args) { - sbos.getBuffer().append(s); - sbos.getBuffer().append(' '); + sbos.getBuffer().append(s); + sbos.getBuffer().append(' '); } - + sbos.getBuffer().append('\n'); + InputStream is = null; String filename; String propLoc; try { Define.set(access); - + if(access.getProperty(Config.CADI_PROP_FILES)==null) { - File f = new File("authBatch.props"); - try { - if (f.exists()) { - filename = f.getAbsolutePath(); - is = new FileInputStream(f); - propLoc = f.getPath(); - } else { - URL rsrc = ClassLoader.getSystemResource("authBatch.props"); - filename = rsrc.toString(); - is = rsrc.openStream(); - propLoc = rsrc.getPath(); - } - access.load(is); - } finally { - if (is == null) { - System.err.println("authBatch.props must exist in current dir, or in Classpath"); - System.exit(1); - } - is.close(); - } - if (filename != null) { - access.log(Level.INFO,"Instantiated properties from", filename); - } - - // Log where Config found - access.log(Level.INFO,"Configuring from", propLoc); + File f = new File("authBatch.props"); + try { + if (f.exists()) { + filename = f.getAbsolutePath(); + is = new FileInputStream(f); + propLoc = f.getPath(); + } else { + URL rsrc = ClassLoader.getSystemResource("authBatch.props"); + filename = rsrc.toString(); + is = rsrc.openStream(); + propLoc = rsrc.getPath(); + } + access.load(is); + } finally { + if (is == null) { + System.err.println("authBatch.props must exist in current dir, or in Classpath"); + System.exit(1); + } + is.close(); + } + if (filename != null) { + access.log(Level.INFO,"Instantiated properties from", filename); + } + + // Log where Config found + access.log(Level.INFO,"Configuring from", propLoc); } env = new AuthzEnv(access); - + transferVMProps(env, CASS_ENV, "DRY_RUN", "NS", "Organization"); // Be able to change Environments @@ -407,112 +430,120 @@ public abstract class Batch { // PERF.cassandra.clusters=.... batchEnv = env.getProperty(CASS_ENV); if(batchEnv!=null) { - batchEnv = batchEnv.trim(); + batchEnv = batchEnv.trim(); } File logFile = new File(logDir() + "/batch" + Chrono.dateOnlyStamp(new Date()) + ".log" ); PrintStream batchLog = new PrintStream(new FileOutputStream(logFile,true)); try { - access.setStreamLogIt(batchLog); - sbos.flush(); - batchLog.print(sbos.getBuffer()); - sbos = null; - Logger.getRootLogger().addAppender(new Log4JAccessAppender(access)); - - Batch batch = null; - AuthzTrans trans = env.newTrans(); - - TimeTaken tt = trans.start("Total Run", Env.SUB); - try { - int len = args.length; - if (len > 0) { - String toolName = args[0]; - len -= 1; - if (len < 0) - len = 0; - String nargs[] = new String[len]; - if (len > 0) { - System.arraycopy(args, 1, nargs, 0, len); - } - - env.put(ssargs = env.staticSlot("ARGS"), nargs); - - /* - * Add New Batch Programs (inherit from Batch) here - */ - - // Might be a Report, Update or Temp Batch - Class cls = null; - String classifier = ""; - - String[] pkgs = new String[] { - "org.onap.aaf.auth.batch.update", - "org.onap.aaf.auth.batch.reports", - "org.onap.aaf.auth.batch.temp" - }; - - String ebp = env.getProperty("EXTRA_BATCH_PKGS"); - if(ebp!=null) { - String[] ebps = Split.splitTrim(':', ebp); - String[] temp = new String[ebps.length + pkgs.length]; - System.arraycopy(pkgs,0, temp, 0, pkgs.length); - System.arraycopy(ebps,0,temp,pkgs.length,ebps.length); - pkgs = temp; - } - - for(String p : pkgs) { - try { - cls = ClassLoader.getSystemClassLoader().loadClass(p + '.' + toolName); - int lastDot = p.lastIndexOf('.'); - if(p.length()>0 || p.length()!=lastDot) { - StringBuilder sb = new StringBuilder(); - sb.append(Character.toUpperCase(p.charAt(++lastDot))); - while(++lastDot cnst = cls.getConstructor(AuthzTrans.class); - batch = (Batch) cnst.newInstance(trans); - env.info().log("Begin", classifier, toolName); - } - - - if (batch == null) { - trans.error().log("No Batch named", toolName, "found"); - } - /* - * End New Batch Programs (inherit from Batch) here - */ - - } - if (batch != null) { - batch.run(trans); - } - } finally { - tt.done(); - if (batch != null) { - batch.close(trans); - } - StringBuilder sb = new StringBuilder("Task Times\n"); - trans.auditTrail(4, sb, AuthzTrans.SUB, AuthzTrans.REMOTE); - trans.info().log(sb); - } + access.setStreamLogIt(batchLog); + sbos.flush(); + batchLog.print(sbos.getBuffer()); + sbos = null; + Logger.getRootLogger().addAppender(new Log4JAccessAppender(access)); + + Batch batch = null; + AuthzTrans trans = env.newTrans(); + + TimeTaken tt = trans.start("Total Run", Env.SUB); + try { + int len = args.length; + if (len > 0) { + String toolName = args[0]; + len -= 1; + if (len < 0) + len = 0; + batchArgs = new String[len]; + if (len > 0) { + System.arraycopy(args, 1, batchArgs, 0, len); + } + /* + * Add New Batch Programs (inherit from Batch) here + */ + + // Might be a Report, Update or Temp Batch + Class cls = null; + String classifier = ""; + + String[] pkgs = new String[] { + "org.onap.aaf.auth.batch.update", + "org.onap.aaf.auth.batch.reports", + "org.onap.aaf.auth.batch.temp" + }; + + String ebp = env.getProperty("EXTRA_BATCH_PKGS"); + if(ebp!=null) { + String[] ebps = Split.splitTrim(':', ebp); + String[] temp = new String[ebps.length + pkgs.length]; + System.arraycopy(pkgs,0, temp, 0, pkgs.length); + System.arraycopy(ebps,0,temp,pkgs.length,ebps.length); + pkgs = temp; + } + + for(String p : pkgs) { + try { + cls = ClassLoader.getSystemClassLoader().loadClass(p + '.' + toolName); + int lastDot = p.lastIndexOf('.'); + if(p.length()>0 || p.length()!=lastDot) { + StringBuilder sb = new StringBuilder(); + sb.append(Character.toUpperCase(p.charAt(++lastDot))); + while(++lastDot cnst = cls.getConstructor(AuthzTrans.class); + batch = (Batch) cnst.newInstance(trans); + env.info().log("Begin", classifier, toolName); + } + + + if (batch == null) { + trans.error().log("No Batch named", toolName, "found"); + } + /* + * End New Batch Programs (inherit from Batch) here + */ + + } + if (batch != null) { + try { + batch.run(trans); + } catch (Exception e) { + trans.error().log(e); + if(cluster!=null && !cluster.isClosed()) { + cluster.close(); + } + trans.error().log(e); + } + } + } finally { + tt.done(); + if (batch != null) { + batch.close(trans); + } + StringBuilder sb = new StringBuilder("Task Times\n"); + trans.auditTrail(4, sb, AuthzTrans.SUB, AuthzTrans.REMOTE); + trans.info().log(sb); + } + } catch (Exception e) { + env.warn().log(e); } finally { - batchLog.close(); + batchLog.close(); } } catch (Exception e) { - e.printStackTrace(System.err); - // Exceptions thrown by DB aren't stopping the whole process. - System.exit(1); + if(cluster!=null && !cluster.isClosed()) { + cluster.close(); + } + env.warn().log(System.err); } }