https://en.wikipedia.org/wiki/Interval_arithmetic (2+2)-free posets, ascent sequences and pattern avoiding permutations https://arxiv.org/abs/0806.0666
The coloring depending on response time happens in intervals, that much I can say.
#1 |--------------------|
#2 |---------------| |---------|
#3 |------------| |---|
#4 |----| |------| |--|
#5 |---------------------|
Each of these channels have overlapping event. Some sessions happen strictly before the other. Sometimes, one logs on before the other one logs of. Etc. The more channels we have the more complex behavior. That is all the paper is saying.Sorry about that.
Concept: A simple pattern match against each line to link their respective contexts. Eg, if you log each request with an id `[timestamp] [request-id] some module: some message`, then theoretically you could parse a log to show visual relation between all request ids.
Furthermore, you could filter out request ids with generic tools like grep/etc.
There must be logging viewer tools that work generically like this though, so perhaps i'd be wasting my time :)
If you have a concrete idea and eventually a project on GitHub, feel free to contact me! Would like to contribute
I wrote this mainly for the need of better debugging in development, and never inspected live traffic on a production server.
If you balance your application across servers/workers and keep the log on a per-worker basis I think there shouldn't be a problem in doing so.
Otherwise - you could make a middleware that collects requests that require attention (response time above some threshold, non-200 status codes, errors).
Then you could "replay" the logger on those requests.
(You can't do it live, since you can't know in advance which requests will be of interest.)
Maybe I find a way to incorporate this into the project, so that you can use it out of the box :-)