nschloe / tuna

:fish: Python profile viewer

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Feature request: Watch for file change

securisec opened this issue · comments

First off, really really love this project.

Just a small feature request if possible. Tuna helps me a ton with profile long import times, but it would be awesome if it could watch for changes to the log file that is being generated. Currently the workflow is:

  • python -x ...
  • tuna file.log
  • ctrl + c for tuna
  • repeat the process.

It would be super if tuna could watch the log file and perhaps auto refresh the browser.

Thanks!

Good idea, but I don't actually know how to refresh a tab using Python. If you have a good idea, let me know.

hmm. I cant think of a way to do it from python also, but maybe some JS, with a toggle that refreshes the page per x seconds?

That won't work. All the logic is done in Python.

then how about passing an arg to tuna, like --watch x? And then adding a settimeout script tag to index.html where x is the seconds to refresh?

I'm not a fan of re-reading the same file every x seconds. If you choose x small, your processor is doing a lot of useless work, if you choose it large, you're waiting forever for the page to load.

If something like this lands in tuna, it'll have to be a watch.

How about just being able to refresh by reloading the tab manually? This is not currently possible AFAIK. I can write a PR.

Why is tuna running a webserver at all? It doesn't appear to be loading anything from the server dynamically and reloading the page doesn't reload the file from disk. Although I've only used it for imports so far, is it different for the other modes?

Is there currently any benefit compared to opening a static html file in the browser? Just curious to be honest...

With regards to reloading the browser upon file change, it's fairly easy to run a long running connection (a websocket for example) and make javascript reload the browser once it disconnects.
For example, this should work:

socket.onclose = () => location.reload();

As for watching the filesystem, perhaps you can try the watchdog library? https://pythonhosted.org/watchdog/