Skip to content

Commit

Permalink
don't send metric when no data included
Browse files Browse the repository at this point in the history
  • Loading branch information
GabrielXia committed Aug 28, 2017
1 parent 4bd6026 commit 8db1d35
Show file tree
Hide file tree
Showing 9 changed files with 64 additions and 62 deletions.
15 changes: 10 additions & 5 deletions engine/src/main/java/org/terasology/telemetry/TelemetryUtils.java
Expand Up @@ -22,7 +22,6 @@
import com.snowplowanalytics.snowplow.tracker.events.Unstructured;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.terasology.config.TelemetryConfig;
import org.terasology.config.facade.TelemetryConfiguration;
import org.terasology.context.Context;
import org.terasology.engine.subsystem.DisplayDevice;
Expand Down Expand Up @@ -64,8 +63,11 @@ public static void fetchMetricAndSend(Metrics metrics, Class metricClass, Contex
Optional<Metric> optional = metrics.getMetric(metricClass);
if (optional.isPresent()) {
Metric metric = optional.get();
Unstructured unstructured = metric.getUnstructuredMetric();
trackMetric(emitter, nameSpace, unstructured, metric, telemetryConfiguration);
Optional<Unstructured> optionalUnstructure = metric.getUnstructuredMetric();
if (optionalUnstructure.isPresent()) {
Unstructured unstructured = optionalUnstructure.get();
trackMetric(emitter, nameSpace, unstructured, metric, telemetryConfiguration);
}
}
}
}
Expand All @@ -82,8 +84,11 @@ public static void fetchMetricAndSend(Metrics metrics, Class metricClass, Emitte
Optional<Metric> optional = metrics.getMetric(metricClass);
if (optional.isPresent()) {
Metric metric = optional.get();
Unstructured unstructured = metric.getUnstructuredMetric();
trackMetric(emitter, nameSpace, unstructured, metric, bindingMap);
Optional<Unstructured> unstructuredOptional = metric.getUnstructuredMetric();
if (unstructuredOptional.isPresent()) {
Unstructured unstructured = unstructuredOptional.get();
trackMetric(emitter, nameSpace, unstructured, metric, bindingMap);
}
}
}

Expand Down
Expand Up @@ -16,8 +16,6 @@
package org.terasology.telemetry.metrics;

import com.snowplowanalytics.snowplow.tracker.events.Unstructured;
import com.snowplowanalytics.snowplow.tracker.payload.SelfDescribingJson;
import org.terasology.context.Context;
import org.terasology.entitySystem.entity.EntityRef;
import org.terasology.logic.players.LocalPlayer;
import org.terasology.registry.CoreRegistry;
Expand All @@ -26,6 +24,7 @@
import org.terasology.telemetry.TelemetryField;

import java.util.Map;
import java.util.Optional;

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

@Override
public Unstructured getUnstructuredMetric() {
public Optional<Unstructured> getUnstructuredMetric() {
createTelemetryFieldToValue();
SelfDescribingJson modulesData = new SelfDescribingJson(SCHEMA_BLOCK_DESTROYED, telemetryFieldToValue);

return Unstructured.builder()
.eventData(modulesData)
.build();
return getUnstructuredMetric(SCHEMA_BLOCK_DESTROYED, telemetryFieldToValue);
}

@Override
Expand Down
Expand Up @@ -17,7 +17,6 @@

import com.snowplowanalytics.snowplow.tracker.events.Unstructured;
import com.snowplowanalytics.snowplow.tracker.payload.SelfDescribingJson;
import org.terasology.context.Context;
import org.terasology.entitySystem.entity.EntityRef;
import org.terasology.logic.players.LocalPlayer;
import org.terasology.registry.CoreRegistry;
Expand All @@ -26,6 +25,7 @@
import org.terasology.telemetry.TelemetryField;

import java.util.Map;
import java.util.Optional;

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

@Override
public Unstructured getUnstructuredMetric() {
public Optional<Unstructured> getUnstructuredMetric() {
createTelemetryFieldToValue();
SelfDescribingJson modulesData = new SelfDescribingJson(SCHEMA_BLOCK_PLACED, telemetryFieldToValue);

return Unstructured.builder()
.eventData(modulesData)
.build();
return getUnstructuredMetric(SCHEMA_BLOCK_PLACED, telemetryFieldToValue);
}

@Override
Expand Down
Expand Up @@ -16,7 +16,6 @@
package org.terasology.telemetry.metrics;

import com.snowplowanalytics.snowplow.tracker.events.Unstructured;
import com.snowplowanalytics.snowplow.tracker.payload.SelfDescribingJson;
import org.terasology.entitySystem.entity.EntityRef;
import org.terasology.logic.players.LocalPlayer;
import org.terasology.registry.CoreRegistry;
Expand All @@ -25,6 +24,7 @@
import org.terasology.telemetry.TelemetryField;

import java.util.Map;
import java.util.Optional;

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

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

private LocalPlayer localPlayer;

@TelemetryField
private Map creatureKilledMap;

@Override
public Unstructured getUnstructuredMetric() {
public Optional<Unstructured> getUnstructuredMetric() {
createTelemetryFieldToValue();
SelfDescribingJson modulesData = new SelfDescribingJson(SCHEMA_MONSTER_KILLED, telemetryFieldToValue);

return Unstructured.builder()
.eventData(modulesData)
.build();
return getUnstructuredMetric(SCHEMA_CREATURE_KILLED, telemetryFieldToValue);
}

@Override
Expand Down
Expand Up @@ -16,7 +16,6 @@
package org.terasology.telemetry.metrics;

import com.snowplowanalytics.snowplow.tracker.events.Unstructured;
import com.snowplowanalytics.snowplow.tracker.payload.SelfDescribingJson;
import org.terasology.config.Config;
import org.terasology.config.PlayerConfig;
import org.terasology.context.Context;
Expand All @@ -27,6 +26,7 @@
import org.terasology.world.generator.WorldGenerator;

import java.util.Map;
import java.util.Optional;

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

@Override
public Unstructured getUnstructuredMetric() {
public Optional<Unstructured> getUnstructuredMetric() {
createTelemetryFieldToValue();
Map filteredMetricMap = filterMetricMap(bindingMap);
SelfDescribingJson modulesData = new SelfDescribingJson(SCHEMA_GAME_CONFIGURATION, filteredMetricMap);

return Unstructured.builder()
.eventData(modulesData)
.build();
Map<String, Object> filteredMetricMap = filterMetricMap(bindingMap);
return getUnstructuredMetric(SCHEMA_GAME_CONFIGURATION, filteredMetricMap);
}

@Override
Expand Down
Expand Up @@ -16,7 +16,6 @@
package org.terasology.telemetry.metrics;

import com.snowplowanalytics.snowplow.tracker.events.Unstructured;
import com.snowplowanalytics.snowplow.tracker.payload.SelfDescribingJson;
import org.terasology.config.Config;
import org.terasology.context.Context;
import org.terasology.entitySystem.entity.EntityRef;
Expand All @@ -27,6 +26,7 @@
import org.terasology.telemetry.TelemetryField;

import java.util.Map;
import java.util.Optional;

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

@Override
public Unstructured getUnstructuredMetric() {
public Optional<Unstructured> getUnstructuredMetric() {
createTelemetryFieldToValue();
Map<String, ?> filteredMetricMap = filterMetricMap(bindingMap);
SelfDescribingJson modulesData = new SelfDescribingJson(SCHEMA_GAMEPLAY, filteredMetricMap);

return Unstructured.builder()
.eventData(modulesData)
.build();
Map<String, Object> filteredMetricMap = filterMetricMap(bindingMap);
return getUnstructuredMetric(SCHEMA_GAMEPLAY, filteredMetricMap);
}

@Override
Expand Down
31 changes: 29 additions & 2 deletions engine/src/main/java/org/terasology/telemetry/metrics/Metric.java
Expand Up @@ -16,6 +16,7 @@
package org.terasology.telemetry.metrics;

import com.snowplowanalytics.snowplow.tracker.events.Unstructured;
import com.snowplowanalytics.snowplow.tracker.payload.SelfDescribingJson;
import org.reflections.ReflectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -34,6 +35,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;

/**
Expand Down Expand Up @@ -61,7 +63,28 @@ public abstract class Metric {
* Generates a snowplow unstructured event that the snowplow tracker can track.
* @return an snowplow unstructured event.
*/
public abstract Unstructured getUnstructuredMetric();
public abstract Optional<Unstructured> getUnstructuredMetric();


/**
* Generates a snowplow unstructured event.
* This method helps to implement abstract getUnstructuredMetric method.
* You can find example in {@link org.terasology.telemetry.metrics.ModulesMetric} and {@link org.terasology.telemetry.metrics.SystemContextMetric}
* @param schema the snowplow event register schema.
* @param mapSentToServer the map that contains the data sent to the server.
* @return Null option if the mapSentToServer doesn't contain data.
*/
public Optional<Unstructured> getUnstructuredMetric(String schema, Map<String, Object> mapSentToServer) {
Optional<Unstructured> optional = Optional.empty();
if (!isEmpty()) {
SelfDescribingJson modulesData = new SelfDescribingJson(schema, mapSentToServer);
Unstructured unstructured = Unstructured.builder().
eventData(modulesData).
build();
optional = Optional.of(unstructured);
}
return optional;
}

/**
* Fetches all TelemetryFields and create a map associating field's name (key) to field's value (value).
Expand Down Expand Up @@ -92,7 +115,7 @@ public abstract class Metric {
* @param bindingMap the binding map.
* @return a new metric map that covers the field that the user doesn't want to send by "Disabled Field".
*/
protected Map<String, ?> filterMetricMap(Map<String, Boolean> bindingMap) {
protected Map<String, Object> filterMetricMap(Map<String, Boolean> bindingMap) {
TelemetryCategory telemetryCategory = this.getClass().getAnnotation(TelemetryCategory.class);
Context context = CoreRegistry.get(Context.class);
DisplayDevice display = context.get(DisplayDevice.class);
Expand Down Expand Up @@ -141,4 +164,8 @@ public List<String> createTelemetryFieldList() {
}
return fieldsList;
}

public boolean isEmpty() {
return (telemetryFieldToValue.size() == 0);
}
}
Expand Up @@ -16,7 +16,6 @@
package org.terasology.telemetry.metrics;

import com.snowplowanalytics.snowplow.tracker.events.Unstructured;
import com.snowplowanalytics.snowplow.tracker.payload.SelfDescribingJson;
import org.terasology.context.Context;
import org.terasology.engine.module.ModuleManager;
import org.terasology.module.Module;
Expand All @@ -29,6 +28,7 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Optional;

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

@Override
public Unstructured getUnstructuredMetric() {
public Optional<Unstructured> getUnstructuredMetric() {
createTelemetryFieldToValue();
SelfDescribingJson modulesData = new SelfDescribingJson(SCHEMA_MODULES, telemetryFieldToValue);

return Unstructured.builder()
.eventData(modulesData)
.build();
return getUnstructuredMetric(SCHEMA_MODULES, telemetryFieldToValue);
}

@Override
Expand Down
Expand Up @@ -16,7 +16,6 @@
package org.terasology.telemetry.metrics;

import com.snowplowanalytics.snowplow.tracker.events.Unstructured;
import com.snowplowanalytics.snowplow.tracker.payload.SelfDescribingJson;
import org.lwjgl.opengl.GL11;
import org.terasology.config.Config;
import org.terasology.context.Context;
Expand All @@ -26,6 +25,7 @@
import org.terasology.telemetry.TelemetryField;

import java.util.Map;
import java.util.Optional;

/**
* This is a metric for system context.
Expand Down Expand Up @@ -102,14 +102,9 @@ public SystemContextMetric(Context context) {
}

@Override
public Unstructured getUnstructuredMetric() {

public Optional<Unstructured> getUnstructuredMetric() {
createTelemetryFieldToValue();
Map<String, ?> filteredMetricMap = filterMetricMap(bindingMap);
SelfDescribingJson systemContextData = new SelfDescribingJson(SCHEMA_OS, filteredMetricMap);

return Unstructured.builder()
.eventData(systemContextData)
.build();
Map<String, Object> filteredMetricMap = filterMetricMap(bindingMap);
return getUnstructuredMetric(SCHEMA_OS, filteredMetricMap);
}
}

0 comments on commit 8db1d35

Please sign in to comment.