This is a text-only version of the following page on https://raymii.org: --- Title : What's coming in the next version of Leaf Node Monitoring? Author : Remy van Elst Date : 14-07-2022 URL : https://raymii.org/s/blog/Whats_coming_in_leaf_node_monitoring_v2022_02.html Format : Markdown/HTML --- Leaf Node Monitoring is my own open source (GPLv3), paid, network monitoring program for Windows, Linux & Android. Written in C++ & Qt 5. Perfect to run on your desktop and monitor your servers. Simple setup, auto-detects running services, runs checks concurrently, open port scanning and alerting. I've recently released the first version, and this post goes over the features that will come in the next release. I did not do any active promotion for the first release, only added a link to my sponsor message block on this site. That's a bit of text linking to different ways to sponsor me, which I include on almost all articles on this site. This article does not include that block, but if you want to check out [Leaf Node Monitoring, please click here][1]. Although, without that active promotion, sales have been way above expectation, which I'm surprised by and also happy about. I also received quite some positive feedback, thanks to all of you who wrote in. Now, on to the new features planned for v2022.02. #### External Process checks One of the big new features in the next release will be external processes as monitor checks. Here is a screenshot of two external checks on Android: ![external process checks][5] You might notice that they're orange, which means warning status. You might also notice the visual changes, rounded corners and other small tweaks. External processes are simple checks that are successful (OK) when the exit code is 0 and critical otherwise. In this case, they're warning because some errors, like a nonexistent binary, do not trigger critical (since, no exit code is not the same as exit code > 0). External processes allow you to have many more checks. For testing the functionality, I use the checks from Nagios / Icinga, [monitoring plugins][3], which extend the functionality of Leaf Node Monitoring by a huge amount. I will still continue to implement new checks in native C++, both for speed and cross-platform functionality, but this feature will help in all the cases where there are no checks yet. These monitoring plugins will not be shipped with Leaf Node Monitoring, it's just the example I'm using. #### Retry attempts ![retry attempts][6] The next new feature is retry attempts. For all checks currently, like the TCP port or HTTP check I'm implementing an automated retry. Currently 4 times, but I might make that configurable in the future. If a check fails, it will be retried with the same parameters. No back-off timer or pause in between yet. I've been running LeafNodeMonitoring myself and have noticed some notifications which were flaky tests, with the automated retries I hope to have less of those. #### Unit tests The last new thing is that I've begun to add unit tests. For most of my private projects I don't do unit tests since they're not worth the time/effort. At work they're required and we have automated checks that reject merge requests when there is not enough coverage. Unit tests are not user facing, but they do help in delivering better software. With the growing amount of checks and logic, I am now of the opinion that Leaf Node Monitoring benefits from tests. Since I'm used to write code that can be tested (small methods, decoupled, dependency injected, etc), it does not require any refactoring, I'm noticing most of the code is already testable just fine. Here is an example test that checks if the new external process code fires off the correct signals and returns the correct result when it receives an exit code of 0: TEST_F(ExternalProcessCheckTest, exitCodeZeroShouldGiveOkayResult) { //arrange QString fullPath = "/bin/bash"; QStringList arguments; arguments << "-c 'exit 0'"; epck = new ExternalProcessCheck(*target, fullPath, arguments, timeout); QSignalSpy signalSpy_checkResultChanged(epck, &ExternalProcessCheck::checkResultChanged); //act emit epck->startCheck(); signalSpy_checkResultChanged.wait(1000); //assert EXPECT_EQ(epck->checkResult(), MonitorEnums::CheckResult::Ok); EXPECT_EQ(signalSpy_checkResultChanged.count(), 1); } The constructor and destructor of this test suite handle the deletion of the pointers and further cleanup, so don't worry about the [naked new][4]. It's always hard to test external programs like this, as is testing time-related stuff (without a lot of stubs/mocks). I'm using the `googletest` framework since I'm used to it. It requires a bit of shoehorning to make it works with Qt but once your project is setup correctly it's a breeze to use. I had to convert the one project to three projects (a library, an application and a test-app) using SUBDIRS in qmake and linking to the library in the main application. Not rocket science, but I imagine it can be hard to do if you don't know what to look for. Code coverage is now up to 57% so that's a great start. That's all for this post, I'm not sure when the next version is going to be released, but it will be a free update for all of you who purchased it. If you have any feature requests, issues or want to let me know something, don't hesitate to contact me. ### More on selling GPL software? I did a series of articles on figuring out how to sell GPL software. Leaf Node Monitoring is an open source application, but it's paid as well. The parts are here: - [Part 1: Selling my own GPL software, part 1: a lot of hurdles](https://raymii.org/s/blog/Selling_GPL_Software_part_1_lots_of_hurdles.html) - [Part 2: Embed the source code directly in your Qt app with qmake and qrc, for GPL compliance](https://raymii.org/s/articles/Embed_the_source_code_directly_in_your_Qt_app.html) - [Part 3: Existing GPL software for sale](https://raymii.org/s/blog/Existing_GPL_software_for_sale.html) This article is [cross-posted][2] on the Leaf Node Monitoring site. [1]: https://leafnode.nl [2]: https://www.leafnode.nl/news/whats-coming-in-the-next-version-of-leaf-node-monitoring/ [3]: https://www.monitoring-plugins.org/ [4]: https://stackoverflow.com/questions/9299489/whats-a-naked-pointer [5]: /s/inc/img/leafnode-2022-02-1.jpg [6]: /s/inc/img/leafnode-2022-02-2.jpg --- License: All the text on this website is free as in freedom unless stated otherwise. This means you can use it in any way you want, you can copy it, change it the way you like and republish it, as long as you release the (modified) content under the same license to give others the same freedoms you've got and place my name and a link to this site with the article as source. This site uses Google Analytics for statistics and Google Adwords for advertisements. You are tracked and Google knows everything about you. Use an adblocker like ublock-origin if you don't want it. All the code on this website is licensed under the GNU GPL v3 license unless already licensed under a license which does not allows this form of licensing or if another license is stated on that page / in that software: This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. Just to be clear, the information on this website is for meant for educational purposes and you use it at your own risk. I do not take responsibility if you screw something up. Use common sense, do not 'rm -rf /' as root for example. If you have any questions then do not hesitate to contact me. See https://raymii.org/s/static/About.html for details.