Adds response content to the agent check

main
Yasen Pramatarov 2024-10-14 18:38:23 +03:00
parent 5a40681ac6
commit ed319c0291
1 changed files with 22 additions and 9 deletions

31
main.go
View File

@ -46,6 +46,7 @@ func readConfig(filePath string) Config {
return config return config
} }
// Database initialization
func setupDatabase(dbPath string, initDB bool) (*sql.DB, error) { func setupDatabase(dbPath string, initDB bool) (*sql.DB, error) {
// Open the database // Open the database
@ -74,7 +75,8 @@ func setupDatabase(dbPath string, initDB bool) (*sql.DB, error) {
id INTEGER PRIMARY KEY AUTOINCREMENT, id INTEGER PRIMARY KEY AUTOINCREMENT,
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP, timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
status_code INTEGER, status_code INTEGER,
response_time_ms INTEGER response_time_ms INTEGER,
response_content TEXT
);` );`
_, err = db.Exec(createTable) _, err = db.Exec(createTable)
if err != nil { if err != nil {
@ -99,23 +101,34 @@ func checkTableExists(db *sql.DB) bool {
return err == nil && name == "endpoint_data" return err == nil && name == "endpoint_data"
} }
func checkEndpoint(endpoint string) (int, int64) { // Check agent endpoint
func checkEndpoint(endpoint string) (int, int64, string) {
log.Println("Sending HTTP get request to Jilo agent:", endpoint) log.Println("Sending HTTP get request to Jilo agent:", endpoint)
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()
elapsed := time.Since(start).Milliseconds() elapsed := time.Since(start).Milliseconds()
// Read the response body
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Println("Failed to read the response body:", err)
return resp.StatusCode, elapsed, ""
}
log.Printf("Received response: %d, Time taken: %d ms", resp.StatusCode, elapsed) log.Printf("Received response: %d, Time taken: %d ms", resp.StatusCode, elapsed)
return resp.StatusCode, elapsed
return resp.StatusCode, elapsed, string(body)
} }
func saveData(db *sql.DB, statusCode int, responseTime int64) { // Insert the checks into the database
_, err := db.Exec("INSERT INTO endpoint_data (status_code, response_time_ms) VALUES (?, ?)", statusCode, responseTime) func saveData(db *sql.DB, statusCode int, responseTime int64, responseContent string) {
_, err := db.Exec("INSERT INTO endpoint_data (status_code, response_time_ms, response_content) VALUES (?, ?, ?)", statusCode, responseTime, responseContent)
if err != nil { if err != nil {
log.Println("Failed to insert data into the database:", err) log.Println("Failed to insert data into the database:", err)
} }
@ -126,7 +139,7 @@ func main() {
// First flush all the logs // First flush all the logs
log.SetFlags(log.LstdFlags | log.Lshortfile) log.SetFlags(log.LstdFlags | log.Lshortfile)
// Init the DB, "--init-db" creates the table // Command-line option "--init-db" creates the table
initDB := flag.Bool("init-db", false, "Create database table if not present without prompting") initDB := flag.Bool("init-db", false, "Create database table if not present without prompting")
flag.Parse() flag.Parse()
@ -154,10 +167,10 @@ func main() {
for { for {
log.Printf("Checking agent [%s - %s]: %s", serverName, agentName, agent.Endpoint) log.Printf("Checking agent [%s - %s]: %s", serverName, agentName, agent.Endpoint)
statusCode, responseTime := checkEndpoint(agent.Endpoint) statusCode, responseTime, responseContent := checkEndpoint(agent.Endpoint)
log.Printf("Agent [%s - %s]: Status code: %d, Response time: %d ms", serverName, agentName, statusCode, responseTime) log.Printf("Agent [%s - %s]: Status code: %d, Response time: %d ms", serverName, agentName, statusCode, responseTime)
saveData(db, statusCode, responseTime) saveData(db, statusCode, responseTime, responseContent)
// Sleep until the next tick // Sleep until the next tick
<-ticker.C <-ticker.C