ihuzenko commented on a change in pull request #1692: DRILL-6562: Plugin
Management improvements
URL: https://github.com/apache/drill/pull/1692#discussion_r266454005
##########
File path:
exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/StorageResources.java
##########
@@ -63,67 +65,87 @@
@Inject ObjectMapper mapper;
@Inject SecurityContext sc;
- private static final Comparator<PluginConfigWrapper> PLUGIN_COMPARATOR = new
Comparator<PluginConfigWrapper>() {
- @Override
- public int compare(PluginConfigWrapper o1, PluginConfigWrapper o2) {
- return o1.getName().compareTo(o2.getName());
- }
- };
+ public static final String JSON_FILE_NAME = "json";
+ public static final String HOCON_FILE_NAME = "conf";
+ public static final String ALL_PLUGINS = "all";
+ public static final String ENABLED_PLUGINS = "enabled";
+ public static final String DISABLED_PLUGINS = "disabled";
+
+ private static final Comparator<PluginConfigWrapper> PLUGIN_COMPARATOR =
+ Comparator.comparing(PluginConfigWrapper::getName);
@GET
- @Path("/storage.json")
+ @Path("/storage/{group}/plugins/export/{format}")
@Produces(MediaType.APPLICATION_JSON)
- public List<PluginConfigWrapper> getStoragePluginsJSON() {
-
- List<PluginConfigWrapper> list = Lists.newArrayList();
- for (Map.Entry<String, StoragePluginConfig> entry :
Lists.newArrayList(storage.getStore().getAll())) {
- PluginConfigWrapper plugin = new PluginConfigWrapper(entry.getKey(),
entry.getValue());
- list.add(plugin);
+ public Response getPluginsConfigs(@PathParam("group") String pluginGroup,
@PathParam("format") String format) {
+ if (JSON_FILE_NAME.equalsIgnoreCase(format) ||
HOCON_FILE_NAME.equalsIgnoreCase(format)) {
+ Response.ResponseBuilder response = Response.ok();
+ response.entity(getPluginsConfigs(pluginGroup).toArray());
+ response.header("Content-Disposition",
+ String.format("attachment;filename=\"%s_storage_plugins.%s\"",
pluginGroup, format));
+ return response.build();
}
-
- Collections.sort(list, PLUGIN_COMPARATOR);
-
- return list;
+ logger.error("Unknown file type {} for {} Storage Plugin Configs", format,
pluginGroup);
+ return Response.status(Response.Status.NOT_FOUND).build();
}
@GET
@Path("/storage")
@Produces(MediaType.TEXT_HTML)
- public Viewable getStoragePlugins() {
- List<PluginConfigWrapper> list = getStoragePluginsJSON();
+ public Viewable getPlugins() {
+ List<PluginConfigWrapper> list = getPluginsConfigs(ALL_PLUGINS);
return ViewableWithPermissions.create(authEnabled.get(),
"/rest/storage/list.ftl", sc, list);
}
+ private List<PluginConfigWrapper> getPluginsConfigs(String pluginGroup) {
Review comment:
Could you please try to rename and split the method (PS: the example is
untested but expected to be working :) :
```java
private List<PluginConfigWrapper> getConfigurationsFor(String pluginGroup)
{
return
StreamSupport.stream(Spliterators.spliteratorUnknownSize(storage.getStore().getAll(),
Spliterator.ORDERED), /*parallel*/ false)
.filter(byPluginGroup(pluginGroup))
.map(pluginEntry -> new PluginConfigWrapper(pluginEntry.getKey(),
pluginEntry.getValue()))
.sorted(PLUGIN_COMPARATOR)
.collect(Collectors.toList());
}
private Predicate<Map.Entry<String, StoragePluginConfig>>
byPluginGroup(String pluginGroup) {
switch (pluginGroup == null ? "" : pluginGroup.toLowerCase()) {
case ALL_PLUGINS:
return entry -> true;
case ENABLED_PLUGINS:
return entry -> entry.getValue().isEnabled();
case DISABLED_PLUGINS:
return entry -> !entry.getValue().isEnabled();
default:
return entry -> false;
}
}
```
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services