Abstract the individual query functions
After implementing a few of the query executor functions, it turns out
that we have the same general pattern:
- compile the filter
- extract the selected fields
- determine whether we need to run collectors
- do a first pass filtering
- run the collector if needed
- compute the final fields
For pure config queries, the collector/final computation is not
needed, but otherwise the code flow is the same.
We can therefore abstract all the queries that originate in the config
(i.e. except the job query) and have a single code path for all of
them, just with different parameters.
To do this, we add some stub collectors for group/network queries,
which don't have live data.
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Guido Trotter <ultrotter@google.com>