62 lines
943 B
Go
62 lines
943 B
Go
package server
|
|
|
|
import (
|
|
"database/sql"
|
|
"sync"
|
|
"time"
|
|
|
|
"github.com/charmbracelet/log"
|
|
"github.com/gin-gonic/gin"
|
|
_ "github.com/marcboeker/go-duckdb"
|
|
)
|
|
|
|
type Server struct {
|
|
Settings ServerSettings
|
|
|
|
Dataleaks *[]Dataleak
|
|
|
|
TotalRows *uint64
|
|
TotalDataleaks *uint64
|
|
TotalSize *uint64 // MB
|
|
|
|
Router *gin.Engine
|
|
Duckdb *sql.DB
|
|
Mu *sync.RWMutex
|
|
}
|
|
|
|
func NewServer() *Server {
|
|
zero := uint64(0)
|
|
emptyDataleak := []Dataleak{}
|
|
s := &Server{
|
|
Settings: LoadServerSettings(),
|
|
Mu: &sync.RWMutex{},
|
|
TotalDataleaks: &zero,
|
|
TotalRows: &zero,
|
|
TotalSize: &zero,
|
|
Dataleaks: &emptyDataleak,
|
|
}
|
|
|
|
var err error
|
|
|
|
s.Duckdb, err = sql.Open("duckdb", "")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
err = Cache(s)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
go func() {
|
|
for {
|
|
time.Sleep(s.Settings.ReloadDataleaksInterval)
|
|
err := Cache(s)
|
|
if err != nil {
|
|
log.Error(err)
|
|
}
|
|
}
|
|
}()
|
|
|
|
return s
|
|
}
|