Initial support for SQL database

main
Yasen Pramatarov 2024-10-13 20:06:36 +03:00
parent b6567e2ef1
commit e26bb3cc0f
4 changed files with 50 additions and 6 deletions

1
.gitignore vendored 100644
View File

@ -0,0 +1 @@
jilo-server

View File

@ -12,16 +12,22 @@ This project is licensed under the GNU General Public License version 2 (GPL-2.0
Clone the git repo. Either run the server with Go or build it and run the executable. Clone the git repo. Either run the server with Go or build it and run the executable.
Dependencies:
```bash
apt install gcc sqlite3 libsqlite3-dev
```
Run it (mainly used for tests): Run it (mainly used for tests):
```bash ```bash
go run main.go CGO_ENABLED=1 go run main.go
``` ```
Build the agent: Build the agent:
```bash ```bash
go build -o jilo-server main.go CGO_ENABLED=1 go build -o jilo-server main.go
``` ```
## configuration ## configuration

45
main.go
View File

@ -1,12 +1,10 @@
package main package main
import ( import (
// "database/sql" "database/sql"
// "fmt"
"io/ioutil" "io/ioutil"
"log" "log"
"net/http" "net/http"
// "os"
"time" "time"
_ "github.com/mattn/go-sqlite3" _ "github.com/mattn/go-sqlite3"
@ -43,11 +41,35 @@ func readConfig(filePath string) Config {
return config return config
} }
func setupDatabase(dbPath string) (*sql.DB, error) {
// Open the database
db, err := sql.Open("sqlite3", dbPath)
if err != nil {
return nil, err
}
// If the table is not there, initialize it
createTable := `
CREATE TABLE IF NOT EXISTS endpoint_data (
id INTEGER PRIMARY KEY AUTOINCREMENT,
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
status_code INTEGER,
response_time_ms INTEGER
);`
_, err = db.Exec(createTable)
if err != nil {
return nil, err
}
return db, nil
}
func checkEndpoint(endpoint string) (int, int64) { func checkEndpoint(endpoint string) (int, int64) {
start := time.Now() start := time.Now()
resp, err := http.Get(endpoint) resp, err := http.Get(endpoint)
if err != nil { if err != nil {
log.Println("Failed to check the endpoint: ", err) log.Println("Failed to check the endpoint:", err)
return 0, 0 return 0, 0
} }
defer resp.Body.Close() defer resp.Body.Close()
@ -56,9 +78,24 @@ func checkEndpoint(endpoint string) (int, int64) {
return resp.StatusCode, elapsed return resp.StatusCode, elapsed
} }
func saveData(db *sql.DB, statusCode int, responseTime int64) {
_, err := db.Exec("INSERT INTO endpoint_data (status_code, response_time_ms) VALUES (?, ?)", statusCode, responseTime)
if err != nil {
log.Println("Failed to insert data into the database:", err)
}
}
func main() { func main() {
// config file
config := readConfig("jilo-server.conf") config := readConfig("jilo-server.conf")
// Connect to or setup the database
db, err := setupDatabase(config.DatabasePath)
if err != nil {
log.Fatal("Failed to initialize the database:", err)
}
defer db.Close()
ticker := time.NewTicker(time.Duration(config.CheckPeriod) * time.Minute) ticker := time.NewTicker(time.Duration(config.CheckPeriod) * time.Minute)
defer ticker.Stop() defer ticker.Stop()

BIN
meet.db 100644

Binary file not shown.