diff --git a/content/blog/2025-02-26-bash-count-firefox-tabs.md b/content/blog/2025-02-26-bash-count-firefox-tabs.md new file mode 100644 index 0000000..2bd8156 --- /dev/null +++ b/content/blog/2025-02-26-bash-count-firefox-tabs.md @@ -0,0 +1,43 @@ ++++ +title = "Count your opened Firefox tabs with bash" +date = "2025-02-26" +updated = "2025-02-26" +[extra] +authors = ["Ydreniv"] ++++ + +At any point in time, I have many Firefox tabs opened. +I might even have reached a thousand. +This feels like an issue I should address at some point, and I have already +tried. +But today, my goal is easier : count the number of currently opened tabs. +In truth, it’s fairly easy : many extensions provide this information, in more +or less granular details (number of windows, number of tabs in a specific +window…). +However neat this is, I want to get my total number of opened tabs printed in +a Unix shell. +Indeed, I ultimately would like to automatically graph this number over time. + +Before I started, I figured I’d need to find a session file, list the tabs, +and get the count. +Sounds fairly easy right ? +Well it was not too hard in the end, but there were a couple bumps. +The first is the format used to store the sessions. +It’s compressed using LZ4, but with headers set by Mozilla, before LZ4 was +fully standardized. +[This StackOverflow](https://superuser.com/a/1363751) answer gives a bunch of +tools to decompress the file. +I’ve chosen to use [andikleen’s tool](https://github.com/andikleen/lz4json.git) +as it worked out of the box easily. +Once in possession of the extracted JSON, I’ve used `jq` to get the tabs’ IDs, and +`wc` to count them. + +So with `./lz4jsoncat /home//snap/firefox/common/.mozilla/firefox/.default-release/sessionstore-backups/recovery.jsonlz4 | jq '.windows[].tabs[].index' | wc -l`, +I’ve gotten my answer in a shell : 138 (yikes !). +I’m using only one Firefox profile, but I suppose you could adapt this shell +pipe to support more. +Anyway, I’ll need to work on a cronjob to do it regularly, and an agent to +collect these data (probably Prometheus). +This would be one of the first metrics I’d collect for my "local computer +monitoring center". +