Private
Public Access
1
0

Function to get server from IP or ID parameter
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2023-12-10 20:55:44 -08:00
parent 9ef534eafa
commit adab600e26
2 changed files with 48 additions and 24 deletions

46
server/functions.go Normal file
View File

@@ -0,0 +1,46 @@
package server
import (
"context"
"database/sql"
"errors"
"net/netip"
"strconv"
"time"
"go.ntppool.org/common/logger"
"go.ntppool.org/common/tracing"
"go.ntppool.org/data-api/ntpdb"
)
func (srv *Server) FindServer(ctx context.Context, serverID string) (ntpdb.Server, error) {
log := logger.Setup()
ctx, span := tracing.Tracer().Start(ctx, "FindServer")
defer span.End()
q := ntpdb.NewWrappedQuerier(ntpdb.New(srv.db))
var serverData ntpdb.Server
var dberr error
if id, err := strconv.Atoi(serverID); id > 0 && err == nil {
serverData, dberr = q.GetServerByID(ctx, uint32(id))
} else {
ip, err := netip.ParseAddr(serverID)
if err != nil || !ip.IsValid() {
return ntpdb.Server{}, nil // 404 error
}
serverData, dberr = q.GetServerByIP(ctx, ip.String())
}
if dberr != nil {
if !errors.Is(dberr, sql.ErrNoRows) {
log.Error("could not query server id", "err", dberr)
return serverData, dberr
}
}
if serverData.ID == 0 || (serverData.DeletionOn.Valid && serverData.DeletionOn.Time.Before(time.Now().Add(-1*time.Hour*24*30*24))) {
// no data and no error to produce 404 errors
return ntpdb.Server{}, nil
}
return serverData, nil
}