Improve Batches
[aaf/authz.git] / auth / auth-batch / src / main / java / org / onap / aaf / auth / batch / update / Approvals.java
index 2047098..03c812a 100644 (file)
@@ -38,15 +38,21 @@ import org.onap.aaf.auth.batch.approvalsets.ApprovalSet;
 import org.onap.aaf.auth.batch.approvalsets.Pending;
 import org.onap.aaf.auth.batch.approvalsets.URApprovalSet;
 import org.onap.aaf.auth.batch.helpers.BatchDataView;
+import org.onap.aaf.auth.batch.helpers.CQLBatch;
+import org.onap.aaf.auth.batch.helpers.CQLBatchLoop;
+import org.onap.aaf.auth.batch.helpers.LastNotified;
 import org.onap.aaf.auth.batch.helpers.NS;
 import org.onap.aaf.auth.batch.helpers.Notification;
+import org.onap.aaf.auth.batch.helpers.Notification.TYPE;
 import org.onap.aaf.auth.batch.helpers.Role;
 import org.onap.aaf.auth.batch.helpers.UserRole;
+import org.onap.aaf.auth.batch.reports.Notify;
 import org.onap.aaf.auth.batch.reports.bodies.NotifyPendingApprBody;
 import org.onap.aaf.auth.dao.cass.UserRoleDAO;
 import org.onap.aaf.auth.env.AuthzTrans;
 import org.onap.aaf.auth.layer.Result;
 import org.onap.aaf.auth.org.OrganizationException;
+import org.onap.aaf.cadi.Access;
 import org.onap.aaf.cadi.CadiException;
 import org.onap.aaf.cadi.client.Holder;
 import org.onap.aaf.cadi.util.CSV;
@@ -56,15 +62,18 @@ import org.onap.aaf.misc.env.Trans;
 import org.onap.aaf.misc.env.util.Chrono;
 
 public class Approvals extends Batch {
-    private final AuthzTrans noAvg;
+    private final Access access;
+       private final AuthzTrans noAvg;
        private BatchDataView dataview;
        private List<CSV> csvList;
        private GregorianCalendar now;
+       private final Notify notify;
        
 
     public Approvals(AuthzTrans trans) throws APIException, IOException, OrganizationException {
         super(trans.env());
-        
+        notify = new Notify(trans);
+        access = env.access();
         noAvg = env.newTransNoAvg();
         noAvg.setUser(new BatchPrincipal("batch:Approvals"));
         session = cluster.connect();
@@ -94,13 +103,13 @@ public class Approvals extends Batch {
                        trans.error().printf("CSV File %s does not exist",f.getAbsolutePath());
                        }
         }
-        
     }
 
     @Override
     protected void run(AuthzTrans trans) {
        Map<String,Pending> mpending = new TreeMap<>();
                Holder<Integer> count = new Holder<>(0);
+               final CQLBatchLoop cbl = new CQLBatchLoop(new CQLBatch(noAvg.info(),session),100,dryRun);
         for(CSV approveCSV : csvList) {
                TimeTaken tt = trans.start("Load Analyzed Reminders",Trans.SUB,approveCSV.name());
                try {
@@ -170,19 +179,36 @@ public class Approvals extends Batch {
             trans.info().printf("Processed %d UserRoles", count.get());
 
             count.set(0);
-               NotifyPendingApprBody npab;
+               NotifyPendingApprBody npab = new NotifyPendingApprBody(access);
+
                GregorianCalendar gc = new GregorianCalendar();
                gc.add(GregorianCalendar.DAY_OF_MONTH, 7);
                Date oneWeek = gc.getTime();
+               CSV.Saver rs = new CSV.Saver();
+               
+               tt = trans.start("Obtain Last Notifications", Trans.SUB);
+               LastNotified lastN;
+               try {
+                       lastN = new LastNotified(session);
+                       lastN.add(mpending.keySet());
+               } finally {
+                       tt.done();
+               }
                
                Pending p;
                tt = trans.start("Notify for Pending", Trans.SUB);
                try {
                        for(Entry<String, Pending> es : mpending.entrySet()) {
                                p = es.getValue();
-                               Date earliest = p.earliest();
-                               if(p.newApprovals() || earliest==null || earliest.before(oneWeek) ) {
-                                       System.out.println("update");
+                               Date dateLastNotified = lastN.lastNotified(es.getKey());
+                               if(p.newApprovals() || dateLastNotified==null || dateLastNotified.after(oneWeek) ) {
+                                       rs.row("appr", es.getKey(),p.qty(),batchEnv);
+                                       npab.store(rs.asList());
+                                       if(notify.notify(noAvg, npab)>0) {
+                                               // Update
+                                               cbl.preLoop();
+                                               update(cbl.inc(),es.getKey(),Notification.TYPE.OA);
+                                       }
                                }
                        }
                } finally {
@@ -192,7 +218,16 @@ public class Approvals extends Batch {
            }
     }
     
-    @Override
+    private void update(StringBuilder sb, String user, TYPE oa) {
+       sb.append("UPDATE authz.notify SET last=dateof(now()) WHERE user='");
+       sb.append(user);
+       sb.append("' AND type=");
+       sb.append(oa.idx());
+       sb.append(';');
+               
+       }
+
+       @Override
     protected void _close(AuthzTrans trans) {
        if(session!=null) {
                session.close();