I still use Unison as it is simpler than Syncthing.
It does have GUI, which I use. I wouldn't call it pretty or polished, but it works and I understand how it works and the way it works is exactly how I think syncing should work.
I've also configured it to run a GUI diff tool diffuse to easily combine changes in case of conflicts (when a file was changed on both sides since the last sync).
I wish it was a bit more modern and re-written in a modern language, but that's secondary qualities for a program.
You can print the time, cpu and memory usage per request and build metrics based on these outputs. This can be done in any major cloud, with open source tooling and even with simple linux coretuils. One tool to visualize such metrics is Grafana.
It is compatible with Nginx+FPM. It won't use the PHP-FPM specific logs (and thus does not impose any specific value from you for the access.format PHP-FPM setting). But it has to figure out where your app's error log is.
Yeah, from a brief glance at this, it just adds a file that runs on every request which logs out to the php error log and then there’s another script that can parse that error log.
I'm the author, it's funny this thing pops up now, it was written +15 years ago and is barely maintained (but AFAKI still works).
The metrics collected are close to those from PHP-FPM (CPU user/sys, clock time, peak memory) + the wpdb hook because I had to profile lots of WP.
The most interesting part is the 'phptop' tool itself which actually parse the logs and make some useful histograms.
Its main force I think it's that it's very lightweight (500 lines of Perl, fast and efficient regexes), works everywhere (very old Perl will do), and gives results instantly. My usecase used to be : apt install phptop, wait (at least) 1min for data collection, get useful histogram. It's also obviously very easy to uninstall.
It does pollute the error log, but it's the most simple and universal data sink I could think of, and well it's a hack in the end.
It does have GUI, which I use. I wouldn't call it pretty or polished, but it works and I understand how it works and the way it works is exactly how I think syncing should work.
I've also configured it to run a GUI diff tool diffuse to easily combine changes in case of conflicts (when a file was changed on both sides since the last sync).
I wish it was a bit more modern and re-written in a modern language, but that's secondary qualities for a program.