Skip to content

Commit 87e3a38

Browse files
committed
Merge PR #3083 by @GabrielXia - more telemetry tweaks
2 parents b328e9e + 04154ee commit 87e3a38

16 files changed

+132
-103
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/logic/health/EntityDestructionAuthoritySystem.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public void onDestroy(DestroyEvent event, EntityRef entity) {
4141

4242
private void recordDestroyed(DestroyEvent event, EntityRef entityRef) {
4343
EntityRef instigator = event.getInstigator();
44-
if(entityRef.hasComponent(BlockComponent.class)) {
44+
if (entityRef.hasComponent(BlockComponent.class)) {
4545
BlockComponent blockComponent = entityRef.getComponent(BlockComponent.class);
4646
String blockName = blockComponent.getBlock().getDisplayName();
4747
if (instigator.hasComponent(GamePlayStatsComponent.class)) {
@@ -63,17 +63,17 @@ private void recordDestroyed(DestroyEvent event, EntityRef entityRef) {
6363
String monsterName = entityRef.getParentPrefab().getName();
6464
if (instigator.hasComponent(GamePlayStatsComponent.class)) {
6565
GamePlayStatsComponent gamePlayStatsComponent = instigator.getComponent(GamePlayStatsComponent.class);
66-
Map<String, Integer> monsterKilled = gamePlayStatsComponent.monsterKilled;
67-
if (monsterKilled.containsKey(monsterName)) {
68-
monsterKilled.put(monsterName, monsterKilled.get(monsterName) + 1);
66+
Map<String, Integer> creatureKilled = gamePlayStatsComponent.creatureKilled;
67+
if (creatureKilled.containsKey(monsterName)) {
68+
creatureKilled.put(monsterName, creatureKilled.get(monsterName) + 1);
6969
} else {
70-
monsterKilled.put(monsterName, 1);
70+
creatureKilled.put(monsterName, 1);
7171
}
7272
instigator.saveComponent(gamePlayStatsComponent);
7373
} else {
7474
GamePlayStatsComponent gamePlayStatsComponent = new GamePlayStatsComponent();
75-
Map<String, Integer> monsterKilled = gamePlayStatsComponent.monsterKilled;
76-
monsterKilled.put(monsterName, 1);
75+
Map<String, Integer> creatureKilled = gamePlayStatsComponent.creatureKilled;
76+
creatureKilled.put(monsterName, 1);
7777
instigator.addOrSaveComponent(gamePlayStatsComponent);
7878
}
7979
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,5 +39,5 @@ public class GamePlayStatsComponent implements Component {
3939
public float playTimeMinute;
4040

4141
@Replicate
42-
public Map<String, Integer> monsterKilled = new HashMap<>();
42+
public Map<String, Integer> creatureKilled = new HashMap<>();
4343
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
import org.terasology.telemetry.metrics.GamePlayMetric;
3232
import org.terasology.telemetry.metrics.Metric;
3333
import org.terasology.telemetry.metrics.ModulesMetric;
34-
import org.terasology.telemetry.metrics.MonsterKilledMetric;
34+
import org.terasology.telemetry.metrics.CreatureKilledMetric;
3535
import org.terasology.telemetry.metrics.SystemContextMetric;
3636

3737
import java.time.Duration;
@@ -182,7 +182,7 @@ public void shutdown() {
182182
TelemetryUtils.fetchMetricAndSend(metrics, BlockPlacedMetric.class, emitter, trackerNamespace, bindingMap);
183183
TelemetryUtils.fetchMetricAndSend(metrics, BlockDestroyedMetric.class, emitter, trackerNamespace, bindingMap);
184184
TelemetryUtils.fetchMetricAndSend(metrics, GameConfigurationMetric.class, emitter, trackerNamespace, bindingMap);
185-
TelemetryUtils.fetchMetricAndSend(metrics, MonsterKilledMetric.class, emitter, trackerNamespace, bindingMap);
185+
TelemetryUtils.fetchMetricAndSend(metrics, CreatureKilledMetric.class, emitter, trackerNamespace, bindingMap);
186186
TelemetryUtils.fetchMetricAndSend(metrics, GamePlayMetric.class, emitter, trackerNamespace, bindingMap);
187187
}
188188
}

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

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import com.snowplowanalytics.snowplow.tracker.events.Unstructured;
2323
import org.slf4j.Logger;
2424
import org.slf4j.LoggerFactory;
25-
import org.terasology.config.TelemetryConfig;
2625
import org.terasology.config.facade.TelemetryConfiguration;
2726
import org.terasology.context.Context;
2827
import org.terasology.engine.subsystem.DisplayDevice;
@@ -50,23 +49,28 @@ private TelemetryUtils() {
5049
}
5150

5251
/**
53-
* Fetch metric in {@link org.terasology.telemetry.Metrics} and send to the server.
54-
* This method could be used in the method.
55-
* @param metrics Metrics instance in the game context.
56-
* @param metricClass The class of metric.
57-
* @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
5856
* @param nameSpace The name the class tracking this metric.
59-
* @param telemetryConfiguration the telemetryConfiguration adapter which could be used in modules.
6057
*/
61-
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) {
6259
Emitter emitter = context.get(Emitter.class);
63-
if (emitter != null) {
64-
Optional<Metric> optional = metrics.getMetric(metricClass);
65-
if (optional.isPresent()) {
66-
Metric metric = optional.get();
67-
Unstructured unstructured = metric.getUnstructuredMetric();
68-
trackMetric(emitter, nameSpace, unstructured, metric, telemetryConfiguration);
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();
69+
trackMetric(emitter, nameSpace, unstructured, metric, telemetryConfiguration);
70+
}
6971
}
72+
} else {
73+
logger.error("Emitter or metrics or telemetryConfiguration is not in context");
7074
}
7175
}
7276

@@ -82,8 +86,11 @@ public static void fetchMetricAndSend(Metrics metrics, Class metricClass, Emitte
8286
Optional<Metric> optional = metrics.getMetric(metricClass);
8387
if (optional.isPresent()) {
8488
Metric metric = optional.get();
85-
Unstructured unstructured = metric.getUnstructuredMetric();
86-
trackMetric(emitter, nameSpace, unstructured, metric, bindingMap);
89+
Optional<Unstructured> unstructuredOptional = metric.getUnstructuredMetric();
90+
if (unstructuredOptional.isPresent()) {
91+
Unstructured unstructured = unstructuredOptional.get();
92+
trackMetric(emitter, nameSpace, unstructured, metric, bindingMap);
93+
}
8794
}
8895
}
8996

@@ -104,7 +111,7 @@ public static void trackMetric(Emitter emitter, String nameSpace, Unstructured e
104111
} else if (telemetryConfiguration.fetchBindingSize() != 0) {
105112
TelemetryCategory telemetryCategory = metric.getClass().getAnnotation(TelemetryCategory.class);
106113
if (telemetryCategory != null) {
107-
if (telemetryConfiguration.containField(telemetryCategory.id())) {
114+
if (telemetryConfiguration.containsField(telemetryCategory.id())) {
108115
if ((telemetryConfiguration.get(telemetryCategory.id()))) {
109116
trackMetric(emitter, nameSpace, event);
110117
}
@@ -155,7 +162,6 @@ public static void trackMetric(Emitter emitter, String nameSpace, Unstructured e
155162
Subject subject = new Subject.SubjectBuilder()
156163
.userId(TelemetryParams.userId)
157164
.ipAddress("anonymous")
158-
.timezone("anonymous")
159165
.build();
160166

161167
Tracker tracker = new Tracker.TrackerBuilder(emitter, nameSpace, TelemetryParams.APP_ID_TERASOLOGY)

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

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +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;
20-
import org.terasology.context.Context;
2119
import org.terasology.entitySystem.entity.EntityRef;
2220
import org.terasology.logic.players.LocalPlayer;
2321
import org.terasology.registry.CoreRegistry;
@@ -26,6 +24,7 @@
2624
import org.terasology.telemetry.TelemetryField;
2725

2826
import java.util.Map;
27+
import java.util.Optional;
2928

3029
/**
3130
* A player statistic metric for blocks destroyed in a game.
@@ -45,13 +44,9 @@ public final class BlockDestroyedMetric extends Metric {
4544
private Map blockDestroyedMap;
4645

4746
@Override
48-
public Unstructured getUnstructuredMetric() {
47+
public Optional<Unstructured> getUnstructuredMetric() {
4948
createTelemetryFieldToValue();
50-
SelfDescribingJson modulesData = new SelfDescribingJson(SCHEMA_BLOCK_DESTROYED, telemetryFieldToValue);
51-
52-
return Unstructured.builder()
53-
.eventData(modulesData)
54-
.build();
49+
return getUnstructuredMetric(SCHEMA_BLOCK_DESTROYED, telemetryFieldToValue);
5550
}
5651

5752
@Override

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

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +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;
20-
import org.terasology.context.Context;
2119
import org.terasology.entitySystem.entity.EntityRef;
2220
import org.terasology.logic.players.LocalPlayer;
2321
import org.terasology.registry.CoreRegistry;
@@ -26,6 +24,7 @@
2624
import org.terasology.telemetry.TelemetryField;
2725

2826
import java.util.Map;
27+
import java.util.Optional;
2928

3029
/**
3130
* A players statistic metric for blocks placed.
@@ -45,13 +44,9 @@ public final class BlockPlacedMetric extends Metric {
4544
private LocalPlayer localPlayer;
4645

4746
@Override
48-
public Unstructured getUnstructuredMetric() {
47+
public Optional<Unstructured> getUnstructuredMetric() {
4948
createTelemetryFieldToValue();
50-
SelfDescribingJson modulesData = new SelfDescribingJson(SCHEMA_BLOCK_PLACED, telemetryFieldToValue);
51-
52-
return Unstructured.builder()
53-
.eventData(modulesData)
54-
.build();
49+
return getUnstructuredMetric(SCHEMA_BLOCK_PLACED, telemetryFieldToValue);
5550
}
5651

5752
@Override

engine/src/main/java/org/terasology/telemetry/metrics/MonsterKilledMetric.java renamed to engine/src/main/java/org/terasology/telemetry/metrics/CreatureKilledMetric.java

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +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;
20-
import org.terasology.context.Context;
2119
import org.terasology.entitySystem.entity.EntityRef;
2220
import org.terasology.logic.players.LocalPlayer;
2321
import org.terasology.registry.CoreRegistry;
@@ -26,31 +24,28 @@
2624
import org.terasology.telemetry.TelemetryField;
2725

2826
import java.util.Map;
27+
import java.util.Optional;
2928

3029
/**
31-
* A player statistic metric for monsters killed in a game.
30+
* A player statistic metric for creatures killed in a game.
3231
*/
33-
@TelemetryCategory(id = "monsterKilled",
34-
displayName = "${engine:menu#telemetry-monster-killed}",
32+
@TelemetryCategory(id = "creatureKilled",
33+
displayName = "${engine:menu#telemetry-creature-killed}",
3534
isOneMapMetric = true
3635
)
37-
public final class MonsterKilledMetric extends Metric {
36+
public final class CreatureKilledMetric extends Metric {
3837

39-
public static final String SCHEMA_MONSTER_KILLED = "iglu:org.terasology/monsterKilled/jsonschema/1-0-0";
38+
public static final String SCHEMA_CREATURE_KILLED = "iglu:org.terasology/creatureKilled/jsonschema/1-0-0";
4039

4140
private LocalPlayer localPlayer;
4241

4342
@TelemetryField
44-
private Map monsterKilledMap;
43+
private Map creatureKilledMap;
4544

4645
@Override
47-
public Unstructured getUnstructuredMetric() {
46+
public Optional<Unstructured> getUnstructuredMetric() {
4847
createTelemetryFieldToValue();
49-
SelfDescribingJson modulesData = new SelfDescribingJson(SCHEMA_MONSTER_KILLED, telemetryFieldToValue);
50-
51-
return Unstructured.builder()
52-
.eventData(modulesData)
53-
.build();
48+
return getUnstructuredMetric(SCHEMA_CREATURE_KILLED, telemetryFieldToValue);
5449
}
5550

5651
@Override
@@ -60,7 +55,7 @@ public Unstructured getUnstructuredMetric() {
6055
if (playerEntity.hasComponent(GamePlayStatsComponent.class)) {
6156
GamePlayStatsComponent gamePlayStatsComponent = playerEntity.getComponent(GamePlayStatsComponent.class);
6257
telemetryFieldToValue.clear();
63-
telemetryFieldToValue.putAll(gamePlayStatsComponent.monsterKilled);
58+
telemetryFieldToValue.putAll(gamePlayStatsComponent.creatureKilled);
6459
return telemetryFieldToValue;
6560
} else {
6661
return telemetryFieldToValue;

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

Lines changed: 4 additions & 8 deletions
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.config.Config;
2120
import org.terasology.config.PlayerConfig;
2221
import org.terasology.context.Context;
@@ -27,6 +26,7 @@
2726
import org.terasology.world.generator.WorldGenerator;
2827

2928
import java.util.Map;
29+
import java.util.Optional;
3030

3131
/**
3232
* A metric tracking game configuration such as world generator, network mode,etc.
@@ -64,14 +64,10 @@ public GameConfigurationMetric(Context context) {
6464
}
6565

6666
@Override
67-
public Unstructured getUnstructuredMetric() {
67+
public Optional<Unstructured> getUnstructuredMetric() {
6868
createTelemetryFieldToValue();
69-
Map filteredMetricMap = filterMetricMap(bindingMap);
70-
SelfDescribingJson modulesData = new SelfDescribingJson(SCHEMA_GAME_CONFIGURATION, filteredMetricMap);
71-
72-
return Unstructured.builder()
73-
.eventData(modulesData)
74-
.build();
69+
Map<String, Object> filteredMetricMap = filterMetricMap(bindingMap);
70+
return getUnstructuredMetric(SCHEMA_GAME_CONFIGURATION, filteredMetricMap);
7571
}
7672

7773
@Override

0 commit comments

Comments
 (0)