Skip to content

Commit 8db1d35

Browse files
committed
don't send metric when no data included
1 parent 4bd6026 commit 8db1d35

File tree

9 files changed

+64
-62
lines changed

9 files changed

+64
-62
lines changed

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

Lines changed: 10 additions & 5 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;
@@ -64,8 +63,11 @@ public static void fetchMetricAndSend(Metrics metrics, Class metricClass, Contex
6463
Optional<Metric> optional = metrics.getMetric(metricClass);
6564
if (optional.isPresent()) {
6665
Metric metric = optional.get();
67-
Unstructured unstructured = metric.getUnstructuredMetric();
68-
trackMetric(emitter, nameSpace, unstructured, metric, telemetryConfiguration);
66+
Optional<Unstructured> optionalUnstructure = metric.getUnstructuredMetric();
67+
if (optionalUnstructure.isPresent()) {
68+
Unstructured unstructured = optionalUnstructure.get();
69+
trackMetric(emitter, nameSpace, unstructured, metric, telemetryConfiguration);
70+
}
6971
}
7072
}
7173
}
@@ -82,8 +84,11 @@ public static void fetchMetricAndSend(Metrics metrics, Class metricClass, Emitte
8284
Optional<Metric> optional = metrics.getMetric(metricClass);
8385
if (optional.isPresent()) {
8486
Metric metric = optional.get();
85-
Unstructured unstructured = metric.getUnstructuredMetric();
86-
trackMetric(emitter, nameSpace, unstructured, metric, bindingMap);
87+
Optional<Unstructured> unstructuredOptional = metric.getUnstructuredMetric();
88+
if (unstructuredOptional.isPresent()) {
89+
Unstructured unstructured = unstructuredOptional.get();
90+
trackMetric(emitter, nameSpace, unstructured, metric, bindingMap);
91+
}
8792
}
8893
}
8994

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 & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
import com.snowplowanalytics.snowplow.tracker.events.Unstructured;
1919
import com.snowplowanalytics.snowplow.tracker.payload.SelfDescribingJson;
20-
import org.terasology.context.Context;
2120
import org.terasology.entitySystem.entity.EntityRef;
2221
import org.terasology.logic.players.LocalPlayer;
2322
import org.terasology.registry.CoreRegistry;
@@ -26,6 +25,7 @@
2625
import org.terasology.telemetry.TelemetryField;
2726

2827
import java.util.Map;
28+
import java.util.Optional;
2929

3030
/**
3131
* A players statistic metric for blocks placed.
@@ -45,13 +45,9 @@ public final class BlockPlacedMetric extends Metric {
4545
private LocalPlayer localPlayer;
4646

4747
@Override
48-
public Unstructured getUnstructuredMetric() {
48+
public Optional<Unstructured> getUnstructuredMetric() {
4949
createTelemetryFieldToValue();
50-
SelfDescribingJson modulesData = new SelfDescribingJson(SCHEMA_BLOCK_PLACED, telemetryFieldToValue);
51-
52-
return Unstructured.builder()
53-
.eventData(modulesData)
54-
.build();
50+
return getUnstructuredMetric(SCHEMA_BLOCK_PLACED, telemetryFieldToValue);
5551
}
5652

5753
@Override

engine/src/main/java/org/terasology/telemetry/metrics/CreatureKilledMetric.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.entitySystem.entity.EntityRef;
2120
import org.terasology.logic.players.LocalPlayer;
2221
import org.terasology.registry.CoreRegistry;
@@ -25,6 +24,7 @@
2524
import org.terasology.telemetry.TelemetryField;
2625

2726
import java.util.Map;
27+
import java.util.Optional;
2828

2929
/**
3030
* A player statistic metric for creatures killed in a game.
@@ -35,21 +35,17 @@
3535
)
3636
public final class CreatureKilledMetric extends Metric {
3737

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

4040
private LocalPlayer localPlayer;
4141

4242
@TelemetryField
4343
private Map creatureKilledMap;
4444

4545
@Override
46-
public Unstructured getUnstructuredMetric() {
46+
public Optional<Unstructured> getUnstructuredMetric() {
4747
createTelemetryFieldToValue();
48-
SelfDescribingJson modulesData = new SelfDescribingJson(SCHEMA_MONSTER_KILLED, telemetryFieldToValue);
49-
50-
return Unstructured.builder()
51-
.eventData(modulesData)
52-
.build();
48+
return getUnstructuredMetric(SCHEMA_CREATURE_KILLED, telemetryFieldToValue);
5349
}
5450

5551
@Override

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

engine/src/main/java/org/terasology/telemetry/metrics/GamePlayMetric.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.context.Context;
2221
import org.terasology.entitySystem.entity.EntityRef;
@@ -27,6 +26,7 @@
2726
import org.terasology.telemetry.TelemetryField;
2827

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

3131
/**
3232
* A game play metric tracking metric such as distance traveled, play time, etc.
@@ -55,14 +55,10 @@ public GamePlayMetric(Context context) {
5555
}
5656

5757
@Override
58-
public Unstructured getUnstructuredMetric() {
58+
public Optional<Unstructured> getUnstructuredMetric() {
5959
createTelemetryFieldToValue();
60-
Map<String, ?> filteredMetricMap = filterMetricMap(bindingMap);
61-
SelfDescribingJson modulesData = new SelfDescribingJson(SCHEMA_GAMEPLAY, filteredMetricMap);
62-
63-
return Unstructured.builder()
64-
.eventData(modulesData)
65-
.build();
60+
Map<String, Object> filteredMetricMap = filterMetricMap(bindingMap);
61+
return getUnstructuredMetric(SCHEMA_GAMEPLAY, filteredMetricMap);
6662
}
6763

6864
@Override

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

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

1818
import com.snowplowanalytics.snowplow.tracker.events.Unstructured;
19+
import com.snowplowanalytics.snowplow.tracker.payload.SelfDescribingJson;
1920
import org.reflections.ReflectionUtils;
2021
import org.slf4j.Logger;
2122
import org.slf4j.LoggerFactory;
@@ -34,6 +35,7 @@
3435
import java.util.HashMap;
3536
import java.util.List;
3637
import java.util.Map;
38+
import java.util.Optional;
3739
import java.util.Set;
3840

3941
/**
@@ -61,7 +63,28 @@ public abstract class Metric {
6163
* Generates a snowplow unstructured event that the snowplow tracker can track.
6264
* @return an snowplow unstructured event.
6365
*/
64-
public abstract Unstructured getUnstructuredMetric();
66+
public abstract Optional<Unstructured> getUnstructuredMetric();
67+
68+
69+
/**
70+
* Generates a snowplow unstructured event.
71+
* This method helps to implement abstract getUnstructuredMetric method.
72+
* You can find example in {@link org.terasology.telemetry.metrics.ModulesMetric} and {@link org.terasology.telemetry.metrics.SystemContextMetric}
73+
* @param schema the snowplow event register schema.
74+
* @param mapSentToServer the map that contains the data sent to the server.
75+
* @return Null option if the mapSentToServer doesn't contain data.
76+
*/
77+
public Optional<Unstructured> getUnstructuredMetric(String schema, Map<String, Object> mapSentToServer) {
78+
Optional<Unstructured> optional = Optional.empty();
79+
if (!isEmpty()) {
80+
SelfDescribingJson modulesData = new SelfDescribingJson(schema, mapSentToServer);
81+
Unstructured unstructured = Unstructured.builder().
82+
eventData(modulesData).
83+
build();
84+
optional = Optional.of(unstructured);
85+
}
86+
return optional;
87+
}
6588

6689
/**
6790
* Fetches all TelemetryFields and create a map associating field's name (key) to field's value (value).
@@ -92,7 +115,7 @@ public abstract class Metric {
92115
* @param bindingMap the binding map.
93116
* @return a new metric map that covers the field that the user doesn't want to send by "Disabled Field".
94117
*/
95-
protected Map<String, ?> filterMetricMap(Map<String, Boolean> bindingMap) {
118+
protected Map<String, Object> filterMetricMap(Map<String, Boolean> bindingMap) {
96119
TelemetryCategory telemetryCategory = this.getClass().getAnnotation(TelemetryCategory.class);
97120
Context context = CoreRegistry.get(Context.class);
98121
DisplayDevice display = context.get(DisplayDevice.class);
@@ -141,4 +164,8 @@ public List<String> createTelemetryFieldList() {
141164
}
142165
return fieldsList;
143166
}
167+
168+
public boolean isEmpty() {
169+
return (telemetryFieldToValue.size() == 0);
170+
}
144171
}

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

Lines changed: 3 additions & 7 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.context.Context;
2120
import org.terasology.engine.module.ModuleManager;
2221
import org.terasology.module.Module;
@@ -29,6 +28,7 @@
2928
import java.util.Iterator;
3029
import java.util.List;
3130
import java.util.Map;
31+
import java.util.Optional;
3232

3333
/**
3434
* This is a metric for game modules in current context.
@@ -52,13 +52,9 @@ public ModulesMetric(Context context) {
5252
}
5353

5454
@Override
55-
public Unstructured getUnstructuredMetric() {
55+
public Optional<Unstructured> getUnstructuredMetric() {
5656
createTelemetryFieldToValue();
57-
SelfDescribingJson modulesData = new SelfDescribingJson(SCHEMA_MODULES, telemetryFieldToValue);
58-
59-
return Unstructured.builder()
60-
.eventData(modulesData)
61-
.build();
57+
return getUnstructuredMetric(SCHEMA_MODULES, telemetryFieldToValue);
6258
}
6359

6460
@Override

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

Lines changed: 4 additions & 9 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.lwjgl.opengl.GL11;
2120
import org.terasology.config.Config;
2221
import org.terasology.context.Context;
@@ -26,6 +25,7 @@
2625
import org.terasology.telemetry.TelemetryField;
2726

2827
import java.util.Map;
28+
import java.util.Optional;
2929

3030
/**
3131
* This is a metric for system context.
@@ -102,14 +102,9 @@ public SystemContextMetric(Context context) {
102102
}
103103

104104
@Override
105-
public Unstructured getUnstructuredMetric() {
106-
105+
public Optional<Unstructured> getUnstructuredMetric() {
107106
createTelemetryFieldToValue();
108-
Map<String, ?> filteredMetricMap = filterMetricMap(bindingMap);
109-
SelfDescribingJson systemContextData = new SelfDescribingJson(SCHEMA_OS, filteredMetricMap);
110-
111-
return Unstructured.builder()
112-
.eventData(systemContextData)
113-
.build();
107+
Map<String, Object> filteredMetricMap = filterMetricMap(bindingMap);
108+
return getUnstructuredMetric(SCHEMA_OS, filteredMetricMap);
114109
}
115110
}

0 commit comments

Comments
 (0)