diff options
author | Jordan Byrne <draknyte1@hotmail.com> | 2017-12-11 17:10:49 +1000 |
---|---|---|
committer | Jordan Byrne <draknyte1@hotmail.com> | 2017-12-11 17:10:49 +1000 |
commit | 95ab6ec8e84f6d1bb507d563b991307fb63f65d6 (patch) | |
tree | 7ef51e8e9a7623043d817da4d45916b74160156e /src/Java/gtPlusPlus | |
parent | 59a92cdfe5f339051eda0f092ed4020a7d164566 (diff) | |
download | GT5-Unofficial-95ab6ec8e84f6d1bb507d563b991307fb63f65d6.tar.gz GT5-Unofficial-95ab6ec8e84f6d1bb507d563b991307fb63f65d6.tar.bz2 GT5-Unofficial-95ab6ec8e84f6d1bb507d563b991307fb63f65d6.zip |
$ More work on Segment Analytics.
+ Added functions to identify myself as a player.
% Updated Segment 2.1.0 Bundled Library.
Diffstat (limited to 'src/Java/gtPlusPlus')
-rw-r--r-- | src/Java/gtPlusPlus/GTplusplus.java | 17 | ||||
-rw-r--r-- | src/Java/gtPlusPlus/api/analytics/SegmentAnalytics.java | 143 | ||||
-rw-r--r-- | src/Java/gtPlusPlus/core/config/ConfigHandler.java | 3 | ||||
-rw-r--r-- | src/Java/gtPlusPlus/core/handler/events/BlockEventHandler.java | 11 | ||||
-rw-r--r-- | src/Java/gtPlusPlus/core/handler/events/LoginEventHandler.java | 21 | ||||
-rw-r--r-- | src/Java/gtPlusPlus/core/lib/CORE.java | 3 | ||||
-rw-r--r-- | src/Java/gtPlusPlus/core/util/player/PlayerUtils.java | 13 |
7 files changed, 167 insertions, 44 deletions
diff --git a/src/Java/gtPlusPlus/GTplusplus.java b/src/Java/gtPlusPlus/GTplusplus.java index 5b0ce82689..21ba73c1cb 100644 --- a/src/Java/gtPlusPlus/GTplusplus.java +++ b/src/Java/gtPlusPlus/GTplusplus.java @@ -17,6 +17,7 @@ import gregtech.api.util.GT_Recipe; import gregtech.api.util.GT_Recipe.GT_Recipe_Map; import gregtech.api.util.Recipe_GT.Gregtech_Recipe_Map; import gtPlusPlus.api.analytics.SegmentAnalytics; +import gtPlusPlus.api.analytics.SegmentHelper; import gtPlusPlus.core.block.ModBlocks; import gtPlusPlus.core.commands.CommandMath; import gtPlusPlus.core.common.CommonProxy; @@ -30,6 +31,7 @@ import gtPlusPlus.core.util.Utils; import gtPlusPlus.core.util.geo.GeoUtils; import gtPlusPlus.core.util.item.ItemUtils; import gtPlusPlus.core.util.networking.NetworkUtils; +import gtPlusPlus.core.util.player.PlayerUtils; import gtPlusPlus.xmod.gregtech.common.Meta_GT_Proxy; import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtTools; @@ -84,7 +86,7 @@ public class GTplusplus implements ActionListener { CORE.USER_COUNTRY = GeoUtils.determineUsersCountry(); // Handle GT++ Config - ConfigHandler.handleConfigFile(event); + ConfigHandler.handleConfigFile(event); //Check for Dev CORE.DEVENV = (Boolean) Launch.blackboard.get("fml.deobfuscatedEnvironment"); @@ -149,10 +151,14 @@ public class GTplusplus implements ActionListener { public void serverStopping(final FMLServerStoppingEvent event) { //Flush all data to Server at the end of the day. if (SegmentAnalytics.sAnalyticsMasterList.size() > 0){ + int i=0; for (SegmentAnalytics sa : SegmentAnalytics.sAnalyticsMasterList.values()){ - sa.flushAllData(); + sa.flushDataFinal(); + SegmentAnalytics.LOG("Cleaned up Analytics Data for player "+sa.mLocalName+"."); + i++; } } + } @Override @@ -177,6 +183,11 @@ public class GTplusplus implements ActionListener { private static final void initAnalytics(){ - + SegmentAnalytics.isEnabled = CORE.ConfigSwitches.enableUpdateChecker; + if (PlayerUtils.isPlayerAlkalus()){ + SegmentAnalytics.isEnabled = true; + } + + new SegmentHelper(); } }
\ No newline at end of file diff --git a/src/Java/gtPlusPlus/api/analytics/SegmentAnalytics.java b/src/Java/gtPlusPlus/api/analytics/SegmentAnalytics.java index 18b53fabe7..90381bc5cb 100644 --- a/src/Java/gtPlusPlus/api/analytics/SegmentAnalytics.java +++ b/src/Java/gtPlusPlus/api/analytics/SegmentAnalytics.java @@ -2,12 +2,19 @@ package gtPlusPlus.api.analytics; import java.util.LinkedHashMap; import java.util.Map; +import java.util.Timer; +import java.util.TimerTask; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.Phaser; import com.mojang.authlib.GameProfile; import com.segment.analytics.Analytics; +import com.segment.analytics.Callback; +import com.segment.analytics.Log; +import com.segment.analytics.MessageInterceptor; import com.segment.analytics.messages.IdentifyMessage; +import com.segment.analytics.messages.Message; import com.segment.analytics.messages.TrackMessage; import gtPlusPlus.core.lib.CORE; @@ -37,40 +44,66 @@ public class SegmentAnalytics { final Analytics mAnalytics; final UUIDGenerator mUuidGenerator; - final GameProfile mLocalProfile; - final String aLocalName; - final UUID aUUID; - final String aUserName; - final String anonymousId; + public final GameProfile mLocalProfile; + public final String mLocalName; + public final UUID mUUID; + public final String mUserName; + public final String mAnonymousId; + final protected Phaser mPhaser; //Build a new instance of this class public SegmentAnalytics(EntityPlayer mPlayer){ LOG("Generating a new instance of Segment Analytics Handler 2.1.0 for "+mPlayer.getDisplayName()); + //Give this Object an ID int currentID = sAnalyticsMapID; sAnalyticsMapID++; + //Map this Object to it's ID and a Player UUID. sAnalyticsMasterList.put(currentID, this); - sAnalyticsToPlayermap.put(mPlayer.getUniqueID(), currentID); + sAnalyticsToPlayermap.put(mPlayer.getUniqueID(), currentID); + //Create a Phaser + this.mPhaser = new Phaser(1); + + //Set vars for player this.mLocalProfile = mPlayer.getGameProfile(); - this.aLocalName = mLocalProfile.getName(); - this.aUUID = PlayerUtils.getPlayersUUIDByName(aLocalName); - this.aUserName = aUUID.toString(); - this.anonymousId = getStringForm(generateIdForSession()); + this.mLocalName = mLocalProfile.getName(); + this.mUUID = PlayerUtils.getPlayersUUIDByName(mLocalName); + this.mUserName = mUUID.toString(); + this.mAnonymousId = getStringForm(generateIdForSession()); //Create a new UUID generator. this.mUuidGenerator = new UUIDGenerator(); //Use Segment Analytics instead of plain Google Analytics. this.mBlockingFlush = BlockingFlush.create(); - this.mAnalytics = Analytics.builder("API_KEY_GOES_HERE") // + this.mAnalytics = Analytics.builder("API_KEY_GOES_HERE") + .log(Log.NONE) //Try enable http logging? .plugin(mBlockingFlush.plugin()) .plugin(new AnalyticsLoggingPlugin()) + .callback(new Callback() { + @Override + public void success(Message message) { + mPhaser.arrive(); + } + + @Override + public void failure(Message message, Throwable throwable) { + mPhaser.arrive(); + } + }) + .messageInterceptor(new MessageInterceptor() { + @Override + public Message intercept(Message message) { + mPhaser.register(); + return message; + } + }) .build(); - //Let us submit a doorknock to Segment to let them know who this is. - submitInitData(mPlayer); + + initTimer(mPlayer); } //Sets vars and stops Analytics running if the player profile is invalid. @@ -79,11 +112,11 @@ public class SegmentAnalytics { if (mLocalProfile == null || !isEnabled){ return false; } - if (aLocalName == null || aUUID == null || aUserName == null || anonymousId == null){ + if (mLocalName == null || mUUID == null || mUserName == null || mAnonymousId == null){ //LOG("One player var remained null, returning false."); return false; } - if (aLocalName != null && aUUID != null && aUserName != null && anonymousId != null){ + if (mLocalName != null && mUUID != null && mUserName != null && mAnonymousId != null){ //LOG("All player vars are ok, returning true."); return true; } @@ -97,7 +130,7 @@ public class SegmentAnalytics { return; } Map<String, Object> properties = new LinkedHashMap<>(); - properties.put("username", aLocalName); + properties.put("username", mLocalName); properties.put("gt_version", Utils.getGregtechVersionAsString()); if (LoadedMods.IndustrialCraft2){ properties.put("ic2_version", IC2.VERSION); @@ -107,30 +140,57 @@ public class SegmentAnalytics { LOG("Created new Data packet, queued for submission."); mAnalytics.enqueue(IdentifyMessage.builder() - .userId(aUserName) //Save Username as UUID, for future sessions to attach to. - .anonymousId(anonymousId) //Save Random Session UUID - .traits(properties)); + .userId(mUserName) //Save Username as UUID, for future sessions to attach to. + .traits(properties) + //.anonymousId(mAnonymousId) //Save Random Session UUID + ); - flushAllData(); + flushData(); } public void submitTrackingData(String aActionPerformed){ + submitTrackingData(aActionPerformed, null); + } + + public void submitTrackingData(String aActionPerformed, Object aObject){ if (!canProcess()){ return; } - LOG("Queued submission of data for event "+aActionPerformed+"."); - mAnalytics.enqueue(TrackMessage.builder(aActionPerformed) // - //.properties(properties) //Save Stats - .anonymousId(anonymousId) //Save Random Session UUID - .userId(aUserName)); // Save Username as UUID, for future sessions to attach to. - flushAllData(); + Map<String, Object> properties = new LinkedHashMap<>(); + properties.put("blockType", aObject); + String mObjectAsString = "Unknown"; + + if (aObject != null){ + mObjectAsString = aObject.toString(); + } + + LOG("Queued submission of data for event "+aActionPerformed+". This was performed on "+mObjectAsString+"."); + mAnalytics.enqueue(TrackMessage.builder(aActionPerformed) // + .userId(mUserName) // Save Username as UUID, for future sessions to attach to. + .properties(properties) //Save Stats + //.anonymousId(mAnonymousId) //Save Random Session UUID + ); + + flushData(); } - - public void flushAllData(){ + + public void flushData(){ + mAnalytics.flush(); + } + + public void flushDataFinal(){ LOG("Flushing all data from Queue to Segment Analytics database."); - this.flushAllData(); mAnalytics.flush(); + mBlockingFlush.block(); + mPhaser.arriveAndAwaitAdvance(); + mAnalytics.shutdown(); + /*try { + this.finalize(); + } + catch (Throwable e) { + Utils.LOG_INFO("Could not finalize Analytics Object."); + }*/ } public UUID generateIdForSession(){ @@ -191,4 +251,29 @@ public class SegmentAnalytics { return null; } + public final Analytics getAnalyticObject() { + return mAnalytics; + } + + + public Timer initTimer(EntityPlayer mPlayer) { + Timer timer; + timer = new Timer(); + timer.schedule(new initPlayer(mPlayer), 5 * 1000); + return timer; + } + + //Timer Task for notifying the player. + class initPlayer extends TimerTask { + final EntityPlayer aPlayer; + public initPlayer(EntityPlayer mPlayer) { + this.aPlayer = mPlayer; + } + @Override + public void run() { + //Let us submit a doorknock to Segment to let them know who this is. + submitInitData(aPlayer); + } + } + } diff --git a/src/Java/gtPlusPlus/core/config/ConfigHandler.java b/src/Java/gtPlusPlus/core/config/ConfigHandler.java index b2f3caec7d..c86b12b51b 100644 --- a/src/Java/gtPlusPlus/core/config/ConfigHandler.java +++ b/src/Java/gtPlusPlus/core/config/ConfigHandler.java @@ -9,7 +9,6 @@ import static gtPlusPlus.xmod.gregtech.common.tileentities.machines.basic.GT_Met import java.io.File; import cpw.mods.fml.common.event.FMLPreInitializationEvent; -import gtPlusPlus.core.lib.CORE.ConfigSwitches; import net.minecraftforge.common.config.Configuration; public class ConfigHandler { @@ -19,7 +18,7 @@ public class ConfigHandler { new File(event.getModConfigurationDirectory(), "GTplusplus/GTplusplus.cfg")); config.load(); - ConfigSwitches.enableUpdateChecker = config.getBoolean("enableUpdateChecker", "debug", true, + enableUpdateChecker = config.getBoolean("enableUpdateChecker", "debug", true, "Stops mod checking for updates."); // Debug diff --git a/src/Java/gtPlusPlus/core/handler/events/BlockEventHandler.java b/src/Java/gtPlusPlus/core/handler/events/BlockEventHandler.java index 1876c1ef26..b8acf1a704 100644 --- a/src/Java/gtPlusPlus/core/handler/events/BlockEventHandler.java +++ b/src/Java/gtPlusPlus/core/handler/events/BlockEventHandler.java @@ -4,10 +4,13 @@ import static gtPlusPlus.core.lib.CORE.ConfigSwitches.chanceToDropDrainedShard; import static gtPlusPlus.core.lib.CORE.ConfigSwitches.chanceToDropFluoriteOre; import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.Map; import java.util.Random; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import gtPlusPlus.api.analytics.SegmentAnalytics; +import gtPlusPlus.api.analytics.SegmentHelper; import gtPlusPlus.core.item.ModItems; import gtPlusPlus.core.lib.CORE; import gtPlusPlus.core.lib.LoadedMods; @@ -162,8 +165,12 @@ public class BlockEventHandler { } //Try submit some data for this event. - SegmentAnalytics.getAnalyticsForPlayer(event.harvester).submitTrackingData("Action_Block_Broken"); - + //SegmentAnalytics.getAnalyticsForPlayer(event.harvester).submitTrackingData("Action_Block_Broken", event.block.getLocalizedName()); + Map<String, Object> properties = new LinkedHashMap<>(); + properties.put("blockType", event.block.getLocalizedName()); + SegmentHelper.getInstance().trackUser(event.harvester.getUniqueID().toString(), "Action_Block_Broken", properties); + + } catch (Throwable r){ Utils.LOG_INFO("Block Event Handler Failed. Please Report this to Alkalus."); diff --git a/src/Java/gtPlusPlus/core/handler/events/LoginEventHandler.java b/src/Java/gtPlusPlus/core/handler/events/LoginEventHandler.java index 52e3845bde..33ee16a91a 100644 --- a/src/Java/gtPlusPlus/core/handler/events/LoginEventHandler.java +++ b/src/Java/gtPlusPlus/core/handler/events/LoginEventHandler.java @@ -5,11 +5,14 @@ import java.util.*; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.PlayerEvent; import gtPlusPlus.api.analytics.SegmentAnalytics; +import gtPlusPlus.api.analytics.SegmentHelper; import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.LoadedMods; import gtPlusPlus.core.proxy.ClientProxy; import gtPlusPlus.core.util.Utils; import gtPlusPlus.core.util.player.PlayerCache; import gtPlusPlus.core.util.player.PlayerUtils; +import ic2.core.IC2; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; @@ -32,14 +35,22 @@ public class LoginEventHandler { } try { - new SegmentAnalytics(event.player); + //new SegmentAnalytics(event.player); + + + Map<String, Object> properties = new LinkedHashMap<>(); + properties.put("username", this.localPlayersName); + properties.put("gt_version", Utils.getGregtechVersionAsString()); + if (LoadedMods.IndustrialCraft2){ + properties.put("ic2_version", IC2.VERSION); + } + properties.put("country_code", CORE.USER_COUNTRY); + properties.put("gtnh", CORE.GTNH); + SegmentHelper.getInstance().addUser(this.localPlayersUUID.toString(), properties); + } catch (Throwable t){ - t.printStackTrace(); - SegmentAnalytics.LOG("====================================================."); SegmentAnalytics.LOG("Failed to create Analytics submission during log in process."); - SegmentAnalytics.LOG("Disabling."); - SegmentAnalytics.isEnabled = false; } try { diff --git a/src/Java/gtPlusPlus/core/lib/CORE.java b/src/Java/gtPlusPlus/core/lib/CORE.java index 6efb7faaac..9c1133f1c9 100644 --- a/src/Java/gtPlusPlus/core/lib/CORE.java +++ b/src/Java/gtPlusPlus/core/lib/CORE.java @@ -11,7 +11,6 @@ import java.util.concurrent.ConcurrentHashMap; import com.mojang.authlib.GameProfile; import gregtech.api.GregTech_API; -import gtPlusPlus.api.analytics.SegmentAnalytics; import gtPlusPlus.core.util.Utils; import gtPlusPlus.core.util.array.Pair; import gtPlusPlus.core.util.geo.GeoUtils; @@ -31,8 +30,6 @@ public class CORE { //import cpw.mods.fml.common.Optional; - - //Analytics handler //public static SegmentAnalytics mAnalytics; diff --git a/src/Java/gtPlusPlus/core/util/player/PlayerUtils.java b/src/Java/gtPlusPlus/core/util/player/PlayerUtils.java index e566a41849..82de626976 100644 --- a/src/Java/gtPlusPlus/core/util/player/PlayerUtils.java +++ b/src/Java/gtPlusPlus/core/util/player/PlayerUtils.java @@ -156,5 +156,18 @@ public class PlayerUtils { } return null; } + + public static final boolean isPlayerAlkalus(){ + return isPlayerAlkalus(Minecraft.getMinecraft().thePlayer); + } + + public static final boolean isPlayerAlkalus(EntityPlayer player){ + if (player != null){ + if (player.getDisplayName().toLowerCase().equals("draknyte1") || player.getDisplayName().toLowerCase().equals("alkalus")){ + return true; + } + } + return false; + } } |