Edos

Edos Used AI

13 devlogs
34h 43m
•  Ship certified
Created by Orion

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).

Timeline

Ship 1

1 payout of shell 512.0 shells

Orion

24 days ago

Orion Covers 13 devlogs and 34h 43m

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.

Update attachment
Orion
Orion
1h 26m 24 days ago

I've written the READMEs, but I've also added functionality to remove the servers from the database.

Update attachment
Orion
Orion
2h 15m 26 days ago

I've finished automatically updating the data on the stats page.
But I've also added a demo mode for the site.

Update attachment
Orion
Orion
4h 26m 27 days ago

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.

Update attachment
Orion
Orion
1h 55m 29 days ago

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.

Update attachment

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.

Update attachment

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.

Update attachment

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.

Update attachment

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.

Update attachment

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.

Update attachment

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.

Update attachment

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.

Update attachment

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.

Update attachment