summaryrefslogtreecommitdiffstats
path: root/auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/LastNotified.java
diff options
context:
space:
mode:
Diffstat (limited to 'auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/LastNotified.java')
-rw-r--r--auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/LastNotified.java92
1 files changed, 79 insertions, 13 deletions
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<String,Date> 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<String, Date> lastNotified) {
+ private Date add(ResultSet result, Map<String, Date> lastNotified, MarkDelete md) {
Date last = null;
+ Row r;
for(Iterator<Row> 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<String> 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");
}
}