Search in sources :

Example 1 with MetricInfoQueryImpl

use of org.eclipse.kapua.service.datastore.internal.model.query.MetricInfoQueryImpl in project kapua by eclipse.

the class MessageStoreServiceImpl method resetCache.

private void resetCache(String accountName, String topic) throws Exception {
    boolean isAnyAsset;
    boolean isAssetToDelete = false;
    String semTopic;
    if (topic != null) {
        // determine if we should delete an asset if topic = account/asset/#
        KapuaTopic kapuaTopic = new KapuaTopic(topic);
        isAnyAsset = kapuaTopic.isAnyAsset();
        semTopic = kapuaTopic.getSemanticTopic();
        if (semTopic.isEmpty() && !isAnyAsset)
            isAssetToDelete = true;
    } else {
        isAnyAsset = true;
        semTopic = "";
        isAssetToDelete = true;
    }
    // Find all topics
    String everyIndex = EsUtils.getAnyIndexName(accountName);
    int pageSize = 1000;
    int offset = 0;
    long totalHits = 1;
    MetricInfoQueryImpl metricQuery = new MetricInfoQueryImpl();
    metricQuery.setLimit(pageSize + 1);
    metricQuery.setOffset(offset);
    TopicMatchPredicateImpl topicPredicate = new TopicMatchPredicateImpl();
    topicPredicate.setExpression(topic);
    metricQuery.setPredicate(topicPredicate);
    // Remove metrics
    while (totalHits > 0) {
        MetricInfoListResult metrics = EsMetricDAO.connection(EsClient.getcurrent()).instance(everyIndex, EsSchema.METRIC_TYPE_NAME).query(metricQuery);
        totalHits = metrics.size();
        LocalCache<String, Boolean> metricsCache = DatastoreCacheManager.getInstance().getMetricsCache();
        long toBeProcessed = totalHits > pageSize ? pageSize : totalHits;
        for (int i = 0; i < toBeProcessed; i++) {
            String id = metrics.get(i).getId().toString();
            if (metricsCache.get(id))
                metricsCache.remove(id);
        }
        if (totalHits > pageSize)
            offset += (pageSize + 1);
    }
    logger.debug(String.format("Removed cached topic metrics for [%s]", topic));
    EsMetricDAO.connection(EsClient.getcurrent()).instance(everyIndex, EsSchema.METRIC_TYPE_NAME).deleteByQuery(metricQuery);
    logger.debug(String.format("Removed topic metrics for [%s]", topic));
    // 
    TopicInfoQueryImpl topicQuery = new TopicInfoQueryImpl();
    topicQuery.setLimit(pageSize + 1);
    topicQuery.setOffset(offset);
    topicPredicate = new TopicMatchPredicateImpl();
    topicPredicate.setExpression(topic);
    topicQuery.setPredicate(topicPredicate);
    // Remove topic
    offset = 0;
    totalHits = 1;
    while (totalHits > 0) {
        TopicInfoListResult topics = EsTopicDAO.connection(EsClient.getcurrent()).instance(everyIndex, EsSchema.TOPIC_TYPE_NAME).query(topicQuery);
        totalHits = topics.size();
        LocalCache<String, Boolean> topicsCache = DatastoreCacheManager.getInstance().getTopicsCache();
        long toBeProcessed = totalHits > pageSize ? pageSize : totalHits;
        for (int i = 0; i < toBeProcessed; i++) {
            String id = topics.get(0).getId().toString();
            if (topicsCache.get(id))
                topicsCache.remove(id);
        }
        if (totalHits > pageSize)
            offset += (pageSize + 1);
    }
    logger.debug(String.format("Removed cached topics for [%s]", topic));
    EsTopicDAO.connection(EsClient.getcurrent()).instance(everyIndex, EsSchema.TOPIC_TYPE_NAME).deleteByQuery(topicQuery);
    logger.debug(String.format("Removed topics for [%s]", topic));
    // Remove asset
    if (isAssetToDelete) {
        AssetInfoQueryImpl assetQuery = new AssetInfoQueryImpl();
        assetQuery.setLimit(pageSize + 1);
        assetQuery.setOffset(offset);
        topicPredicate = new TopicMatchPredicateImpl();
        topicPredicate.setExpression(topic);
        assetQuery.setPredicate(topicPredicate);
        offset = 0;
        totalHits = 1;
        while (totalHits > 0) {
            AssetInfoListResult assets = EsAssetDAO.connection(EsClient.getcurrent()).instance(everyIndex, EsSchema.ASSET_TYPE_NAME).query(assetQuery);
            totalHits = assets.size();
            LocalCache<String, Boolean> assetsCache = DatastoreCacheManager.getInstance().getAssetsCache();
            long toBeProcessed = totalHits > pageSize ? pageSize : totalHits;
            for (int i = 0; i < toBeProcessed; i++) {
                String id = assets.get(i).getId().toString();
                if (assetsCache.get(id))
                    assetsCache.remove(id);
            }
            if (totalHits > pageSize)
                offset += (pageSize + 1);
        }
        logger.debug(String.format("Removed cached assets for [%s]", topic));
        EsAssetDAO.connection(EsClient.getcurrent()).instance(everyIndex, EsSchema.ASSET_TYPE_NAME).deleteByQuery(assetQuery);
        logger.debug(String.format("Removed assets for [%s]", topic));
    }
}
Also used : KapuaTopic(org.eclipse.kapua.service.datastore.internal.elasticsearch.KapuaTopic) MetricInfoListResult(org.eclipse.kapua.service.datastore.model.MetricInfoListResult) AssetInfoListResult(org.eclipse.kapua.service.datastore.model.AssetInfoListResult) MetricInfoQueryImpl(org.eclipse.kapua.service.datastore.internal.model.query.MetricInfoQueryImpl) TopicInfoListResult(org.eclipse.kapua.service.datastore.model.TopicInfoListResult) TopicInfoQueryImpl(org.eclipse.kapua.service.datastore.internal.model.query.TopicInfoQueryImpl) AssetInfoQueryImpl(org.eclipse.kapua.service.datastore.internal.model.query.AssetInfoQueryImpl) TopicMatchPredicateImpl(org.eclipse.kapua.service.datastore.internal.model.query.TopicMatchPredicateImpl)

Example 2 with MetricInfoQueryImpl

use of org.eclipse.kapua.service.datastore.internal.model.query.MetricInfoQueryImpl in project kapua by eclipse.

the class MetricInfoStoreServiceImpl method find.

@Override
public MetricInfo find(KapuaId scopeId, StorableId id) throws KapuaException {
    // 
    // Argument Validation
    ArgumentValidator.notNull(scopeId, "scopeId");
    ArgumentValidator.notNull(id, "id");
    // 
    // Check Access
    this.checkDataAccess(scopeId, Actions.read);
    MetricInfoQueryImpl q = new MetricInfoQueryImpl();
    q.setLimit(1);
    ArrayList<StorableId> ids = new ArrayList<StorableId>();
    ids.add(id);
    AndPredicateImpl allPredicates = new AndPredicateImpl();
    allPredicates.addPredicate(new IdsPredicateImpl(EsMessageField.ID, ids));
    MetricInfoListResult result = this.query(scopeId, q);
    if (result == null || result.size() == 0)
        return null;
    MetricInfo topicInfo = result.get(0);
    return topicInfo;
}
Also used : StorableId(org.eclipse.kapua.service.datastore.model.StorableId) IdsPredicateImpl(org.eclipse.kapua.service.datastore.internal.model.query.IdsPredicateImpl) AndPredicateImpl(org.eclipse.kapua.service.datastore.internal.model.query.AndPredicateImpl) MetricInfoListResult(org.eclipse.kapua.service.datastore.model.MetricInfoListResult) MetricInfo(org.eclipse.kapua.service.datastore.model.MetricInfo) MetricInfoQueryImpl(org.eclipse.kapua.service.datastore.internal.model.query.MetricInfoQueryImpl) ArrayList(java.util.ArrayList)

Example 3 with MetricInfoQueryImpl

use of org.eclipse.kapua.service.datastore.internal.model.query.MetricInfoQueryImpl in project kapua by eclipse.

the class TopicInfoStoreServiceImpl method delete.

// 
// @Override
// public StorableId store(KapuaId scopeId, TopicInfoCreator creator)
// throws KapuaException
// {
// // TODO DAOs are ready, need to evaluate if this functionality
// // have to be available or not. Currently entries are added by
// // the message service directy
// throw KapuaException.internalError("Not implemented");
// }
// 
// @Override
// public StorableId update(KapuaId scopeId, TopicInfo creator)
// throws KapuaException
// {
// // TODO DAOs are ready, need to evaluate if this functionality
// // have to be available or not. Currently entries are added by
// // the message service directy
// throw KapuaException.internalError("Not implemented");
// }
@Override
public void delete(KapuaId scopeId, StorableId id) throws KapuaException {
    // 
    // Argument Validation
    ArgumentValidator.notNull(scopeId, "scopeId");
    ArgumentValidator.notNull(id, "id");
    // 
    // Check Access
    this.checkDataAccess(scopeId, Actions.delete);
    // 
    // Do the find
    AccountInfo accountInfo = getAccountServicePlan(scopeId);
    String scopeName = accountInfo.getAccount().getName();
    LocalServicePlan accountServicePlan = accountInfo.getServicePlan();
    long ttl = accountServicePlan.getDataTimeToLive() * DAY_MILLIS;
    if (!accountServicePlan.getDataStorageEnabled() || ttl == LocalServicePlan.DISABLED) {
        logger.debug("Storage not enabled for account {}, return", scopeName);
        return;
    }
    try {
        String everyIndex = EsUtils.getAnyIndexName(scopeName);
        TopicInfo topicInfo = this.find(scopeId, id);
        MessageQueryImpl mqi = new MessageQueryImpl();
        TopicMatchPredicateImpl predicate = new TopicMatchPredicateImpl(topicInfo.getFullTopicName());
        mqi.setPredicate(predicate);
        EsMessageDAO.connection(EsClient.getcurrent()).instance(everyIndex, EsSchema.MESSAGE_TYPE_NAME).setListener(null).deleteByQuery(mqi);
        MetricInfoQueryImpl miqi = new MetricInfoQueryImpl();
        mqi.setPredicate(predicate);
        EsMetricDAO.connection(EsClient.getcurrent()).instance(everyIndex, EsSchema.METRIC_TYPE_NAME).setListener(null).deleteByQuery(miqi);
        EsTopicDAO.connection(EsClient.getcurrent()).instance(everyIndex, EsSchema.TOPIC_TYPE_NAME).deleteById(id.toString());
    } catch (Exception exc) {
        // CassandraUtils.handleException(e);
        throw KapuaException.internalError(exc);
    }
}
Also used : MessageQueryImpl(org.eclipse.kapua.service.datastore.internal.model.query.MessageQueryImpl) LocalServicePlan(org.eclipse.kapua.service.datastore.internal.elasticsearch.LocalServicePlan) MetricInfoQueryImpl(org.eclipse.kapua.service.datastore.internal.model.query.MetricInfoQueryImpl) TopicMatchPredicateImpl(org.eclipse.kapua.service.datastore.internal.model.query.TopicMatchPredicateImpl) TopicInfo(org.eclipse.kapua.service.datastore.model.TopicInfo) KapuaException(org.eclipse.kapua.KapuaException)

Example 4 with MetricInfoQueryImpl

use of org.eclipse.kapua.service.datastore.internal.model.query.MetricInfoQueryImpl in project kapua by eclipse.

the class EsMetricDAO method query.

public MetricInfoListResult query(MetricInfoQuery query) throws Exception {
    // get one plus (if there is one) to later get the next key value
    MetricInfoQueryImpl localQuery = new MetricInfoQueryImpl();
    localQuery.copy(query);
    localQuery.setLimit(query.getLimit() + 1);
    MetricInfoQueryConverter mic = new MetricInfoQueryConverter();
    SearchRequestBuilder builder = mic.toSearchRequestBuilder(esTypeDAO.getIndexName(), esTypeDAO.getTypeName(), localQuery);
    SearchResponse response = builder.get(TimeValue.timeValueMillis(EsUtils.getQueryTimeout()));
    SearchHits searchHits = response.getHits();
    if (searchHits == null || searchHits.getTotalHits() == 0)
        return new MetricInfoListResultImpl();
    int i = 0;
    int searchHitsSize = searchHits.getHits().length;
    List<MetricInfo> metricInfos = new ArrayList<MetricInfo>();
    MetricInfoBuilder metricInfoBuilder = new MetricInfoBuilder();
    for (SearchHit searchHit : searchHits.getHits()) {
        if (i < query.getLimit()) {
            MetricInfo metricInfo = metricInfoBuilder.build(searchHit).getKapuaMetricInfo();
            metricInfos.add(metricInfo);
        }
        i++;
    }
    // TODO check equivalence with CX with Pierantonio
    // TODO what is this nextKey
    Object nextKey = null;
    if (searchHitsSize > query.getLimit()) {
        nextKey = query.getLimit();
    }
    MetricInfoListResult result = new MetricInfoListResultImpl(nextKey, metricInfos.size());
    result.addAll(metricInfos);
    return result;
}
Also used : MetricInfoListResult(org.eclipse.kapua.service.datastore.model.MetricInfoListResult) SearchRequestBuilder(org.elasticsearch.action.search.SearchRequestBuilder) SearchHit(org.elasticsearch.search.SearchHit) MetricInfoQueryImpl(org.eclipse.kapua.service.datastore.internal.model.query.MetricInfoQueryImpl) ArrayList(java.util.ArrayList) MetricInfoListResultImpl(org.eclipse.kapua.service.datastore.internal.model.MetricInfoListResultImpl) SearchResponse(org.elasticsearch.action.search.SearchResponse) MetricInfoBuilder(org.eclipse.kapua.service.datastore.internal.elasticsearch.MetricInfoBuilder) MetricInfo(org.eclipse.kapua.service.datastore.model.MetricInfo) SearchHits(org.elasticsearch.search.SearchHits) MetricInfoQueryConverter(org.eclipse.kapua.service.datastore.internal.elasticsearch.MetricInfoQueryConverter)

Example 5 with MetricInfoQueryImpl

use of org.eclipse.kapua.service.datastore.internal.model.query.MetricInfoQueryImpl in project kapua by eclipse.

the class TopicInfoStoreServiceImpl method delete.

@Override
public void delete(KapuaId scopeId, TopicInfoQuery query) throws KapuaException {
    // 
    // Argument Validation
    ArgumentValidator.notNull(scopeId, "scopeId");
    ArgumentValidator.notNull(query, "query");
    // 
    // Check Access
    this.checkDataAccess(scopeId, Actions.delete);
    // 
    // Do the find
    AccountInfo accountInfo = getAccountServicePlan(scopeId);
    String scopeName = accountInfo.getAccount().getName();
    LocalServicePlan accountServicePlan = accountInfo.getServicePlan();
    long ttl = accountServicePlan.getDataTimeToLive() * DAY_MILLIS;
    if (!accountServicePlan.getDataStorageEnabled() || ttl == LocalServicePlan.DISABLED) {
        logger.debug("Storage not enabled for account {}, skipping delete", scopeName);
        return;
    }
    try {
        String everyIndex = EsUtils.getAnyIndexName(scopeName);
        TopicInfoListResult topics = this.query(scopeId, query);
        for (TopicInfo topicInfo : topics) {
            // TODO Improve performances
            MessageQueryImpl mqi = new MessageQueryImpl();
            TopicMatchPredicateImpl predicate = new TopicMatchPredicateImpl(topicInfo.getFullTopicName());
            mqi.setPredicate(predicate);
            EsMessageDAO.connection(EsClient.getcurrent()).instance(everyIndex, EsSchema.MESSAGE_TYPE_NAME).setListener(null).deleteByQuery(mqi);
            MetricInfoQueryImpl miqi = new MetricInfoQueryImpl();
            mqi.setPredicate(predicate);
            EsMetricDAO.connection(EsClient.getcurrent()).instance(everyIndex, EsSchema.METRIC_TYPE_NAME).setListener(null).deleteByQuery(miqi);
        }
        EsTopicDAO.connection(EsClient.getcurrent()).instance(everyIndex, EsSchema.TOPIC_TYPE_NAME).deleteByQuery(query);
        return;
    } catch (Exception exc) {
        // CassandraUtils.handleException(e);
        throw KapuaException.internalError(exc);
    }
}
Also used : MessageQueryImpl(org.eclipse.kapua.service.datastore.internal.model.query.MessageQueryImpl) LocalServicePlan(org.eclipse.kapua.service.datastore.internal.elasticsearch.LocalServicePlan) TopicInfoListResult(org.eclipse.kapua.service.datastore.model.TopicInfoListResult) MetricInfoQueryImpl(org.eclipse.kapua.service.datastore.internal.model.query.MetricInfoQueryImpl) TopicMatchPredicateImpl(org.eclipse.kapua.service.datastore.internal.model.query.TopicMatchPredicateImpl) TopicInfo(org.eclipse.kapua.service.datastore.model.TopicInfo) KapuaException(org.eclipse.kapua.KapuaException)

Aggregations

MetricInfoQueryImpl (org.eclipse.kapua.service.datastore.internal.model.query.MetricInfoQueryImpl)5 TopicMatchPredicateImpl (org.eclipse.kapua.service.datastore.internal.model.query.TopicMatchPredicateImpl)3 MetricInfoListResult (org.eclipse.kapua.service.datastore.model.MetricInfoListResult)3 ArrayList (java.util.ArrayList)2 KapuaException (org.eclipse.kapua.KapuaException)2 LocalServicePlan (org.eclipse.kapua.service.datastore.internal.elasticsearch.LocalServicePlan)2 MessageQueryImpl (org.eclipse.kapua.service.datastore.internal.model.query.MessageQueryImpl)2 MetricInfo (org.eclipse.kapua.service.datastore.model.MetricInfo)2 TopicInfo (org.eclipse.kapua.service.datastore.model.TopicInfo)2 TopicInfoListResult (org.eclipse.kapua.service.datastore.model.TopicInfoListResult)2 KapuaTopic (org.eclipse.kapua.service.datastore.internal.elasticsearch.KapuaTopic)1 MetricInfoBuilder (org.eclipse.kapua.service.datastore.internal.elasticsearch.MetricInfoBuilder)1 MetricInfoQueryConverter (org.eclipse.kapua.service.datastore.internal.elasticsearch.MetricInfoQueryConverter)1 MetricInfoListResultImpl (org.eclipse.kapua.service.datastore.internal.model.MetricInfoListResultImpl)1 AndPredicateImpl (org.eclipse.kapua.service.datastore.internal.model.query.AndPredicateImpl)1 AssetInfoQueryImpl (org.eclipse.kapua.service.datastore.internal.model.query.AssetInfoQueryImpl)1 IdsPredicateImpl (org.eclipse.kapua.service.datastore.internal.model.query.IdsPredicateImpl)1 TopicInfoQueryImpl (org.eclipse.kapua.service.datastore.internal.model.query.TopicInfoQueryImpl)1 AssetInfoListResult (org.eclipse.kapua.service.datastore.model.AssetInfoListResult)1 StorableId (org.eclipse.kapua.service.datastore.model.StorableId)1