Plan | Player Analytics

Plan | Player Analytics 5.6 build 2820

5.3 build 1284 - Extension Bonanza
This version brings a new builder based API to the DataExtension API and with it support for 13 new plugins. In addition to this a lot of bugs were fixed. At least 35 tickets were closed for this release.
Special thanks to hallo1142, Aurelien30000, BruilsiozPro, WolverStones, BrainStone, Kopo942 and AppleMacOS for their contributions to this update. Thanks y'all!
Change log
DataExtensions
New DataExtensions
Added support for 13 plugins:
  • AuthMe
  • FastLogin
  • Heroes
  • KingdomsX
  • Lands
  • LogBlock (Diamonds / stone mined and other metrics)
  • MarriageMaster
  • MyPet
  • PlaceholderAPI (Track any placeholders by adding them to the Plan config)
  • PlotSquared
  • ProtectionStones
  • React (Actions performed by React)
  • Quests
Note that if you're not seeing data from a plugin, make sure the player has joined the server after the update and check plugins tab of their player page before asking about it, thanks :)
Updates to existing DataExtensions
  • AdvancedBan
    • now records data again [unknown impact]
  • BentoBox
    • now has AOneBlock and MagicCobblestoneGenerator data
  • DKBans
    • Fixed NPE [all builds]
  • Floodgate
    • Fixed UNIQUE constraint violation [all builds]
  • Litebans
    • Added datapoint for player names of players who connected using same IP (No IPs displayed though)
  • Tebex
    • now fetches full purchase history with the paginated API and shows player's purchases on their pages.
  • ViaVersion
    • Velocity support
  • Tables over 10 rows now show search bar and pagination (Previous limit 50 rows)
  • It is now possible to sort extension tables by value or date when they have over 25 rows (Previously only alphabetical)
  • Optimized transaction that updates tables for dataextensions
    • old: delete all + insert (2n operations)
    • new: overwrite + insert/delete remaining (n operations)
DataExtension Builder API
The thing that made a lot of this possible:
  • Added a builder based API for defining data of other plugins https://github.com/plan-player-analytics/Plan/wiki/DataExtension-API-Builders
    • Allows dynamic data definition at runtime (Like that of PlaceholderAPI via configuration).
    • Beneficial for plugins that use one class to hold all their data, as only one fetch is needed.
    • IDEs have better auto-completion support compared to annotations.
  • The annotation based API was refactored to use the builder API in its implementation.
Website
  • Updated SB Admin 2 css to newer version
  • Player links now use UUIDs instead of names to support viewing duplicate names in some cases. Note that names still work in the URL.
  • Added average TPS to "During low tps spikes"
  • Fixed server page calendar not appearing. [builds 1174+]
  • Fixed 'Plan' showing as server name on session accordion [builds 1115+]
  • Fixed server page showing join address pie for the whole network [builds 1115+]
  • Kopo942 fixed HighCharts scrollbar not swapping color with Nightmode without refresh [all builds]
  • Fixed /players page player links going to wrong place when using reverse-proxy via /plan/ subdirectory
  • Fixed flickering of extension cards when using Chrome
  • AppleMacOS fixed login page logo being stretched when using Safari
  • Removed "Servers" divider from player page in case to make it clearer that those are also about the player.
Locale
  • Deutch locale updated by hallo1142
  • French locale updated by Aurelien30000
  • Turkish locale updated by BruilsiozPro
  • Czech locale updated by WolverStones
Placeholder API
  • BrainStone added a bunch of <placeholder>_raw placeholders that return milliseconds instead of formatted time value
  • BrainStone fixed Plan not supporting OfflinePlayers and Kopo942 fixed an NPE when %plan_(non_existing_placeholder)% was given
Other Bugfixes
  • {Java} Sorted out illegal reflective access warning during dependency loading [builds 1108+]
  • {Join addresses} Stopped using Paper specific method that was returning bad data in some cases [builds 1124+]
  • {Config} Prevented use of &, / and ? in server names.
  • {Export} Fixed exported player pages not loading json. [builds 1056+]
  • {Database} Possibly fixed locking time exceeded and deadlock issues with extension related transactions [all builds]
  • {Operator status} Fixed operator status not being updated during first join [all builds]
  • {Plugin enable} Fixed plugin not enabling when /plugins/Plan folder was a symlink
5.2 build 1174
This update brings a bunch of small improvements and bugfixes to prepare for the next leg of the development of new features - a lot of extension related work is planned for 5.3.

Bugfixes in change log now have the earliest affected version in square brackets so you know if your version is affected.

Special thanks to Creeperface01 and WolverStones for their contributions to this update.

Change log
Data gathering
  • (New) End crystal caused kills are now counted as PvP kills when a player caused the crystal to blow up.
  • (Critical) Fixed World times not being gathered properly [builds 1097+]
    A missing "update world state" call from session end event lead to sessions missing the last played world's data completely
  • Fixed CPU usage related UnsatisfiedLinkError when running inside a container [all versions]
Website
  • (New) Added Geolocations filter to the Query page
  • (New) Join address pie is now displayed as text if there is only single join address in the database.
  • Fixed JSON cache fetching the wrong thing for sessions json sometimes [builds 1062+]
  • Fixed HTTP 500 on Query page when using MySQL (mariadb not affected) [builds 1147+]
    • Prevented single broken filter breaking all filters in the future
  • Fixed JSON cache related NPE when website was accessed before plugin fully enabled [builds 1062+]
  • Fixed player page sessions calendar having a spinner despite having loaded [builds 1147+]
Database
  • SQLite now waits for queries to finish on shutdown due to the potential for JVM crash when the connection is shut down by another thread than the one doing the query. This does not cause delays if the website is not accessed near the server shutdown. [all versions]
  • Added more messages to plugin shutdown to let users know what Plan is waiting for before disabling
Language
  • Few typos in Czech locale fixed by WolverStones
  • Fixed a bunch of typos
  • Locale files on the repository updated with new language lines
Other
  • PlaceholderAPI (nukkit) version updated by Creeperface01
  • Test coverage increased from 41% to 53%
    • Largest impact comes from a test that checks 200 different variations so that all web endpoints are returning correct access codes instead of being broken.
5.2 build 1147
This update contains a few quality of life improvements as well as bugfixes.
Security vulnerability with cookies not being invalidated properly upon logout was also fixed.
Special thanks to Kopo942 for three contributions to this update.
Change log
New features
Servers dropdown
dropdown servers
Network page servers dropdown now has links to all servers in it. If you got loads of servers there is a scrollbar, so no worries. Thanks to Kopo942 for implementing this.
Persistent cookies
Login cookies now persist across restarts, so that you don't need to log back in after scheduled reboot. If you still need some way to log everyone out, /plan logout * command was added with plan.logout.other permission.
Cookie expiry time can now be set in the config under 'Webserver.Security.Cookie_expires_after'.
During implementation a security vulnerability was discovered where due to the Request headers not being passed inside the code properly, the cookie was not found during logout and was never invalidated. If a rogue actor got access to the cookie they would have been able to use it for the 2 hours cookies were valid in the previous versions.
Join address filter to the Query page
join addresses
You can now filter players in the Query based on what address they have joined with.
Bugfixes
MySQL driver trouble ("Operation not allowed for a result set of type ResultSet.TYPE_FORWARD_ONLY")
Issues with Plan mysql driver overriding driver of other plugins has been resolved by unregistering the driver after it has been loaded.
Join address gathering
  • Made all addresses lowercase to make it easier to read the pie
  • Fixed network join address pie counting one address multiple times when player had joined multiple game servers with the same address
Website
  • Kopo942 fixed URL hash breaking when clicking "Day by Day" or any other graph button on the Network overview tab
  • Kopo942 fixed loader spinner not being centered
Other
  • Fixed a bug where AFK time was gathered for someone with plan.ignore.afk permission when they used the /afk command.
  • Added a warning when database clean task timer is longer than extension data removal threshold (Stops disabled extension data from being cleaned)
  • Wrote more tests and enabled old disabled tests, test coverage increased from 35% to 41%.
5.2 build 1124
Sorry for releasing that mess yesterday. I was way too tired to be making a release in the first place, and it only got worse as issues started pouring in. Well, live and learn. Today's a new day and I have spent 2 hours sorting out issues and testing the join address gathering.
Change log
  • Fixes to join address gathering
    • "Hostname" renamed to "Join addresses" to be more clear
    • This update applies a patch that removes all hostnames gathered by builds 1115-1120 since they are wrong kind of data.
    • Started using proper method on Spigot (PlayerLoginEvent#getHostname). This was tested to be returning the correct thing on my test server
    • Started using proper method on Paper (Player#getVirtualHost#getHostString). This was also tested on my test server.
    • Removed the method call from nukkit since there was no proper method available to gather this data.
    • Moved the hostname pie to its proper location on the server page (It was leaving a gap in the middle of the page)
Change log 5.2 build 1120
  • [Hotfix] Fixed StackOverflowError related to ActiveSession after the page was viewed while a session was active
Change log 5.2 build 1119
  • Made player's join-address update when they join even if they have registered before
  • Use proper methods for getting the hostname on spigot (Probably fixes hostnames for spigot)
Change log 5.2 build 1115

Fancy new join-address pie, bugfixes, jar size optimization and large refactoring work, that’s what this is update contains.

Special thanks to vacoup for implementing player join-address gathering.

Previous update jar was too large for Cloudburst, please see further below for change logs of updates that have not been posted on Cloudburst.

Change log
Player join-address gathering

Some servers like to use different addresses for different advertising campaigns or server listings. Now the join-address player’s use when they join the server (eg "play.server.com") for the first time is gathered. This information is shown on the playerbase overview tab on both network and server pages. Database schema updates.

Special thanks to vacoup for implementing this feature.

Shutdown session save now less disruptive

Sessions are saved on shutdown. Previously this might stop the server from shutting down if the MySQL was too busy or slow to respond. Now the attempt times out after 4 seconds and the unsaved sessions are stored on the next server start instead.

Website
  • Fixed Regular -> Inactive metric being reversed (instead showing Inactive -> Regular, essentially the amount of current regular players)
  • Removed /debug page
Extensions
  • Reduced calls to mcMMO extension due to concerns for performance impact of fetching offline player data.
    • Removed leaderboard table from mcMMO extension
  • BanManager extension updated (Now supports sponge too)
  • BentoBox extension now supports AOneBlock gamemode
  • Removed support for GriefPreventionPlus (I could not find the jar to build it when re-releasing the extensions)
Dependency downloading (jar size optimization)

Now Plan will download the database drivers from maven central first time it enables. This reduces the jar size to 9.9 MB. This had to be done to get under the 20MB limit of Ore and Cloudburst for plugin size. Those release platforms have change log for previous versions in the same update. If you limit outbound connections with a firewall, you need to allow connections to https://repo1.maven.org/maven2/

Refactoring

3 large scale refactorings were done
  • Session was split into ActiveSession and FinishedSession since the old data type was both and thus trying to fulfill too many roles at once.
  • ServerUUID data-type added when previously UUID was used. This makes code a lot easier to read in cases where both player and server UUIDs are processed at the same time.
  • Replaced Abstract Plugin Framework with Platform Abstraction Layer (rewritten abstraction). This was for dependency downloading at runtime.
    • Removed debug logging
    • Removed benchmarking (Enable timing was removed, it might return in the future.)
Project building

Due to bintray shutting down, all Extensions had to be moved to another repository. They’re now located in a self-hosted reposilite instance.

Change log 5.2 build 1062

This is a large large update with a bunch of new features and even more bugfixes. As you may notice, I have changed my username to AuroraLS3 (so the developer hasn’t changed, don’t worry).

Special thanks to Guinness_Akihiko, galexrt, QuakyCZ & MrFriggo for their contributions to this update.

Change log
A quick peek
  • Important H2 database has been deprecated, migrate away from it as soon as possible.
  • Fixed 3 security vulnerabilities
  • Query-page for insights into groups of players.
  • Fixed “Request timed out” issues by adding a disk-based cache, and optimizing some queries
  • 6 other features or improvements
  • 19 other bugfixes
Main features
Query-page

Have you ever wanted to know who played the most in a specific month or week? How about knowing how active your donators are? Or who was online during a lag-spike? Now it’s all possible, with the /query page!

Showcase of the feature: Video
  • Select any dates as a data-range
  • Dynamically choose who you want the data to be about with multiple filters to choose from: play dates, register dates, operators, banned status, current activity group, plugin groups (such as permissions)
  • Share query results with other admins via URL
Disk-based caching (Remedy to timeout issue)

Sometimes database queries are slow and waiting for results takes a while. Now the pages display previously calculated results until the queries complete instead of timing out.

Because of this it is now also possible to update parts of the page by clicking the little refresh icon instead of reloading the whole page.

Main improvements
Extension data to /players page

Players page now contains the same extension data as the /servers pages, so that those on networks can also view the Extension data from bungeecord in a neat table.

Player list: Playtime replaced with Active playtime

In order to make it more useful for servers where players AFK a lot, the players table now uses active playtime instead of playtime.

Performance graph optimizations

Test payload .json was reduced from 24MB to 3.35MB
  • Reduced the amount of queried performance graph points
    • Data for 30 days: 1 point / minute (like before)
    • Data older than 30 days: 1 point / 5 minutes
    • Data older than 60 days: 1 point / 20 minutes
  • Reduced duplicate data (The point dates) in the .json by changing transmit data format
Locale
  • Guinness_Akihiko has contributed a Korean locale, use it with Locale: KO
  • galexrt fixed a typo in German locale
  • QuakyCZ & MrFriggo updated Czech locale
  • Locale files updated to add missing language
Security
Fixed 3 security vulnerabilities
  • Fixed redirection to another page after login
  • Fixed XSS vulnerability in 500 Error page
  • Wrong pass and user not existing now treated the same (To avoid exposing registered usernames)
IP Whitelist for reverse-proxy users

A new setting under Webserver.Security now allows use of X-Forwarded-For header to determine the connecting IP.

This setting is disabled by default, it is important when you use this setting that the reverse-proxy can not be bypassed as otherwise spoofing IPs is possible.

Main bugfixes
MySQL connection reliability improved (Fixed “HikariCP Datasource is closed”)

A MySQL connection hiccup should no longer causes Plan to close the connection pool. A bug in the code caused the pool to be closed and opening it again always failed.

Fixed Timezone oddities on the page
  • Graphs on the website now respond properly to minutes in timezones (For example GMT+3:30)
  • Server calendar should no longer move data -1 day in negative timezones.
Other features
  • Added MySQL max connections setting to limit Plan connection pool size if needed
  • Clean tasks no longer run at the same time across the entire network, reducing spikes in MySQL CPU usage.
  • Added %plan_player_activity_index% and %plan_player_activity_group% placeholders
  • Placeholders now safely replaced off server thread with a cache (Note that the placeholder needs to be replaced at least twice for it to show up if using server thread for replacement). This is to avoid server crashes.
Other improvements
  • Proxy servers now properly detected even if server config was copied to a proxy server before installation
  • Login now properly redirects to tabs if sharing links to specific tab (like performance)
  • MySQL launch options are now more lenient to allow custom certificate definition
  • Table styling for player tables has been updated
  • bStats now available for Velocity
Other bugfixes
  • Fixed Day to day and Hour to hour graphs disappearing with Display_gaps setting
  • Fixed Server Preference Pie on /network page
  • Fixed object Object showing on Kill history when Player name was not in the database
  • Updated bStats to fix a Crash on SpongeForge
  • Fixed dark mode on exported files
  • Fixed + being decoded as a space in player names
  • Fixed HPE_UNEXPECTED_CONTENT_LENGTH with reverse-proxies
  • Fixed CPU null constraint violation when CPU Usage was reported as NaN (Mac OS)
DataExtensions
  • mcMMO extension: Fixed Optional[] around player names(The old data might still have that for a while)
  • Vault extension: Fixed UnsupportedOperationException not being caught
  • AAC extension: Disabled AAC Extension on AAC versions 5+ due to no data being available in the new API
  • ProtocolSupport extension: Fixed IllegalStateException: Access to implementation before detect
  • Fixed ViaVersion error on Velocity
5.1 build 813 - hotfix
  • hotfix Fixed Plan not enabling on Bungeecord after second enable
  • hotfix Fixed Plan not storing Server ID in the ServerInfoFile.yml leading to infinite redirect to "/server/Server null" when server name was not set.
This build contains a few bugfixes.
Special thanks to Shadowhackercz for updating Czech locale.
Change log
Commands
  • Fixed /help causing NPE on Sponge
  • Fixed /plan command not working on 1.8 servers (they use old version of the chatcomponent library)
  • Fixed in game links working on 1.8 servers
Plugin Enable
More information is stored in ServerInfoFile.yml to speed up plugin enable when database is busy
  • Proxy servers now also store the information in the file (Note: manually changing the file might lead to issues)
  • Fixes a few NPEs that occurred when website was accessed before Plan had fully enabled
Locale
  • Czech locale was updated by Shadowhackercz
Extensions
  • Fixed SQL syntax error in FloodGate Extension
  • Fixed mcMMO Extension giving warnings from mcMMO modern
  • Fixed mcMMO Extension not showing data on server pages
  • Fixed mcMMO Extension throwing an error when player left
5.1 build 810 - hotfix for build 808
  • hotfix Fixed Plan not enabling on Bungeecord after second enable
This build contains a few bugfixes.
Special thanks to Shadowhackercz for updating Czech locale.
Change log
Commands
  • Fixed /help causing NPE on Sponge
  • Fixed /plan command not working on 1.8 servers (they use old version of the chatcomponent library)
  • Fixed in game links working on 1.8 servers
Plugin Enable
More information is stored in ServerInfoFile.yml to speed up plugin enable when database is busy
  • Proxy servers now also store the information in the file (Note: manually changing the file might lead to issues)
  • Fixes a few NPEs that occurred when website was accessed before Plan had fully enabled
Locale
  • Czech locale was updated by Shadowhackercz
Extensions
  • Fixed SQL syntax error in FloodGate Extension
  • Fixed mcMMO Extension giving warnings from mcMMO modern
  • Fixed mcMMO Extension not showing data on server pages
  • Fixed mcMMO Extension throwing an error when player left
5.1 build 808
This build contains a few bugfixes.

Special thanks to Shadowhackercz for updating Czech locale.

Change log
Commands

  • Fixed /help causing NPE on Sponge
  • Fixed /plan command not working on 1.8 servers (they use old version of the chatcomponent library)
  • Fixed in game links working on 1.8 servers
Plugin Enable
More information is stored in ServerInfoFile.yml to speed up plugin enable when database is busy
  • Proxy servers now also store the information in the file (Note: manually changing the file might lead to issues)
  • Fixes a few NPEs that occurred when website was accessed before Plan had fully enabled
Locale
  • Czech locale was updated by Shadowhackercz
Extensions
  • Fixed SQL syntax error in FloodGate Extension
  • Fixed mcMMO Extension giving warnings from mcMMO modern
  • Fixed mcMMO Extension not showing data on server pages
  • Fixed mcMMO Extension throwing an error when player left
Top