A minimalist server resource monitoring service, developed in Go and TypeScript. Designed for simplicity, using low-level technology for communication between the interface and the servers to be monitored (a simple TCP socket).
Yahya Khan
Whoops! Looks like they don't have a project yet. Maybe ask them to start one?
Raphaël Schröder
Check their projects out: Is it Worth It ?, Papillon
Once you ship this you can't edit the description of the project, but you'll be able to add more devlogs and re-ship it as you add new features!
I made a few modifications at the end of the project: I had a friend test the interface for feedback (which revealed a major problem).
So I changed the font to a static font, not just any monospace font. I also redid the responsive a bit so that it would work with the static font.
I've written the READMEs, but I've also added functionality to remove the servers from the database.
I've finished automatically updating the data on the stats page.
But I've also added a demo mode for the site.
I've started the backend of the page where you can see the statistics. I opted for a double data retrieval: one source coming from the project API, so as to have an almost instantaneous loading, then the other coming from a websocket sending the data every X seconds.
For the moment, I've only done the API part, to ensure clean loading and all the functions needed to easily integrate the websocket.
I've started the stats display interface. On PC, the interface will look like this. I've decided to use ASCII graphics to keep the style minimalist.
For the moment, this is just the front-end, as the back-end to display all the stats has not yet been integrated.
The next step is to make the interface... responsive.
I've added very little visually, but a lot on the backend.
I made the server list page functional, with a modal to retrieve the connection token. I've added the page for adding a server and the page for changing its password.
I've also added better management for the icons used in the project. I used custom elements in HTML to create a simpler icon system to avoid repetition.
I've also started a websocket, to update live information from the servers.
I started doing the client's backend and frontend. I decided to use Elysia, in particular so as not to slow down server development because I'm used to this framework, but also for server performance, Elysia having very good benchmark results.
For the frontend, I decided on a minimalist design to simplify use of the service, and because I'm not very good at design.
This is a little devlog to show my log system in Go, inspired by the log library I use in the client (logtape).
I've also added a system reconnection when the TCP connection is lost.
I've finished the socket, all the data is saved in the database. The translation part is finished.
I've also added a function to clear the database: every 10 minutes, all data older than 10 minutes is deleted.
The next step is to create the interface and a user system, and then run a websocket to receive information in real time.
I've started the translation part, which retrieves information from a TCP server and stores it in a database. For now, it only handles authentication and CPU name registration.
Each message sent to the server must be a JSON composed of three keys: Id, which corresponds to the server id; Type, which corresponds to the type of message (authentication, cpu name, cpu usage etc.); Data, which corresponds to the data to be stored.
For authentication, you need to provide a key and an id. This assembly of key and id is called a token, and is encoded in base64, which simplifies client installation. The key is generated by a SHA256 signature, encrypted with HMAC and a key specific to the server. This guarantees the authenticity of the data, to prevent a malicious person from sending false data to the server.
I've just added network statistics (bandwidth), i.e. the number of bytes sent and received in x seconds.
I tried to integrate CPU temperature but it's a bit more complex, maybe when I've finished the basic program.
I've added several features to the PoC: recovery of the CPU model name, and recovery of disks and its statistics.
Disk read doesn't just read mounted files, but will read every available disk, look to see if it's mounted, if mounted, retrieve the name of the folder where it's mounted, and retrieve the available size.
Both are based on linux system files: /sys/class/block (a folder) which has an equivalent folder on each disk, and /proc/cpuinfo which lists CPU info, including its model.
The basic plan was to make the server in C, but I finally decided to make it in Go, for the simple reason that Go is simpler and I don't have too much risk of memory leaks.
I started by making a PoC with the main information, such as CPU usage in percentage, memory info and swap info.
The most complicated part was CPU usage, because you have to read raw information, which means nothing when you don't know how to do it. Thanks Stackoverflow.