Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bmoric/convert destination controller micronaut #20269

Merged
Show file tree
Hide file tree
Changes from 22 commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
b42d814
tmp
benmoriceau Nov 23, 2022
5da2868
Fix build
benmoriceau Nov 28, 2022
83c3edc
tmp
benmoriceau Nov 28, 2022
27ccea0
Merge branch 'bmoric/convert-health-micronaut' of github.com:airbyteh…
benmoriceau Nov 28, 2022
e3323ee
Tmp
benmoriceau Nov 29, 2022
648494e
Merge branch 'bmoric/convert-health-micronaut' of github.com:airbyteh…
benmoriceau Nov 30, 2022
9f4fee5
tmp
benmoriceau Dec 1, 2022
2391852
tmp
benmoriceau Dec 1, 2022
453f2fd
Merge branch 'bmoric/convert-health-micronaut' of github.com:airbyteh…
benmoriceau Dec 5, 2022
9032d55
Merge branch 'bmoric/convert-health-micronaut' of github.com:airbyteh…
benmoriceau Dec 5, 2022
212dd86
Tmp
benmoriceau Dec 5, 2022
8fd0939
tmp
benmoriceau Dec 6, 2022
d378aab
tmp
benmoriceau Dec 6, 2022
0ff5a15
Clean up
benmoriceau Dec 6, 2022
8dcef2e
Merge branch 'bmoric/convert-health-micronaut' of github.com:airbyteh…
benmoriceau Dec 7, 2022
4ad415e
tmp
benmoriceau Dec 7, 2022
58d51db
Merge branch 'bmoric/convert-health-micronaut' of github.com:airbyteh…
benmoriceau Dec 7, 2022
c982867
Convert Connection Api Controller
benmoriceau Dec 7, 2022
8de361a
Merge branch 'bmoric/convert-health-micronaut' of github.com:airbyteh…
benmoriceau Dec 7, 2022
3580902
Tmp
benmoriceau Dec 8, 2022
fccb967
PR Comments
benmoriceau Dec 8, 2022
e0730b3
convert openapiapicontroller to micronaut (#20258)
colesnodgrass Dec 8, 2022
8855858
Fix bean
benmoriceau Dec 8, 2022
9f0da43
Add JsonSchemaValidator as a Bean
benmoriceau Dec 8, 2022
df5a30e
Merge branch 'bmoric/convert-health-micronaut' of github.com:airbyteh…
benmoriceau Dec 8, 2022
0024dff
Merge branch 'bmoric/convert-health-micronaut' of github.com:airbyteh…
benmoriceau Dec 8, 2022
4d8d7c2
Fix build
benmoriceau Dec 8, 2022
abbf357
Format
benmoriceau Dec 8, 2022
395c900
Merge brach 'bmoric/convert-connection-micronaut' of github.com:airby…
benmoriceau Dec 8, 2022
50a7bb6
Format
benmoriceau Dec 9, 2022
0cbc790
Test fix
benmoriceau Dec 9, 2022
67b69e5
Pr comments
benmoriceau Dec 9, 2022
c053aa7
Merge branch 'bmoric/convert-health-micronaut' of github.com:airbyteh…
benmoriceau Dec 9, 2022
7490f23
Remove media type
benmoriceau Dec 9, 2022
556e7d3
Format
benmoriceau Dec 9, 2022
b320000
Merge branch 'bmoric/convert-connection-micronaut' of github.com:airb…
benmoriceau Dec 9, 2022
f7698c5
Remove media type
benmoriceau Dec 9, 2022
f143e2a
Format
benmoriceau Dec 9, 2022
ef2b4a3
Merge branch 'bmoric/convert-health-micronaut' of github.com:airbyteh…
benmoriceau Dec 9, 2022
9fa00ff
format
benmoriceau Dec 9, 2022
bd5caee
Add missing airbyte api client
benmoriceau Dec 9, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ public class AirbyteApiClient {
private final StateApi stateApi;

public AirbyteApiClient(final ApiClient apiClient, final ApiClient micronautApiClient) {
connectionApi = new ConnectionApi(apiClient);
connectionApi = new ConnectionApi(micronautApiClient);
destinationDefinitionApi = new DestinationDefinitionApi(apiClient);
destinationApi = new DestinationApi(apiClient);
destinationSpecificationApi = new DestinationDefinitionSpecificationApi(apiClient);
Expand Down
6 changes: 6 additions & 0 deletions airbyte-json-validation/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,12 @@ dependencies {
implementation 'com.networknt:json-schema-validator:1.0.72'
// needed so that we can follow $ref when parsing json. jackson does not support this natively.
implementation 'me.andrz.jackson:jackson-json-reference-core:0.3.2'

annotationProcessor platform(libs.micronaut.bom)
annotationProcessor libs.bundles.micronaut.annotation.processor

implementation platform(libs.micronaut.bom)
implementation libs.bundles.micronaut
}

Task publishArtifactsTask = getPublishArtifactsTask("$rootProject.ext.version", project)
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,11 @@
import me.andrz.jackson.JsonContext;
import me.andrz.jackson.JsonReferenceException;
import me.andrz.jackson.JsonReferenceProcessor;
import jakarta.inject.Singleton;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Singleton
public class JsonSchemaValidator {

private static final Logger LOGGER = LoggerFactory.getLogger(JsonSchemaValidator.class);
Expand Down
34 changes: 34 additions & 0 deletions airbyte-proxy/nginx-auth.conf.template
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,23 @@ http {
auth_basic off;
}
}

location ~ ^/api/v1/(connections|destinations)/.* {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

auth_basic "Welcome to Airbyte";
auth_basic_user_file /etc/nginx/.htpasswd;

proxy_pass "${PROXY_PASS_MICRONAUT_API}";

error_page 401 /etc/nginx/401.html;
location ~ (401.html)$ {
alias /etc/nginx/$1;
auth_basic off;
}
}
}

server {
Expand Down Expand Up @@ -75,6 +92,23 @@ http {
auth_basic off;
}
}

location ~ ^/api/v1/(connections|destinations)/.* {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

auth_basic "Welcome to Airbyte";
auth_basic_user_file /etc/nginx/.htpasswd;

proxy_pass "${PROXY_PASS_MICRONAUT_API}";

error_page 401 /etc/nginx/401.html;
location ~ (401.html)$ {
alias /etc/nginx/$1;
auth_basic off;
}
}
}

server {
Expand Down
16 changes: 16 additions & 0 deletions airbyte-proxy/nginx-no-auth.conf.template
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,14 @@ http {

proxy_pass "${PROXY_PASS_MICRONAUT_API}";
}

location ~ ^/api/v1/(connections|destinations)/.* {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_pass "${PROXY_PASS_MICRONAUT_API}";
}
}

server {
Expand All @@ -39,6 +47,14 @@ http {

proxy_pass "${PROXY_PASS_MICRONAUT_API}";
}

location ~ ^/api/v1/(connections|destinations)/.* {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_pass "${PROXY_PASS_MICRONAUT_API}";
}
}

server {
Expand Down
1 change: 1 addition & 0 deletions airbyte-server/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ dependencies {
implementation 'org.glassfish.jersey.media:jersey-media-json-jackson'
implementation 'org.glassfish.jersey.ext:jersey-bean-validation'
implementation 'org.quartz-scheduler:quartz:2.3.2'
implementation 'io.sentry:sentry:6.3.1'
implementation 'io.swagger:swagger-annotations:1.6.2'

annotationProcessor platform(libs.micronaut.bom)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,12 @@
public class Application {

public static void main(final String[] args) {
Micronaut.run(Application.class, args);
Micronaut
.build(args)
// Lazy initialization can make the first requests to be slow
.eagerInitSingletons(true)
.mainClass(Application.class)
.start();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import io.airbyte.analytics.TrackingClient;
import io.airbyte.analytics.TrackingClientSingleton;
import io.airbyte.commons.features.EnvVariableFeatureFlags;
import io.airbyte.commons.features.FeatureFlags;
import io.airbyte.commons.resources.MoreResources;
import io.airbyte.commons.temporal.ConnectionManagerUtils;
import io.airbyte.commons.temporal.StreamResetRecordsHelper;
Expand Down Expand Up @@ -204,7 +205,7 @@ public static ServerRunnable getServer(final ServerFactory apiFactory,
final TrackingClient trackingClient = TrackingClientSingleton.get();
final JobTracker jobTracker = new JobTracker(configRepository, jobPersistence, trackingClient);

final EnvVariableFeatureFlags envVariableFeatureFlags = new EnvVariableFeatureFlags();
final FeatureFlags envVariableFeatureFlags = new EnvVariableFeatureFlags();

final WebUrlHelper webUrlHelper = new WebUrlHelper(configs.getWebappUrl());
final JobErrorReportingClient jobErrorReportingClient = JobErrorReportingClientFactory.getClient(configs.getJobErrorReportingStrategy(), configs);
Expand Down
16 changes: 0 additions & 16 deletions airbyte-server/src/main/java/io/airbyte/server/ServerFactory.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,7 @@
import io.airbyte.server.apis.StateApiController;
import io.airbyte.server.apis.WebBackendApiController;
import io.airbyte.server.apis.WorkspaceApiController;
import io.airbyte.server.apis.binders.ConnectionApiBinder;
import io.airbyte.server.apis.binders.DbMigrationBinder;
import io.airbyte.server.apis.binders.DestinationApiBinder;
import io.airbyte.server.apis.binders.DestinationDefinitionApiBinder;
import io.airbyte.server.apis.binders.DestinationDefinitionSpecificationApiBinder;
import io.airbyte.server.apis.binders.DestinationOauthApiBinder;
Expand All @@ -51,9 +49,7 @@
import io.airbyte.server.apis.binders.StateApiBinder;
import io.airbyte.server.apis.binders.WebBackendApiBinder;
import io.airbyte.server.apis.binders.WorkspaceApiBinder;
import io.airbyte.server.apis.factories.ConnectionApiFactory;
import io.airbyte.server.apis.factories.DbMigrationApiFactory;
import io.airbyte.server.apis.factories.DestinationApiFactory;
import io.airbyte.server.apis.factories.DestinationDefinitionApiFactory;
import io.airbyte.server.apis.factories.DestinationDefinitionSpecificationApiFactory;
import io.airbyte.server.apis.factories.DestinationOauthApiFactory;
Expand Down Expand Up @@ -173,16 +169,8 @@ public ServerRunnable create(final SynchronousSchedulerClient synchronousSchedul
final WebBackendGeographiesHandler webBackendGeographiesHandler) {
final Map<String, String> mdc = MDC.getCopyOfContextMap();

ConnectionApiFactory.setValues(
connectionsHandler,
operationsHandler,
schedulerHandler,
mdc);

DbMigrationApiFactory.setValues(dbMigrationHandler, mdc);

DestinationApiFactory.setValues(destinationApiHandler, schedulerHandler, mdc);

DestinationDefinitionApiFactory.setValues(destinationDefinitionsHandler);

DestinationDefinitionSpecificationApiFactory.setValues(schedulerHandler);
Expand Down Expand Up @@ -217,7 +205,6 @@ public ServerRunnable create(final SynchronousSchedulerClient synchronousSchedul

// server configurations
final Set<Class<?>> componentClasses = Set.of(
ConnectionApiController.class,
DbMigrationApiController.class,
DestinationApiController.class,
DestinationDefinitionApiController.class,
Expand All @@ -238,10 +225,7 @@ public ServerRunnable create(final SynchronousSchedulerClient synchronousSchedul
WorkspaceApiController.class);

final Set<Object> components = Set.of(
new CorsFilter(),
new ConnectionApiBinder(),
new DbMigrationBinder(),
new DestinationApiBinder(),
new DestinationDefinitionApiBinder(),
new DestinationDefinitionSpecificationApiBinder(),
new DestinationOauthApiBinder(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,13 @@
import io.airbyte.server.handlers.ConnectionsHandler;
import io.airbyte.server.handlers.OperationsHandler;
import io.airbyte.server.handlers.SchedulerHandler;
import io.micronaut.http.MediaType;
import io.micronaut.http.annotation.Body;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Post;
import javax.ws.rs.Path;

@Path("/v1/connections")
@Controller("/api/v1/connections")
public class ConnectionApiController implements ConnectionApi {

private final ConnectionsHandler connectionsHandler;
Expand All @@ -34,37 +38,51 @@ public ConnectionApiController(final ConnectionsHandler connectionsHandler,
}

@Override
public ConnectionRead createConnection(final ConnectionCreate connectionCreate) {
@Post(uri = "/create",
processes = MediaType.APPLICATION_JSON)
public ConnectionRead createConnection(@Body final ConnectionCreate connectionCreate) {
return ApiHelper.execute(() -> connectionsHandler.createConnection(connectionCreate));
}

@Override
public ConnectionRead updateConnection(final ConnectionUpdate connectionUpdate) {
@Post(uri = "/update",
processes = MediaType.APPLICATION_JSON)
public ConnectionRead updateConnection(@Body final ConnectionUpdate connectionUpdate) {
return ApiHelper.execute(() -> connectionsHandler.updateConnection(connectionUpdate));
}

@Override
public ConnectionReadList listConnectionsForWorkspace(final WorkspaceIdRequestBody workspaceIdRequestBody) {
@Post(uri = "/list",
processes = MediaType.APPLICATION_JSON)
public ConnectionReadList listConnectionsForWorkspace(@Body final WorkspaceIdRequestBody workspaceIdRequestBody) {
return ApiHelper.execute(() -> connectionsHandler.listConnectionsForWorkspace(workspaceIdRequestBody));
}

@Override
public ConnectionReadList listAllConnectionsForWorkspace(final WorkspaceIdRequestBody workspaceIdRequestBody) {
@Post(uri = "/list_all",
processes = MediaType.APPLICATION_JSON)
public ConnectionReadList listAllConnectionsForWorkspace(@Body final WorkspaceIdRequestBody workspaceIdRequestBody) {
return ApiHelper.execute(() -> connectionsHandler.listAllConnectionsForWorkspace(workspaceIdRequestBody));
}

@Override
public ConnectionReadList searchConnections(final ConnectionSearch connectionSearch) {
@Post(uri = "/search",
processes = MediaType.APPLICATION_JSON)
public ConnectionReadList searchConnections(@Body final ConnectionSearch connectionSearch) {
return ApiHelper.execute(() -> connectionsHandler.searchConnections(connectionSearch));
}

@Override
public ConnectionRead getConnection(final ConnectionIdRequestBody connectionIdRequestBody) {
@Post(uri = "/get",
processes = MediaType.APPLICATION_JSON)
public ConnectionRead getConnection(@Body final ConnectionIdRequestBody connectionIdRequestBody) {
return ApiHelper.execute(() -> connectionsHandler.getConnection(connectionIdRequestBody.getConnectionId()));
}

@Override
public void deleteConnection(final ConnectionIdRequestBody connectionIdRequestBody) {
@Post(uri = "/delete",
processes = MediaType.APPLICATION_JSON)
public void deleteConnection(@Body final ConnectionIdRequestBody connectionIdRequestBody) {
ApiHelper.execute(() -> {
operationsHandler.deleteOperationsForConnection(connectionIdRequestBody);
connectionsHandler.deleteConnection(connectionIdRequestBody.getConnectionId());
Expand All @@ -73,12 +91,16 @@ public void deleteConnection(final ConnectionIdRequestBody connectionIdRequestBo
}

@Override
public JobInfoRead syncConnection(final ConnectionIdRequestBody connectionIdRequestBody) {
@Post(uri = "/sync",
processes = MediaType.APPLICATION_JSON)
public JobInfoRead syncConnection(@Body final ConnectionIdRequestBody connectionIdRequestBody) {
return ApiHelper.execute(() -> schedulerHandler.syncConnection(connectionIdRequestBody));
}

@Override
public JobInfoRead resetConnection(final ConnectionIdRequestBody connectionIdRequestBody) {
@Post(uri = "/reset",
processes = MediaType.APPLICATION_JSON)
public JobInfoRead resetConnection(@Body final ConnectionIdRequestBody connectionIdRequestBody) {
return ApiHelper.execute(() -> schedulerHandler.resetConnection(connectionIdRequestBody));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,61 +16,83 @@
import io.airbyte.api.model.generated.WorkspaceIdRequestBody;
import io.airbyte.server.handlers.DestinationHandler;
import io.airbyte.server.handlers.SchedulerHandler;
import io.micronaut.http.MediaType;
import io.micronaut.http.annotation.Body;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Post;
import javax.ws.rs.Path;
import lombok.AllArgsConstructor;

@Path("/v1/destinations")
@Controller("/api/v1/destinations")
@AllArgsConstructor
public class DestinationApiController implements DestinationApi {

private final DestinationHandler destinationHandler;
private final SchedulerHandler schedulerHandler;

@Post(uri = "/check_connection",
processes = MediaType.APPLICATION_JSON)
@Override
public CheckConnectionRead checkConnectionToDestination(final DestinationIdRequestBody destinationIdRequestBody) {
public CheckConnectionRead checkConnectionToDestination(@Body final DestinationIdRequestBody destinationIdRequestBody) {
return ApiHelper.execute(() -> schedulerHandler.checkDestinationConnectionFromDestinationId(destinationIdRequestBody));
}

@Post(uri = "/check_connection_for_update",
processes = MediaType.APPLICATION_JSON)
@Override
public CheckConnectionRead checkConnectionToDestinationForUpdate(final DestinationUpdate destinationUpdate) {
public CheckConnectionRead checkConnectionToDestinationForUpdate(@Body final DestinationUpdate destinationUpdate) {
return ApiHelper.execute(() -> schedulerHandler.checkDestinationConnectionFromDestinationIdForUpdate(destinationUpdate));
}

@Post(uri = "/clone",
processes = MediaType.APPLICATION_JSON)
@Override
public DestinationRead cloneDestination(final DestinationCloneRequestBody destinationCloneRequestBody) {
public DestinationRead cloneDestination(@Body final DestinationCloneRequestBody destinationCloneRequestBody) {
return ApiHelper.execute(() -> destinationHandler.cloneDestination(destinationCloneRequestBody));
}

@Post(uri = "/create",
processes = MediaType.APPLICATION_JSON)
@Override
public DestinationRead createDestination(final DestinationCreate destinationCreate) {
public DestinationRead createDestination(@Body final DestinationCreate destinationCreate) {
return ApiHelper.execute(() -> destinationHandler.createDestination(destinationCreate));
}

@Post(uri = "/delete",
processes = MediaType.APPLICATION_JSON)
@Override
public void deleteDestination(final DestinationIdRequestBody destinationIdRequestBody) {
public void deleteDestination(@Body final DestinationIdRequestBody destinationIdRequestBody) {
ApiHelper.execute(() -> {
destinationHandler.deleteDestination(destinationIdRequestBody);
return null;
});
}

@Post(uri = "/get",
processes = MediaType.APPLICATION_JSON)
@Override
public DestinationRead getDestination(final DestinationIdRequestBody destinationIdRequestBody) {
public DestinationRead getDestination(@Body final DestinationIdRequestBody destinationIdRequestBody) {
return ApiHelper.execute(() -> destinationHandler.getDestination(destinationIdRequestBody));
}

@Post(uri = "/list",
processes = MediaType.APPLICATION_JSON)
@Override
public DestinationReadList listDestinationsForWorkspace(final WorkspaceIdRequestBody workspaceIdRequestBody) {
public DestinationReadList listDestinationsForWorkspace(@Body final WorkspaceIdRequestBody workspaceIdRequestBody) {
return ApiHelper.execute(() -> destinationHandler.listDestinationsForWorkspace(workspaceIdRequestBody));
}

@Post(uri = "/search",
processes = MediaType.APPLICATION_JSON)
@Override
public DestinationReadList searchDestinations(final DestinationSearch destinationSearch) {
public DestinationReadList searchDestinations(@Body final DestinationSearch destinationSearch) {
return ApiHelper.execute(() -> destinationHandler.searchDestinations(destinationSearch));
}

@Post(uri = "/update",
processes = MediaType.APPLICATION_JSON)
@Override
public DestinationRead updateDestination(final DestinationUpdate destinationUpdate) {
public DestinationRead updateDestination(@Body final DestinationUpdate destinationUpdate) {
return ApiHelper.execute(() -> destinationHandler.updateDestination(destinationUpdate));
}

Expand Down
Loading