X-Git-Url: https://gerrit.onap.org/r/gitweb?p=aaf%2Fauthz.git;a=blobdiff_plain;f=auth%2Fauth-batch%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Faaf%2Fauth%2Fbatch%2Fhelpers%2FLastNotified.java;h=d05f38c5ee5e436be55639f267925688e03ac556;hp=e108ec859cf20ec90f91cf413f060a42d5011c5c;hb=d86e3224e6a5af2bd2b713f93bea5e6677d3ebc2;hpb=e3163b2d5609753f874e2f52fd5ef67fa063af7a diff --git a/auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/LastNotified.java b/auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/LastNotified.java index e108ec85..d05f38c5 100644 --- a/auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/LastNotified.java +++ b/auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/LastNotified.java @@ -22,22 +22,33 @@ */ package org.onap.aaf.auth.batch.helpers; +import java.security.cert.X509Certificate; import java.util.Date; import java.util.Iterator; +import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeMap; -import org.onap.aaf.auth.dao.cass.UserRoleDAO; +import org.onap.aaf.auth.batch.helpers.Cred.Instance; +import org.onap.aaf.auth.batch.helpers.ExpireRange.Range; +import org.onap.aaf.cadi.util.CSV; +import org.onap.aaf.misc.env.Env; +import org.onap.aaf.misc.env.TimeTaken; +import org.onap.aaf.misc.env.Trans; +import org.onap.aaf.misc.env.util.Split; import com.datastax.driver.core.ResultSet; import com.datastax.driver.core.Row; import com.datastax.driver.core.Session; +import com.datastax.driver.core.SimpleStatement; +import com.datastax.driver.core.Statement; public class LastNotified { private Map lastNotified = new TreeMap<>(); private Session session; private static final Date never = new Date(0); + private static final String SELECT = "SELECT user,target,key,last FROM authz.notified"; public LastNotified(Session session) { this.session = session; @@ -56,7 +67,7 @@ public class LastNotified { query.append('\''); if(cnt>=30) { endQuery(query); - add(session.execute(query.toString()),lastNotified); + add(session.execute(query.toString()),lastNotified, (x,y) -> false); query.setLength(0); startQuery(query); cnt=0; @@ -64,7 +75,7 @@ public class LastNotified { } if(cnt>0) { endQuery(query); - add(session.execute(query.toString()),lastNotified); + add(session.execute(query.toString()),lastNotified, (x,y) -> false); } } @@ -90,21 +101,34 @@ public class LastNotified { return rv; } - private Date add(ResultSet result, Map lastNotified) { + private Date add(ResultSet result, Map lastNotified, MarkDelete md) { Date last = null; + Row r; for(Iterator iter = result.iterator(); iter.hasNext();) { - Row r = iter.next(); - String key = r.getString(0) + '|' + - r.getString(1) + '|' + - r.getString(2); - - lastNotified.put(key, last=r.getTimestamp(3)); + r = iter.next(); + String ttKey = r.getString(1) + '|' + + r.getString(2); + + String fullKey = r.getString(0) + '|' + + ttKey; + last=r.getTimestamp(3); + if(!md.process(fullKey, last)) { + lastNotified.put(fullKey, last); + Date d = lastNotified.get(ttKey); + if(d==null || d.after(last)) { // put most recent, if different + lastNotified.put(ttKey, last); + } + } } return last; } + + private interface MarkDelete { + public boolean process(String fullKey, Date last); + }; private void startQuery(StringBuilder query) { - query.append("SELECT user,target,key,last FROM authz.notified WHERE user in ("); + query.append(SELECT + " WHERE user in ("); } private void endQuery(StringBuilder query) { @@ -121,8 +145,50 @@ public class LastNotified { query.append("';\n"); } - public static String newKey(UserRoleDAO.Data urdd) { - return urdd.user + "|ur|" + urdd.role; + public LastNotified loadAll(Trans trans, final Range delRange, final CSV.Writer cw) { + trans.debug().log( "query: ",SELECT ); + TimeTaken tt = trans.start("Read all LastNotified", Env.REMOTE); + + ResultSet results; + try { + Statement stmt = new SimpleStatement( SELECT ); + results = session.execute(stmt); + add(results,lastNotified, (fullKey, last) -> { + if(delRange.inRange(last)) { + String[] params = Split.splitTrim('|', fullKey,3); + if(params.length==3) { + cw.row("notified",params[0],params[1],params[2]); + return true; + } + } + return false; + }); + } finally { + tt.done(); + } + return this; + } + + public static String newKey(UserRole ur) { + return "ur|" + ur.user() + '|'+ur.role(); + } + + public static String newKey(Cred cred, Instance inst) { + return "cred|" + cred.id + '|' + inst.type + '|' + inst.tag; + } + + public static String newKey(X509 x509, X509Certificate x509Cert) { + return "x509|" + x509.id + '|' + x509Cert.getSerialNumber().toString(); + } + + public static void delete(StringBuilder query, List row) { + query.append("DELETE FROM authz.notified WHERE user='"); + query.append(row.get(1)); + query.append("' AND target='"); + query.append(row.get(2)); + query.append("' AND key='"); + query.append(row.get(3)); + query.append("';\n"); } }