use of datawave.webservice.query.Query in project datawave by NationalSecurityAgency.
the class BulkResultsJobConfiguration method setupQuery.
private QuerySettings setupQuery(String sid, String queryId, Principal principal) throws Exception {
Connector connector = null;
QueryLogic<?> logic = null;
try {
// Get the query by the query id
Query q = getQueryById(queryId);
if (!sid.equals(q.getOwner()))
throw new QueryException("This query does not belong to you. expected: " + q.getOwner() + ", value: " + sid, Response.Status.UNAUTHORIZED.getStatusCode());
// will throw IllegalArgumentException if not defined
logic = queryFactory.getQueryLogic(q.getQueryLogicName(), principal);
// Get an accumulo connection
Map<String, String> trackingMap = connectionFactory.getTrackingMap(Thread.currentThread().getStackTrace());
connector = connectionFactory.getConnection(logic.getConnectionPriority(), trackingMap);
// Merge user auths with the auths that they use in the Query
Set<Authorizations> runtimeQueryAuthorizations = AuthorizationsUtil.getDowngradedAuthorizations(q.getQueryAuthorizations(), principal);
// Initialize the logic so that the configuration contains all of the iterator options
GenericQueryConfiguration queryConfig = logic.initialize(connector, q, runtimeQueryAuthorizations);
String base64EncodedQuery = BulkResultsFileOutputMapper.serializeQuery(q);
return new QuerySettings(logic, queryConfig, base64EncodedQuery, q.getClass(), runtimeQueryAuthorizations);
} finally {
if (null != logic && null != connector)
connectionFactory.returnConnection(connector);
}
}
use of datawave.webservice.query.Query in project datawave by NationalSecurityAgency.
the class Persister method findByUser.
/**
* Returns queries for the specified user with the credentials of the caller.
*
* @param user
* @return list of specified users queries.
*/
@RolesAllowed("Administrator")
public List<Query> findByUser(String user) {
// Find out who/what called this method
Principal p = ctx.getCallerPrincipal();
String sid = p.getName();
Set<Authorizations> auths = new HashSet<>();
if (p instanceof DatawavePrincipal) {
DatawavePrincipal dp = (DatawavePrincipal) p;
sid = dp.getShortName();
for (Collection<String> cbAuths : dp.getAuthorizations()) auths.add(new Authorizations(cbAuths.toArray(new String[cbAuths.size()])));
}
log.trace(sid + " has authorizations " + auths);
Connector c = null;
try {
Map<String, String> trackingMap = connectionFactory.getTrackingMap(Thread.currentThread().getStackTrace());
c = connectionFactory.getConnection(Priority.ADMIN, trackingMap);
tableCheck(c);
try (Scanner scanner = ScannerHelper.createScanner(c, TABLE_NAME, auths)) {
Range range = new Range(user, user);
scanner.setRange(range);
List<Query> results = null;
for (Entry<Key, Value> entry : scanner) {
if (null == results)
results = new ArrayList<>();
results.add(QueryUtil.deserialize(QueryUtil.getQueryImplClassName(entry.getKey()), entry.getKey().getColumnVisibility(), entry.getValue()));
}
return results;
}
} catch (RuntimeException re) {
throw re;
} catch (Exception e) {
log.error("Error creating query", e);
throw new EJBException("Error creating query", e);
} finally {
try {
connectionFactory.returnConnection(c);
} catch (Exception e) {
log.error("Error creating query", e);
c = null;
}
}
}
use of datawave.webservice.query.Query in project datawave by NationalSecurityAgency.
the class HudBean method getRunningQueries.
/**
* Return true if there is at least one log in the last 60 minutes.
*
* @return
* @throws org.apache.accumulo.core.client.TableNotFoundException
*/
@Path("/runningqueries/{userid}")
@GET
public String getRunningQueries(@PathParam("userid") String userId) throws Exception {
DatawavePrincipal principal = getPrincipal();
boolean isAnAdmin = isAnAdmin(principal);
QueryImplListResponse runningQueries = null;
if (isAnAdmin) {
runningQueries = queryExecutor.listQueriesForUser(userId);
} else {
runningQueries = queryExecutor.listUserQueries();
}
List<Query> queryList = runningQueries.getQuery();
List<HudQuerySummary> querySummaryList = new ArrayList<>();
for (Query query : queryList) {
HudQuerySummary summary = summaryBuilder.build(query);
String queryId = query.getId().toString();
List<? extends BaseQueryMetric> queryMetricsList;
queryMetricsList = queryMetrics.query(queryId).getResult();
if (queryMetricsList != null && !queryMetricsList.isEmpty()) {
BaseQueryMetric qm = queryMetricsList.get(0);
List<PageMetric> pageMetrics = qm.getPageTimes();
summary.setPageMetrics(pageMetrics);
summary.setCreateDate(qm.getCreateDate().getTime());
summary.setNumPages(qm.getNumPages());
summary.setNumResults(qm.getNumResults());
summary.setLastUpdated(qm.getLastUpdated().getTime());
summary.setLifeCycle(qm.getLifecycle().toString());
}
querySummaryList.add(summary);
}
return gson.toJson(querySummaryList);
}
use of datawave.webservice.query.Query in project datawave by NationalSecurityAgency.
the class CompositeIndexTest method getQueryRangesIterator.
private Iterator getQueryRangesIterator(String queryString, ShardQueryLogic logic) throws Exception {
MultivaluedMap<String, String> params = new MultivaluedMapImpl<>();
params.putSingle(QUERY_STRING, queryString);
params.putSingle(QUERY_NAME, "geoQuery");
params.putSingle(QUERY_LOGIC_NAME, "EventQueryLogic");
params.putSingle(QUERY_PERSISTENCE, "PERSISTENT");
params.putSingle(QUERY_AUTHORIZATIONS, AUTHS);
params.putSingle(QUERY_EXPIRATION, "20200101 000000.000");
params.putSingle(QUERY_BEGIN, BEGIN_DATE);
params.putSingle(QUERY_END, END_DATE);
QueryParameters queryParams = new QueryParametersImpl();
queryParams.validate(params);
Set<Authorizations> auths = new HashSet<>();
auths.add(new Authorizations(AUTHS));
Query query = new QueryImpl();
query.initialize(USER, Arrays.asList(USER_DN), null, queryParams, null);
ShardQueryConfiguration config = ShardQueryConfiguration.create(logic, query);
logic.initialize(config, instance.getConnector("root", PASSWORD), query, auths);
logic.setupQuery(config);
return config.getQueries();
}
use of datawave.webservice.query.Query in project datawave by NationalSecurityAgency.
the class MultiValueCompositeIndexTest method getResultsIterator.
private Iterator getResultsIterator(String queryString, ShardQueryLogic logic) throws Exception {
MultivaluedMap<String, String> params = new MultivaluedMapImpl<>();
params.putSingle(QUERY_STRING, queryString);
params.putSingle(QUERY_NAME, "geoQuery");
params.putSingle(QUERY_LOGIC_NAME, "EventQueryLogic");
params.putSingle(QUERY_PERSISTENCE, "PERSISTENT");
params.putSingle(QUERY_AUTHORIZATIONS, AUTHS);
params.putSingle(QUERY_EXPIRATION, "20200101 000000.000");
params.putSingle(QUERY_BEGIN, BEGIN_DATE);
params.putSingle(QUERY_END, END_DATE);
QueryParameters queryParams = new QueryParametersImpl();
queryParams.validate(params);
Set<Authorizations> auths = new HashSet<>();
auths.add(new Authorizations(AUTHS));
Query query = new QueryImpl();
query.initialize(USER, Arrays.asList(USER_DN), null, queryParams, null);
ShardQueryConfiguration config = ShardQueryConfiguration.create(logic, query);
logic.initialize(config, instance.getConnector("root", PASSWORD), query, auths);
logic.setupQuery(config);
return logic.getTransformIterator(query);
}
Aggregations