use of io.opentracing.SpanContext in project hono by eclipse.
the class MongoDbBasedTenantDao method delete.
/**
* {@inheritDoc}
*/
@Override
public Future<Void> delete(final String tenantId, final Optional<String> resourceVersion, final SpanContext tracingContext) {
Objects.requireNonNull(tenantId);
Objects.requireNonNull(resourceVersion);
final Span span = tracer.buildSpan("delete Tenant").addReference(References.CHILD_OF, tracingContext).withTag(TracingHelper.TAG_TENANT_ID, tenantId).start();
resourceVersion.ifPresent(v -> TracingHelper.TAG_RESOURCE_VERSION.set(span, v));
final JsonObject deleteTenantQuery = MongoDbDocumentBuilder.builder().withVersion(resourceVersion).withTenantId(tenantId).document();
return mongoClient.findOneAndDelete(collectionName, deleteTenantQuery).compose(deleteResult -> {
if (deleteResult == null) {
return MongoDbBasedDao.checkForVersionMismatchAndFail(tenantId, resourceVersion, getById(tenantId, false, span));
} else {
LOG.debug("successfully deleted tenant [tenant-id: {}]", tenantId);
span.log("successfully deleted tenant");
return Future.succeededFuture((Void) null);
}
}).onFailure(t -> TracingHelper.logError(span, "error deleting tenant", t)).recover(this::mapError).onComplete(r -> span.finish());
}
use of io.opentracing.SpanContext in project hono by eclipse.
the class MongoDbBasedDeviceDao method update.
/**
* {@inheritDoc}
*/
@Override
public Future<String> update(final DeviceDto deviceConfig, final Optional<String> resourceVersion, final SpanContext tracingContext) {
Objects.requireNonNull(deviceConfig);
Objects.requireNonNull(resourceVersion);
final Span span = tracer.buildSpan("update Device").addReference(References.CHILD_OF, tracingContext).withTag(TracingHelper.TAG_TENANT_ID, deviceConfig.getTenantId()).withTag(TracingHelper.TAG_DEVICE_ID, deviceConfig.getDeviceId()).start();
resourceVersion.ifPresent(v -> TracingHelper.TAG_RESOURCE_VERSION.set(span, v));
final JsonObject updateDeviceQuery = MongoDbDocumentBuilder.builder().withVersion(resourceVersion).withTenantId(deviceConfig.getTenantId()).withDeviceId(deviceConfig.getDeviceId()).document();
final var document = JsonObject.mapFrom(deviceConfig);
if (LOG.isTraceEnabled()) {
LOG.trace("replacing existing device document with:{}{}", System.lineSeparator(), document.encodePrettily());
}
return mongoClient.findOneAndReplaceWithOptions(collectionName, updateDeviceQuery, document, new FindOptions(), new UpdateOptions().setReturningNewDocument(true)).compose(result -> {
if (result == null) {
return MongoDbBasedDao.checkForVersionMismatchAndFail(deviceConfig.getDeviceId(), resourceVersion, getById(deviceConfig.getTenantId(), deviceConfig.getDeviceId(), span));
} else {
span.log("successfully updated device");
return Future.succeededFuture(result.getString(DeviceDto.FIELD_VERSION));
}
}).onFailure(t -> TracingHelper.logError(span, "error updating device", t)).recover(this::mapError).onComplete(r -> span.finish());
}
use of io.opentracing.SpanContext in project hono by eclipse.
the class MongoDbBasedDeviceDao method delete.
/**
* {@inheritDoc}
*/
@Override
public Future<Void> delete(final String tenantId, final SpanContext tracingContext) {
Objects.requireNonNull(tenantId);
final Span span = tracer.buildSpan("delete all of Tenant's Devices").addReference(References.CHILD_OF, tracingContext).withTag(TracingHelper.TAG_TENANT_ID, tenantId).start();
final JsonObject removeDevicesQuery = MongoDbDocumentBuilder.builder().withTenantId(tenantId).document();
return mongoClient.removeDocuments(collectionName, removeDevicesQuery).compose(result -> {
span.log("successfully deleted devices");
LOG.debug("successfully deleted devices of tenant [tenant-id: {}]", tenantId);
return Future.succeededFuture((Void) null);
}).recover(error -> {
LOG.debug("error deleting devices", error);
TracingHelper.logError(span, "error deleting devices", error);
return mapError(error);
}).onComplete(r -> span.finish());
}
use of io.opentracing.SpanContext in project hono by eclipse.
the class MongoDbBasedDeviceDao method resolveGroupMembers.
/**
* {@inheritDoc}
*/
@Override
public Future<Set<String>> resolveGroupMembers(final String tenantId, final Set<String> viaGroups, final SpanContext tracingContext) {
Objects.requireNonNull(tenantId);
Objects.requireNonNull(viaGroups);
if (viaGroups.isEmpty()) {
return Future.succeededFuture(Set.of());
}
final Span span = tracer.buildSpan("resolve group members").addReference(References.CHILD_OF, tracingContext).withTag(TracingHelper.TAG_TENANT_ID, tenantId).start();
span.log("resolving " + viaGroups.size() + " device groups");
final var deviceMemberOfSpec = new JsonObject().put("$exists", true).put("$in", new JsonArray(List.copyOf(viaGroups)));
final JsonObject resolveGroupMembersQuery = MongoDbDocumentBuilder.builder().withTenantId(tenantId).document().put(PROPERTY_DEVICE_MEMBER_OF, deviceMemberOfSpec);
// retrieve only the deviceId instead of the whole document.
final FindOptions findOptions = new FindOptions().setFields(new JsonObject().put(RegistrationConstants.FIELD_PAYLOAD_DEVICE_ID, true).put("_id", false));
return mongoClient.findWithOptions(collectionName, resolveGroupMembersQuery, findOptions).map(documents -> {
if (documents == null) {
final Set<String> result = Set.of();
return result;
} else {
span.log("successfully resolved " + documents.size() + " group members");
return documents.stream().map(json -> json.getString(RegistrationConstants.FIELD_PAYLOAD_DEVICE_ID)).collect(Collectors.toSet());
}
}).onComplete(r -> span.finish());
}
use of io.opentracing.SpanContext in project hono by eclipse.
the class ClasspathSchemaCreator method runScript.
private Future<Void> runScript(final JdbcProperties jdbcProperties, final String script, final SpanContext ctx) {
final JDBCClient jdbcClient = JdbcProperties.dataSource(vertx, jdbcProperties);
final Promise<Void> clientCloseTracker = Promise.promise();
SQL.runTransactionally(jdbcClient, tracer, ctx, (connection, context) -> {
final var expanded = Statement.statement(script).expand();
log.debug("Creating database schema in [{}] with script: {}", jdbcProperties.getUrl(), expanded);
return expanded.query(jdbcClient).recover(SQL::translateException);
}).onComplete(ar -> jdbcClient.close(clientCloseTracker));
return clientCloseTracker.future();
}
Aggregations