Expand command system. Grafana like

The window system along with the command system is a masterpiece. I have a wish to improve the experience of interacting with this interface.
The main idea is Grafana, namely its system of requests on which graphs are built. My message is as follows. The game client acts as an RSS aggregator whose task is to collect data from the server, the command system describes how to aggregate this data.

A perfect example of when this is needed - I want to highlight a window for the iron production monitor on 5 planets. At the moment I will use the PROD and the ID of the planet, but then it will show me all the production lines that are on the planet. What I suggest is PROD {id} TYPE {construction}. This will open a window with only one production line.

You can take a more difficult example. I want to see the output delta. Consumption volumes, production volumes. An example command I would use for this is PROD {id} TYPE {construction} SELECT 'result' GROUPBY TIME(30d). PROD gives me a list of productions on the planet, TYPE filter by building type. SELECT gives me the volume produced. GROUPBY group data of the same type. TIME function for GROUPBY. With this function, I will see how many goods I have produced in 30 days, and if we change “result” to “materials” we will see the consumed resources for the same period of time.

The game has a lot of data that is hidden from our view if you do not dig it yourself in Google tables. With this proposal, I want to show how we could collect this data and present it on the interface. Due to the fact that the formulas of the game are now open to the public, everyone who is not too lazy writes for himself all sorts of tools for calculating profits, etc., and not every tool is presented to the public.

A little about the implementation of this idea.
I saw in the debug that you send all the data via ws at once, like with RSS. I suggest that you still collect all the data in a row on the socket server, but run this data through the filters that the player specifies. Thus, you will not need to send gigabytes of traffic, but communicate with the user only on those topics that interest him.
Each request that we specify in the buffer is added to the queue, and then flies to the server where it is applied in turn to new data.

1 Like