Releases: plan-player-analytics/Plan
5.4 DEV build 1718
5.4 DEV build 1718
This update fixes fabric 1.19 support.
Special thanks to Kopo for contributions to this update.
Change log
Fabric 1.19 support
Kopo fixed fabric pipeline for 1.19 - Unfortunately the changes are incompatible with older versions of fabric. If you need older version of fabric use older version of Plan.
Frontend BETA
- /players page rewritten in React now available when opted in to frontend beta
- Note that no fixes to functionality were added to it yet, just implementation in React.
- Server page rewrite is making good progress and is about 75% complete.
Server identification
- Possibly fixed ServerInfoFile.yml clearing and server duplicating if MySQL is busy during enable
5.4 build 1690
5.4 build 1690
This update fixes some annoying bugs and prepares the plugin for the move to 5.5 and Java 11 while keeping this version compatible for those unable to update their servers to Java 11.
If no further critical bugs surface next update will be 5.5.
Change log
Plugin stability
- Fixed issue where Plan would prevent server enable from continuing if database was not responsive during enable.
- Fixed 2 crashes when database write latency is high
- Fixed thread starvation crash during high latency when using ViaVersion or ProtocolSupport
- Reduced chance of out of memory crash when during high latency by starting to drop plugin data transactions for a while if queue grows over 500 transactions. (The transactions continue if queue returns to <50)
Database
Join address schema change
- Join addresses are now stored in plan_join_address table and id referencing that is added to plan_sessions table for time based analysis implementation later.
- Backwards compatible schema change - old versions will insert 'unknown' as each sessions address.
- plan_user_info.join_address column was not removed, but its use is discouraged for 3rd parties as its use may be removed in the future.
Fixes to patches
- Fixed UserInfoOptimizationPatch resetting join_address data when applied
- Fixed typo in RemoveDanglingServerDataPatch that caused it to fail
- Possibly improved speed of RemoveDanglingUserDataPatch
Other fixes to database
- Prevented transactions from executing if database ran into fatal error. This reduces amount of errors logged on a failed patch
- Fixed error related to user_id constraint violation for Ping and Session store transactions. If they execute faster than the user register transaction the player will not have up-to-date information until the proper transaction executes, but the storage of other data will no longer fail.
- Prevented ActiveCookieStore related DbOpException if plugin failed to enable
Website
- Server page > Performance now lists Average players under Performance as Numbers.
Frontend BETA
- Implemented player ping graph on the player page when opted into frontend beta
- Fixed nickname list not showing colors properly
- Fixed terminal icon not loading when user registered with console
- Fallback to using relative address if Alternative_IP is misconfigured to reduce confusion. Previously nothing would load if address was different, now there's a chance something loads.
Placeholders
- Wrote tests for placeholders
- Fixed player_recent_kill_{1-10} and player_recent_death_{1-10} off-by-one mistake and related error for n=10.
- Fixed player_unique_players_today erroring if there had been no sessions during today.
- New placeholders
- %plan_player_current_session_length%: The length of active session (Online time)
- %plan_player_current_session_length_raw%: unformatted ms
- %plan_player_latest_session_length%: The length of active session or previous session if not online
- %plan_player_latest_session_length_raw%: unformatted ms
- %plan_player_previous_session_length%: The length of previous non-active session even if online
- %plan_player_previous_session_length_raw%: unformatted ms
- player_ placeholders now support adding :playername or :uuid at the end of placeholder to show data for another player
- Note that if the player by given identifier is not found the placeholder is not replaced.
Other bugfixes
- Console will now log colors properly on Bukkit and Bungee based servers
- Fixed some _raw placeholders from being formatted
- Fixed Error related to GriefDefender Extension
5.4 DEV build 1678 RC2
5.4 DEV build 1678 RC2
More bugfixes to build 1661. This is a release candidate.
Changes from dev build 1661
- Fixed user_id reference error on MariaDB (Error codes for not null constraint were different and thus not detected correctly)
- Fixed user_id reference error related to ServerShutdownPreservation
- Fixed parsing error related to server shutdown preservation csv file
- Fixed typo in RemoveDanglingServerDataPatch that caused it to fail
- Fixed 2 crashes when database write latency is high
- Fixed thread starvation crash during high latency when using ViaVersion or ProtocolSupport
- Reduced chance of out of memory crash when database during high latency by starting to drop plugin data transactions for a while if queue grows over 500 transactions. (The transactions continue if queue returns to <50)
- Fixed issue where Plan would prevent server enable from continuing if database was not responsive during enable.
- Fixed Cookies not getting removed from database in some cases when expired.
Change log
Frontend BETA
- Implemented player ping graph on the player page when opted into frontend beta
- Fixed nickname list not showing colors properly
- Fixed terminal icon not loading when user registered with console
- Fallback to using relative address if Alternative_IP is misconfigured to reduce confusion. Previously nothing would load if address was different, now there's a chance something loads.
Database
Join address schema change
- Join addresses are now stored in plan_join_address table and id referencing that is added to plan_sessions table for time based analysis implementation later.
- Backwards compatible schema change - old versions will insert 'unknown' as each sessions address.
- plan_user_info.join_address column was not removed, but its use is discouraged for 3rd parties as its use may be removed in the future.
Fixed 2 crashes when database write latency is high
- Fixed thread starvation crash during high latency when using ViaVersion or ProtocolSupport
- Reduced chance of out of memory crash when database during high latency by starting to drop plugin data transactions for a while if queue grows over 500 transactions. (The transactions continue if queue returns to <50)
Fixes to patches
- Fixed UserInfoOptimizationPatch resetting join_address data when applied
- Fixed typo in RemoveDanglingServerDataPatch that caused it to fail
- Possibly improved speed of RemoveDanglingUserDataPatch
Other fixes to database
- Fixed issue where Plan would prevent server enable from continuing if database was not responsive during enable.
- Prevented transactions from executing if database ran into fatal error. This reduces amount of errors logged on a failed patch
- Fixed error related to user_id constraint violation for Ping and Session store transactions. If they execute faster than the user register transaction the player will not have up-to-date information until the proper transaction executes, but the storage of other data will no longer fail.
- Prevented ActiveCookieStore related DbOpException if plugin failed to enable
Other bugfixes
- Console will now log colors properly on Bukkit and Bungee based servers
- Fixed some _raw placeholders from being formatted
- Fixed Error related to GriefDefender Extension
5.4 DEV build 1661
5.4 DEV build 1661
There are backwards compatible database schema changes and frontend beta fixes in this update.
This is a release candidate.
Changes from dev build 1651
- Join addresses are now stored in plan_join_address table and id referencing that is added to plan_sessions table for time based analysis implementation later.
- Backwards compatible schema change - old versions will insert 'unknown' as each sessions address.
- plan_user_info.join_address column was not removed, but its use is discouraged for 3rd parties as its use may be removed in the future.
- Prevented transactions from executing if database ran into fatal error. This reduces amount of errors logged on a failed patch
- Frontend BETA
- Implemented player ping graph on the player page when opted into frontend beta
- Fixed nickname list not showing colors properly
- Fixed terminal icon not loading when user registered with console
- Fallback to using relative address if Alternative_IP is misconfigured to reduce confusion. Previously nothing would load if address was different, now there's a chance something loads.
Change log
Frontend BETA
- Implemented player ping graph on the player page when opted into frontend beta
- Fixed nickname list not showing colors properly
- Fixed terminal icon not loading when user registered with console
- Fallback to using relative address if Alternative_IP is misconfigured to reduce confusion. Previously nothing would load if address was different, now there's a chance something loads.
Database
- Fixed UserInfoOptimizationPatch resetting join_address data when applied
- Join addresses are now stored in plan_join_address table and id referencing that is added to plan_sessions table for time based analysis implementation later.
- Backwards compatible schema change - old versions will insert 'unknown' as each sessions address.
- plan_user_info.join_address column was not removed, but its use is discouraged for 3rd parties as its use may be removed in the future.
- Possibly improved speed of RemoveDanglingUserDataPatch
- Prevented ActiveCookieStore related DbOpException if plugin failed to enable
- Prevented transactions from executing if database ran into fatal error. This reduces amount of errors logged on a failed patch
- Fixed error related to user_id constraint violation for Ping and Session store transactions. If they execute faster than the user register transaction the player will not have up-to-date information until the proper transaction executes, but the storage of other data will no longer fail.
Other bugfixes
- Console will now log colors properly on Bukkit and Bungee based servers
- Fixed some _raw placeholders from being formatted
- Fixed Error related to GriefDefender Extension
5.4 DEV build 1651
5.4 DEV build 1651
This dev build contains bugfixes.
Changes from dev build 1648
- Fixed error related to user_id constraint violation also on MySQL (Previous fix only applied on SQLite due to wrong SQL error code detection)
Change log
- Fixed UserInfoOptimizationPatch resetting join_address data when applied
- Note: How this data is stored needs to be changed again in near future. This mistake bumped up priority of that change.
- Possibly improved speed of RemoveDanglingUserDataPatch
- Prevented ActiveCookieStore related DbOpException if plugin failed to enable
- Console will now log colors properly on Bukkit and Bungee based servers
- Fixed some _raw placeholders from being formatted
- Fixed Error related to GriefDefender Extension
- Fixed error related to user_id constraint violation for Ping and Session store transactions. If they execute faster than the user register transaction the player will not have up-to-date information until the proper transaction executes, but the storage of other data will no longer fail.
5.4 DEV build 1648
5.4 DEV build 1648
This dev build contains bugfixes.
Change log
- Fixed UserInfoOptimizationPatch resetting join_address data when applied
- Note: How this data is stored needs to be changed again in near future. This mistake bumped up priority of that change.
- Possibly improved speed of RemoveDanglingUserDataPatch
- Prevented ActiveCookieStore related DbOpException if plugin failed to enable
- Console will now log colors properly on Bukkit and Bungee based servers
- Fixed some _raw placeholders from being formatted
- Fixed Error related to GriefDefender Extension
- Fixed error related to user_id constraint violation for Ping and Session store transactions. If they execute faster than the user register transaction the player will not have up-to-date information until the proper transaction executes, but the storage of other data will no longer fail.
5.4 build 1633
5.4 build 1633
This update brings a couple important bugfixes to build 1628. Please read change log of 1628 if you're running older build than 1628.
Change log
Database
- Fixed databases failing to patch schema if plan_users or plan_servers were missing rows that had uuids in other tables.
This affected roughly ~1 in 80 servers based on reports and metrics.
This problem could occur if server had shutdown at a specific time during player join, or if someone had deleted rows manually from plan_users or plan_servers.- The fix deletes dangling data so that the rest of the patches can execute properly.
- If you have run into this problem on your server this update should fix your database automatically.
- Fixed SQL errors in ViaVersion Extension and ProtocolSupport Extension
5.4 build 1628
5.4 build 1628
Hello! This update brings some great database optimizations, beginning of Frontend BETA (Opt-in), as well as small fixes. Read more below
⚠️ This update is backwards incompatible due to database schema changes.
Servers with old Plan versions should not be enabled after starting a server with this update installed.How to prepare for this update
Networks: Make sure to update all servers that are connected to the database!
If an old version starts with the new database schema it will attempt to reverse some of the new changes.
Special thanks to Kopo, Pingger & KasperiP for contributions to this update.
Change log
Database optimizations (Schema changes)
A lot of work was put into analyzing bottlenecks in queries and slow query logs sent in by users.
Benchmarks using 17k players are promising, as /players page now loads in 5s vs 2+min before.
Database patches will apply on first enable of the update to modify the database schema. This can take up to 4 minutes. Networks: Only enable one Plan server and wait for it to patch database before starting other servers.
- Changed database schema to optimize query speed and table size
- If you're using these columns via Query API you can replace your use case:
- If you need uuid in ResultSet, use
SELECT u.uuid ... JOIN plan_users u on u.id=<table>.user_id
- If you have uuid or server uuid in WHERE, use
server_id=(SELECT id FROM plan_servers WHERE uuid='<server uuid>')
- If you need uuid in ResultSet, use
- Some queries that were identified as slow were optimized to perform better by changing the query
- Geolocations queries
- Ping country table query
- Player table query
- Other queries are also sped up by the uuid -> user_id and server_uuid -> server_id changes, as comparing integers is faster than Strings.
- Extension data insert was made faster by keeping icon ids in memory for short duration
- MySQL insert performance may be improved since auto-commit was turned off
- Query page queries now use user ids instead of uuids - this fixes 'Max SQL size exceeded' issues.
- Added a new index to plan_ping table to speed up ping queries.
- Removed redundant uuid indexes that are now replaced with foreign key indexes for user_id and server_id, which reduces database size.
Frontend BETA (Opt-in)
Frontend is being rewritten in React one page at a time. This is to have more control over what is displayed on the website, since a lot of requested features will require more interaction or hiding features partially. - While doable with vanilla javascript, code would quickly become unmaintainable.
The goal is to get feature parity with the current frontend implementation by rewriting one page at a time and then switch over completely.
Some features will not use React frontend until everything is complete.
- To Opt-in set
Plugin.Frontend_BETA
totrue
- Player page has been rewritten in React, other pages still use previous implementation.
- Html Customization is currently incompatible with the beta and is disabled automatically.
- Export is currently incompatible with the beta and old pages continue to be exported even if beta is enabled.
- Automated browser testing was improved a lot and all pages are now tested for basic javascript errors.
Data gathering
- Fixed AFK time not being gathered on Fabric, the movement detector was incorrectly firing every time a player position packet arrived (Happens once per second).
Config
- Default Player head image address was changed from cravatar to crafatar. Remove the whole row from the config and reload Plan if you wish to use the new setting.
Locale
Kopo did a massive locale system improvement in order to support translations on the frontend side, implementing yml conversion, namespacing all of the existing locale keys and writing json endpoints for frontend to load locale - as well as the code responsible for loading those using i18next.
- Locale files now use .yml format. Any locale files you may be using are converted automatically.
- The new React Frontend allows changing language on the frontend on a per-user basis with a dropdown menu - This is currently only available on the rewritten pages (player page)
- KasperiP fixed a typo in Finnish locale
Export
- Players page is now exported more frequently
- Exported pages should no longer show the Logout button
Extensions
- Essentials Economy was split from Essentials Extension. Now there are 2 extensions managed separately. This was done since the economy calls were triggering updates too frequently. If you have disabled Essentials Extension you may need to disable EssentialsEco Extension separately
- Fixed NPE related to LuckPerms Extension
- Fixed SQL syntax error related to LuckPerms Extension
- Fixed issues with KingdomsX Extension when using newer version of KingdomsX (They changed names of some of their packages)
- Pingger added support for 1.18 stone blocks to LogBlock Extension
QoL changes
- /plan servers command now lists Plan version on each server so it is easier to keep track of servers being out of date.
Bugfixes
- Fixed negative register dates in player dat files breaking the database
- Fixed ConcurrentModificationException related to AFK tracker
- Prevented use of incorrectly formatted WorldAlias regex settings
- Fixed Plan failing to enable if database query took too long during enable.
5.4 DEV build 1619
5.4 DEV build 1619
This dev release contains beginning of Frontend BETA, breaking database schema changes for optimizations, and small fixes.
Special thanks to Kopo & Pingger for contributions to this update.
How to prepare for this update - If you want to go back to previous version you will need to restore from database backup.
Make sure to update all servers that are connected to the database! If an old version starts with the new database schema it will attempt to reverse some of the new changes.
Changes from DEV build 1616
- Fixed issues with user_id not null constraint violation due to transaction execution order
Change log
Database optimizations (Schema changes)
These schema changes are made in bulk now so that servers unable to update to Java 11 before 5.5 will remain compatible database wise.
- Schema changes in order to optimize query speed and database size
- If you're using these columns via Query API you can replace your use case:
- If you need uuid in ResultSet, use
SELECT u.uuid ... JOIN plan_users u on u.id=<table>.user_id
- If you have uuid or server uuid in WHERE, use
server_id=(SELECT id FROM plan_servers WHERE uuid='<server uuid>')
- If you need uuid in ResultSet, use
- Some queries that were identified as slow were optimized to perform better by changing the query
- Geolocation query
- Ping / country table query
- Player table query (/players page loading time improved from 2+ minutes -> 5 seconds with 17k players)
- Other queries are also sped up by the uuid -> user_id and server_uuid -> server_id changes since MySQL doesn't need to compare Strings
- Extension data insert was made faster by keeping icon ids in memory
- MySQL insert performance may be improved since auto-commit was turned off
- Query page queries now use user ids instead of uuids - this fixes 'Max SQL size exceeded' issues.
- Added a new index to plan_ping table to speed up ping queries.
- Removed redundant uuid indexes that are now replaced with foreign key indexes for user_id and server_id
Frontend BETA (Opt-in)
Frontend is being rewritten in React one page at a time. This is to have more control over what is displayed on the website, since a lot of requested features will require more interaction or hiding features partially. - While doable with vanilla javascript, code would quickly become unmaintainable.
The goal is to get feature parity with the current frontend implementation by rewriting one page at a time and then switch over completely.
Some features will not use React frontend until everything is complete.
- To Opt-in set
Plugin.Frontend_BETA
totrue
- Player page has been rewritten in React, other pages still use previous implementation.
- Html Customization is currently incompatible with the beta and is disabled automatically.
- Export is currently incompatible with the beta and old pages continue to be exported even if beta is enabled.
- Automated browser testing was improved a lot and all pages are now tested for basic javascript errors.
Config
- Default Player head image address was changed from cravatar to crafatar. Remove the whole row from the config and reload Plan if you wish to use the new setting.
Locale
Kopo did a massive locale system improvement in order to support translations on the frontend side, implementing yml conversion, namespacing all of the existing locale keys and writing json endpoints for frontend to load locale - as well as the code responsible for loading those using i18next.
- Locale files now use .yml format. Any locale files you may be using are converted automatically.
- The new React Frontend allows changing language on the frontend on a per-user basis with a dropdown menu - This is currently only available on the rewritten pages (player page)
Export
- Players page is now exported more frequently
- Exported pages should no longer show the Logout button
Extensions
- Essentials Economy was split from Essentials Extension. Now there are 2 extensions managed separately. This was done since the economy calls were triggering updates too frequently. If you have disabled Essentials Extension you may need to disable EssentialsEco Extension separately
- Fixed NPE related to LuckPerms Extension
- Fixed SQL syntax error related to LuckPerms Extension
- Fixed issues with KingdomsX Extension when using newer version of KingdomsX (They changed names of some of their packages)
- Pingger added support for 1.18 stone blocks to LogBlock Extension
QoL changes
- /plan servers command now lists Plan version on each server so it is easier to keep track of servers being out of date.
Bugfixes
- Fixed negative register dates in player dat files breaking the database
- Fixed ConcurrentModificationException related to AFK tracker
- Prevented use of incorrectly formatted WorldAlias regex settings
- Fixed Plan failing to enable if database query took too long during enable.
5.4 DEV build 1616
5.4 DEV build 1616
This dev release contains beginning of Frontend BETA, breaking database schema changes for optimizations, and small fixes.
Special thanks to Kopo & Pingger for contributions to this update.
How to prepare for this update - If you want to go back to previous version you will need to restore from database backup.
Changes from DEV build 1611
- Schema changes (more below)
- Added Plan version to /plan servers command
- Fixed error related to LuckPerms Extension
- Pingger added support for 1.18 stone blocks to LogBlock Extension
- Fixed plugin tabs not having padding or header
Change log
Database optimizations (Schema changes)
These schema changes are made in bulk now so that servers unable to update to Java 11 before 5.5 will remain compatible database wise.
- Schema changes in order to optimize query speed and database size
- If you're using these columns via Query API you can replace your use case:
- If you need uuid in ResultSet, use
SELECT u.uuid ... JOIN plan_users u on u.id=<table>.user_id
- If you have uuid or server uuid in WHERE, use
server_id=(SELECT id FROM plan_servers WHERE uuid='<server uuid>')
- If you need uuid in ResultSet, use
- Some queries that were identified as slow were optimized to perform better by changing the query
- Geolocation query
- Ping / country table query
- Player table query (/players page loading time improved from 2+ minutes -> 5 seconds with 17k players)
- Other queries are also sped up by the uuid -> user_id and server_uuid -> server_id changes since MySQL doesn't need to compare Strings
- Extension data insert was made faster by keeping icon ids in memory
- MySQL insert performance may be improved since auto-commit was turned off
- Query page queries now use user ids instead of uuids - this fixes 'Max SQL size exceeded' issues.
- Added a new index to plan_ping table to speed up ping queries.
- Removed redundant uuid indexes that are now replaced with foreign key indexes for user_id and server_id
Frontend BETA (Opt-in)
Frontend is being rewritten in React one page at a time. This is to have more control over what is displayed on the website, since a lot of requested features will require more interaction or hiding features partially. - While doable with vanilla javascript, code would quickly become unmaintainable.
The goal is to get feature parity with the current frontend implementation by rewriting one page at a time and then switch over completely.
Some features will not use React frontend until everything is complete.
- To Opt-in set
Plugin.Frontend_BETA
totrue
- Player page has been rewritten in React, other pages still use previous implementation.
- Html Customization is currently incompatible with the beta and is disabled automatically.
- Export is currently incompatible with the beta and old pages continue to be exported even if beta is enabled.
- Automated browser testing was improved a lot and all pages are now tested for basic javascript errors.
Config
- Default Player head image address was changed from cravatar to crafatar. Remove the whole row from the config and reload Plan if you wish to use the new setting.
Locale
Kopo did a massive locale system improvement in order to support translations on the frontend side, implementing yml conversion, namespacing all of the existing locale keys and writing json endpoints for frontend to load locale - as well as the code responsible for loading those using i18next.
- Locale files now use .yml format. Any locale files you may be using are converted automatically.
- The new React Frontend allows changing language on the frontend on a per-user basis with a dropdown menu - This is currently only available on the rewritten pages (player page)
Export
- Players page is now exported more frequently
- Exported pages should no longer show the Logout button
Extensions
- Essentials Economy was split from Essentials Extension. Now there are 2 extensions managed separately. This was done since the economy calls were triggering updates too frequently. If you have disabled Essentials Extension you may need to disable EssentialsEco Extension separately
- Fixed NPE related to LuckPerms Extension
- Fixed SQL syntax error related to LuckPerms Extension
- Fixed issues with KingdomsX Extension when using newer version of KingdomsX (They changed names of some of their packages)
- Pingger added support for 1.18 stone blocks to LogBlock Extension
QoL changes
- /plan servers command now lists Plan version on each server so it is easier to keep track of servers being out of date.
Bugfixes
- Fixed negative register dates in player dat files breaking the database
- Fixed ConcurrentModificationException related to AFK tracker
- Prevented use of incorrectly formatted WorldAlias regex settings
- Fixed Plan failing to enable if database query took too long during enable.