plan-player-analytics / Plan

Player Analytics plugin for Minecraft Server platforms - View player activity of your server with ease. :calendar:
https://www.spigotmc.org/resources/plan-player-analytics.32536/
GNU Lesser General Public License v3.0
851 stars 169 forks source link

Interface redesign #1021

Closed AuroraLS3 closed 4 years ago

AuroraLS3 commented 5 years ago

Is your feature request related to a problem? Please describe.

The current design limits what kind of information can be conveyed efficiently, and some useless information is displayed on the pages.

Problems with current design

Describe the solution you'd like

Interface redesign with a more up to date template.

Requirements:

Additional context

Current form of analysis uses quite a lot of memory. Optimizing this could be achieved during the redesign.

AuroraLS3 commented 5 years ago

Preview of redesign that still needs some work to use JSON instead of hardcoded values: https://rsl1122.github.io/Plan-page-preview/

AuroraLS3 commented 5 years ago

Fluid TODO-list for /server page

More steps will be added as the list progresses.

Some more challenging steps have been left incomplete until most things are functional. This way development does not stall on every obstacle. They will be completed later.

Here is a short list of things that have been challenging so far:

If you would like to assist you can join discord on#development-channel to discuss things further.

Server Overview tab ✔️

List (Complete) - [x] Players online graph - [x] Add a JSON end point with database access - [x] Week comparison timeframes - [x] 7 Days - [x] Unique player count - [x] Unique player average - [x] New player count - [x] New player retention - [x] Average TPS - [x] Low TPS spikes - [x] Server downtime - [x] Numbers - [x] Total player count - [x] Regular player count (Activity index 2.5+ query) - [x] Online player count - [x] Last player peak - [x] Highest player peak - [x] Playtime total - [x] Average playtime / player - [x] Session count - [x] Player kill count - [x] Mob kill count - [x] Death count - [x] Week comparison - [x] Unique players 7 days before - [x] Difference (trend) - [x] New players 7 days before - [x] Difference (trend) - [x] Regular players 7 days before - [x] Average playtime 7 days before - [x] Average playtime last 7 days - [x] Difference (trend) - [x] Sessions, player kills, mob kills, deaths 7 days before - [x] Sessions, player kills, mob kills, deaths last 7 days - [x] Difference (trend)

Online Activity Overview ✔️

List (Complete) - [x] Unique & New graph - [x] Session calendar - [x] Fix calendar going out of the box - [x] Punchcard - [x] Numbers - [x] Unique players 30d, 7d, 24h, trend - [x] Unique players / day 30d, 7d, 24h, trend - [x] New players ... - [x] New players / day ... - [x] New player retention 30d, 7d - [x] New player retention prediction 1. From all players, find those who stayed/didn't after a month from their register date. 2. Turn the players to retention data {activityIndex day after register, online when player joined} 3. Average those who stayed/didn't to two average retention data. 4. Compare distance of new players to the averages (vector distance) - [x] Playtime 30d, 7d, 24h, trend - [x] Average Playtime / Day 30d, 7d, 24h, trend - [x] session length avg ... - [x] sessions ... - [x] Insights - [x] First join average (30 days) - [x] Trend - [x] First session length average (30 days) - [x] Trend - [x] Joins with 0 players online (30 days) - [x] Trend - [x] First sessions with 0 players online (30 days) - [x] Trend

Sessions tab ✔️

List (incomplete) - [x] Javascript creating session list - [x] Add server & player names to Session object - [x] Session list - [x] Player name - [x] Session start - [x] First session (registered symbol) - [x] Length - [x] WorldTimes - [x] Most played world - [x] Session end - [x] AFK time - [x] Server name - [x] Player kill list - [x] Mob kills - [x] Deaths - [x] Total worldtimes pie - [x] Insights - [ ] ~~Most active time~~ - [ ] ~~Least active time~~ - [x] Most active gamemode - [x] Most active gamemode percentage - [x] Sever occupied - [x] Server occupied percentage - [x] Total playtime - [x] AFK Time - [x] AFK Time percentage

PvP & PvE tab ✔️

List (Complete) - [x] Kill list - [x] Numbers - [x] Player kills all time, 30d, 7d - [ ] ~~Player caused deaths all time, 30d, 7d~~ (Should this be same as player kills?) - [x] KDR all time, 30d, 7d - [x] Mob kills ... - [x] Mob caused deaths ... - [x] Mob KDR ... - [x] Deaths ... - [x] Insights - [x] Top 3 weapons

Playerbase Overview ✔️

List (Complete) - [x] Playerbase development Stack graph - [x] Take into account players that don't have sessions in query for Inactive players. - [x] Current playerbase pie graph - [x] Trends - [x] Total players 30d ago, now, trend (15 days) - [x] Regular players 30d ago, now, trend (15 days) (Activity index) - [x] Average Playtime / Player ... - [x] AFK% / Player ... - [x] Average Playtime / Regular Player (Activity index) ... - [x] Average Session Length / Regular Player (Activity index) ... - [x] AFK / Regular Player (Activity index) ... - [x] Insights - [x] How many new players became regular (Activity index) - [x] How many regular players became inactive (Activity Index)

Geolocations tab ✔️

List (Complete) - [x] Geolocations map - [x] Connection information (Ping table) a. Get most recent country for each player b. Get average, min OR max ping for each player c. Group for each country

Performance ✔️

List (Complete) - [x] All graph - [x] TPS graph - [x] CPU & RAM graph - [x] World Load graph - [x] Ping graph - [x] Disk Space graph - [x] Numbers - [x] Low TPS Spikes 30d, 7d, 24h - [x] Server Downtime ... - [x] Average TPS ... - [x] Average CPU ... - [x] Average RAM ... - [x] Average Chunks ... - [x] Max Free Disk ... - [x] Min Free Disk ... - [x] Insights - [x] Low TPS Spike averages (players, entities, chunks, cpu) - [ ] ~~Low TPS Spike disconnects~~ - [ ] ~~Low Disk Space dates~~

Plugins

Fix features

Other

AuroraLS3 commented 5 years ago

Suggestion on discord:

Put the unique players graphic for the network as well so we can observe better how much players do we have per day on the whole network ~Luke#2700

AuroraLS3 commented 5 years ago

Suggestions via PM on discord, content reworded:

AuroraLS3 commented 5 years ago

Fluid TODO-list for /player page

More steps will be added as the list progresses.

Player overview tab :heavy_check_mark:

List (Complete) - [x] Information card - [x] Online / Offline - [x] Titles (Operator / Banned) - [x] Times kicked - [x] Player kills, Mob kills, Deaths - [x] Total Playtime, Active playtime, afk time - [x] Session count, Longest session, Session median/average - [x] Activity index & group - [x] Favorite server (Most played server) - [x] Average ping, Worst ping, Best ping - [x] Registered, Last Seen - [x] Nicknames - [x] Connection information - [x] Punchcard - [x] Online activity - [x] Playtime 30d, 7d - [x] Active playtime, percentage 30d, 7d - [x] AFK time, percentage 30d, 7d - [x] Average session length .. - [x] Session count .. - [x] Player kills .. - [x] Mob kills .. - [x] Deaths ..

Sessions tab :heavy_check_mark:

List (Complete) - [x] Session calendar - [x] Fix session time text color (Appears grey on light mode) - [x] World Playtime - [x] Recent sessions - [x] Fix WorldPie not sizing appropriately on load

PvP & PvE tab :heavy_check_mark:

List (Complete) - [x] Kill list - [x] Death list - [x] Numbers - [x] Player kills all time, 30d, 7d - [x] Player caused deaths all time, 30d, 7d - [x] KDR all time, 30d, 7d - [x] Mob kills ... - [x] Mob caused deaths ... - [x] Mob KDR ... - [x] Deaths ... - [x] Insights - [x] Top 3 weapons

Servers overview tab :heavy_check_mark:

List (Complete) - [x] Server Preference pie - [x] Server Accordion - [x] Server Name - [x] Playtime - [x] Registered - [x] Last seen - [x] Operator - [x] Banned - [x] Session count - [x] AFK Time - [x] Longest session - [x] Session median (or average) - [x] Player kills - [x] Mob kills - [x] Deaths - [x] World Pie

Plugins tabs :heavy_check_mark:

List (Complete) - [x] Change InspectPluginsTabs format to new style - [x] Add placeholders for the plugin tab content

Fix broken features

Other

AuroraLS3 commented 5 years ago

Fluid TODO-list for /network page

More steps will be added as the list progresses.

Network Overview page ✔️

List (Complete) - [x] Network players online graph - [x] Unique and New graph - [x] Players - [x] Unique players 24h, 7d, 30d - [x] New players ... - [x] Numbers - [x] Total players - [x] Regular players - [x] Online players - [x] Last peak - [x] All time peak - [x] Total playtime - [x] Avg playtime / Player - [x] Average session length - [x] Session count - [x] Week comparison - [x] Unique players 7 days before, last 7 days, trend - [x] New players ... - [x] Regular players ... - [x] Average playtime / Player ... - [x] Average session length ... - [x] Session count

Servers tab ✔️

List (Complete) - [x] Server containers - [x] Registered player count - [x] Server name - [x] Online players graph - [x] Last peak - [x] All time peak - [x] Unique players (Last 7 days) - [x] New Players (Last 7 days) - [x] Low TPS Spikes (Last 7 days) - [x] Server downtime (Last 7 days)

Sessions tab ✔️

List (Complete) - [x] Session accordion - [x] Server playtime pie - [x] Insights - [ ] ~~Most active time~~ - [ ] ~~Least active time~~ - [x] Total playtime - [x] AFK Time - [x] AFK Time percentage

Playerbase Overview ✔️

List (Complete) This was pretty much copy-paste & remove server uuids from queries. - [x] Playerbase development Stack graph - [x] Current playerbase pie graph - [x] Trends - [x] Total players 30d ago, now, trend (15 days) - [x] Regular players 30d ago, now, trend (15 days) (Activity index) - [x] Average Playtime / Player ... - [x] AFK% / Player ... - [x] Average Playtime / Regular Player (Activity index) ... - [x] Average Session Length / Regular Player (Activity index) ... - [x] AFK / Regular Player (Activity index) ... - [x] Insights - [x] How many new players became regular (Activity index) - [x] How many regular players became inactive (Activity Index)

Geolocations tab ✔️

List (Complete) - [x] Geolocations map - [x] Connection information (Ping table)

Plugins tabs ✔️

AuroraLS3 commented 5 years ago
Moved feature images ![Health - Downtime](https://user-images.githubusercontent.com/24460436/63605646-0e4bcd00-c5d7-11e9-96d6-dfe004988fad.jpg) ![Health - Regular Playres](https://user-images.githubusercontent.com/24460436/63605647-0e4bcd00-c5d7-11e9-9858-34bdaf244dba.jpg) ![Player - Registered](https://user-images.githubusercontent.com/24460436/63605648-0ee46380-c5d7-11e9-96fd-8b7ff41ee664.jpg) ![Player numbers](https://user-images.githubusercontent.com/24460436/63605650-0ee46380-c5d7-11e9-875d-993954e1c4fb.png) ![Recent Login list](https://user-images.githubusercontent.com/24460436/63605651-0ee46380-c5d7-11e9-9bbd-23391923cf2a.jpg) ![Unique Players Graph](https://user-images.githubusercontent.com/24460436/63605652-0ee46380-c5d7-11e9-8e63-c153cee97961.jpg)
AuroraLS3 commented 5 years ago

TODO-list for /players page

AuroraLS3 commented 5 years ago

Bug reported by @mibby on Discord

Other issues noticed while confirming bug:

Bugs

Other

Second inspection

3 bugs were not resolved and were marked as unresolved again. If a new fix exists they have been marked solved again. More bugs were discovered

AuroraLS3 commented 5 years ago

List of "easy to find" optimizations

AuroraLS3 commented 5 years ago

Related package restructuring

Since the version will be increased to 5.0 this opportunity can be taken to restructure the packages.

Here is a simplified image of the systems that are on the plugin Ideal Plan architecture

Draft of a better package structure

Module: common

com.djrapitops.plan
    System
    commands
        CommandProcess
        subcommands
    settings
        locale
        theme
    identification
    gathering
        GatheringProcess
        domain
        extensions
        import
        events
        timed
    storage
        upkeep
        files
        database
            transactions (gathering)
            queries (delivery)
    delivery
        upkeep
        domain
            mutators
        rendering
            extensions
            json
            html
        export
        webserver
            cache
            response
    module

Module: platform

com.djrapitops.plan
    gathering
        listeners (abstracts on top of events)
        timed
    identification
AuroraLS3 commented 5 years ago
java.lang.NullPointerException: null
        at com.djrapitops.plan.delivery.webserver.response.Response.send(Response.java:132) ~[Plan-5.0%20ALPHA%20build%20%25buildNumber%25.jar:?]
        at com.djrapitops.plan.delivery.webserver.response.RedirectResponse.send(RedirectResponse.java:40) ~[Plan-5.0%20ALPHA%20build%20%25buildNumber%25.jar:?]
        at com.djrapitops.plan.delivery.webserver.RequestHandler.handle(RequestHandler.java:113) [Plan-5.0%20ALPHA%20build%20%25buildNumber%25.jar:?]
        at com.sun.net.httpserver.Filter$Chain.doFilter(Unknown Source) [?:1.8.0_221]
        at sun.net.httpserver.AuthFilter.doFilter(Unknown Source) [?:1.8.0_221]
        at com.sun.net.httpserver.Filter$Chain.doFilter(Unknown Source) [?:1.8.0_221]
        at sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(Unknown Source) [?:1.8.0_221]
        at com.sun.net.httpserver.Filter$Chain.doFilter(Unknown Source) [?:1.8.0_221]
        at sun.net.httpserver.ServerImpl$Exchange.run(Unknown Source) [?:1.8.0_221]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [?:1.8.0_221]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [?:1.8.0_221]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_221]
AuroraLS3 commented 5 years ago

Exception when reloading after setting Plugin.Logging.Create_new_locale_file_on_next_enable to true (Exception due to new modification to the setting during boot)

[21:30:55 WARN]: Exception in thread "Thread-7"
[21:30:55 WARN]: java.lang.NullPointerException
[21:30:55 INFO]: [Plan] Locale: 'Custom' by
[21:30:55 WARN]:        at com.djrapitops.plan.identification.ServerInfo.getServerUUID(ServerInfo.java:47)
[21:30:55 WARN]:        at com.djrapitops.plan.settings.network.ServerSettingsManager.updateConfigInDB(ServerSettingsManager.java:114)
[21:30:55 WARN]:        at com.djrapitops.plan.settings.network.ServerSettingsManager.lambda$prepareFileWatcher$0(ServerSettingsManager.java:100)
[21:30:55 WARN]:        at com.djrapitops.plan.settings.upkeep.WatchedFile.modified(WatchedFile.java:46)
[21:30:55 WARN]:        at com.djrapitops.plan.settings.upkeep.FileWatcher.actOnModification(FileWatcher.java:120)
[21:30:55 WARN]:        at com.djrapitops.plan.settings.upkeep.FileWatcher.handleEvent(FileWatcher.java:114)
[21:30:55 WARN]:        at com.djrapitops.plan.settings.upkeep.FileWatcher.pollEvents(FileWatcher.java:101)
[21:30:55 WARN]:        at com.djrapitops.plan.settings.upkeep.FileWatcher.runLoop(FileWatcher.java:95)
[21:30:55 WARN]:        at com.djrapitops.plan.settings.upkeep.FileWatcher.run(FileWatcher.java:76)
SlimeDog commented 5 years ago

Spigot 1.14.4 (Jenkins 2472) git-Spigot-94af569-6ddeb98 (MC: 1.14.4) (Implementing API version 1.14.4-R0.1-SNAPSHOT) Plan 5.0-b155

No changes to 4.9.4 config.yml. Per migration instructions, removed web customizations and theme.yml. Looking good, although I despair of migrating my massive customizations.

Two initial issues:

AuroraLS3 commented 5 years ago

In dark mode the colors are preserved, but their contrast is reduced, do you think the reduced teal is too harsh for the eyes still?

SlimeDog commented 5 years ago

Yes, too harsh in dark mode. But is there a reason that

ParsedElements.SessionAccordion

doesn't set it? I would like the option.

I hope it's clear that I like the rework.

AuroraLS3 commented 5 years ago

It is set by the color-selector.js when night mode is engaged (it works by inserting an extra style block into the document)

SlimeDog commented 5 years ago

OK. So the old customization tricks will work? plugins/Plan/web/js/color-selector-js

AuroraLS3 commented 5 years ago

Yes they should work, let me know if they don't (that would be a bug)

SlimeDog commented 5 years ago

That trick will affect all dark mode teal backgrounds. Can I touch just the one?

I think I'll just wait for you to tone it down.

AuroraLS3 commented 5 years ago

You can add a #tableAccordion .bg-teal rule

SlimeDog commented 5 years ago

Since you asked, I tested

.bg-teal {background-color: #44475a;color: #eee8d5;}'

(borrowed from .bg-night). It works fine. No bugs here. :)

SlimeDog commented 5 years ago

I'm curious: Why tabs for Performance, but pulldown menus for Online Activity and PlayerBase? Sure, foolish consistency is the province of small minds, but still...

SlimeDog commented 5 years ago

IMHO, all of the background colors for table column titles need to be toned down by quite a bit, in dark mode. Is there a contrast factor that can be configured?

AuroraLS3 commented 5 years ago

I'm curious: Why tabs for Performance, but pulldown menus for Online Activity and PlayerBase? Sure, foolish consistency is the province of small minds, but still..

The tabs are used when there are multiple graphs for the section. (Tabs are also used on Online Activity Overview). The performance numbers are displayed alongside the graphs. Why the graphs aren't displayed in separate components is because larger vertical scrollbar would affect all pages.

Tabs would not fit Online Activity or Player base, because the pages consist of different layouts (I tried to make each page quickly distinguishable from each other)

I don't have anything against pulldown for performance other than current layout was easier to implement. If I were to split the page I would make a page for the numbers and page for all the graphs vertically stacked.

I appreciate the feedback - I noticed that the tabs reset when the page is loaded again, which is a usability problem that needs resolving. I can't remember if there is an animation when the tab switches, but removing that would make comparing the graphs easier.

AuroraLS3 commented 5 years ago

IMHO, all of the background colors for table column titles need to be toned down by quite a bit, in dark mode. Is there a contrast factor that can be configured?

I'll probably need to write some code that handles toning down the colors since current colors are hardcoded. After that I'll add an option to theme.yml

SlimeDog commented 5 years ago

Sounds great. Thanks for all the information.

AuroraLS3 commented 5 years ago

It's good to have lists to keep track of all the things that need doing.

Collection of bugs & improvements that have been found after beta launch:

Other things I feel like need doing:

Added 21.09:

Added 22.09:

Added 26.09:

SlimeDog commented 5 years ago

Good list. Nothing to add. We look forward to the next drop.

AuroraLS3 commented 5 years ago
Error on /player page related to extension query ``` com.djrapitops.plan.exceptions.ParseException: com.djrapitops.plan.exceptions.database.DBOpException: SQL Failed: SELECT plugin_id,table_id,col_1_value,col_2_value,col_3_value,col_4_value FROM plan_extension_user_table_values JOIN plan_extension_tables on plan_extension_tables.id=plan_extension_user_table_values.table_id WHERE uuid=?; Column 'col_5_value' not found. | Failed to parse player page com.djrapitops.plan.delivery.rendering.pages.PlayerPage.toHtml(PlayerPage.java:86) com.djrapitops.plan.delivery.webserver.response.pages.PageResponse.(PageResponse.java:50) com.djrapitops.plan.delivery.webserver.response.ResponseFactory.playerPageResponse(ResponseFactory.java:200) com.djrapitops.plan.delivery.webserver.pages.PlayerPageHandler.getResponse(PlayerPageHandler.java:80) com.djrapitops.plan.delivery.webserver.ResponseHandler.tryToGetResponse(ResponseHandler.java:147) com.djrapitops.plan.delivery.webserver.ResponseHandler.getResponse(ResponseHandler.java:94) com.djrapitops.plan.delivery.webserver.RequestHandler.handle(RequestHandler.java:99) com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:79) sun.net.httpserver.AuthFilter.doFilter(AuthFilter.java:83) com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:82) sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(ServerImpl.java:675) com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:79) sun.net.httpserver.ServerImpl$Exchange.run(ServerImpl.java:645) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) java.lang.Thread.run(Thread.java:748) Caused by: com.djrapitops.plan.exceptions.database.DBOpException: SQL Failed: SELECT plugin_id,table_id,col_1_value,col_2_value,col_3_value,col_4_value FROM plan_extension_user_table_values JOIN plan_extension_tables on plan_extension_tables.id=plan_extension_user_table_values.table_id WHERE uuid=?; Column 'col_5_value' not found. com.djrapitops.plan.exceptions.database.DBOpException.forCause(DBOpException.java:37) com.djrapitops.plan.storage.database.queries.QueryStatement.executeQuery(QueryStatement.java:55) com.djrapitops.plan.storage.database.SQLDB.query(SQLDB.java:226) com.djrapitops.plan.extension.implementation.storage.queries.ExtensionPlayerTablesQuery.executeQuery(ExtensionPlayerTablesQuery.java:67) com.djrapitops.plan.extension.implementation.storage.queries.ExtensionPlayerTablesQuery.executeQuery(ExtensionPlayerTablesQuery.java:57) com.djrapitops.plan.storage.database.SQLDB.query(SQLDB.java:226) com.djrapitops.plan.extension.implementation.storage.queries.ExtensionPlayerDataQuery.executeQuery(ExtensionPlayerDataQuery.java:70) com.djrapitops.plan.extension.implementation.storage.queries.ExtensionPlayerDataQuery.executeQuery(ExtensionPlayerDataQuery.java:57) com.djrapitops.plan.storage.database.SQLDB.query(SQLDB.java:226) com.djrapitops.plan.delivery.rendering.pages.PageFactory.inspectPluginTabs(PageFactory.java:126) com.djrapitops.plan.delivery.rendering.pages.PlayerPage.parse(PlayerPage.java:112) com.djrapitops.plan.delivery.rendering.pages.PlayerPage.toHtml(PlayerPage.java:84) com.djrapitops.plan.delivery.webserver.response.pages.PageResponse.(PageResponse.java:50) com.djrapitops.plan.delivery.webserver.response.ResponseFactory.playerPageResponse(ResponseFactory.java:200) com.djrapitops.plan.delivery.webserver.pages.PlayerPageHandler.getResponse(PlayerPageHandler.java:80) com.djrapitops.plan.delivery.webserver.ResponseHandler.tryToGetResponse(ResponseHandler.java:147) com.djrapitops.plan.delivery.webserver.ResponseHandler.getResponse(ResponseHandler.java:94) com.djrapitops.plan.delivery.webserver.RequestHandler.handle(RequestHandler.java:99) com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:79) sun.net.httpserver.AuthFilter.doFilter(AuthFilter.java:83) com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:82) sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(ServerImpl.java:675) com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:79) sun.net.httpserver.ServerImpl$Exchange.run(ServerImpl.java:645) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) java.lang.Thread.run(Thread.java:748) Caused by: java.sql.SQLException: Column 'col_5_value' not found. com.mysql.jdbc.SQLError.createSQLException(SQLError.java:965) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:898) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:887) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:861) com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1078) com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5175) plan.com.zaxxer.hikari.pool.HikariProxyResultSet.getString(HikariProxyResultSet.java) com.djrapitops.plan.extension.implementation.storage.queries.ExtensionPlayerTablesQuery.extractTableRow(ExtensionPlayerTablesQuery.java:107) com.djrapitops.plan.extension.implementation.storage.queries.ExtensionPlayerTablesQuery.access$100(ExtensionPlayerTablesQuery.java:57) com.djrapitops.plan.extension.implementation.storage.queries.ExtensionPlayerTablesQuery$1.processResults(ExtensionPlayerTablesQuery.java:95) com.djrapitops.plan.extension.implementation.storage.queries.ExtensionPlayerTablesQuery$1.processResults(ExtensionPlayerTablesQuery.java:83) com.djrapitops.plan.storage.database.queries.QueryStatement.executeQuery(QueryStatement.java:66) com.djrapitops.plan.storage.database.queries.QueryStatement.executeQuery(QueryStatement.java:52) com.djrapitops.plan.storage.database.SQLDB.query(SQLDB.java:226) com.djrapitops.plan.extension.implementation.storage.queries.ExtensionPlayerTablesQuery.executeQuery(ExtensionPlayerTablesQuery.java:67) com.djrapitops.plan.extension.implementation.storage.queries.ExtensionPlayerTablesQuery.executeQuery(ExtensionPlayerTablesQuery.java:57) com.djrapitops.plan.storage.database.SQLDB.query(SQLDB.java:226) com.djrapitops.plan.extension.implementation.storage.queries.ExtensionPlayerDataQuery.executeQuery(ExtensionPlayerDataQuery.java:70) com.djrapitops.plan.extension.implementation.storage.queries.ExtensionPlayerDataQuery.executeQuery(ExtensionPlayerDataQuery.java:57) com.djrapitops.plan.storage.database.SQLDB.query(SQLDB.java:226) com.djrapitops.plan.delivery.rendering.pages.PageFactory.inspectPluginTabs(PageFactory.java:126) com.djrapitops.plan.delivery.rendering.pages.PlayerPage.parse(PlayerPage.java:112) com.djrapitops.plan.delivery.rendering.pages.PlayerPage.toHtml(PlayerPage.java:84) com.djrapitops.plan.delivery.webserver.response.pages.PageResponse.(PageResponse.java:50) com.djrapitops.plan.delivery.webserver.response.ResponseFactory.playerPageResponse(ResponseFactory.java:200) com.djrapitops.plan.delivery.webserver.pages.PlayerPageHandler.getResponse(PlayerPageHandler.java:80) com.djrapitops.plan.delivery.webserver.ResponseHandler.tryToGetResponse(ResponseHandler.java:147) com.djrapitops.plan.delivery.webserver.ResponseHandler.getResponse(ResponseHandler.java:94) com.djrapitops.plan.delivery.webserver.RequestHandler.handle(RequestHandler.java:99) com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:79) sun.net.httpserver.AuthFilter.doFilter(AuthFilter.java:83) com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:82) sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(ServerImpl.java:675) com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:79) sun.net.httpserver.ServerImpl$Exchange.run(ServerImpl.java:645) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) java.lang.Thread.run(Thread.java:748) ```
SlimeDog commented 4 years ago

Spigot 1.14.4 latest Plan 5.0-RC-b196 (also b190) MacOS Mojave 10.14.6

Safari 13.0.1 (14608.2.11.1.11) Firefox 69.0.1 Chrome 77.0.3865.90

For all browsers, the View setting is default (aka Actual Size), ie., no zoom.

Can the default font size(s) be adjusted? Not for the entire browser -- other pages are displayed as I want. Text on the Plan pages is larger than other pages, and many fields wrap, even though my browser window is very wide.

AuroraLS3 commented 4 years ago

Could you send a screenshot? :)

SlimeDog commented 4 years ago

For comparison, I include a SpigotMC screen. Both screens are set to the default View size, ie., no zoom. The window is 1485 pixels wide.

For the Plan screen:

[image redacted]

[image redacted]

If I extend the window to 1530 pixels wide or zoom out 1 click, the text spans no longer wrap. (For reference, the display is ~2230 pixels wide.)

If this is not correctable, I would like the option to configure the default baseline font size, and hope that other font sizes scale relative to the baseline.

SlimeDog commented 4 years ago

This is how it should present -- this is zoomed out 1 click: [image redacted]

AuroraLS3 commented 4 years ago

Since everything is based on rem units it is possible to scale everything based on font-size attribute of the <html> element.

I have added the following in build 204 - It reduces font-size from 16.5px to 16px on screens smaller than 1500px.

@media (max-width: 1500px)  {
    html {
        font-size: 16px;
    }
}

build 204 is available here https://plan.djrapitops.com/job/Player%20Analytics/job/development/

SlimeDog commented 4 years ago

That doesn't seem to work. Is the test max-width == 1500px or max-width < 1500px ?

BTW, build 205 is self-identified as build 204.

AuroraLS3 commented 4 years ago

max-width means the block inside is applied when window width <= 1500px

SlimeDog commented 4 years ago

OK. I don't see any reduction in the display. The css @ media code block is definitely present in the page source.

AuroraLS3 commented 4 years ago

Do things change when you make the window larger or smaller? (16 might be the default font-size on Safari, which would explain if there is no difference)

SlimeDog commented 4 years ago

The font-size does not appear to change as I move back-and-forth across the 1500px boundary. I customized the block to

@media (max-width: 1500px) {
    html {
        font-size: 14px;
    }
}

and it behaves as desired. (So 16px appears to be the Mac Safari default.) This works fine for me; I am quite comfortable with customizations. For others, YMMV.

AuroraLS3 commented 4 years ago

It looks like Chrome had 16px as default as well.

I have changed it to a relative reduction (95%) and that seems to work as intended on all browsers. (Tip from https://stackoverflow.com/a/13669422) - Should be good enough for other users as well. :)

SlimeDog commented 4 years ago

Excellent. Thanks.

Perhaps reduction should be based on a proportional comparison: windowWidth/baseWidth ?

AuroraLS3 commented 4 years ago

windowWidth/baseWidth

Unfortunately it's very difficult to get something that reduces it correctly (I don't know a way to do this with just css)

I tried something similar in another project when an svg image went outside of its box, and gave up after trying to fix the issues with it (a big can of worms) for the whole day.

SlimeDog commented 4 years ago

Thanks. I'm good with 95%. :) PS: https://plan.djrapitops.com/job/Player%20Analytics/job/development/ is returning "Bad Gateway".

SamB440 commented 4 years ago

Installed the latest plan 5, and noticed some issues w/ buycraft integration:

Module is quite small (even on 2k/4k monitor!): image It also has nearly no padding on some parts of that module.

Also, is it possible to get the buycraft graph back?

AuroraLS3 commented 4 years ago

Module is quite small (even on 2k/4k monitor!):

Thanks for letting me know - I'll move plugins with 3 wide tables to their own tabs

Also, is it possible to get the buycraft graph back?

Unfortunately I didn't implement a graph API yet to DataExtension API, so it is not possible at the moment. Implementing a graph API would delay this update by one whole month so that is why it was postponed.

Why the graph is no longer displayed is because the PluginData API was removed, and BuyCraft stuff was moved to DataExtension API (stores things in the database). PluginData was dependent on proxy<->server connections that were removed in this update. I'll try to get graphs back in 5.1 or 5.2