51 lines
828 B
Go
51 lines
828 B
Go
|
package db
|
||
|
|
||
|
import (
|
||
|
"database/sql"
|
||
|
"log"
|
||
|
"strconv"
|
||
|
)
|
||
|
|
||
|
const queryCountTotalBadIps = "SELECT COUNT(1) FROM bips"
|
||
|
|
||
|
type Fail2BanDB struct {
|
||
|
DatabasePath string
|
||
|
sqliteDB *sql.DB
|
||
|
}
|
||
|
|
||
|
func MustConnectToDb(databasePath string) *Fail2BanDB {
|
||
|
db, err := sql.Open("sqlite3", databasePath)
|
||
|
if err != nil {
|
||
|
log.Fatal(err)
|
||
|
}
|
||
|
return &Fail2BanDB{
|
||
|
DatabasePath: databasePath,
|
||
|
sqliteDB: db,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (db *Fail2BanDB) CountTotalBadIps() (int, error) {
|
||
|
stmt, err := db.sqliteDB.Prepare(queryCountTotalBadIps)
|
||
|
defer db.mustCloseStatement(stmt)
|
||
|
|
||
|
if err != nil {
|
||
|
return -1, err
|
||
|
}
|
||
|
|
||
|
result := ""
|
||
|
err = stmt.QueryRow().Scan(&result)
|
||
|
|
||
|
if err != nil {
|
||
|
return -1, err
|
||
|
}
|
||
|
|
||
|
return strconv.Atoi(result)
|
||
|
}
|
||
|
|
||
|
func (db *Fail2BanDB) mustCloseStatement(stmt *sql.Stmt) {
|
||
|
err := stmt.Close()
|
||
|
if err != nil {
|
||
|
log.Fatal(err)
|
||
|
}
|
||
|
}
|