feat(exporter): add prometheus exporter for cache, database & webserver stats

This commit is contained in:
Tom Neuber 2024-11-28 11:53:40 +01:00
parent 95a3a16fdc
commit 4bbda96dc7
Signed by: tom
GPG key ID: F17EFE4272D89FF6
8 changed files with 405 additions and 18 deletions

View file

@ -2,7 +2,10 @@ package database
import (
"errors"
"os"
"time"
"git.ar21.de/yolokube/country-geo-locations/internal/cmd"
"git.ar21.de/yolokube/country-geo-locations/pkg/geoloc"
"github.com/hashicorp/go-memdb"
)
@ -13,10 +16,13 @@ var (
)
type Database struct {
db *memdb.MemDB
ready bool
config *cmd.AppSettings
db *memdb.MemDB
}
func NewDatabase() (*Database, error) {
func NewDatabase(config *cmd.AppSettings) (*Database, error) {
database, err := memdb.NewMemDB(
&memdb.DBSchema{
Tables: map[string]*memdb.TableSchema{
@ -38,7 +44,9 @@ func NewDatabase() (*Database, error) {
}
return &Database{
db: database,
ready: false,
config: config,
db: database,
}, nil
}
@ -53,9 +61,14 @@ func (d *Database) Load(ipinfos []geoloc.IPInfo) error {
}
txn.Commit()
d.ready = true
return nil
}
func (d *Database) IsReady() bool {
return d.ready
}
func (d *Database) SearchIPNet(ipnetnum uint) (*geoloc.IPInfo, error) {
txn := d.db.Txn(false)
defer txn.Abort()
@ -87,3 +100,17 @@ func (d *Database) SearchIPNet(ipnetnum uint) (*geoloc.IPInfo, error) {
return &ipinfo, nil
}
func (d *Database) Timestamp() (time.Time, error) {
file, err := os.Open(d.config.DataFile)
if err != nil {
return time.Time{}, err
}
stats, err := file.Stat()
if err != nil {
return time.Time{}, err
}
return stats.ModTime(), nil
}