statibus | Minimalistic Status Page
Well, I needed a self hosted status page, without any bloat, it needs to be fast and easy to deploy.
Supports Ping, Port and HTTP checks with custom http codes + 60s or 30s check intervals.
It does run on rqlite instead of MySQL, which is basically sqlite but with a shiton of neat features.
You can find it here: https://github.com/rqlite/rqlite
Here is a demo: https://statibus.x8e.net
Here is the code: https://github.com/Ne00n/statibus
May you give me some feedback.
Amen.

Comments
آمين
I haven't tried it myself yet (obviously), but I already have tears of joy in my eyes because of...
dnscry.pt - Public DNSCrypt resolvers hosted by LowEnd providers • Need a free NAT LXC? -> https://microlxc.net/
Cool! good job on what you do.
cant wait to finish mine
Freelance Web Developer & Web Designer - Available for hire!
Looks really cool, nice work dude
Dope, looks great! Thanks for sharing.
Feature request: stack multiple monitors into a group of sorts rather than one continuous list.
yabs daddy
Looks nice! Any plans for a Docker version? And perhaps notifications via email, telegram etc or an old skool RSS feed?
LinuxFreek.com — Thank you for your attention to this matter
Looking nice. Thanks!
Ympker's VPN LTD Comparison, Uptime.is, Ympker's GitHub.
Never knew bout rqlite. Thanks
Also thanks for your project.
I added groups, check out the updated version: https://statibus.x8e.net/
Kinda essential so added.
I am not a docker friend, if you want to make a docker version you can do that for sure.
Basic email notifications for the webmaster are planned yea but not such as subscribe for outages.
Maybe even a rss or json feed for the public.
Free NAT KVM | Free NAT LXC
Free NAT KVM | Free NAT LXC
ok ok i will shut up
Looks nice. I'll try to deploy one.
UptimeRobot has keyword check that I often use. It retrieves a URI, and alerts if the response contains / does not contain a particular string.
We accept Karma donations for the last flan. 🍮 affbrr
Sounds easy but what do you do, when the said page is down? Also trigger an alert?
Free NAT KVM | Free NAT LXC
UptimeRobot would also trigger an alert when the URI is not retrievable (connection timeout).
I use this feature to monitor NDN forwarder status pages. For example, https://savi.testbed.named-data.net (it's an XML document with XSLT) would contain the string "/yoursunny/pushups" if at least one of my repository replicas is connected, so I configure a keyword monitor to tell me when the string disappears.
We accept Karma donations for the last flan. 🍮 affbrr
I added it, currently in experimental branch, which the demo is running on.
https://github.com/Ne00n/statibus/tree/experimental
Works basically this way:
php cli.php service add 1 Website http https://www.worldometers.info/coronavirus/ 2 200 corona
no timeout + status code or list of status codes need to match and your keyword if you specify it.
Free NAT KVM | Free NAT LXC
Small update, a few bug fixes + css fixes for mobile including db init.
Will add a rss feed later and external checks also some CI, which is needed.
Free NAT KVM | Free NAT LXC
Alright, I put it on my to-do list
LinuxFreek.com — Thank you for your attention to this matter
Good design. Nice and compact. My current one thinks it's a good idea to have the page scroll and scroll and scroll but I like the data for each server being on the same line. Good job.
Michael from DragonWebHost & OnePoundEmail
Kudos on another quality project Neoon
I got it installed in two Docker containers. It seems that the
cron/uptime.phprequiresbcmathextension, which is not in the officialphp:7-alpineimage but can be added.I don't have a Dockerfile yet - I just typed the commands one by one.
I hope
cli.php group listandcli.php service listcommands can output in JSON format instead ofprint_rformat, so that I can automate the setup using jq.Alternatively,
cli.php group deleteandcli.php service addandcli.php service deletecommands should accept names in place of IDs.We accept Karma donations for the last flan. 🍮 affbrr
Yea the alpine image is a bitch.
Well yeah I could change it to output json, should be no problem since its readable too.
The ID's are unique, the names are not, so doing that would be suicidal.
Also the ID's are used for JOINS, I cannot remove them however, I would put out a sql migration to make the names UNIQUE.
Just to be on the safe side so this would be possible, should be easier to use by then.
Free NAT KVM | Free NAT LXC
Are you interested in collaborating to create a Docker image for this?
Personally I'm not a fan of alpine images because it doesn't use musl. This page sums it up pretty nicely, but of course it depends on your use case; https://pythonspeed.com/articles/alpine-docker-python/
LinuxFreek.com — Thank you for your attention to this matter
those who complain about alpone image then you can use
debian:buster-slim
"The imitator dooms himself to hopeless mediocrity." — Ralph Waldo Emerson
Update:
Free NAT KVM | Free NAT LXC
Great.
DYK Travis CI is no longer free?
If you aren't paying $69/month, you'd better move to GitHub Actions or CircleCI.
SQL injection everywhere!
You need Parameterized Statements (since rqlite v5.5.0).
And no, having a regex is insufficient.
https://github.com/Ne00n/statibus/blob/945d447851f3d6509aca78730b381c116406b8fa/class/statibus.php#L21
https://github.com/Ne00n/statibus/blob/945d447851f3d6509aca78730b381c116406b8fa/content/service.php#L9
We accept Karma donations for the last flan. 🍮 affbrr
They have a free Plan, works for me.
Migration from .org is still going on, so I expect it to use OOS credits by then.
No, cli.php is only available to your locally, means only you have access to these commands.
Additional, every SQL query runs through SQLite3::escapeString.
Thanks for letting me know, I will update the class.
Since this class has been written 1+ year ago, Parameterized Statements where not implemented by rqlite.
Free NAT KVM | Free NAT LXC
Travis free plan turns out to be 10000 credits one time. When you run out, it'll never be replenished.
As for OOS credits, you'll have to haggle with support every time you need more credits. It's not recurring.
What if my group name happen to contain a quotation sign?
"idle" serversisn't too crazy, where "idle" needs quotation if the servers are only partially idle.?
We accept Karma donations for the last flan. 🍮 affbrr
I was about to mention the SQL injections issue. Glad @yoursunny went ahead .
At least there is a preg match on services.
Cool stuff @Neoon , thanks for contributing to the community with your projects. You tend to do nice useful stuff.
Then I just ask.
I filter any untrusted user input before I hand it over to sql, the cli is not filtered since I consider it trusted.
I do prefer prepared statements anytime no question, I was not aware of it and I will update it when I got time.
Free NAT KVM | Free NAT LXC
Small Patch:
Free NAT KVM | Free NAT LXC
So.. I finally managed to get my own instance of statibus up and running - and I love it for its simplicity. Great work @Neoon !
Two things I ran into:
pingdoesn't support IPv6 addresses. One has to useping6instead. I felt lazy so I just changed the call inclass/cron.php.dnscry.pt - Public DNSCrypt resolvers hosted by LowEnd providers • Need a free NAT LXC? -> https://microlxc.net/
You can submit a pull request, so I can update the codebase to switch between ping and ping6 depending if IPv4 or IPv6.
Right now I am just using v4 but I added basic support so v6 will work too.
Free NAT KVM | Free NAT LXC
I did some houskeeping on the great statibus.
The biggest feature, is remotes, basically remote checks, as many as you want.
You can configure how many checks will be done plus the threshold, how many positive results are needed to mark it as online.
The remote tests will be done, with the same timeout and other parameters you configured.
Other than that, for some reason I used dates in the details history, which is completely fucked beyond.
This has been replaced with unix time stamp as it should be, means its BREAKING to any running instance if you update.
You wanna reset the details before updating with UPDATE details set detailed = "W10="
The details are different from the outages, you still keep those.
If there is need, we can add an option to regenerate the details from the outages.
As before statibus works fine with PHP 7.x or PHP 8, no changes here.
The other stuff are mostly fixes (css and display bugs), besides a clean up function, if you want to use it.
Which is one of the reasons, I ditched the dates format in favour for unix time stamps too.
You can try it in the experimental branch: https://github.com/Ne00n/statibus/tree/experimental
Or just watch it:
https://statibus.x8e.net/
I gonna merge it later, if it deemed to be stable enough.
Free NAT KVM | Free NAT LXC
Since I ran low:
"I am pleased to notify you that 15K credits were added to your account allowing you to resume running OSS builds"
Even the reply times, this was done in 20 minutes, out side business hours, I can't complain.
I may setup my own build server once later but for now.
Free NAT KVM | Free NAT LXC
Patch Notes:
remotes have been added by request (optional)
You can add as many remote probes as you want, which will confirm outages.
By default the requests will be randomized in-between the probes and you can configure the parameters such as how many checks should be done and how many checks each service needs to be marked as online.
switched details to unix time stamp instead of dates
You will need to reset your details (90 days overview) since the new version won't work with dates anymore
use ping6 when IPv6 address is given, Thanks to @Brueggus
If you have any suggestions lemme know.
Free NAT KVM | Free NAT LXC
Another interesting option for supporting remotes could be to lean on blackbox exporter endpoints. Pretty flexible and easy API call
Nah, I keep it Minimalistic.
Free NAT KVM | Free NAT LXC
I've setup Statibus like the minimalist and clean look of it, on Github you says this "rqlite has its limits at about 250 requests per second, due to the raft consensus. So you should setup some type of caching, 1s is enough to prevent rqlite from not responding to queries.".
Just wondering are you talking about adding caching to rqlite server or caching the status page so it doesn't call PHP on each request.
yea PHP caching.
Free NAT KVM | Free NAT LXC
Finally got myself some time to give this a spin and first I gotta say I just love it! After you have setup, it just works and its blazing fast.
Setting it up in a new minimal Alpine VPS was quite easy eventho I've never try rqlite
Couple new features I would like to see:
Can you make a css optimization personal challenge and optimize it like there is no tomorrow? Squeze it like watter from stone.
https://github.com/Ne00n/statibus/blob/main/content/css/style.css
Free NAT KVM | Free NAT LXC