Skip to content

Commit

Permalink
feat: add initial Dev UI support
Browse files Browse the repository at this point in the history
  • Loading branch information
metacosm committed Jan 14, 2025
1 parent 9c963fe commit 546ab26
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,12 @@
import io.quarkus.deployment.annotations.BuildStep;
import io.quarkus.deployment.annotations.BuildSteps;
import io.quarkus.deployment.builditem.ConsoleCommandBuildItem;
import io.quarkus.devui.spi.JsonRPCProvidersBuildItem;
import io.quarkus.devui.spi.page.CardPageBuildItem;
import io.quarkus.devui.spi.page.Page;
import net.laprun.sustainability.power.quarkus.deployment.PowerMeasurerBuildItem;
import net.laprun.sustainability.power.quarkus.deployment.devui.commands.PowerCommands;
import net.laprun.sustainability.power.quarkus.runtime.devui.PowerService;

@BuildSteps(onlyIf = IsDevelopment.class)
public class DevUI {
Expand All @@ -16,4 +20,20 @@ void addConsoleCommands(PowerMeasurerBuildItem powerMeasurerBI, BuildProducer<Co
// register dev console commands
commands.produce(new ConsoleCommandBuildItem(new PowerCommands(powerMeasurerBI.getMeasurer())));
}

@BuildStep
public CardPageBuildItem pages(PowerMeasurerBuildItem powerMeasurerBI) {
final var measurer = powerMeasurerBI.getMeasurer();
CardPageBuildItem card = new CardPageBuildItem();
card.addBuildTimeData("info", measurer.sampler().info());
card.addPage(Page.webComponentPageBuilder()
.icon("font-awesome-solid:info")
.componentLink("qwc-power-info.js"));
return card;
}

@BuildStep
JsonRPCProvidersBuildItem powerMeasurerJSONProvider() {
return new JsonRPCProvidersBuildItem(PowerService.class);
}
}
35 changes: 35 additions & 0 deletions deployment/src/main/resources/dev-ui/qwc-power-info.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import {LitElement, html, css} from 'lit';
import {JsonRpc} from 'jsonrpc';

export class QwcPowerInfo extends LitElement {

jsonRpc = new JsonRpc(this);

static properties = {
_info: {state: true},
};

constructor() {
super();
}

connectedCallback() {
super.connectedCallback();
this.hotReload();
}

hotReload() {
this.jsonRpc.info().then(
jsonRpcResponse => this._info = jsonRpcResponse.result);
}

render() {
if (this._info) {
return html`<pre>${this._info}</pre>`;
} else {
return html`Info unavailable`;
}
}
}

customElements.define('qwc-power-info', QwcPowerInfo);
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@

import com.sun.management.OperatingSystemMXBean;

import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.inject.Produces;
import jakarta.inject.Inject;
import net.laprun.sustainability.power.SensorMetadata;

public class PowerMeasurer {
Expand All @@ -26,6 +29,7 @@ public class PowerMeasurer {
private final ServerSampler sampler;
private static PowerMeasurer instance;

@Produces
public static PowerMeasurer instance() {
if (instance == null) {
instance = new PowerMeasurer();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package net.laprun.sustainability.power.quarkus.runtime.devui;

import jakarta.inject.Inject;

import net.laprun.sustainability.power.quarkus.runtime.PowerMeasurer;

public class PowerService {
@Inject
PowerMeasurer measurer;

public String info() {
return measurer.sampler().info();
}
}

0 comments on commit 546ab26

Please sign in to comment.