Documentation
¶
Overview ¶
Package db provides a simplistic ORM to communicate with an SQL database for storage
Index ¶
- Constants
- Variables
- func DaysSinceEpoch(t time.Time) int64
- type APIToken
- type DailyUsage
- type DataNetwork
- type Database
- func (db *Database) AllocateIP(ctx context.Context, imsi string) (net.IP, error)
- func (db *Database) Backup(destinationFile *os.File) error
- func (db *Database) BeginTransaction() (*Transaction, error)
- func (db *Database) ClearDailyUsage(ctx context.Context) error
- func (db *Database) ClearRadioEvents(ctx context.Context) error
- func (db *Database) Close() error
- func (db *Database) CountAPITokens(ctx context.Context, userID int) (int, error)
- func (db *Database) CountAuditLogs(ctx context.Context) (int, error)
- func (db *Database) CountDataNetworks(ctx context.Context) (int, error)
- func (db *Database) CountPolicies(ctx context.Context) (int, error)
- func (db *Database) CountRoutes(ctx context.Context) (int, error)
- func (db *Database) CountSubscribers(ctx context.Context) (int, error)
- func (db *Database) CountSubscribersInPolicy(ctx context.Context, policyID int) (int, error)
- func (db *Database) CountSubscribersWithIP(ctx context.Context) (int, error)
- func (db *Database) CountUsers(ctx context.Context) (int, error)
- func (db *Database) CreateAPIToken(ctx context.Context, apiToken *APIToken) error
- func (db *Database) CreateDataNetwork(ctx context.Context, dataNetwork *DataNetwork) error
- func (db *Database) CreatePolicy(ctx context.Context, policy *Policy) error
- func (db *Database) CreateSession(ctx context.Context, session *Session) (int64, error)
- func (db *Database) CreateSubscriber(ctx context.Context, subscriber *Subscriber) error
- func (db *Database) CreateUser(ctx context.Context, user *User) (int, error)
- func (db *Database) DeleteAPIToken(ctx context.Context, id int) error
- func (db *Database) DeleteDataNetwork(ctx context.Context, name string) error
- func (db *Database) DeleteExpiredSessions(ctx context.Context) (int, error)
- func (db *Database) DeleteOldAuditLogs(ctx context.Context, days int) error
- func (db *Database) DeleteOldDailyUsage(ctx context.Context, days int) error
- func (db *Database) DeleteOldRadioEvents(ctx context.Context, days int) error
- func (db *Database) DeletePolicy(ctx context.Context, name string) error
- func (db *Database) DeleteSessionByTokenHash(ctx context.Context, tokenHash []byte) error
- func (db *Database) DeleteSubscriber(ctx context.Context, imsi string) error
- func (db *Database) DeleteUser(ctx context.Context, email string) error
- func (db *Database) EditSubscriberSequenceNumber(ctx context.Context, imsi string, sequenceNumber string) error
- func (db *Database) GetAPITokenByName(ctx context.Context, userID int, name string) (*APIToken, error)
- func (db *Database) GetAPITokenByTokenID(ctx context.Context, tokenID string) (*APIToken, error)
- func (db *Database) GetDataNetwork(ctx context.Context, name string) (*DataNetwork, error)
- func (db *Database) GetDataNetworkByID(ctx context.Context, id int) (*DataNetwork, error)
- func (db *Database) GetHomeNetworkPrivateKey(ctx context.Context) (string, error)
- func (db *Database) GetIPAddressesAllocated(ctx context.Context) (int, error)
- func (db *Database) GetIPAddressesTotal() (int, error)
- func (db *Database) GetN3Settings(ctx context.Context) (*N3Settings, error)
- func (db *Database) GetOperator(ctx context.Context) (*Operator, error)
- func (db *Database) GetOperatorCode(ctx context.Context) (string, error)
- func (db *Database) GetPolicy(ctx context.Context, name string) (*Policy, error)
- func (db *Database) GetPolicyByID(ctx context.Context, id int) (*Policy, error)
- func (db *Database) GetRadioEventByID(ctx context.Context, id int) (*dbwriter.RadioEvent, error)
- func (db *Database) GetRetentionPolicy(ctx context.Context, category RetentionCategory) (int, error)
- func (db *Database) GetRoute(ctx context.Context, id int64) (*Route, error)
- func (db *Database) GetSessionByTokenHash(ctx context.Context, tokenHash []byte) (*Session, error)
- func (db *Database) GetSize() (int64, error)
- func (db *Database) GetSubscriber(ctx context.Context, imsi string) (*Subscriber, error)
- func (db *Database) GetUsagePerDay(ctx context.Context, imsi string, startDate time.Time, endDate time.Time) ([]UsagePerDay, error)
- func (db *Database) GetUsagePerSubscriber(ctx context.Context, imsi string, startDate time.Time, endDate time.Time) ([]UsagePerSub, error)
- func (db *Database) GetUser(ctx context.Context, email string) (*User, error)
- func (db *Database) GetUserByID(ctx context.Context, id int) (*User, error)
- func (db *Database) IncrementDailyUsage(ctx context.Context, usage DailyUsage) error
- func (db *Database) Initialize() error
- func (db *Database) InitializeN3Settings(ctx context.Context) error
- func (db *Database) InitializeNATSettings(ctx context.Context) error
- func (db *Database) InitializeOperator(ctx context.Context, initialOperator *Operator) error
- func (db *Database) InsertAuditLog(ctx context.Context, auditLog *dbwriter.AuditLog) error
- func (db *Database) InsertRadioEvent(ctx context.Context, radioEvent *dbwriter.RadioEvent) error
- func (db *Database) IsNATEnabled(ctx context.Context) (bool, error)
- func (db *Database) IsOperatorInitialized() bool
- func (db *Database) IsRetentionPolicyInitialized(ctx context.Context, category RetentionCategory) bool
- func (db *Database) ListAPITokensPage(ctx context.Context, userID int, page int, perPage int) ([]APIToken, int, error)
- func (db *Database) ListAuditLogsPage(ctx context.Context, page, perPage int) ([]dbwriter.AuditLog, int, error)
- func (db *Database) ListDataNetworksPage(ctx context.Context, page, perPage int) ([]DataNetwork, int, error)
- func (db *Database) ListPoliciesPage(ctx context.Context, page int, perPage int) ([]Policy, int, error)
- func (db *Database) ListRadioEvents(ctx context.Context, page int, perPage int, filters *RadioEventFilters) ([]dbwriter.RadioEvent, int, error)
- func (db *Database) ListRoutesPage(ctx context.Context, page int, perPage int) ([]Route, int, error)
- func (db *Database) ListSubscribersPage(ctx context.Context, page int, perPage int) ([]Subscriber, int, error)
- func (db *Database) ListUsersPage(ctx context.Context, page, perPage int) ([]User, int, error)
- func (db *Database) PoliciesInDataNetwork(ctx context.Context, name string) (bool, error)
- func (db *Database) ReleaseIP(ctx context.Context, imsi string) error
- func (db *Database) Restore(backupFile *os.File) error
- func (db *Database) SetRetentionPolicy(ctx context.Context, policy *RetentionPolicy) error
- func (db *Database) SubscribersInPolicy(ctx context.Context, name string) (bool, error)
- func (db *Database) UpdateDataNetwork(ctx context.Context, dataNetwork *DataNetwork) error
- func (db *Database) UpdateHomeNetworkPrivateKey(ctx context.Context, privateKey string) error
- func (db *Database) UpdateN3Settings(ctx context.Context, externalAddress string) error
- func (db *Database) UpdateNATSettings(ctx context.Context, enabled bool) error
- func (db *Database) UpdateOperatorCode(ctx context.Context, operatorCode string) error
- func (db *Database) UpdateOperatorID(ctx context.Context, mcc, mnc string) error
- func (db *Database) UpdateOperatorSlice(ctx context.Context, sst int32, sd []byte) error
- func (db *Database) UpdateOperatorTracking(ctx context.Context, supportedTACs []string) error
- func (db *Database) UpdatePolicy(ctx context.Context, policy *Policy) error
- func (db *Database) UpdateSubscriber(ctx context.Context, subscriber *Subscriber) error
- func (db *Database) UpdateUser(ctx context.Context, email string, roleID RoleID) error
- func (db *Database) UpdateUserPassword(ctx context.Context, email string, hashedPassword string) error
- type ListArgs
- type N3Settings
- type NATSettings
- type NetworkInterface
- type NumItems
- type Operator
- type Policy
- type RadioEventFilters
- type RetentionCategory
- type RetentionPolicy
- type RoleID
- type Route
- type Session
- type Subscriber
- type Transaction
- type UsageFilters
- type UsagePerDay
- type UsagePerSub
- type User
Constants ¶
const ( DefaultLogRetentionDays = 7 DefaultSubscriberUsageRetentionDays = 365 )
Initial Retention Policy values
const ( InitialMcc = "001" InitialMnc = "01" InitialOperatorSst = 1 )
Initial operator values
const ( InitialDataNetworkName = "internet" InitialDataNetworkIPPool = "10.45.0.0/22" InitialDataNetworkDNS = "8.8.8.8" InitialDataNetworkMTU = 1400 )
Initial Data network values
const ( InitialPolicyName = "default" InitialPolicyBitrateUplink = "200 Mbps" InitialPolicyBitrateDownlink = "200 Mbps" InitialPolicyVar5qi = 9 // Default 5QI for non-GBR InitialPolicyArp = 1 // Default ARP of 1 )
Initial Policy values
const APITokensTableName = "api_tokens"
const AuditLogsTableName = "audit_logs"
const DailyUsageTableName = "daily_usage"
const DataNetworksTableName = "data_networks"
const (
N3DefaultExternalAddress = ""
)
const N3SettingsTableName = "n3_settings"
const (
NATDefaultEnabled = true
)
const NATSettingsTableName = "nat_settings"
const OperatorTableName = "operator"
const PoliciesTableName = "policies"
const QueryCreateAPITokensTable = `` /* 280-byte string literal not displayed */
const QueryCreateAuditLogsTable = `` /* 359-byte string literal not displayed */
Structured table (no raw blob). Keep strings NOT NULL with empty defaults to avoid NullString hassle.
const QueryCreateDailyUsageTable = `` /* 321-byte string literal not displayed */
const QueryCreateDataNetworksTable = `` /* 175-byte string literal not displayed */
const QueryCreateN3SettingsTable = `` /* 151-byte string literal not displayed */
const QueryCreateNATSettingsTable = `` /* 145-byte string literal not displayed */
const QueryCreateOperatorTable = `` /* 279-byte string literal not displayed */
const QueryCreatePoliciesTable = `` /* 320-byte string literal not displayed */
const QueryCreateRadioEventsIndex = `` /* 527-byte string literal not displayed */
const QueryCreateRadioEventsTable = `` /* 416-byte string literal not displayed */
Structured table (no raw blob). Keep strings NOT NULL with empty defaults to avoid NullString hassle.
const QueryCreateRetentionPolicyTable = `` /* 192-byte string literal not displayed */
const QueryCreateRoutesTable = `` /* 183-byte string literal not displayed */
const QueryCreateSubscribersTable = `` /* 292-byte string literal not displayed */
const QueryCreateUsersTable = `` /* 165-byte string literal not displayed */
const RadioEventsTableName = "network_logs"
const RetentionPolicyTableName = "retention_policies"
const RoutesTableName = "routes"
const SessionsTableName = "sessions"
const SubscribersTableName = "subscribers"
const UsersTableName = "users"
Variables ¶
var ( InitialOperatorSd = []byte{0x10, 0x20, 0x30} InitialSupportedTacs = []string{"000001"} )
var ErrAlreadyExists = errors.New("already exists")
Functions ¶
func DaysSinceEpoch ¶ added in v0.6.0
Types ¶
type DailyUsage ¶ added in v0.6.0
type DailyUsage struct {
EpochDay int64 `db:"epoch_day"`
IMSI string `db:"imsi"`
BytesUplink int64 `db:"bytes_uplink"`
BytesDownlink int64 `db:"bytes_downlink"`
}
func (*DailyUsage) GetDay ¶ added in v0.6.0
func (d *DailyUsage) GetDay() time.Time
func (*DailyUsage) SetDay ¶ added in v0.6.0
func (d *DailyUsage) SetDay(t time.Time)
type DataNetwork ¶ added in v0.1.0
type Database ¶
type Database struct {
// contains filtered or unexported fields
}
Database is the object used to communicate with the established repository.
func NewDatabase ¶
NewDatabase connects to a given table in a given database, stores the connection information and returns an object containing the information. The database path must be a valid file path or ":memory:". The table will be created if it doesn't exist in the format expected by the package.
func (*Database) AllocateIP ¶
func (*Database) BeginTransaction ¶ added in v0.0.9
func (db *Database) BeginTransaction() (*Transaction, error)
func (*Database) ClearDailyUsage ¶ added in v0.6.0
func (*Database) ClearRadioEvents ¶ added in v0.6.0
func (*Database) CountAPITokens ¶ added in v0.3.0
func (*Database) CountAuditLogs ¶ added in v0.3.0
func (*Database) CountDataNetworks ¶ added in v0.3.0
func (*Database) CountPolicies ¶ added in v0.3.0
CountPolicies returns policy count
func (*Database) CountRoutes ¶ added in v0.3.0
NumRoutes returns route count
func (*Database) CountSubscribers ¶ added in v0.3.0
func (*Database) CountSubscribersInPolicy ¶ added in v0.3.0
func (*Database) CountSubscribersWithIP ¶ added in v0.3.0
func (*Database) CountUsers ¶ added in v0.3.0
CountUsers returns user count with a span named "SELECT users".
func (*Database) CreateAPIToken ¶ added in v0.2.0
CreateAPIToken inserts a new api token with a span named "INSERT api_token".
func (*Database) CreateDataNetwork ¶ added in v0.1.0
func (db *Database) CreateDataNetwork(ctx context.Context, dataNetwork *DataNetwork) error
func (*Database) CreatePolicy ¶ added in v0.1.0
func (*Database) CreateSession ¶ added in v0.3.0
func (*Database) CreateSubscriber ¶
func (db *Database) CreateSubscriber(ctx context.Context, subscriber *Subscriber) error
func (*Database) CreateUser ¶
CreateUser inserts a new user with a span named "INSERT users".
func (*Database) DeleteAPIToken ¶ added in v0.2.0
func (*Database) DeleteDataNetwork ¶ added in v0.1.0
func (*Database) DeleteExpiredSessions ¶ added in v0.3.0
func (*Database) DeleteOldAuditLogs ¶ added in v0.2.0
DeleteOldAuditLogs removes logs older than the specified retention period in days.
func (*Database) DeleteOldDailyUsage ¶ added in v0.6.0
func (*Database) DeleteOldRadioEvents ¶ added in v0.6.0
DeleteOldRadioEvents removes logs older than the specified retention period in days.
func (*Database) DeletePolicy ¶ added in v0.1.0
func (*Database) DeleteSessionByTokenHash ¶ added in v0.3.0
func (*Database) DeleteSubscriber ¶
func (*Database) DeleteUser ¶
DeleteUser removes a user by email with a span named "DELETE users".
func (*Database) EditSubscriberSequenceNumber ¶ added in v0.6.0
func (*Database) GetAPITokenByName ¶ added in v0.2.0
func (*Database) GetAPITokenByTokenID ¶ added in v0.2.0
func (*Database) GetDataNetwork ¶ added in v0.1.0
func (*Database) GetDataNetworkByID ¶ added in v0.1.0
func (*Database) GetHomeNetworkPrivateKey ¶ added in v0.0.7
GetHomeNetworkPrivateKey retrieves the private key.
func (*Database) GetIPAddressesAllocated ¶
func (*Database) GetIPAddressesTotal ¶
func (*Database) GetN3Settings ¶ added in v0.5.0
func (db *Database) GetN3Settings(ctx context.Context) (*N3Settings, error)
func (*Database) GetOperator ¶ added in v0.0.5
GetOperator retrieves the operator row.
func (*Database) GetOperatorCode ¶
GetOperatorCode fetches only the operatorCode field.
func (*Database) GetPolicyByID ¶ added in v0.1.0
func (*Database) GetRadioEventByID ¶ added in v0.6.0
func (*Database) GetRetentionPolicy ¶ added in v0.6.0
func (*Database) GetSessionByTokenHash ¶ added in v0.3.0
func (*Database) GetSubscriber ¶
func (*Database) GetUsagePerDay ¶ added in v0.6.0
func (*Database) GetUsagePerSubscriber ¶ added in v0.6.0
func (*Database) GetUserByID ¶ added in v0.2.0
GetUserByID fetches a single user by ID with a span named "SELECT users".
func (*Database) IncrementDailyUsage ¶ added in v0.6.0
func (db *Database) IncrementDailyUsage(ctx context.Context, usage DailyUsage) error
func (*Database) Initialize ¶ added in v0.1.0
func (*Database) InitializeN3Settings ¶ added in v0.5.0
func (*Database) InitializeNATSettings ¶ added in v0.3.0
InitializeNATSettings inserts the default NAT settings into the database. If the settings already exist, it does nothing.
func (*Database) InitializeOperator ¶
func (*Database) InsertAuditLog ¶ added in v0.6.0
InsertAuditLogJSON parses the zap JSON and inserts a structured row.
func (*Database) InsertRadioEvent ¶ added in v0.6.0
func (*Database) IsNATEnabled ¶ added in v0.3.0
func (*Database) IsOperatorInitialized ¶ added in v0.0.20
func (*Database) IsRetentionPolicyInitialized ¶ added in v0.6.0
func (db *Database) IsRetentionPolicyInitialized(ctx context.Context, category RetentionCategory) bool
Ensure that we have a row for the Audit Log retention policy.
func (*Database) ListAPITokensPage ¶ added in v0.3.0
func (*Database) ListAuditLogsPage ¶ added in v0.3.0
func (*Database) ListDataNetworksPage ¶ added in v0.3.0
func (*Database) ListPoliciesPage ¶ added in v0.3.0
func (*Database) ListRadioEvents ¶ added in v0.6.0
func (db *Database) ListRadioEvents(ctx context.Context, page int, perPage int, filters *RadioEventFilters) ([]dbwriter.RadioEvent, int, error)
func (*Database) ListRoutesPage ¶ added in v0.3.0
func (*Database) ListSubscribersPage ¶ added in v0.3.0
func (*Database) ListUsersPage ¶ added in v0.3.0
func (*Database) PoliciesInDataNetwork ¶ added in v0.1.0
func (*Database) SetRetentionPolicy ¶ added in v0.6.0
func (db *Database) SetRetentionPolicy(ctx context.Context, policy *RetentionPolicy) error
SetRetentionPolicy upserts the retention policy for a category.
func (*Database) SubscribersInPolicy ¶ added in v0.1.0
func (*Database) UpdateDataNetwork ¶ added in v0.1.0
func (db *Database) UpdateDataNetwork(ctx context.Context, dataNetwork *DataNetwork) error
func (*Database) UpdateHomeNetworkPrivateKey ¶ added in v0.0.7
UpdateHomeNetworkPrivateKey updates the private key.
func (*Database) UpdateN3Settings ¶ added in v0.5.0
func (*Database) UpdateNATSettings ¶ added in v0.3.0
func (*Database) UpdateOperatorCode ¶
UpdateOperatorCode sets a new operatorCode.
func (*Database) UpdateOperatorID ¶ added in v0.0.12
UpdateOperatorID updates MCC/MNC.
func (*Database) UpdateOperatorSlice ¶ added in v0.0.7
UpdateOperatorSlice updates SST/SD.
func (*Database) UpdateOperatorTracking ¶ added in v0.0.7
UpdateOperatorTracking updates supported TACs.
func (*Database) UpdatePolicy ¶ added in v0.1.0
func (*Database) UpdateSubscriber ¶
func (db *Database) UpdateSubscriber(ctx context.Context, subscriber *Subscriber) error
func (*Database) UpdateUser ¶
UpdateUser updates a user's role with a span named "UPDATE users".
type N3Settings ¶ added in v0.5.0
type N3Settings struct {
ExternalAddress string `db:"external_address"`
}
type NATSettings ¶ added in v0.3.0
type NATSettings struct {
Enabled bool `db:"enabled"`
}
type NetworkInterface ¶ added in v0.0.9
type NetworkInterface int
NetworkInterface is an enum for network interface keys.
const ( N3 NetworkInterface = iota N6 )
func (NetworkInterface) String ¶ added in v0.0.9
func (ni NetworkInterface) String() string
type Operator ¶
type Operator struct {
ID int `db:"id"`
Mcc string `db:"mcc"`
Mnc string `db:"mnc"`
OperatorCode string `db:"operatorCode"`
SupportedTACs string `db:"supportedTACs"` // JSON-encoded list of strings
Sst int32 `db:"sst"`
Sd []byte `db:"sd"`
HomeNetworkPrivateKey string `db:"homeNetworkPrivateKey"`
}
func (*Operator) GetHomeNetworkPublicKey ¶ added in v0.0.7
func (*Operator) GetSupportedTacs ¶ added in v0.0.5
func (*Operator) SetSupportedTacs ¶ added in v0.0.5
type RadioEventFilters ¶ added in v0.6.0
type RadioEventFilters struct {
Protocol *string `db:"protocol"` // exact match
Direction *string `db:"direction"` // "inbound" | "outbound"
LocalAddress *string `db:"local_address"` // exact match
RemoteAddress *string `db:"remote_address"` // exact match
MessageType *string `db:"message_type"` // exact match
TimestampFrom *string `db:"timestamp_from"` // RFC3339 (UTC)
TimestampTo *string `db:"timestamp_to"` // RFC3339 (UTC), exclusive upper bound
}
type RetentionCategory ¶ added in v0.6.0
type RetentionCategory string
const ( CategoryAuditLogs RetentionCategory = "audit" CategoryRadioLogs RetentionCategory = "radio" CategorySubscriberUsage RetentionCategory = "usage" )
type RetentionPolicy ¶ added in v0.6.0
type RetentionPolicy struct {
ID int `db:"id"`
Category RetentionCategory `db:"category"`
Days int `db:"retention_days"`
}
type Route ¶ added in v0.0.9
type Route struct {
ID int64 `db:"id"`
Destination string `db:"destination"`
Gateway string `db:"gateway"`
Interface NetworkInterface `db:"interface"`
Metric int `db:"metric"`
}
Route represents a route record.
type Subscriber ¶
type Transaction ¶ added in v0.0.9
type Transaction struct {
// contains filtered or unexported fields
}
Transaction wraps a SQLair transaction.
func (*Transaction) Commit ¶ added in v0.0.9
func (t *Transaction) Commit() error
func (*Transaction) CreateRoute ¶ added in v0.0.9
func (*Transaction) DeleteRoute ¶ added in v0.0.9
func (t *Transaction) DeleteRoute(ctx context.Context, id int64) error
func (*Transaction) Rollback ¶ added in v0.0.9
func (t *Transaction) Rollback() error
type UsageFilters ¶ added in v0.6.0
type UsagePerDay ¶ added in v0.6.0
type UsagePerDay struct {
EpochDay int64 `db:"epoch_day"`
BytesUplink int64 `db:"bytes_uplink"`
BytesDownlink int64 `db:"bytes_downlink"`
}
func (*UsagePerDay) GetDay ¶ added in v0.6.0
func (d *UsagePerDay) GetDay() time.Time