use of io.confluent.ksql.rest.entity.ConnectorDescription in project ksql by confluentinc.
the class ClientTest method shouldSendSessionVariablesWithDescribeConnector.
@Test
public void shouldSendSessionVariablesWithDescribeConnector() throws Exception {
// Given:
javaClient.define("a", "a");
final ConnectorDescription entity = new ConnectorDescription("describe connector;", "connectorClass", new ConnectorStateInfo("name", new ConnectorState("state", "worker", "msg"), Collections.emptyList(), SOURCE_TYPE), Collections.emptyList(), Collections.singletonList("topic"), Collections.emptyList());
testEndpoints.setKsqlEndpointResponse(Collections.singletonList(entity));
// When:
javaClient.describeConnector("name").get();
// Then:
assertThat(testEndpoints.getLastSessionVariables(), is(new JsonObject().put("a", "a")));
}
use of io.confluent.ksql.rest.entity.ConnectorDescription in project ksql by confluentinc.
the class ClientTest method shouldFailToDescribeConnectorViaExecuteStatement.
@Test
public void shouldFailToDescribeConnectorViaExecuteStatement() {
// Given
final ConnectorDescription entity = new ConnectorDescription("describe connector;", "connectorClass", new ConnectorStateInfo("name", new ConnectorState("state", "worker", "msg"), Collections.emptyList(), SOURCE_TYPE), Collections.emptyList(), Collections.singletonList("topic"), Collections.emptyList());
testEndpoints.setKsqlEndpointResponse(Collections.singletonList(entity));
// When
final Exception e = assertThrows(// thrown from .get() when the future completes exceptionally
ExecutionException.class, () -> javaClient.executeStatement("describe connector;").get());
// Then
assertThat(e.getCause(), instanceOf(KsqlClientException.class));
assertThat(e.getCause().getMessage(), containsString(EXECUTE_STATEMENT_USAGE_DOC));
assertThat(e.getCause().getMessage(), containsString("Use the describeConnector() method instead"));
}
use of io.confluent.ksql.rest.entity.ConnectorDescription in project ksql by confluentinc.
the class DescribeConnectorExecutor method execute.
@SuppressWarnings("OptionalGetWithoutIsPresent")
public StatementExecutorResponse execute(final ConfiguredStatement<DescribeConnector> configuredStatement, final SessionProperties sessionProperties, final KsqlExecutionContext ksqlExecutionContext, final ServiceContext serviceContext) {
final String connectorName = configuredStatement.getStatement().getConnectorName();
final ConnectResponse<ConnectorStateInfo> statusResponse = serviceContext.getConnectClient().status(connectorName);
if (statusResponse.error().isPresent()) {
return StatementExecutorResponse.handled(connectErrorHandler.handle(configuredStatement, statusResponse));
}
final ConnectResponse<ConnectorInfo> infoResponse = serviceContext.getConnectClient().describe(connectorName);
if (infoResponse.error().isPresent()) {
return StatementExecutorResponse.handled(connectErrorHandler.handle(configuredStatement, infoResponse));
}
final ConnectorStateInfo status = statusResponse.datum().get();
final ConnectorInfo info = infoResponse.datum().get();
final Optional<Connector> connector = connectorFactory.apply(info);
final List<KsqlWarning> warnings;
final List<String> topics;
if (connector.isPresent()) {
// Small optimization. If a connector's info is not found in the response, don't query for
// active topics with the given connectorName
final ConnectResponse<Map<String, Map<String, List<String>>>> topicsResponse = serviceContext.getConnectClient().topics(connectorName);
// server logs.
if (topicsResponse.error().isPresent() && topicsResponse.httpCode() == HttpStatus.SC_NOT_FOUND) {
topics = ImmutableList.of();
warnings = ImmutableList.of();
LOG.warn("Could not list related topics due to error: " + topicsResponse.error().get());
} else if (topicsResponse.error().isPresent()) {
topics = ImmutableList.of();
warnings = ImmutableList.of(new KsqlWarning("Could not list related topics due to error: " + topicsResponse.error().get()));
} else {
topics = topicsResponse.datum().get().get(connectorName).getOrDefault(TOPICS_KEY, ImmutableList.of());
warnings = ImmutableList.of();
}
} else {
topics = ImmutableList.of();
warnings = ImmutableList.of();
}
final List<SourceDescription> sources;
if (connector.isPresent()) {
sources = ksqlExecutionContext.getMetaStore().getAllDataSources().values().stream().filter(source -> topics.contains(source.getKafkaTopicName())).map(source -> SourceDescriptionFactory.create(source, false, ImmutableList.of(), ImmutableList.of(), Optional.empty(), ImmutableList.of(), ImmutableList.of(), ksqlExecutionContext.metricCollectors())).collect(Collectors.toList());
} else {
sources = ImmutableList.of();
}
final ConnectorDescription description = new ConnectorDescription(configuredStatement.getStatementText(), info.config().get(ConnectorConfig.CONNECTOR_CLASS_CONFIG), status, sources, topics, warnings);
return StatementExecutorResponse.handled(Optional.of(description));
}
use of io.confluent.ksql.rest.entity.ConnectorDescription in project ksql by confluentinc.
the class ConsoleTest method testPrintConnectorDescription.
@Test
public void testPrintConnectorDescription() {
// Given:
final KsqlEntityList entityList = new KsqlEntityList(ImmutableList.of(new ConnectorDescription("STATEMENT", "io.confluent.Connector", new ConnectorStateInfo("name", new ConnectorState("state", "worker", "msg"), ImmutableList.of(new TaskState(0, "task", "worker", "task_msg")), ConnectorType.SOURCE), ImmutableList.of(sourceDescription), ImmutableList.of("a-jdbc-topic"), ImmutableList.of())));
// When:
console.printKsqlEntityList(entityList);
// Then:
final String output = terminal.getOutputString();
Approvals.verify(output, approvalOptions);
}
use of io.confluent.ksql.rest.entity.ConnectorDescription in project ksql by confluentinc.
the class DescribeConnectorExecutorTest method shouldWorkIfUnknownConnector.
@Test
public void shouldWorkIfUnknownConnector() {
// Given:
connectorFactory = info -> Optional.empty();
executor = new DescribeConnectorExecutor(connectorFactory, new DefaultConnectServerErrors());
// When:
final Optional<KsqlEntity> entity = executor.execute(describeStatement, mock(SessionProperties.class), engine, serviceContext).getEntity();
// Then:
verify(connectClient).status("connector");
verify(connectClient).describe("connector");
assertThat("Expected a response", entity.isPresent());
assertThat(entity.get(), instanceOf(ConnectorDescription.class));
final ConnectorDescription description = (ConnectorDescription) entity.get();
assertThat(description.getConnectorClass(), is(CONNECTOR_CLASS));
assertThat(description.getStatus(), is(STATUS));
assertThat(description.getSources(), empty());
}
Aggregations