So I really wrote my CPU monitoring webserver program to be able to monitor my Raspberry Pi, but hoped that the code should run on other Linux machines too. Indeed, I have also been testing it in a virtual box running Debian. The code is runnable from Xcode on my Mac, but unfortunately it's a simulation only for testing purposes, because
/proc/stat does not exist on Mac OS. So, for the moment, it definitely won't work on the Mac.
But I did think that it would work on OpenWrt, so decided to try it on my VoCore. In anticipation I had already put the necessary stuff in the makefile, so all I needed to do was go to a box with OpenWrt cross compilation set up and do this:
Then I copied the resulting binary executable to my VoCore and it worked straight away. I even made a recording of the initial run for posterity:
It's pretty good to see this running on a machine about the size of a postage stamp. Obviously I could make it just show a single graph when it runs on a single core machine. Perhaps I'll do that when I get some time.
A while back, in a fit of 1980s nostalgia, I realised that my place of work is within walking distance of the old Sinclair building in Cambridge. So I decided to walk over there at lunchtime and see if I could still find it. This is how the building looked back in the 80s:
...which is a single frame taken from this YouTube clip, which gives a glimpse of the inside too:
Anyway, this is what I found when I walked over there recently:
I was quite pleased that there was still a small street sign bearing the name "Sinclair" at the entrance. The building looks like it's part of Anglia Ruskin University nowadays.
It's a shame that the big Sinclair logo was taken down. But the building is clearly recognisable, which is pretty cool.
I'm hopeful that because it's lightweight and written in C the program itself won't consume many of the Raspberry Pi's resources. If you wanted, you could probably run the program as a service when the machine starts and not notice any difference. The CPU data is sent from a minimal Web API, which is built into the webserver. It sends out the CPU percentages as an array in JSON format. This means that most of the work is done by the browser (all the plotting and scrolling) and on the server side we just need to send an array of numbers every second or so. And whilst I was at it, I also included the ability to monitor the core temperature (if it is running on a Raspberry Pi).
I have put the resulting project on GitHub, so if anybody wants to have the ability to monitor their CPU cores over their network they can try it. I expect it will work on other Linux machines too, it's not restricted to the Raspberry Pi. The number of graphs is dynamically updated, depending on the number of cores you have.
This is how it looks (in this case showing the graphs on a simulated iPhone 4s):
If you want to, you can try it out like this:
git clone https://github.com/davidsblog/rCPU
sudo ./rcpu 80
...which will only work if you're not running an existing webserver on the machine, otherwise substitute the 80 on the last line for a different port. When the server is running, simply point a browser at your machines IP address (and port if its different than 80) and enjoy.
I did notice that the graphs don't plot very nicely on the default browser included with Raspbian (although if you install an alternative like Chromium it should be OK). But since the purpose is to monitor the CPUs remotely this should not really be an issue.