Skip to content

Commit 04154ee

Browse files
committed
telemtry api follow up issue
1 parent 8db1d35 commit 04154ee

File tree

5 files changed

+53
-24
lines changed

5 files changed

+53
-24
lines changed

engine/src/main/java/org/terasology/config/facade/TelemetryConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,5 @@ public interface TelemetryConfiguration {
3232

3333
Boolean get(String telemetryField);
3434

35-
boolean containField(String telemetryField);
35+
boolean containsField(String telemetryField);
3636
}

engine/src/main/java/org/terasology/config/facade/TelemetryConfigurationImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public Boolean get(String telemetryField) {
4949
return bindingMap.get(telemetryField);
5050
}
5151

52-
public boolean containField(String telemetryField) {
52+
public boolean containsField(String telemetryField) {
5353
Map<String, Boolean> bindingMap = telemetryConfig.getMetricsUserPermissionConfig().getBindingMap();
5454
return bindingMap.containsKey(telemetryField);
5555
}

engine/src/main/java/org/terasology/telemetry/TelemetryUtils.java

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -49,26 +49,28 @@ private TelemetryUtils() {
4949
}
5050

5151
/**
52-
* Fetch metric in {@link org.terasology.telemetry.Metrics} and send to the server.
53-
* This method could be used in the method.
54-
* @param metrics Metrics instance in the game context.
55-
* @param metricClass The class of metric.
56-
* @param context the game context
52+
* Fetch metric in {@link org.terasology.context.Context} and send to the server.
53+
* This method could be used in the modules.
54+
* @param context The game context
55+
* @param metricClass The class of the metric which we want to track
5756
* @param nameSpace The name the class tracking this metric.
58-
* @param telemetryConfiguration the telemetryConfiguration adapter which could be used in modules.
5957
*/
60-
public static void fetchMetricAndSend(Metrics metrics, Class metricClass, Context context, String nameSpace, TelemetryConfiguration telemetryConfiguration) {
58+
public static void fetchMetricAndSend(Context context, Class metricClass, String nameSpace) {
6159
Emitter emitter = context.get(Emitter.class);
62-
if (emitter != null) {
63-
Optional<Metric> optional = metrics.getMetric(metricClass);
64-
if (optional.isPresent()) {
65-
Metric metric = optional.get();
66-
Optional<Unstructured> optionalUnstructure = metric.getUnstructuredMetric();
67-
if (optionalUnstructure.isPresent()) {
68-
Unstructured unstructured = optionalUnstructure.get();
60+
Metrics metrics = context.get(Metrics.class);
61+
TelemetryConfiguration telemetryConfiguration = context.get(TelemetryConfiguration.class);
62+
if (emitter != null && metrics != null && telemetryConfiguration != null) {
63+
Optional<Metric> metricOptional = metrics.getMetric(metricClass);
64+
if (metricOptional.isPresent()) {
65+
Metric metric = metricOptional.get();
66+
Optional<Unstructured> unstructuredOptional = metric.getUnstructuredMetric();
67+
if (unstructuredOptional.isPresent()) {
68+
Unstructured unstructured = unstructuredOptional.get();
6969
trackMetric(emitter, nameSpace, unstructured, metric, telemetryConfiguration);
7070
}
7171
}
72+
} else {
73+
logger.error("Emitter or metrics or telemetryConfiguration is not in context");
7274
}
7375
}
7476

@@ -109,7 +111,7 @@ public static void trackMetric(Emitter emitter, String nameSpace, Unstructured e
109111
} else if (telemetryConfiguration.fetchBindingSize() != 0) {
110112
TelemetryCategory telemetryCategory = metric.getClass().getAnnotation(TelemetryCategory.class);
111113
if (telemetryCategory != null) {
112-
if (telemetryConfiguration.containField(telemetryCategory.id())) {
114+
if (telemetryConfiguration.containsField(telemetryCategory.id())) {
113115
if ((telemetryConfiguration.get(telemetryCategory.id()))) {
114116
trackMetric(emitter, nameSpace, event);
115117
}

engine/src/main/java/org/terasology/telemetry/metrics/BlockPlacedMetric.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
package org.terasology.telemetry.metrics;
1717

1818
import com.snowplowanalytics.snowplow.tracker.events.Unstructured;
19-
import com.snowplowanalytics.snowplow.tracker.payload.SelfDescribingJson;
2019
import org.terasology.entitySystem.entity.EntityRef;
2120
import org.terasology.logic.players.LocalPlayer;
2221
import org.terasology.registry.CoreRegistry;

engine/src/main/java/org/terasology/telemetry/metrics/Metric.java

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import org.reflections.ReflectionUtils;
2121
import org.slf4j.Logger;
2222
import org.slf4j.LoggerFactory;
23+
import org.terasology.config.facade.TelemetryConfiguration;
2324
import org.terasology.context.Context;
2425
import org.terasology.engine.subsystem.DisplayDevice;
2526
import org.terasology.module.sandbox.API;
@@ -119,15 +120,14 @@ protected Map<String, Object> filterMetricMap(Map<String, Boolean> bindingMap) {
119120
TelemetryCategory telemetryCategory = this.getClass().getAnnotation(TelemetryCategory.class);
120121
Context context = CoreRegistry.get(Context.class);
121122
DisplayDevice display = context.get(DisplayDevice.class);
122-
if (display.isHeadless()) {
123+
if (display.isHeadless() || telemetryCategory.isOneMapMetric()) {
123124
return telemetryFieldToValue;
124125
}
125126
Map<String, Object> metricMapAfterPermission = new HashMap<>();
126-
for (Object key : telemetryFieldToValue.keySet()) {
127-
String fieldName = key.toString();
128-
String fieldNamewithID = telemetryCategory.id() + ":" + key.toString();
129-
if (bindingMap.containsKey(fieldNamewithID)) {
130-
if (bindingMap.get(fieldNamewithID)) {
127+
for (String fieldName : telemetryFieldToValue.keySet()) {
128+
String fieldNameWithID = telemetryCategory.id() + ":" + fieldName;
129+
if (bindingMap.containsKey(fieldNameWithID)) {
130+
if (bindingMap.get(fieldNameWithID)) {
131131
metricMapAfterPermission.put(fieldName, telemetryFieldToValue.get(fieldName));
132132
} else {
133133
metricMapAfterPermission.put(fieldName, "Disabled Field");
@@ -138,6 +138,34 @@ protected Map<String, Object> filterMetricMap(Map<String, Boolean> bindingMap) {
138138
return metricMapAfterPermission;
139139
}
140140

141+
/**
142+
* Filter the metric map by the binding map.
143+
* If the user doesn't want the field to be sent, its value will be covered by "Disabled Field".
144+
* This method could be used in module since {@link org.terasology.config.facade.TelemetryConfiguration} is exposed to modules
145+
* @param telemetryConfiguration the telemetry configuration exposed modules
146+
* @return a new metric map that covers the field that the user doesn't want to send by "Disabled Field".
147+
*/
148+
protected Map<String, Object> filterMetricMap(TelemetryConfiguration telemetryConfiguration) {
149+
TelemetryCategory telemetryCategory = this.getClass().getAnnotation(TelemetryCategory.class);
150+
Context context = CoreRegistry.get(Context.class);
151+
DisplayDevice display = context.get(DisplayDevice.class);
152+
if (display.isHeadless() || telemetryCategory.isOneMapMetric()) {
153+
return telemetryFieldToValue;
154+
}
155+
Map<String, Object> metricMapAfterPermission = new HashMap<>();
156+
for (String fieldName : telemetryFieldToValue.keySet()) {
157+
String fieldNameWithID = telemetryCategory.id() + ":" + fieldName;
158+
if (telemetryConfiguration.containsField(fieldNameWithID)) {
159+
if (telemetryConfiguration.get(fieldNameWithID)) {
160+
metricMapAfterPermission.put(fieldName, telemetryFieldToValue.get(fieldName));
161+
} else {
162+
metricMapAfterPermission.put(fieldName, "Disabled Field");
163+
}
164+
}
165+
}
166+
return metricMapAfterPermission;
167+
}
168+
141169
/**
142170
* Add the new metric to {@link org.terasology.telemetry.Metrics} instance.
143171
* This method will only be used when a metric constructor needs some specific arguments other than {@link org.terasology.context.Context}.

0 commit comments

Comments
 (0)