Merge branch 'master' of github.com:thingsboard/thingsboard

This commit is contained in:
nordmif 2018-12-27 18:57:06 +02:00
commit 08a9ae34e9
6 changed files with 41 additions and 14 deletions

View File

@ -100,7 +100,7 @@ public class LocalTransportApiService implements TransportApiService {
//TODO: Make async and enable caching //TODO: Make async and enable caching
DeviceCredentials credentials = deviceCredentialsService.findDeviceCredentialsByCredentialsId(credentialsId); DeviceCredentials credentials = deviceCredentialsService.findDeviceCredentialsByCredentialsId(credentialsId);
if (credentials != null && credentials.getCredentialsType() == credentialsType) { if (credentials != null && credentials.getCredentialsType() == credentialsType) {
return getDeviceInfo(credentials.getDeviceId()); return getDeviceInfo(credentials.getDeviceId(), credentials);
} else { } else {
return getEmptyTransportApiResponseFuture(); return getEmptyTransportApiResponseFuture();
} }
@ -135,7 +135,7 @@ public class LocalTransportApiService implements TransportApiService {
} }
private ListenableFuture<TransportApiResponseMsg> getDeviceInfo(DeviceId deviceId) { private ListenableFuture<TransportApiResponseMsg> getDeviceInfo(DeviceId deviceId, DeviceCredentials credentials) {
return Futures.transform(deviceService.findDeviceByIdAsync(TenantId.SYS_TENANT_ID, deviceId), device -> { return Futures.transform(deviceService.findDeviceByIdAsync(TenantId.SYS_TENANT_ID, deviceId), device -> {
if (device == null) { if (device == null) {
log.trace("[{}] Failed to lookup device by id", deviceId); log.trace("[{}] Failed to lookup device by id", deviceId);
@ -143,7 +143,7 @@ public class LocalTransportApiService implements TransportApiService {
} }
try { try {
return TransportApiResponseMsg.newBuilder() return TransportApiResponseMsg.newBuilder()
.setValidateTokenResponseMsg(ValidateDeviceCredentialsResponseMsg.newBuilder().setDeviceInfo(getDeviceInfoProto(device)).build()).build(); .setValidateTokenResponseMsg(ValidateDeviceCredentialsResponseMsg.newBuilder().setDeviceInfo(getDeviceInfoProto(device)).setCredentialsBody(credentials.getCredentialsValue()).build()).build();
} catch (JsonProcessingException e) { } catch (JsonProcessingException e) {
log.warn("[{}] Failed to lookup device by id", deviceId, e); log.warn("[{}] Failed to lookup device by id", deviceId, e);
return getEmptyTransportApiResponse(); return getEmptyTransportApiResponse();

View File

@ -54,18 +54,18 @@ import java.util.concurrent.TimeUnit;
@Slf4j @Slf4j
@Component("MqttSslHandlerProvider") @Component("MqttSslHandlerProvider")
@ConditionalOnExpression("'${transport.type:null}'=='null' || ('${transport.type}'=='local' && '${transport.http.enabled}'=='true')") @ConditionalOnExpression("'${transport.type:null}'=='null' || ('${transport.type}'=='local' && '${transport.http.enabled}'=='true')")
@ConditionalOnProperty(prefix = "mqtt.ssl", value = "enabled", havingValue = "true", matchIfMissing = false) @ConditionalOnProperty(prefix = "transport.mqtt.ssl", value = "enabled", havingValue = "true", matchIfMissing = false)
public class MqttSslHandlerProvider { public class MqttSslHandlerProvider {
@Value("${mqtt.ssl.protocol}") @Value("${transport.mqtt.ssl.protocol}")
private String sslProtocol; private String sslProtocol;
@Value("${mqtt.ssl.key_store}") @Value("${transport.mqtt.ssl.key_store}")
private String keyStoreFile; private String keyStoreFile;
@Value("${mqtt.ssl.key_store_password}") @Value("${transport.mqtt.ssl.key_store_password}")
private String keyStorePassword; private String keyStorePassword;
@Value("${mqtt.ssl.key_password}") @Value("${transport.mqtt.ssl.key_password}")
private String keyPassword; private String keyPassword;
@Value("${mqtt.ssl.key_store_type}") @Value("${transport.mqtt.ssl.key_store_type}")
private String keyStoreType; private String keyStoreType;
@Autowired @Autowired

View File

@ -271,6 +271,7 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement
case MqttTopics.DEVICE_RPC_RESPONSE_SUB_TOPIC: case MqttTopics.DEVICE_RPC_RESPONSE_SUB_TOPIC:
case MqttTopics.GATEWAY_ATTRIBUTES_TOPIC: case MqttTopics.GATEWAY_ATTRIBUTES_TOPIC:
case MqttTopics.GATEWAY_RPC_TOPIC: case MqttTopics.GATEWAY_RPC_TOPIC:
case MqttTopics.GATEWAY_ATTRIBUTES_RESPONSE_TOPIC:
case MqttTopics.DEVICE_ATTRIBUTES_RESPONSES_TOPIC: case MqttTopics.DEVICE_ATTRIBUTES_RESPONSES_TOPIC:
registerSubQoS(topic, grantedQoSList, reqQoS); registerSubQoS(topic, grantedQoSList, reqQoS);
break; break;

View File

@ -36,9 +36,8 @@ public class MqttTransportServerInitializer extends ChannelInitializer<SocketCha
@Override @Override
public void initChannel(SocketChannel ch) { public void initChannel(SocketChannel ch) {
ChannelPipeline pipeline = ch.pipeline(); ChannelPipeline pipeline = ch.pipeline();
SslHandler sslHandler = null;
if (context.getSslHandlerProvider() != null) { if (context.getSslHandlerProvider() != null) {
sslHandler = context.getSslHandlerProvider().getSslHandler(); SslHandler sslHandler = context.getSslHandlerProvider().getSslHandler();
pipeline.addLast(sslHandler); pipeline.addLast(sslHandler);
context.setSslHandler(sslHandler); context.setSslHandler(sslHandler);
} }

View File

@ -15,6 +15,7 @@
*/ */
package org.thingsboard.server.dao.util; package org.thingsboard.server.dao.util;
import com.datastax.driver.core.*;
import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListenableFuture;
@ -22,6 +23,7 @@ import com.google.common.util.concurrent.SettableFuture;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.msg.tools.TbRateLimits; import org.thingsboard.server.common.msg.tools.TbRateLimits;
import org.thingsboard.server.dao.nosql.CassandraStatementTask;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.UUID; import java.util.UUID;
@ -183,12 +185,39 @@ public abstract class AbstractBufferedRateExecutor<T extends AsyncTask, F extend
private void logTask(String action, AsyncTaskContext<T, V> taskCtx) { private void logTask(String action, AsyncTaskContext<T, V> taskCtx) {
if (log.isTraceEnabled()) { if (log.isTraceEnabled()) {
log.trace("[{}] {} task: {}", taskCtx.getId(), action, taskCtx); if (taskCtx.getTask() instanceof CassandraStatementTask) {
CassandraStatementTask cassStmtTask = (CassandraStatementTask) taskCtx.getTask();
if (cassStmtTask.getStatement() instanceof BoundStatement) {
BoundStatement stmt = (BoundStatement) cassStmtTask.getStatement();
String query = toStringWithValues(stmt, ProtocolVersion.V5);
log.trace("[{}] {} task: {}, BoundStatement query: {}", taskCtx.getId(), action, taskCtx, query);
}
} else {
log.trace("[{}] {} task: {}", taskCtx.getId(), action, taskCtx);
}
} else { } else {
log.debug("[{}] {} task", taskCtx.getId(), action); log.debug("[{}] {} task", taskCtx.getId(), action);
} }
} }
private static String toStringWithValues(BoundStatement boundStatement, ProtocolVersion protocolVersion) {
CodecRegistry codecRegistry = boundStatement.preparedStatement().getCodecRegistry();
PreparedStatement preparedStatement = boundStatement.preparedStatement();
String query = preparedStatement.getQueryString();
ColumnDefinitions defs = preparedStatement.getVariables();
int index = 0;
for (ColumnDefinitions.Definition def : defs) {
DataType type = def.getType();
TypeCodec<Object> codec = codecRegistry.codecFor(type);
if (boundStatement.getBytesUnsafe(index) != null) {
Object value = codec.deserialize(boundStatement.getBytesUnsafe(index), protocolVersion);
query = query.replaceFirst("\\?", codec.format(value));
}
index++;
}
return query;
}
protected int getQueueSize() { protected int getQueueSize() {
return queue.size(); return queue.size();
} }

View File

@ -15,8 +15,6 @@
*/ */
package org.thingsboard.mqtt; package org.thingsboard.mqtt;
import io.netty.channel.ChannelId;
/** /**
* Created by Valerii Sosliuk on 12/30/2017. * Created by Valerii Sosliuk on 12/30/2017.
*/ */