Skip to content

Commit c26c8fc

Browse files
Merge pull request #48356 from holly-cummins/runtime-dev-service-info-in-dev-ui
Use lazy data for dev services in dev ui
2 parents ce7de77 + d0fe5de commit c26c8fc

File tree

2 files changed

+58
-13
lines changed

2 files changed

+58
-13
lines changed

extensions/vertx-http/deployment/src/main/java/io/quarkus/devui/deployment/menu/DevServicesProcessor.java

Lines changed: 43 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,22 @@
11
package io.quarkus.devui.deployment.menu;
22

33
import java.util.ArrayList;
4+
import java.util.Collection;
45
import java.util.List;
56
import java.util.Map;
67
import java.util.TreeMap;
8+
import java.util.concurrent.CompletableFuture;
79

810
import io.quarkus.deployment.IsLocalDevelopment;
11+
import io.quarkus.deployment.annotations.BuildProducer;
912
import io.quarkus.deployment.annotations.BuildStep;
1013
import io.quarkus.deployment.builditem.DevServicesResultBuildItem;
14+
import io.quarkus.deployment.builditem.LaunchModeBuildItem;
1115
import io.quarkus.deployment.dev.devservices.DevServiceDescriptionBuildItem;
16+
import io.quarkus.dev.spi.DevModeType;
17+
import io.quarkus.devui.deployment.DevUIConfig;
1218
import io.quarkus.devui.deployment.InternalPageBuildItem;
19+
import io.quarkus.devui.spi.buildtime.BuildTimeActionBuildItem;
1320
import io.quarkus.devui.spi.page.Page;
1421

1522
/**
@@ -18,24 +25,33 @@
1825
public class DevServicesProcessor {
1926

2027
@BuildStep(onlyIf = IsLocalDevelopment.class)
21-
InternalPageBuildItem createDevServicesPages(List<DevServiceDescriptionBuildItem> devServiceDescriptions,
22-
List<DevServicesResultBuildItem> devServicesResultBuildItems) {
28+
InternalPageBuildItem createDevServicesPages(BuildProducer<BuildTimeActionBuildItem> buildTimeActionProducer,
29+
List<DevServiceDescriptionBuildItem> devServiceDescriptions,
30+
List<DevServicesResultBuildItem> devServicesResultBuildItems, LaunchModeBuildItem launchModeBuildItem,
31+
DevUIConfig config) {
2332

2433
List<DevServiceDescriptionBuildItem> otherDevServices = getOtherDevServices(devServicesResultBuildItems);
2534

2635
InternalPageBuildItem devServicesPages = new InternalPageBuildItem("Dev Services", 40);
2736

2837
devServicesPages.addPage(Page.webComponentPageBuilder()
29-
.namespace("devui-dev-services")
38+
.namespace(NAMESPACE)
3039
.title("Dev services")
3140
.icon("font-awesome-solid:wand-magic-sparkles")
3241
.componentLink("qwc-dev-services.js"));
3342

34-
Map<String, DevServiceDescriptionBuildItem> combined = new TreeMap<>();
35-
addToMap(combined, devServiceDescriptions);
36-
addToMap(combined, otherDevServices);
43+
Collection<DevServiceDescriptionBuildItem> services = getServices(devServiceDescriptions, otherDevServices);
44+
45+
devServicesPages.addBuildTimeData("devServices", services);
3746

38-
devServicesPages.addBuildTimeData("devServices", combined.values());
47+
if (launchModeBuildItem.getDevModeType().isPresent()
48+
&& launchModeBuildItem.getDevModeType().get().equals(DevModeType.LOCAL)
49+
&& config.allowExtensionManagement()) {
50+
51+
BuildTimeActionBuildItem buildTimeActions = new BuildTimeActionBuildItem(NAMESPACE);
52+
getDevServices(buildTimeActions, devServiceDescriptions, otherDevServices);
53+
buildTimeActionProducer.produce(buildTimeActions);
54+
}
3955

4056
return devServicesPages;
4157

@@ -64,4 +80,24 @@ private List<DevServiceDescriptionBuildItem> getOtherDevServices(
6480
}
6581
return devServiceDescriptions;
6682
}
83+
84+
private void getDevServices(BuildTimeActionBuildItem buildTimeActions,
85+
List<DevServiceDescriptionBuildItem> devServiceDescriptions,
86+
List<DevServiceDescriptionBuildItem> otherDevServices) {
87+
buildTimeActions.addAction(new Object() {
88+
}.getClass().getEnclosingMethod().getName(),
89+
ignored -> CompletableFuture.supplyAsync(() -> getServices(devServiceDescriptions, otherDevServices)));
90+
}
91+
92+
private Collection<DevServiceDescriptionBuildItem> getServices(List<DevServiceDescriptionBuildItem> devServiceDescriptions,
93+
List<DevServiceDescriptionBuildItem> otherDevServices) {
94+
Map<String, DevServiceDescriptionBuildItem> combined = new TreeMap<>();
95+
addToMap(combined, devServiceDescriptions);
96+
addToMap(combined, otherDevServices);
97+
98+
return combined.values();
99+
}
100+
101+
private static final String NAMESPACE = "devui-dev-services";
102+
67103
}

extensions/vertx-http/dev-ui-resources/src/main/resources/dev-ui/qwc/qwc-dev-services.js

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
import { QwcHotReloadElement, html, css } from 'qwc-hot-reload-element';
2-
import { devServices } from 'devui-data';
3-
import { observeState } from 'lit-element-state';
4-
import { themeState } from 'theme-state';
1+
import {css, html, QwcHotReloadElement} from 'qwc-hot-reload-element';
2+
import {JsonRpc} from 'jsonrpc';
3+
import {devServices} from 'devui-data';
4+
import {observeState} from 'lit-element-state';
5+
import {themeState} from 'theme-state';
56
import '@vaadin/icon';
67
import '@qomponent/qui-code-block';
78
import '@qomponent/qui-card';
@@ -11,6 +12,8 @@ import 'qwc-no-data';
1112
* This component shows the Dev Services Page
1213
*/
1314
export class QwcDevServices extends observeState(QwcHotReloadElement) {
15+
jsonRpc = new JsonRpc("devui-dev-services", false);
16+
1417
static styles = css`
1518
.cards {
1619
height: 100%;
@@ -58,9 +61,15 @@ export class QwcDevServices extends observeState(QwcHotReloadElement) {
5861
this._services = devServices;
5962
}
6063

64+
connectedCallback() {
65+
super.connectedCallback();
66+
67+
this.hotReload();
68+
}
69+
6170
hotReload(){
62-
import(`devui/devui-data.js?${Date.now()}`).then(newDevUIData => {
63-
this._services = newDevUIData.devServices;
71+
this.jsonRpc.getDevServices().then(jsonRpcResponse => {
72+
this._services = jsonRpcResponse.result;
6473
});
6574
}
6675

0 commit comments

Comments
 (0)