Search in sources :

Example 1 with SubscriptionState

use of org.thingsboard.server.extensions.core.plugin.telemetry.sub.SubscriptionState in project thingsboard by thingsboard.

the class TelemetryWebsocketMsgHandler method getSubscriptionCallback.

private PluginCallback<List<TsKvEntry>> getSubscriptionCallback(final PluginWebsocketSessionRef sessionRef, final TimeseriesSubscriptionCmd cmd, final String sessionId, final EntityId entityId, final long startTs, final List<String> keys) {
    return new PluginCallback<List<TsKvEntry>>() {

        @Override
        public void onSuccess(PluginContext ctx, List<TsKvEntry> data) {
            sendWsMsg(ctx, sessionRef, new SubscriptionUpdate(cmd.getCmdId(), data));
            Map<String, Long> subState = new HashMap<>(keys.size());
            keys.forEach(key -> subState.put(key, startTs));
            data.forEach(v -> subState.put(v.getKey(), v.getTs()));
            SubscriptionState sub = new SubscriptionState(sessionId, cmd.getCmdId(), entityId, SubscriptionType.TIMESERIES, false, subState, cmd.getScope());
            subscriptionManager.addLocalWsSubscription(ctx, sessionId, entityId, sub);
        }

        @Override
        public void onFailure(PluginContext ctx, Exception e) {
            log.error(FAILED_TO_FETCH_DATA, e);
            SubscriptionUpdate update = new SubscriptionUpdate(cmd.getCmdId(), SubscriptionErrorCode.INTERNAL_ERROR, FAILED_TO_FETCH_DATA);
            sendWsMsg(ctx, sessionRef, update);
        }
    };
}
Also used : PluginContext(org.thingsboard.server.extensions.api.plugins.PluginContext) SubscriptionState(org.thingsboard.server.extensions.core.plugin.telemetry.sub.SubscriptionState) SubscriptionUpdate(org.thingsboard.server.extensions.core.plugin.telemetry.sub.SubscriptionUpdate) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException) IOException(java.io.IOException) UnauthorizedException(org.thingsboard.server.extensions.api.exception.UnauthorizedException) PluginCallback(org.thingsboard.server.extensions.api.plugins.PluginCallback)

Example 2 with SubscriptionState

use of org.thingsboard.server.extensions.core.plugin.telemetry.sub.SubscriptionState in project thingsboard by thingsboard.

the class TelemetryWebsocketMsgHandler method handleWsAttributesSubscriptionByKeys.

private void handleWsAttributesSubscriptionByKeys(PluginContext ctx, PluginWebsocketSessionRef sessionRef, AttributesSubscriptionCmd cmd, String sessionId, EntityId entityId, List<String> keys) {
    PluginCallback<List<AttributeKvEntry>> callback = new PluginCallback<List<AttributeKvEntry>>() {

        @Override
        public void onSuccess(PluginContext ctx, List<AttributeKvEntry> data) {
            List<TsKvEntry> attributesData = data.stream().map(d -> new BasicTsKvEntry(d.getLastUpdateTs(), d)).collect(Collectors.toList());
            sendWsMsg(ctx, sessionRef, new SubscriptionUpdate(cmd.getCmdId(), attributesData));
            Map<String, Long> subState = new HashMap<>(keys.size());
            keys.forEach(key -> subState.put(key, 0L));
            attributesData.forEach(v -> subState.put(v.getKey(), v.getTs()));
            SubscriptionState sub = new SubscriptionState(sessionId, cmd.getCmdId(), entityId, SubscriptionType.ATTRIBUTES, false, subState, cmd.getScope());
            subscriptionManager.addLocalWsSubscription(ctx, sessionId, entityId, sub);
        }

        @Override
        public void onFailure(PluginContext ctx, Exception e) {
            log.error(FAILED_TO_FETCH_ATTRIBUTES, e);
            SubscriptionUpdate update;
            if (UnauthorizedException.class.isInstance(e)) {
                update = new SubscriptionUpdate(cmd.getCmdId(), SubscriptionErrorCode.UNAUTHORIZED, SubscriptionErrorCode.UNAUTHORIZED.getDefaultMsg());
            } else {
                update = new SubscriptionUpdate(cmd.getCmdId(), SubscriptionErrorCode.INTERNAL_ERROR, FAILED_TO_FETCH_ATTRIBUTES);
            }
            sendWsMsg(ctx, sessionRef, update);
        }
    };
    if (StringUtils.isEmpty(cmd.getScope())) {
        ctx.loadAttributes(entityId, Arrays.asList(DataConstants.allScopes()), keys, callback);
    } else {
        ctx.loadAttributes(entityId, cmd.getScope(), keys, callback);
    }
}
Also used : java.util(java.util) TextPluginWebSocketMsg(org.thingsboard.server.extensions.api.plugins.ws.msg.TextPluginWebSocketMsg) DefaultWebsocketMsgHandler(org.thingsboard.server.extensions.api.plugins.handlers.DefaultWebsocketMsgHandler) org.thingsboard.server.extensions.core.plugin.telemetry.cmd(org.thingsboard.server.extensions.core.plugin.telemetry.cmd) EntityIdFactory(org.thingsboard.server.common.data.id.EntityIdFactory) EntityId(org.thingsboard.server.common.data.id.EntityId) DataConstants(org.thingsboard.server.common.data.DataConstants) PluginWebsocketSessionRef(org.thingsboard.server.extensions.api.plugins.ws.PluginWebsocketSessionRef) SubscriptionState(org.thingsboard.server.extensions.core.plugin.telemetry.sub.SubscriptionState) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException) SubscriptionManager(org.thingsboard.server.extensions.core.plugin.telemetry.SubscriptionManager) IOException(java.io.IOException) PluginWebsocketMsg(org.thingsboard.server.extensions.api.plugins.ws.msg.PluginWebsocketMsg) Collectors(java.util.stream.Collectors) SubscriptionType(org.thingsboard.server.extensions.core.plugin.telemetry.sub.SubscriptionType) Slf4j(lombok.extern.slf4j.Slf4j) PluginContext(org.thingsboard.server.extensions.api.plugins.PluginContext) BinaryPluginWebSocketMsg(org.thingsboard.server.extensions.api.plugins.ws.msg.BinaryPluginWebSocketMsg) UnauthorizedException(org.thingsboard.server.extensions.api.exception.UnauthorizedException) org.thingsboard.server.common.data.kv(org.thingsboard.server.common.data.kv) PluginCallback(org.thingsboard.server.extensions.api.plugins.PluginCallback) SubscriptionUpdate(org.thingsboard.server.extensions.core.plugin.telemetry.sub.SubscriptionUpdate) SubscriptionErrorCode(org.thingsboard.server.extensions.core.plugin.telemetry.sub.SubscriptionErrorCode) StringUtils(org.springframework.util.StringUtils) WsSessionMetaData(org.thingsboard.server.extensions.api.plugins.ws.WsSessionMetaData) PluginContext(org.thingsboard.server.extensions.api.plugins.PluginContext) SubscriptionUpdate(org.thingsboard.server.extensions.core.plugin.telemetry.sub.SubscriptionUpdate) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException) IOException(java.io.IOException) UnauthorizedException(org.thingsboard.server.extensions.api.exception.UnauthorizedException) SubscriptionState(org.thingsboard.server.extensions.core.plugin.telemetry.sub.SubscriptionState) PluginCallback(org.thingsboard.server.extensions.api.plugins.PluginCallback)

Example 3 with SubscriptionState

use of org.thingsboard.server.extensions.core.plugin.telemetry.sub.SubscriptionState in project thingsboard by thingsboard.

the class TelemetryWebsocketMsgHandler method handleWsAttributesSubscription.

private void handleWsAttributesSubscription(PluginContext ctx, PluginWebsocketSessionRef sessionRef, AttributesSubscriptionCmd cmd, String sessionId, EntityId entityId) {
    PluginCallback<List<AttributeKvEntry>> callback = new PluginCallback<List<AttributeKvEntry>>() {

        @Override
        public void onSuccess(PluginContext ctx, List<AttributeKvEntry> data) {
            List<TsKvEntry> attributesData = data.stream().map(d -> new BasicTsKvEntry(d.getLastUpdateTs(), d)).collect(Collectors.toList());
            sendWsMsg(ctx, sessionRef, new SubscriptionUpdate(cmd.getCmdId(), attributesData));
            Map<String, Long> subState = new HashMap<>(attributesData.size());
            attributesData.forEach(v -> subState.put(v.getKey(), v.getTs()));
            SubscriptionState sub = new SubscriptionState(sessionId, cmd.getCmdId(), entityId, SubscriptionType.ATTRIBUTES, true, subState, cmd.getScope());
            subscriptionManager.addLocalWsSubscription(ctx, sessionId, entityId, sub);
        }

        @Override
        public void onFailure(PluginContext ctx, Exception e) {
            log.error(FAILED_TO_FETCH_ATTRIBUTES, e);
            SubscriptionUpdate update = new SubscriptionUpdate(cmd.getCmdId(), SubscriptionErrorCode.INTERNAL_ERROR, FAILED_TO_FETCH_ATTRIBUTES);
            sendWsMsg(ctx, sessionRef, update);
        }
    };
    if (StringUtils.isEmpty(cmd.getScope())) {
        ctx.loadAttributes(entityId, Arrays.asList(DataConstants.allScopes()), callback);
    } else {
        ctx.loadAttributes(entityId, cmd.getScope(), callback);
    }
}
Also used : java.util(java.util) TextPluginWebSocketMsg(org.thingsboard.server.extensions.api.plugins.ws.msg.TextPluginWebSocketMsg) DefaultWebsocketMsgHandler(org.thingsboard.server.extensions.api.plugins.handlers.DefaultWebsocketMsgHandler) org.thingsboard.server.extensions.core.plugin.telemetry.cmd(org.thingsboard.server.extensions.core.plugin.telemetry.cmd) EntityIdFactory(org.thingsboard.server.common.data.id.EntityIdFactory) EntityId(org.thingsboard.server.common.data.id.EntityId) DataConstants(org.thingsboard.server.common.data.DataConstants) PluginWebsocketSessionRef(org.thingsboard.server.extensions.api.plugins.ws.PluginWebsocketSessionRef) SubscriptionState(org.thingsboard.server.extensions.core.plugin.telemetry.sub.SubscriptionState) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException) SubscriptionManager(org.thingsboard.server.extensions.core.plugin.telemetry.SubscriptionManager) IOException(java.io.IOException) PluginWebsocketMsg(org.thingsboard.server.extensions.api.plugins.ws.msg.PluginWebsocketMsg) Collectors(java.util.stream.Collectors) SubscriptionType(org.thingsboard.server.extensions.core.plugin.telemetry.sub.SubscriptionType) Slf4j(lombok.extern.slf4j.Slf4j) PluginContext(org.thingsboard.server.extensions.api.plugins.PluginContext) BinaryPluginWebSocketMsg(org.thingsboard.server.extensions.api.plugins.ws.msg.BinaryPluginWebSocketMsg) UnauthorizedException(org.thingsboard.server.extensions.api.exception.UnauthorizedException) org.thingsboard.server.common.data.kv(org.thingsboard.server.common.data.kv) PluginCallback(org.thingsboard.server.extensions.api.plugins.PluginCallback) SubscriptionUpdate(org.thingsboard.server.extensions.core.plugin.telemetry.sub.SubscriptionUpdate) SubscriptionErrorCode(org.thingsboard.server.extensions.core.plugin.telemetry.sub.SubscriptionErrorCode) StringUtils(org.springframework.util.StringUtils) WsSessionMetaData(org.thingsboard.server.extensions.api.plugins.ws.WsSessionMetaData) PluginContext(org.thingsboard.server.extensions.api.plugins.PluginContext) SubscriptionUpdate(org.thingsboard.server.extensions.core.plugin.telemetry.sub.SubscriptionUpdate) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException) IOException(java.io.IOException) UnauthorizedException(org.thingsboard.server.extensions.api.exception.UnauthorizedException) SubscriptionState(org.thingsboard.server.extensions.core.plugin.telemetry.sub.SubscriptionState) PluginCallback(org.thingsboard.server.extensions.api.plugins.PluginCallback)

Aggregations

JsonProcessingException (com.fasterxml.jackson.core.JsonProcessingException)3 IOException (java.io.IOException)3 UnauthorizedException (org.thingsboard.server.extensions.api.exception.UnauthorizedException)3 PluginCallback (org.thingsboard.server.extensions.api.plugins.PluginCallback)3 PluginContext (org.thingsboard.server.extensions.api.plugins.PluginContext)3 SubscriptionState (org.thingsboard.server.extensions.core.plugin.telemetry.sub.SubscriptionState)3 SubscriptionUpdate (org.thingsboard.server.extensions.core.plugin.telemetry.sub.SubscriptionUpdate)3 java.util (java.util)2 Collectors (java.util.stream.Collectors)2 Slf4j (lombok.extern.slf4j.Slf4j)2 StringUtils (org.springframework.util.StringUtils)2 DataConstants (org.thingsboard.server.common.data.DataConstants)2 EntityId (org.thingsboard.server.common.data.id.EntityId)2 EntityIdFactory (org.thingsboard.server.common.data.id.EntityIdFactory)2 org.thingsboard.server.common.data.kv (org.thingsboard.server.common.data.kv)2 DefaultWebsocketMsgHandler (org.thingsboard.server.extensions.api.plugins.handlers.DefaultWebsocketMsgHandler)2 PluginWebsocketSessionRef (org.thingsboard.server.extensions.api.plugins.ws.PluginWebsocketSessionRef)2 WsSessionMetaData (org.thingsboard.server.extensions.api.plugins.ws.WsSessionMetaData)2 BinaryPluginWebSocketMsg (org.thingsboard.server.extensions.api.plugins.ws.msg.BinaryPluginWebSocketMsg)2 PluginWebsocketMsg (org.thingsboard.server.extensions.api.plugins.ws.msg.PluginWebsocketMsg)2