# 8.3 DeviceExtensoinPoint webui DeviceDetails

**URL:** <https://forum.inductiveautomation.com/t/8-3-deviceextensoinpoint-webui-devicedetails/110302>\
**Category:** Ignition 8.3 Early Access\
**Created:** [September 1, 2025, 8:24am UTC](https://forum.inductiveautomation.com/t/8-3-deviceextensoinpoint-webui-devicedetails/110302 "2025-09-01T08:24:27Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![e.sagnelonge](https://avatars.discourse-cdn.com/v4/letter/e/7cd45c/32.png) [@e.sagnelonge](https://forum.inductiveautomation.com/u/e.sagnelonge)\
**Post date:** [September 1, 2025, 8:24am UTC](https://forum.inductiveautomation.com/t/8-3-deviceextensoinpoint-webui-devicedetails/110302/1 "2025-09-01T08:24:27Z")

</div>

Hello,

Does anyone know how to provide the necessary information for a device’s **DeviceExtensoinPoint View Details**? (webui **DeviceDetails** )

```java
 public List<MenuAction> getMenuActions() {
   return List.of(new MenuAction("View Details", "View device details.", (WebUiComponent)new ReactComponentInfo("DeviceDetails", null))); 
}

```

Connections → Devices → Connections

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/4/3/4309af1c0df6f9aff96a606ca9008006a3468111.png)

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/9/e/9e03d0a67f57e6b4d3641dc83460afbc19651487.png)

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [September 1, 2025, 1:36pm UTC](https://forum.inductiveautomation.com/t/8-3-deviceextensoinpoint-webui-devicedetails/110302/2 "2025-09-01T13:36:16Z")

</div>

Are you trying to provide a custom link and react page for one of your devices, or provide the information necessary for your device to have a "Details" diagnostics page like some of the other Ignition devices?

---

<div class="post-metadata">

**Author:** ![e.sagnelonge](https://avatars.discourse-cdn.com/v4/letter/e/7cd45c/32.png) [@e.sagnelonge](https://forum.inductiveautomation.com/u/e.sagnelonge)\
**Post date:** [September 1, 2025, 1:48pm UTC](https://forum.inductiveautomation.com/t/8-3-deviceextensoinpoint-webui-devicedetails/110302/3 "2025-09-01T13:48:39Z")

</div>

> [@Kevin.Herron](#):
>
> provide the information necessary for your device to have a "Details" diagnostics page like some of the other Ignition devices?

Second option: I want to provide the necessary information so my device can have a ‘Details’ diagnostics page like some of the other Ignition devices.

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [September 1, 2025, 1:49pm UTC](https://forum.inductiveautomation.com/t/8-3-deviceextensoinpoint-webui-devicedetails/110302/4 "2025-09-01T13:49:19Z")

</div>

Ah, then implement `DeviceExtensionPoint::getSamplingMetrics`.

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [September 1, 2025, 1:59pm UTC](https://forum.inductiveautomation.com/t/8-3-deviceextensoinpoint-webui-devicedetails/110302/5 "2025-09-01T13:59:22Z")

</div>

Looks like Javadoc for the `opc-ua-gateway-api` module isn't being published... hopefully I can get that resolved before we release 8.3.0.

---

<div class="post-metadata">

**Author:** ![e.sagnelonge](https://avatars.discourse-cdn.com/v4/letter/e/7cd45c/32.png) [@e.sagnelonge](https://forum.inductiveautomation.com/u/e.sagnelonge)\
**Post date:** [September 1, 2025, 2:05pm UTC](https://forum.inductiveautomation.com/t/8-3-deviceextensoinpoint-webui-devicedetails/110302/6 "2025-09-01T14:05:35Z")

</div>

I assume these are the metrics to declare.

```java
  public static class SamplingMetricsSerializer implements JsonSerializer<SamplingMetrics> {
    public JsonElement serialize(SamplingMetrics metrics, Type type, JsonSerializationContext context) {
      JsonObject aggregateObject = new JsonObject();
      aggregateObject.addProperty("requestCount", Integer.valueOf(metrics.aggregateStats().requestCount()));
      aggregateObject.addProperty("monitoredItemCount", Integer.valueOf(metrics.aggregateStats().monitoredItemCount()));
      aggregateObject.add("histogram", context.serialize(metrics.aggregateStats().histogram()));
      aggregateObject.addProperty("meanThroughput", Double.valueOf(metrics.aggregateStats().meanThroughput()));
      aggregateObject.addProperty("oneMinuteThroughput", Double.valueOf(metrics.aggregateStats().oneMinuteThroughput()));
      JsonArray samplingGroupsArray = new JsonArray();
      for (SamplingMetrics.SamplingGroupStats group : metrics.samplingGroupStats()) {
        JsonObject groupObject = new JsonObject();
        groupObject.addProperty("requestCount", Integer.valueOf(group.requestCount()));
        groupObject.addProperty("samplingInterval", Integer.valueOf(group.samplingInterval()));
        groupObject.addProperty("queueDuration", Double.valueOf(group.queueDuration()));
        groupObject.addProperty("overloadFactor", Double.valueOf(group.overloadFactor()));
        groupObject.add("histogram", context.serialize(group.histogram()));
        groupObject.addProperty("meanThroughput", Double.valueOf(group.meanThroughput()));
        groupObject.addProperty("oneMinuteThroughput", Double.valueOf(group.oneMinuteThroughput()));
        samplingGroupsArray.add((JsonElement)groupObject);
      } 
      JsonObject object = new JsonObject();
      object.add("aggregate", (JsonElement)aggregateObject);
      object.add("samplingGroups", (JsonElement)samplingGroupsArray);
      return (JsonElement)object;
    }
  }

```

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [September 1, 2025, 2:06pm UTC](https://forum.inductiveautomation.com/t/8-3-deviceextensoinpoint-webui-devicedetails/110302/7 "2025-09-01T14:06:41Z")

</div>

Yes, but you should be able to intuit that from the constructors and not the JSON serialization:

```java
public record SamplingMetrics(
    AggregateStats aggregateStats,
    List<SamplingGroupStats> samplingGroupStats
) {

    public record AggregateStats(
        int requestCount,
        int monitoredItemCount,
        Snapshot histogram,
        double meanThroughput,
        double oneMinuteThroughput
    ) {}

    public record SamplingGroupStats(
        int requestCount,
        int samplingInterval,
        double queueDuration,
        double overloadFactor,
        Snapshot histogram,
        double meanThroughput,
        double oneMinuteThroughput
    ) {}

```

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [September 1, 2025, 2:08pm UTC](https://forum.inductiveautomation.com/t/8-3-deviceextensoinpoint-webui-devicedetails/110302/8 "2025-09-01T14:08:50Z")

</div>

The `Snapshot` objects come from instances of `com.codahale.metrics.Timer`. The whole sampling metrics concept is meant for devices that measure their request executions with a Timer.

---

<div class="post-metadata">

**Author:** ![e.sagnelonge](https://avatars.discourse-cdn.com/v4/letter/e/7cd45c/32.png) [@e.sagnelonge](https://forum.inductiveautomation.com/u/e.sagnelonge)\
**Post date:** [September 1, 2025, 3:34pm UTC](https://forum.inductiveautomation.com/t/8-3-deviceextensoinpoint-webui-devicedetails/110302/9 "2025-09-01T15:34:26Z")

</div>

Thanks! That looks good to me for Aggregate Statistics.

What about Log Activity? Can we set the loggers and the minimum log level?

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [September 1, 2025, 3:54pm UTC](https://forum.inductiveautomation.com/t/8-3-deviceextensoinpoint-webui-devicedetails/110302/10 "2025-09-01T15:54:55Z")

</div>

The log activity is any log statements where the MDC key "device-name" is set to the name of the device instance being viewed. Nothing can be controlled.

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [September 1, 2025, 5:22pm UTC](https://forum.inductiveautomation.com/t/8-3-deviceextensoinpoint-webui-devicedetails/110302/11 "2025-09-01T17:22:57Z")

</div>

Is there any chance that interface could be extended to allow the device to supply the actual sampling interval for each group? (Cough...)

---

<div class="post-metadata">

**Author:** ![e.sagnelonge](https://avatars.discourse-cdn.com/v4/letter/e/7cd45c/32.png) [@e.sagnelonge](https://forum.inductiveautomation.com/u/e.sagnelonge)\
**Post date:** [September 2, 2025, 8:57am UTC](https://forum.inductiveautomation.com/t/8-3-deviceextensoinpoint-webui-devicedetails/110302/12 "2025-09-02T08:57:14Z")

</div>

For the community’s reference :

```java
LoggerEx log = LoggerEx.newBuilder()
    .mdcContext(new Object[] { "device-name", context.name})
    .build(String.format("drivers.%s", getClass().getSimpleName()));

```

```kotlin
val logger = LoggerEx.newBuilder()
    .mdcContext("device-name", context.name)
    .build("drivers.${javaClass.simpleName}")

```
