MINOR - Application Preview (#15609)

This commit is contained in:
Pere Miquel Brull 2024-03-21 07:56:14 +01:00 committed by GitHub
parent e6cdd6e9a6
commit 3fb4dbb55a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 34 additions and 8 deletions

View File

@ -13,7 +13,7 @@ This approach has been last tested against:
- Composer version 2.5.4
- Airflow version 2.6.3
It also requires the ingestion package to be at least `openmetadata-ingestion==1.3.1.0`.
It also requires the ingestion package to be at least `openmetadata-ingestion==1.3.0.1`.
## Using the Python Operator

View File

@ -218,6 +218,14 @@ public class AbstractNativeApplication implements NativeApplication {
/* Not needed by default */
}
@Override
public void raisePreviewMessage(App app) {
throw AppException.byMessage(
app.getName(),
"Preview",
"App is in Preview Mode. Enable it from the server configuration.");
}
public static AppRuntime getAppRuntime(App app) {
return JsonUtils.convertValue(app.getRuntime(), ScheduledExecutionContext.class);
}

View File

@ -6,7 +6,7 @@ import org.openmetadata.sdk.exception.WebServiceException;
public class AppException extends WebServiceException {
private static final String BY_NAME_MESSAGE = "Application [%s] Exception [%s] due to [%s].";
private static final String ERROR_TYPE = "PIPELINE_SERVICE_ERROR";
private static final String ERROR_TYPE = "APPLICATION_ERROR";
public AppException(String message) {
super(Response.Status.BAD_REQUEST, ERROR_TYPE, message);

View File

@ -45,6 +45,7 @@ public class ApplicationHandler {
&& !nullOrEmpty(privateConfiguration.getAppsPrivateConfiguration())) {
for (AppPrivateConfig appPrivateConfig : privateConfiguration.getAppsPrivateConfiguration()) {
if (app.getName().equals(appPrivateConfig.getName())) {
app.setPreview(appPrivateConfig.getPreview());
app.setPrivateConfiguration(appPrivateConfig.getParameters());
}
}
@ -79,6 +80,12 @@ public class ApplicationHandler {
clz.getDeclaredConstructor(CollectionDAO.class, SearchRepository.class)
.newInstance(daoCollection, searchRepository);
// Raise preview message if the app is in Preview mode
if (Boolean.TRUE.equals(app.getPreview())) {
Method preview = resource.getClass().getMethod("raisePreviewMessage", App.class);
preview.invoke(resource, app);
}
// Call init Method
Method initMethod = resource.getClass().getMethod("init", App.class);
initMethod.invoke(resource, app);
@ -96,14 +103,13 @@ public class ApplicationHandler {
Method scheduleMethod = resource.getClass().getMethod(methodName);
scheduleMethod.invoke(resource);
} catch (NoSuchMethodException
| InstantiationException
| IllegalAccessException
| InvocationTargetException e) {
} catch (NoSuchMethodException | InstantiationException | IllegalAccessException e) {
LOG.error("Exception encountered", e);
throw new UnhandledServerException(e.getCause().getMessage());
throw new UnhandledServerException(e.getMessage());
} catch (ClassNotFoundException e) {
throw new UnhandledServerException(e.getCause().getMessage());
throw new UnhandledServerException(e.getMessage());
} catch (InvocationTargetException e) {
throw new AppException(e.getTargetException().getMessage());
}
}
}

View File

@ -13,5 +13,7 @@ public interface NativeApplication extends Job {
void configure();
void raisePreviewMessage(App app);
default void startApp(JobExecutionContext jobExecutionContext) {}
}

View File

@ -16,6 +16,11 @@
"type": "string",
"description": "Application Name"
},
"preview": {
"type": "boolean",
"description": "Flag to enable/disable preview for the application. If the app is in preview mode, it can't be installed.",
"default": false
},
"parameters": {
"javaType": "org.openmetadata.schema.api.configuration.apps.Parameters",
"description": "Parameters to initialize the Applications.",

View File

@ -210,6 +210,11 @@
"description": "Application Private configuration loaded at runtime.",
"$ref": "./configuration/applicationConfig.json#/definitions/privateConfig"
},
"preview": {
"type": "boolean",
"description": "Flag to enable/disable preview for the application. If the app is in preview mode, it can't be installed.",
"default": false
},
"pipelines": {
"description": "References to pipelines deployed for this database service to extract metadata, usage, lineage etc..",
"$ref": "../../type/entityReferenceList.json"