storage

package
v0.1.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 11, 2021 License: MIT Imports: 33 Imported by: 0

Documentation

Index

Constants

View Source
const (
	ModulationFSK  = "FSK"
	ModulationLoRa = "LORA"
)

Modulations

Variables

View Source
var (
	ErrAlreadyExists                   = errors.New("object already exists")
	ErrDoesNotExist                    = errors.New("object does not exist")
	ErrUsedByOtherObjects              = errors.New("this object is used by other objects, remove them first")
	ErrApplicationInvalidName          = errors.New("invalid application name")
	ErrNodeInvalidName                 = errors.New("invalid node name")
	ErrNodeMaxRXDelay                  = errors.New("max value of RXDelay is 15")
	ErrCFListTooManyChannels           = errors.New("too many channels in channel-list")
	ErrUserInvalidUsername             = errors.New("username name may only be composed of upper and lower case characters and digits")
	ErrUserPasswordLength              = errors.New("passwords must be at least 6 characters long")
	ErrInvalidUsernameOrPassword       = errors.New("invalid username or password")
	ErrOrganizationInvalidName         = errors.New("invalid organization name")
	ErrGatewayInvalidName              = errors.New("invalid gateway name")
	ErrInvalidEmail                    = errors.New("invalid e-mail")
	ErrInvalidGatewayDiscoveryInterval = errors.New("invalid gateway-discovery interval, it must be greater than 0")
	ErrDeviceProfileInvalidName        = errors.New("invalid device-profile name")
	ErrServiceProfileInvalidName       = errors.New("invalid service-profile name")
	ErrFUOTADeploymentInvalidName      = errors.New("invalid FUOTA Deployment name")
	ErrFUOTADeploymentNullPayload      = errors.New("invalid FUOTA Deployment Payload")
	ErrMulticastGroupInvalidName       = errors.New("invalid multicast-group name")
	ErrOrganizationMaxDeviceCount      = errors.New("organization reached max. device count")
	ErrOrganizationMaxGatewayCount     = errors.New("organization reached max. gateway count")
	ErrNetworkServerInvalidName        = errors.New("invalid network-server name")
)

errors

View Source
var (

	// HashIterations denfines the number of times a password is hashed.
	HashIterations = 100000
)

Functions

func AddDeviceToMulticastGroup

func AddDeviceToMulticastGroup(ctx context.Context, db sqlx.Ext, multicastGroupID uuid.UUID, devEUI lorawan.EUI64) error

AddDeviceToMulticastGroup adds the given device to the given multicast-group. It is recommended that db is a transaction.

func CreateAPIKey

func CreateAPIKey(ctx context.Context, db sqlx.Ext, a *APIKey) (string, error)

CreateAPIKey creates the given API key and returns the JWT.

func CreateApplication

func CreateApplication(ctx context.Context, db sqlx.Queryer, item *Application) error

CreateApplication creates the given Application.

func CreateDevice

func CreateDevice(ctx context.Context, db sqlx.Ext, d *Device) error

CreateDevice creates the given device.

func CreateDeviceKeys

func CreateDeviceKeys(ctx context.Context, db sqlx.Execer, dc *DeviceKeys) error

CreateDeviceKeys creates the keys for the given device.

func CreateDeviceProfile

func CreateDeviceProfile(ctx context.Context, db sqlx.Ext, dp *DeviceProfile) error

CreateDeviceProfile creates the given device-profile. This will create the device-profile at the network-server side and will create a local reference record.

func CreateFUOTADeploymentForDevice

func CreateFUOTADeploymentForDevice(ctx context.Context, db sqlx.Ext, fd *FUOTADeployment, devEUI lorawan.EUI64) error

CreateFUOTADeploymentForDevice creates and initializes a FUOTA deployment for the given device.

func CreateGateway

func CreateGateway(ctx context.Context, db sqlx.Execer, gw *Gateway) error

CreateGateway creates the given Gateway.

func CreateGatewayPing

func CreateGatewayPing(ctx context.Context, db sqlx.Queryer, ping *GatewayPing) error

CreateGatewayPing creates the given gateway ping.

func CreateGatewayPingRX

func CreateGatewayPingRX(ctx context.Context, db sqlx.Queryer, rx *GatewayPingRX) error

CreateGatewayPingRX creates the received ping.

func CreateGatewayProfile

func CreateGatewayProfile(ctx context.Context, db sqlx.Ext, gp *GatewayProfile) error

CreateGatewayProfile creates the given gateway-profile. This will create the gateway-profile at the network-server side and will create a local reference record.

func CreateIntegration

func CreateIntegration(ctx context.Context, db sqlx.Queryer, i *Integration) error

CreateIntegration creates the given Integration.

func CreateMulticastGroup

func CreateMulticastGroup(ctx context.Context, db sqlx.Ext, mg *MulticastGroup) error

CreateMulticastGroup creates the given multicast-group.

func CreateNetworkServer

func CreateNetworkServer(ctx context.Context, db sqlx.Queryer, n *NetworkServer) error

CreateNetworkServer creates the given network-server.

func CreateOrganization

func CreateOrganization(ctx context.Context, db sqlx.Queryer, org *Organization) error

CreateOrganization creates the given Organization.

func CreateOrganizationUser

func CreateOrganizationUser(ctx context.Context, db sqlx.Execer, organizationID, userID int64, isAdmin, isDeviceAdmin, isGatewayAdmin bool) error

CreateOrganizationUser adds the given user to the organization.

func CreateRemoteFragmentationSession

func CreateRemoteFragmentationSession(ctx context.Context, db sqlx.Ext, sess *RemoteFragmentationSession) error

CreateRemoteFragmentationSession creates the given fragmentation session.

func CreateRemoteMulticastClassCSession

func CreateRemoteMulticastClassCSession(ctx context.Context, db sqlx.Ext, sess *RemoteMulticastClassCSession) error

CreateRemoteMulticastClassCSession creates the given multicast Class-C session.

func CreateRemoteMulticastSetup

func CreateRemoteMulticastSetup(ctx context.Context, db sqlx.Ext, dms *RemoteMulticastSetup) error

CreateRemoteMulticastSetup creates the given multicast-setup.

func CreateServiceProfile

func CreateServiceProfile(ctx context.Context, db sqlx.Ext, sp *ServiceProfile) error

CreateServiceProfile creates the given service-profile.

func CreateUser

func CreateUser(ctx context.Context, db sqlx.Queryer, user *User) error

CreateUser creates the given user.

func DeleteAPIKey

func DeleteAPIKey(ctx context.Context, db sqlx.Ext, id uuid.UUID) error

DeleteAPIKey deletes the API key for the given ID.

func DeleteAllApplicationsForOrganizationID

func DeleteAllApplicationsForOrganizationID(ctx context.Context, db sqlx.Ext, organizationID int64) error

DeleteAllApplicationsForOrganizationID deletes all applications given an organization id.

func DeleteAllDeviceProfilesForOrganizationID

func DeleteAllDeviceProfilesForOrganizationID(ctx context.Context, db sqlx.Ext, organizationID int64) error

DeleteAllDeviceProfilesForOrganizationID deletes all device-profiles given an organization id.

func DeleteAllDevicesForApplicationID

func DeleteAllDevicesForApplicationID(ctx context.Context, db sqlx.Ext, applicationID int64) error

DeleteAllDevicesForApplicationID deletes all devices given an application id.

func DeleteAllGatewaysForOrganizationID

func DeleteAllGatewaysForOrganizationID(ctx context.Context, db sqlx.Ext, organizationID int64) error

DeleteAllGatewaysForOrganizationID deletes all gateways for a given organization id.

func DeleteAllServiceProfilesForOrganizationID

func DeleteAllServiceProfilesForOrganizationID(ctx context.Context, db sqlx.Ext, organizationID int64) error

DeleteAllServiceProfilesForOrganizationID deletes all service-profiles given an organization id.

func DeleteApplication

func DeleteApplication(ctx context.Context, db sqlx.Ext, id int64) error

DeleteApplication deletes the Application matching the given ID.

func DeleteDevice

func DeleteDevice(ctx context.Context, db sqlx.Ext, devEUI lorawan.EUI64) error

DeleteDevice deletes the device matching the given DevEUI.

func DeleteDeviceKeys

func DeleteDeviceKeys(ctx context.Context, db sqlx.Execer, devEUI lorawan.EUI64) error

DeleteDeviceKeys deletes the device-keys for the given DevEUI.

func DeleteDeviceProfile

func DeleteDeviceProfile(ctx context.Context, db sqlx.Ext, id uuid.UUID) error

DeleteDeviceProfile deletes the device-profile matching the given id.

func DeleteGateway

func DeleteGateway(ctx context.Context, db sqlx.Ext, mac lorawan.EUI64) error

DeleteGateway deletes the gateway matching the given MAC.

func DeleteGatewayProfile

func DeleteGatewayProfile(ctx context.Context, db sqlx.Ext, id uuid.UUID) error

DeleteGatewayProfile deletes the gateway-profile matching the given id.

func DeleteIntegration

func DeleteIntegration(ctx context.Context, db sqlx.Execer, id int64) error

DeleteIntegration deletes the integration matching the given id.

func DeleteMulticastGroup

func DeleteMulticastGroup(ctx context.Context, db sqlx.Ext, id uuid.UUID) error

DeleteMulticastGroup deletes a multicast-group given an id.

func DeleteNetworkServer

func DeleteNetworkServer(ctx context.Context, db sqlx.Ext, id int64) error

DeleteNetworkServer deletes the network-server matching the given id.

func DeleteOrganization

func DeleteOrganization(ctx context.Context, db sqlx.Ext, id int64) error

DeleteOrganization deletes the organization matching the given id.

func DeleteOrganizationUser

func DeleteOrganizationUser(ctx context.Context, db sqlx.Execer, organizationID, userID int64) error

DeleteOrganizationUser deletes the given organization user.

func DeleteRemoteFragmentationSession

func DeleteRemoteFragmentationSession(ctx context.Context, db sqlx.Execer, devEUI lorawan.EUI64, fragIndex int) error

DeleteRemoteFragmentationSession removes the fragmentation session for the given DevEUI / fragmentation index combination.

func DeleteRemoteMulticastClassCSession

func DeleteRemoteMulticastClassCSession(ctx context.Context, db sqlx.Ext, devEUI lorawan.EUI64, multicastGroupID uuid.UUID) error

DeleteRemoteMulticastClassCSession deletes the multicast Class-C session given a DevEUI and multicast-group ID.

func DeleteRemoteMulticastSetup

func DeleteRemoteMulticastSetup(ctx context.Context, db sqlx.Ext, devEUI lorawan.EUI64, multicastGroupID uuid.UUID) error

DeleteRemoteMulticastSetup deletes the multicast-setup given a multicast-group ID and DevEUI.

func DeleteServiceProfile

func DeleteServiceProfile(ctx context.Context, db sqlx.Ext, id uuid.UUID) error

DeleteServiceProfile deletes the service-profile matching the given id.

func DeleteUser

func DeleteUser(ctx context.Context, db sqlx.Execer, id int64) error

DeleteUser deletes the User record matching the given ID.

func EnqueueDownlinkPayload

func EnqueueDownlinkPayload(ctx context.Context, db sqlx.Ext, devEUI lorawan.EUI64, confirmed bool, fPort uint8, data []byte) (uint32, error)

EnqueueDownlinkPayload adds the downlink payload to the network-server device-queue.

func GetAPIKeyCount

func GetAPIKeyCount(ctx context.Context, db sqlx.Queryer, filters APIKeyFilters) (int, error)

GetAPIKeyCount returns the number of API keys.

func GetApplicationCount

func GetApplicationCount(ctx context.Context, db sqlx.Queryer, filters ApplicationFilters) (int, error)

GetApplicationCount returns the total number of applications.

func GetDeviceCount

func GetDeviceCount(ctx context.Context, db sqlx.Queryer, filters DeviceFilters) (int, error)

GetDeviceCount returns the number of devices.

func GetDeviceCountForMulticastGroup

func GetDeviceCountForMulticastGroup(ctx context.Context, db sqlx.Queryer, multicastGroup uuid.UUID) (int, error)

GetDeviceCountForMulticastGroup returns the number of devices for the given multicast-group.

func GetDeviceProfileCount

func GetDeviceProfileCount(ctx context.Context, db sqlx.Queryer, filters DeviceProfileFilters) (int, error)

GetDeviceProfileCount returns the total number of device-profiles.

func GetFUOTADeploymentCount

func GetFUOTADeploymentCount(ctx context.Context, db sqlx.Queryer, filters FUOTADeploymentFilters) (int, error)

GetFUOTADeploymentCount returns the number of FUOTA deployments.

func GetFUOTADeploymentDeviceCount

func GetFUOTADeploymentDeviceCount(ctx context.Context, db sqlx.Queryer, fuotaDeploymentID uuid.UUID) (int, error)

GetFUOTADeploymentDeviceCount returns the device count for the given FUOTA deployment ID.

func GetGatewayCount

func GetGatewayCount(ctx context.Context, db sqlx.Queryer, filters GatewayFilters) (int, error)

GetGatewayCount returns the total number of gateways.

func GetGatewayProfileCount

func GetGatewayProfileCount(ctx context.Context, db sqlx.Queryer) (int, error)

GetGatewayProfileCount returns the total number of gateway-profiles.

func GetGatewayProfileCountForNetworkServerID

func GetGatewayProfileCountForNetworkServerID(ctx context.Context, db sqlx.Queryer, networkServerID int64) (int, error)

GetGatewayProfileCountForNetworkServerID returns the total number of gateway-profiles given a network-server ID.

func GetGatewaysForMACs

func GetGatewaysForMACs(ctx context.Context, db sqlx.Queryer, macs []lorawan.EUI64) (map[lorawan.EUI64]Gateway, error)

GetGatewaysForMACs returns a map of gateways given a slice of MACs.

func GetLastGatewayPingAndRX

func GetLastGatewayPingAndRX(ctx context.Context, db sqlx.Queryer, mac lorawan.EUI64) (GatewayPing, []GatewayPingRX, error)

GetLastGatewayPingAndRX returns the last gateway ping and RX for the given gateway MAC.

func GetMulticastGroupCount

func GetMulticastGroupCount(ctx context.Context, db sqlx.Queryer, filters MulticastGroupFilters) (int, error)

GetMulticastGroupCount returns the total number of multicast-groups given the provided filters. Note that empty values are not used as filters.

func GetNetworkServerCount

func GetNetworkServerCount(ctx context.Context, db sqlx.Queryer, filters NetworkServerFilters) (int, error)

GetNetworkServerCount returns the total number of network-servers.

func GetOrganizationCount

func GetOrganizationCount(ctx context.Context, db sqlx.Queryer, filters OrganizationFilters) (int, error)

GetOrganizationCount returns the total number of organizations.

func GetOrganizationUserCount

func GetOrganizationUserCount(ctx context.Context, db sqlx.Queryer, organizationID int64) (int, error)

GetOrganizationUserCount returns the number of users for the given organization.

func GetServiceProfileCount

func GetServiceProfileCount(ctx context.Context, db sqlx.Queryer) (int, error)

GetServiceProfileCount returns the total number of service-profiles.

func GetServiceProfileCountForOrganizationID

func GetServiceProfileCountForOrganizationID(ctx context.Context, db sqlx.Queryer, organizationID int64) (int, error)

GetServiceProfileCountForOrganizationID returns the total number of service-profiles for the given organization id.

func GetServiceProfileCountForUser

func GetServiceProfileCountForUser(ctx context.Context, db sqlx.Queryer, userID int64) (int, error)

GetServiceProfileCountForUser returns the total number of service-profiles for the given user ID.

func GetServiceProfileIDForFUOTADeployment

func GetServiceProfileIDForFUOTADeployment(ctx context.Context, db sqlx.Ext, fuotaDeploymentID uuid.UUID) (uuid.UUID, error)

GetServiceProfileIDForFUOTADeployment returns the service-profile ID for the given FUOTA deployment.

func GetUserCount

func GetUserCount(ctx context.Context, db sqlx.Queryer) (int, error)

GetUserCount returns the total number of users.

func GetUserToken

func GetUserToken(u User) (string, error)

GetUserToken returns a JWT token for the given user.

func LoginUserByPassword

func LoginUserByPassword(ctx context.Context, db sqlx.Queryer, email string, password string) (string, error)

LoginUserByPassword returns a JWT token for the user matching the given email and password combination.

func RedisClient

func RedisClient() redis.UniversalClient

RedisClient returns the RedisClient.

func RemoveDeviceFromMulticastGroup

func RemoveDeviceFromMulticastGroup(ctx context.Context, db sqlx.Ext, multicastGroupID uuid.UUID, devEUI lorawan.EUI64) error

RemoveDeviceFromMulticastGroup removes the given device from the given multicast-group.

func SaveMetrics

func SaveMetrics(ctx context.Context, name string, metrics MetricsRecord) error

SaveMetrics stores the given metrics into Redis.

func SaveMetricsForInterval

func SaveMetricsForInterval(ctx context.Context, agg AggregationInterval, name string, metrics MetricsRecord) error

SaveMetricsForInterval aggregates and stores the given metrics.

func SetAggregationIntervals

func SetAggregationIntervals(intervals []AggregationInterval) error

SetAggregationIntervals sets the metrics aggregation to the given intervals.

func SetMetricsTTL

func SetMetricsTTL(minute, hour, day, month time.Duration)

SetMetricsTTL sets the storage TTL.

func SetTimeLocation

func SetTimeLocation(name string) error

SetTimeLocation sets the time location.

func Setup

func Setup(c config.Config) error

Setup configures the storage package.

func Transaction

func Transaction(f func(tx sqlx.Ext) error) error

Transaction wraps the given function in a transaction. In case the given functions returns an error, the transaction will be rolled back.

func UpdateApplication

func UpdateApplication(ctx context.Context, db sqlx.Execer, item Application) error

UpdateApplication updates the given Application.

func UpdateDevice

func UpdateDevice(ctx context.Context, db sqlx.Ext, d *Device, localOnly bool) error

UpdateDevice updates the given device. When localOnly is set, it will not update the device on the network-server.

func UpdateDeviceActivation

func UpdateDeviceActivation(ctx context.Context, db sqlx.Ext, devEUI lorawan.EUI64, devAddr lorawan.DevAddr, appSKey lorawan.AES128Key) error

UpdateDeviceActivation updates the device address and the AppSKey.

func UpdateDeviceKeys

func UpdateDeviceKeys(ctx context.Context, db sqlx.Execer, dc *DeviceKeys) error

UpdateDeviceKeys updates the given device-keys.

func UpdateDeviceLastSeenAndDR

func UpdateDeviceLastSeenAndDR(ctx context.Context, db sqlx.Ext, devEUI lorawan.EUI64, ts time.Time, dr int) error

UpdateDeviceLastSeenAndDR updates the device last-seen timestamp and data-rate.

func UpdateDeviceProfile

func UpdateDeviceProfile(ctx context.Context, db sqlx.Ext, dp *DeviceProfile) error

UpdateDeviceProfile updates the given device-profile.

func UpdateFUOTADeployment

func UpdateFUOTADeployment(ctx context.Context, db sqlx.Ext, fd *FUOTADeployment) error

UpdateFUOTADeployment updates the given FUOTA deployment.

func UpdateFUOTADeploymentDevice

func UpdateFUOTADeploymentDevice(ctx context.Context, db sqlx.Ext, fdd *FUOTADeploymentDevice) error

UpdateFUOTADeploymentDevice updates the given fuota deployment device record.

func UpdateGateway

func UpdateGateway(ctx context.Context, db sqlx.Execer, gw *Gateway) error

UpdateGateway updates the given Gateway.

func UpdateGatewayProfile

func UpdateGatewayProfile(ctx context.Context, db sqlx.Ext, gp *GatewayProfile) error

UpdateGatewayProfile updates the given gateway-profile.

func UpdateIntegration

func UpdateIntegration(ctx context.Context, db sqlx.Execer, i *Integration) error

UpdateIntegration updates the given Integration.

func UpdateMulticastGroup

func UpdateMulticastGroup(ctx context.Context, db sqlx.Ext, mg *MulticastGroup) error

UpdateMulticastGroup updates the given multicast-group.

func UpdateNetworkServer

func UpdateNetworkServer(ctx context.Context, db sqlx.Execer, n *NetworkServer) error

UpdateNetworkServer updates the given network-server.

func UpdateOrganization

func UpdateOrganization(ctx context.Context, db sqlx.Execer, org *Organization) error

UpdateOrganization updates the given organization.

func UpdateOrganizationUser

func UpdateOrganizationUser(ctx context.Context, db sqlx.Execer, organizationID, userID int64, isAdmin, isDeviceAdmin, isGatewayAdmin bool) error

UpdateOrganizationUser updates the given user of the organization.

func UpdateRemoteFragmentationSession

func UpdateRemoteFragmentationSession(ctx context.Context, db sqlx.Ext, sess *RemoteFragmentationSession) error

UpdateRemoteFragmentationSession updates the given fragmentation session.

func UpdateRemoteMulticastClassCSession

func UpdateRemoteMulticastClassCSession(ctx context.Context, db sqlx.Ext, sess *RemoteMulticastClassCSession) error

UpdateRemoteMulticastClassCSession updates the given remote multicast Class-C session.

func UpdateRemoteMulticastSetup

func UpdateRemoteMulticastSetup(ctx context.Context, db sqlx.Ext, dmg *RemoteMulticastSetup) error

UpdateRemoteMulticastSetup updates the given update multicast-group setup.

func UpdateServiceProfile

func UpdateServiceProfile(ctx context.Context, db sqlx.Ext, sp *ServiceProfile) error

UpdateServiceProfile updates the given service-profile.

func UpdateUser

func UpdateUser(ctx context.Context, db sqlx.Execer, u *User) error

UpdateUser updates the given User.

Types

type APIKey

type APIKey struct {
	ID             uuid.UUID `db:"id"`
	CreatedAt      time.Time `db:"created_at"`
	Name           string    `db:"name"`
	IsAdmin        bool      `db:"is_admin"`
	OrganizationID *int64    `db:"organization_id"`
	ApplicationID  *int64    `db:"application_id"`
}

APIKey represents an API key.

func GetAPIKey

func GetAPIKey(ctx context.Context, db sqlx.Queryer, id uuid.UUID) (APIKey, error)

GetAPIKey returns the API key for the given ID.

func GetAPIKeys

func GetAPIKeys(ctx context.Context, db sqlx.Queryer, filters APIKeyFilters) ([]APIKey, error)

GetAPIKeys returns a slice of API keys.

type APIKeyFilters

type APIKeyFilters struct {
	IsAdmin        bool   `db:"is_admin"`
	OrganizationID *int64 `db:"organization_id"`
	ApplicationID  *int64 `db:"application_id"`

	// Limit and Offset are added for convenience so that this struct can
	// be given as the arguments.
	Limit  int `db:"limit"`
	Offset int `db:"offset"`
}

APIKeyFilters provides filters for getting the API keys.

func (APIKeyFilters) SQL

func (f APIKeyFilters) SQL() string

SQL returns the filters as SQL.

type Action

type Action int

Action defines the action type.

const (
	Select Action = iota
	Insert
	Update
	Delete
	Scan
)

Possible actions

type AggregationInterval

type AggregationInterval string

AggregationInterval defines the aggregation type.

const (
	AggregationMinute AggregationInterval = "MINUTE"
	AggregationHour   AggregationInterval = "HOUR"
	AggregationDay    AggregationInterval = "DAY"
	AggregationMonth  AggregationInterval = "MONTH"
)

Metrics aggregation intervals.

type Application

type Application struct {
	ID                   int64      `db:"id"`
	Name                 string     `db:"name"`
	Description          string     `db:"description"`
	OrganizationID       int64      `db:"organization_id"`
	ServiceProfileID     uuid.UUID  `db:"service_profile_id"`
	PayloadCodec         codec.Type `db:"payload_codec"`
	PayloadEncoderScript string     `db:"payload_encoder_script"`
	PayloadDecoderScript string     `db:"payload_decoder_script"`
}

Application represents an application.

func GetApplication

func GetApplication(ctx context.Context, db sqlx.Queryer, id int64) (Application, error)

GetApplication returns the Application for the given id.

func (Application) Validate

func (a Application) Validate() error

Validate validates the data of the Application.

type ApplicationFilters

type ApplicationFilters struct {
	UserID         int64  `db:"user_id"`
	OrganizationID int64  `db:"organization_id"`
	Search         string `db:"search"`

	// Limit and Offset are added for convenience so that this struct can
	// be given as the arguments.
	Limit  int `db:"limit"`
	Offset int `db:"offset"`
}

ApplicationFilters provides filters for filtering applications.

func (ApplicationFilters) SQL

func (f ApplicationFilters) SQL() string

SQL returns the SQL filters.

type ApplicationListItem

type ApplicationListItem struct {
	Application
	ServiceProfileName string `db:"service_profile_name"`
}

ApplicationListItem devices the application as a list item.

func GetApplications

func GetApplications(ctx context.Context, db sqlx.Queryer, filters ApplicationFilters) ([]ApplicationListItem, error)

GetApplications returns a slice of applications, sorted by name and respecting the given limit and offset.

type DBLogger

type DBLogger struct {
	*sqlx.DB
}

DBLogger is a DB wrapper which logs the executed sql queries and their duration.

func DB

func DB() *DBLogger

DB returns the PostgreSQL database object.

func (*DBLogger) Beginx

func (db *DBLogger) Beginx() (*TxLogger, error)

Beginx returns a transaction with logging.

func (*DBLogger) Exec

func (db *DBLogger) Exec(query string, args ...interface{}) (sql.Result, error)

Exec logs the queries executed by the Exec method.

func (*DBLogger) Query

func (db *DBLogger) Query(query string, args ...interface{}) (*sql.Rows, error)

Query logs the queries executed by the Query method.

func (*DBLogger) QueryRowx

func (db *DBLogger) QueryRowx(query string, args ...interface{}) *sqlx.Row

QueryRowx logs the queries executed by the QueryRowx method.

func (*DBLogger) Queryx

func (db *DBLogger) Queryx(query string, args ...interface{}) (*sqlx.Rows, error)

Queryx logs the queries executed by the Queryx method.

type Device

type Device struct {
	DevEUI                    lorawan.EUI64     `db:"dev_eui"`
	CreatedAt                 time.Time         `db:"created_at"`
	UpdatedAt                 time.Time         `db:"updated_at"`
	LastSeenAt                *time.Time        `db:"last_seen_at"`
	ApplicationID             int64             `db:"application_id"`
	DeviceProfileID           uuid.UUID         `db:"device_profile_id"`
	Name                      string            `db:"name"`
	Description               string            `db:"description"`
	SkipFCntCheck             bool              `db:"-"`
	ReferenceAltitude         float64           `db:"-"`
	DeviceStatusBattery       *float32          `db:"device_status_battery"`
	DeviceStatusMargin        *int              `db:"device_status_margin"`
	DeviceStatusExternalPower bool              `db:"device_status_external_power_source"`
	DR                        *int              `db:"dr"`
	Latitude                  *float64          `db:"latitude"`
	Longitude                 *float64          `db:"longitude"`
	Altitude                  *float64          `db:"altitude"`
	DevAddr                   lorawan.DevAddr   `db:"dev_addr"`
	AppSKey                   lorawan.AES128Key `db:"app_s_key"`
	Variables                 hstore.Hstore     `db:"variables"`
	Tags                      hstore.Hstore     `db:"tags"`
	IsDisabled                bool              `db:"-"`
}

Device defines a LoRaWAN device.

func GetDevice

func GetDevice(ctx context.Context, db sqlx.Queryer, devEUI lorawan.EUI64, forUpdate, localOnly bool) (Device, error)

GetDevice returns the device matching the given DevEUI. When forUpdate is set to true, then db must be a db transaction. When localOnly is set to true, no call to the network-server is made to retrieve additional device data.

func (Device) Validate

func (d Device) Validate() error

Validate validates the device data.

type DeviceFilters

type DeviceFilters struct {
	OrganizationID   int64         `db:"organization_id"`
	ApplicationID    int64         `db:"application_id"`
	MulticastGroupID uuid.UUID     `db:"multicast_group_id"`
	ServiceProfileID uuid.UUID     `db:"service_profile_id"`
	Search           string        `db:"search"`
	Tags             hstore.Hstore `db:"tags"`

	// Limit and Offset are added for convenience so that this struct can
	// be given as the arguments.
	Limit  int `db:"limit"`
	Offset int `db:"offset"`
}

DeviceFilters provide filters that can be used to filter on devices. Note that empty values are not used as filter.

func (DeviceFilters) SQL

func (f DeviceFilters) SQL() string

SQL returns the SQL filter.

type DeviceKeys

type DeviceKeys struct {
	CreatedAt time.Time         `db:"created_at"`
	UpdatedAt time.Time         `db:"updated_at"`
	DevEUI    lorawan.EUI64     `db:"dev_eui"`
	NwkKey    lorawan.AES128Key `db:"nwk_key"`
	AppKey    lorawan.AES128Key `db:"app_key"`
	GenAppKey lorawan.AES128Key `db:"gen_app_key"`
	JoinNonce int               `db:"join_nonce"`
}

DeviceKeys defines the keys for a LoRaWAN device.

func GetDeviceKeys

func GetDeviceKeys(ctx context.Context, db sqlx.Queryer, devEUI lorawan.EUI64) (DeviceKeys, error)

GetDeviceKeys returns the device-keys for the given DevEUI.

type DeviceListItem

type DeviceListItem struct {
	Device
	DeviceProfileName string `db:"device_profile_name"`
}

DeviceListItem defines the Device as list item.

func GetDevices

func GetDevices(ctx context.Context, db sqlx.Queryer, filters DeviceFilters) ([]DeviceListItem, error)

GetDevices returns a slice of devices.

func GetDevicesForMulticastGroup

func GetDevicesForMulticastGroup(ctx context.Context, db sqlx.Queryer, multicastGroupID uuid.UUID, limit, offset int) ([]DeviceListItem, error)

GetDevicesForMulticastGroup returns a slice of devices for the given multicast-group.

type DeviceProfile

type DeviceProfile struct {
	NetworkServerID      int64            `db:"network_server_id"`
	OrganizationID       int64            `db:"organization_id"`
	CreatedAt            time.Time        `db:"created_at"`
	UpdatedAt            time.Time        `db:"updated_at"`
	Name                 string           `db:"name"`
	PayloadCodec         codec.Type       `db:"payload_codec"`
	PayloadEncoderScript string           `db:"payload_encoder_script"`
	PayloadDecoderScript string           `db:"payload_decoder_script"`
	Tags                 hstore.Hstore    `db:"tags"`
	UplinkInterval       time.Duration    `db:"uplink_interval"`
	DeviceProfile        ns.DeviceProfile `db:"-"`
}

DeviceProfile defines the device-profile.

func GetDeviceProfile

func GetDeviceProfile(ctx context.Context, db sqlx.Queryer, id uuid.UUID, forUpdate, localOnly bool) (DeviceProfile, error)

GetDeviceProfile returns the device-profile matching the given id. When forUpdate is set to true, then db must be a db transaction. When localOnly is set to true, no call to the network-server is made to retrieve additional device data.

func (DeviceProfile) Validate

func (dp DeviceProfile) Validate() error

Validate validates the device-profile data.

type DeviceProfileFilters

type DeviceProfileFilters struct {
	ApplicationID  int64 `db:"application_id"`
	OrganizationID int64 `db:"organization_id"`
	UserID         int64 `db:"user_id"`

	// Limit and Offset are added for convenience so that this struct can
	// be given as the arguments.
	Limit  int `db:"limit"`
	Offset int `db:"offset"`
}

DeviceProfileFilters provide filders for filtering device-profiles.

func (DeviceProfileFilters) SQL

func (f DeviceProfileFilters) SQL() string

SQL returns the SQL filters.

type DeviceProfileMeta

type DeviceProfileMeta struct {
	DeviceProfileID   uuid.UUID `db:"device_profile_id"`
	NetworkServerID   int64     `db:"network_server_id"`
	OrganizationID    int64     `db:"organization_id"`
	CreatedAt         time.Time `db:"created_at"`
	UpdatedAt         time.Time `db:"updated_at"`
	Name              string    `db:"name"`
	NetworkServerName string    `db:"network_server_name"`
}

DeviceProfileMeta defines the device-profile meta record.

func GetDeviceProfiles

func GetDeviceProfiles(ctx context.Context, db sqlx.Queryer, filters DeviceProfileFilters) ([]DeviceProfileMeta, error)

GetDeviceProfiles returns a slice of device-profiles.

type DevicesActiveInactive

type DevicesActiveInactive struct {
	NeverSeenCount uint32 `db:"never_seen_count"`
	ActiveCount    uint32 `db:"active_count"`
	InactiveCount  uint32 `db:"inactive_count"`
}

DevicesActiveInactive holds the active and inactive counts.

func GetDevicesActiveInactive

func GetDevicesActiveInactive(ctx context.Context, db sqlx.Queryer, organizationID int64) (DevicesActiveInactive, error)

GetDevicesActiveInactive returns the active / inactive devices.

type DevicesDataRates

type DevicesDataRates map[uint32]uint32

DevicesDataRates holds the device counts by data-rate.

func GetDevicesDataRates

func GetDevicesDataRates(ctx context.Context, db sqlx.Queryer, organizationID int64) (DevicesDataRates, error)

GetDevicesDataRates returns the device counts by data-rate.

type ExtraChannel

type ExtraChannel struct {
	Modulation       string
	Frequency        int
	Bandwidth        int
	Bitrate          int
	SpreadingFactors []int
}

ExtraChannel defines an extra channel for the gateway-profile.

type FUOTADeployment

type FUOTADeployment struct {
	ID                  uuid.UUID                `db:"id"`
	CreatedAt           time.Time                `db:"created_at"`
	UpdatedAt           time.Time                `db:"updated_at"`
	Name                string                   `db:"name"`
	MulticastGroupID    *uuid.UUID               `db:"multicast_group_id"`
	GroupType           FUOTADeploymentGroupType `db:"group_type"`
	DR                  int                      `db:"dr"`
	Frequency           int                      `db:"frequency"`
	PingSlotPeriod      int                      `db:"ping_slot_period"`
	FragmentationMatrix uint8                    `db:"fragmentation_matrix"`
	Descriptor          [4]byte                  `db:"descriptor"`
	Payload             []byte                   `db:"payload"`
	FragSize            int                      `db:"frag_size"`
	Redundancy          int                      `db:"redundancy"`
	BlockAckDelay       int                      `db:"block_ack_delay"`
	MulticastTimeout    int                      `db:"multicast_timeout"`
	State               FUOTADeploymentState     `db:"state"`
	UnicastTimeout      time.Duration            `db:"unicast_timeout"`
	NextStepAfter       time.Time                `db:"next_step_after"`
}

FUOTADeployment defiles a firmware update over the air deployment.

func GetFUOTADeployment

func GetFUOTADeployment(ctx context.Context, db sqlx.Ext, id uuid.UUID, forUpdate bool) (FUOTADeployment, error)

GetFUOTADeployment returns the FUOTA deployment for the given ID.

func GetPendingFUOTADeployments

func GetPendingFUOTADeployments(ctx context.Context, db sqlx.Ext, batchSize int) ([]FUOTADeployment, error)

GetPendingFUOTADeployments returns the pending FUOTA deployments.

func (FUOTADeployment) Validate

func (fd FUOTADeployment) Validate() error

Validate validates the FUOTADeployment data.

type FUOTADeploymentDevice

type FUOTADeploymentDevice struct {
	FUOTADeploymentID uuid.UUID                  `db:"fuota_deployment_id"`
	DevEUI            lorawan.EUI64              `db:"dev_eui"`
	CreatedAt         time.Time                  `db:"created_at"`
	UpdatedAt         time.Time                  `db:"updated_at"`
	State             FUOTADeploymentDeviceState `db:"state"`
	ErrorMessage      string                     `db:"error_message"`
}

FUOTADeploymentDevice defines the device record of a FUOTA deployment.

func GetFUOTADeploymentDevice

func GetFUOTADeploymentDevice(ctx context.Context, db sqlx.Queryer, fuotaDeploymentID uuid.UUID, devEUI lorawan.EUI64) (FUOTADeploymentDevice, error)

GetFUOTADeploymentDevice returns the FUOTA deployment record for the given device.

func GetPendingFUOTADeploymentDevice

func GetPendingFUOTADeploymentDevice(ctx context.Context, db sqlx.Queryer, devEUI lorawan.EUI64) (FUOTADeploymentDevice, error)

GetPendingFUOTADeploymentDevice returns the pending FUOTA deployment record for the given DevEUI.

type FUOTADeploymentDeviceListItem

type FUOTADeploymentDeviceListItem struct {
	CreatedAt         time.Time                  `db:"created_at"`
	UpdatedAt         time.Time                  `db:"updated_at"`
	FUOTADeploymentID uuid.UUID                  `db:"fuota_deployment_id"`
	DevEUI            lorawan.EUI64              `db:"dev_eui"`
	DeviceName        string                     `db:"device_name"`
	State             FUOTADeploymentDeviceState `db:"state"`
	ErrorMessage      string                     `db:"error_message"`
}

FUOTADeploymentDeviceListItem defines the Device as FUOTA deployment list item.

func GetFUOTADeploymentDevices

func GetFUOTADeploymentDevices(ctx context.Context, db sqlx.Queryer, fuotaDeploymentID uuid.UUID, limit, offset int) ([]FUOTADeploymentDeviceListItem, error)

GetFUOTADeploymentDevices returns a slice of devices for the given FUOTA deployment ID.

type FUOTADeploymentDeviceState

type FUOTADeploymentDeviceState string

FUOTADeploymentDeviceState defines the fuota deployment device state.

const (
	FUOTADeploymentDevicePending FUOTADeploymentDeviceState = "PENDING"
	FUOTADeploymentDeviceSuccess FUOTADeploymentDeviceState = "SUCCESS"
	FUOTADeploymentDeviceError   FUOTADeploymentDeviceState = "ERROR"
)

FUOTA deployment device states.

type FUOTADeploymentFilters

type FUOTADeploymentFilters struct {
	DevEUI        lorawan.EUI64 `db:"dev_eui"`
	ApplicationID int64         `db:"application_id"`

	// Limit and Offset are added for convenience so that this struct can
	// be given as the arguments.
	Limit  int `db:"limit"`
	Offset int `db:"offset"`
}

FUOTADeploymentFilters provides filters that can be used to filter on FUOTA deployments. Note that empty values are not used as filters.

func (FUOTADeploymentFilters) SQL

SQL returns the SQL filter.

type FUOTADeploymentGroupType

type FUOTADeploymentGroupType string

FUOTADeploymentGroupType defines the group-type.

const (
	FUOTADeploymentGroupTypeB FUOTADeploymentGroupType = "B"
	FUOTADeploymentGroupTypeC FUOTADeploymentGroupType = "C"
)

FUOTA deployment group types.

type FUOTADeploymentListItem

type FUOTADeploymentListItem struct {
	ID            uuid.UUID            `db:"id"`
	CreatedAt     time.Time            `db:"created_at"`
	UpdatedAt     time.Time            `db:"updated_at"`
	Name          string               `db:"name"`
	State         FUOTADeploymentState `db:"state"`
	NextStepAfter time.Time            `db:"next_step_after"`
}

FUOTADeploymentListItem defines a FUOTA deployment item for listing.

func GetFUOTADeployments

func GetFUOTADeployments(ctx context.Context, db sqlx.Queryer, filters FUOTADeploymentFilters) ([]FUOTADeploymentListItem, error)

GetFUOTADeployments returns a slice of fuota deployments.

type FUOTADeploymentState

type FUOTADeploymentState string

FUOTADeploymentState defines the fuota deployment state.

const (
	FUOTADeploymentMulticastCreate        FUOTADeploymentState = "MC_CREATE"
	FUOTADeploymentMulticastSetup         FUOTADeploymentState = "MC_SETUP"
	FUOTADeploymentFragmentationSessSetup FUOTADeploymentState = "FRAG_SESS_SETUP"
	FUOTADeploymentMulticastSessCSetup    FUOTADeploymentState = "MC_SESS_C_SETUP"
	FUOTADeploymentEnqueue                FUOTADeploymentState = "ENQUEUE"
	FUOTADeploymentStatusRequest          FUOTADeploymentState = "STATUS_REQUEST"
	FUOTADeploymentSetDeviceStatus        FUOTADeploymentState = "SET_DEVICE_STATUS"
	FUOTADeploymentCleanup                FUOTADeploymentState = "CLEANUP"
	FUOTADeploymentDone                   FUOTADeploymentState = "DONE"
)

FUOTA deployment states.

type GPSPoint

type GPSPoint struct {
	Latitude  float64
	Longitude float64
}

GPSPoint contains a GPS point.

func (*GPSPoint) Scan

func (l *GPSPoint) Scan(src interface{}) error

Scan implements the sql.Scanner interface.

func (GPSPoint) Value

func (l GPSPoint) Value() (driver.Value, error)

Value implements the driver.Valuer interface.

type Gateway

type Gateway struct {
	MAC              lorawan.EUI64 `db:"mac"`
	CreatedAt        time.Time     `db:"created_at"`
	UpdatedAt        time.Time     `db:"updated_at"`
	FirstSeenAt      *time.Time    `db:"first_seen_at"`
	LastSeenAt       *time.Time    `db:"last_seen_at"`
	Name             string        `db:"name"`
	Description      string        `db:"description"`
	OrganizationID   int64         `db:"organization_id"`
	Ping             bool          `db:"ping"`
	LastPingID       *int64        `db:"last_ping_id"`
	LastPingSentAt   *time.Time    `db:"last_ping_sent_at"`
	NetworkServerID  int64         `db:"network_server_id"`
	GatewayProfileID *uuid.UUID    `db:"gateway_profile_id"`
	Latitude         float64       `db:"latitude"`
	Longitude        float64       `db:"longitude"`
	Altitude         float64       `db:"altitude"`
	Tags             hstore.Hstore `db:"tags"`
	Metadata         hstore.Hstore `db:"metadata"`
}

Gateway represents a gateway.

func GetGateway

func GetGateway(ctx context.Context, db sqlx.Queryer, mac lorawan.EUI64, forUpdate bool) (Gateway, error)

GetGateway returns the gateway for the given mac.

func (Gateway) Validate

func (g Gateway) Validate() error

Validate validates the gateway data.

type GatewayFilters

type GatewayFilters struct {
	OrganizationID int64  `db:"organization_id"`
	UserID         int64  `db:"user_id"`
	Search         string `db:"search"`

	// Limit and Offset are added for convenience so that this struct can
	// be given as the arguments.
	Limit  int `db:"limit"`
	Offset int `db:"offset"`
}

GatewayFilters provides filters for filtering gateways.

func (GatewayFilters) SQL

func (f GatewayFilters) SQL() string

SQL returns the SQL filters.

type GatewayListItem

type GatewayListItem struct {
	MAC               lorawan.EUI64 `db:"mac"`
	Name              string        `db:"name"`
	Description       string        `db:"description"`
	CreatedAt         time.Time     `db:"created_at"`
	UpdatedAt         time.Time     `db:"updated_at"`
	FirstSeenAt       *time.Time    `db:"first_seen_at"`
	LastSeenAt        *time.Time    `db:"last_seen_at"`
	OrganizationID    int64         `db:"organization_id"`
	NetworkServerID   int64         `db:"network_server_id"`
	Latitude          float64       `db:"latitude"`
	Longitude         float64       `db:"longitude"`
	Altitude          float64       `db:"altitude"`
	NetworkServerName string        `db:"network_server_name"`
}

GatewayListItem defines the gateway as list item.

func GetGateways

func GetGateways(ctx context.Context, db sqlx.Queryer, filters GatewayFilters) ([]GatewayListItem, error)

GetGateways returns a slice of gateways sorted by name.

type GatewayPing

type GatewayPing struct {
	ID         int64         `db:"id"`
	CreatedAt  time.Time     `db:"created_at"`
	GatewayMAC lorawan.EUI64 `db:"gateway_mac"`
	Frequency  int           `db:"frequency"`
	DR         int           `db:"dr"`
}

GatewayPing represents a gateway ping.

func GetGatewayPing

func GetGatewayPing(ctx context.Context, db sqlx.Queryer, id int64) (GatewayPing, error)

GetGatewayPing returns the ping matching the given id.

type GatewayPingRX

type GatewayPingRX struct {
	ID         int64         `db:"id"`
	PingID     int64         `db:"ping_id"`
	CreatedAt  time.Time     `db:"created_at"`
	GatewayMAC lorawan.EUI64 `db:"gateway_mac"`
	ReceivedAt *time.Time    `db:"received_at"`
	RSSI       int           `db:"rssi"`
	LoRaSNR    float64       `db:"lora_snr"`
	Location   GPSPoint      `db:"location"`
	Altitude   float64       `db:"altitude"`
}

GatewayPingRX represents a ping received by one of the gateways.

func GetGatewayPingRXForPingID

func GetGatewayPingRXForPingID(ctx context.Context, db sqlx.Queryer, pingID int64) ([]GatewayPingRX, error)

GetGatewayPingRXForPingID returns the received gateway pings for the given ping ID.

type GatewayProfile

type GatewayProfile struct {
	NetworkServerID int64             `db:"network_server_id"`
	CreatedAt       time.Time         `db:"created_at"`
	UpdatedAt       time.Time         `db:"updated_at"`
	Name            string            `db:"name"`
	GatewayProfile  ns.GatewayProfile `db:"-"`
}

GatewayProfile defines a gateway-profile.

func GetGatewayProfile

func GetGatewayProfile(ctx context.Context, db sqlx.Queryer, id uuid.UUID) (GatewayProfile, error)

GetGatewayProfile returns the gateway-profile matching the given id.

type GatewayProfileMeta

type GatewayProfileMeta struct {
	GatewayProfileID  uuid.UUID     `db:"gateway_profile_id"`
	NetworkServerID   int64         `db:"network_server_id"`
	NetworkServerName string        `db:"network_server_name"`
	CreatedAt         time.Time     `db:"created_at"`
	UpdatedAt         time.Time     `db:"updated_at"`
	Name              string        `db:"name"`
	StatsInterval     time.Duration `db:"stats_interval"`
}

GatewayProfileMeta defines the gateway-profile meta record.

func GetGatewayProfiles

func GetGatewayProfiles(ctx context.Context, db sqlx.Queryer, limit, offset int) ([]GatewayProfileMeta, error)

GetGatewayProfiles returns a slice of gateway-profiles.

func GetGatewayProfilesForNetworkServerID

func GetGatewayProfilesForNetworkServerID(ctx context.Context, db sqlx.Queryer, networkServerID int64, limit, offset int) ([]GatewayProfileMeta, error)

GetGatewayProfilesForNetworkServerID returns a slice of gateway-profiles for the given network-server ID.

type GatewaysActiveInactive

type GatewaysActiveInactive struct {
	NeverSeenCount uint32 `db:"never_seen_count"`
	ActiveCount    uint32 `db:"active_count"`
	InactiveCount  uint32 `db:"inactive_count"`
}

GatewaysActiveInactive holds the avtive and inactive counts.

func GetGatewaysActiveInactive

func GetGatewaysActiveInactive(ctx context.Context, db sqlx.Queryer, organizationID int64) (GatewaysActiveInactive, error)

GetGatewaysActiveInactive returns the active / inactive gateways.

type Integration

type Integration struct {
	ID            int64           `db:"id"`
	CreatedAt     time.Time       `db:"created_at"`
	UpdatedAt     time.Time       `db:"updated_at"`
	ApplicationID int64           `db:"application_id"`
	Kind          string          `db:"kind"`
	Settings      json.RawMessage `db:"settings"`
}

Integration represents an integration.

func GetIntegration

func GetIntegration(ctx context.Context, db sqlx.Queryer, id int64) (Integration, error)

GetIntegration returns the Integration for the given id.

func GetIntegrationByApplicationID

func GetIntegrationByApplicationID(ctx context.Context, db sqlx.Queryer, applicationID int64, kind string) (Integration, error)

GetIntegrationByApplicationID returns the Integration for the given application id and kind.

func GetIntegrationsForApplicationID

func GetIntegrationsForApplicationID(ctx context.Context, db sqlx.Queryer, applicationID int64) ([]Integration, error)

GetIntegrationsForApplicationID returns the integrations for the given application id.

type MetricsRecord

type MetricsRecord struct {
	Time    time.Time
	Metrics map[string]float64
}

MetricsRecord holds a single metrics record.

func GetMetrics

func GetMetrics(ctx context.Context, agg AggregationInterval, name string, start, end time.Time) ([]MetricsRecord, error)

GetMetrics returns the metrics for the requested aggregation interval.

type MulticastGroup

type MulticastGroup struct {
	CreatedAt        time.Time         `db:"created_at"`
	UpdatedAt        time.Time         `db:"updated_at"`
	Name             string            `db:"name"`
	MCAppSKey        lorawan.AES128Key `db:"mc_app_s_key"`
	MCKey            lorawan.AES128Key `db:"mc_key"`
	ServiceProfileID uuid.UUID         `db:"service_profile_id"`
	MulticastGroup   ns.MulticastGroup `db:"-"`
}

MulticastGroup defines the multicast-group.

func GetMulticastGroup

func GetMulticastGroup(ctx context.Context, db sqlx.Queryer, id uuid.UUID, forUpdate, localOnly bool) (MulticastGroup, error)

GetMulticastGroup returns the multicast-group given an id.

func (MulticastGroup) Validate

func (mg MulticastGroup) Validate() error

Validate validates the service-profile data.

type MulticastGroupFilters

type MulticastGroupFilters struct {
	OrganizationID   int64         `db:"organization_id"`
	ServiceProfileID uuid.UUID     `db:"service_profile_id"`
	DevEUI           lorawan.EUI64 `db:"dev_eui"`
	Search           string        `db:"search"`

	// Limit and Offset are added for convenience so that this struct can
	// be given as the arguments.
	Limit  int `db:"limit"`
	Offset int `db:"offset"`
}

MulticastGroupFilters provide filters that can be used to filter on multicast-groups. Note that empty values are not used as filters.

func (MulticastGroupFilters) SQL

func (f MulticastGroupFilters) SQL() string

SQL returns the SQL filter.

type MulticastGroupListItem

type MulticastGroupListItem struct {
	ID                 uuid.UUID `db:"id"`
	CreatedAt          time.Time `db:"created_at"`
	UpdatedAt          time.Time `db:"updated_at"`
	Name               string    `db:"name"`
	ServiceProfileID   uuid.UUID `db:"service_profile_id"`
	ServiceProfileName string    `db:"service_profile_name"`
}

MulticastGroupListItem defines the multicast-group for listing.

func GetMulticastGroups

func GetMulticastGroups(ctx context.Context, db sqlx.Queryer, filters MulticastGroupFilters) ([]MulticastGroupListItem, error)

GetMulticastGroups returns a slice of multicast-groups, given the privded filters. Note that empty values are not used as filters.

type NetworkServer

type NetworkServer struct {
	ID                          int64     `db:"id"`
	CreatedAt                   time.Time `db:"created_at"`
	UpdatedAt                   time.Time `db:"updated_at"`
	Name                        string    `db:"name"`
	Server                      string    `db:"server"`
	CACert                      string    `db:"ca_cert"`
	TLSCert                     string    `db:"tls_cert"`
	TLSKey                      string    `db:"tls_key"`
	RoutingProfileCACert        string    `db:"routing_profile_ca_cert"`
	RoutingProfileTLSCert       string    `db:"routing_profile_tls_cert"`
	RoutingProfileTLSKey        string    `db:"routing_profile_tls_key"`
	GatewayDiscoveryEnabled     bool      `db:"gateway_discovery_enabled"`
	GatewayDiscoveryInterval    int       `db:"gateway_discovery_interval"`
	GatewayDiscoveryTXFrequency int       `db:"gateway_discovery_tx_frequency"`
	GatewayDiscoveryDR          int       `db:"gateway_discovery_dr"`
}

NetworkServer defines the information to connect to a network-server.

func GetNetworkServer

func GetNetworkServer(ctx context.Context, db sqlx.Queryer, id int64) (NetworkServer, error)

GetNetworkServer returns the network-server matching the given id.

func GetNetworkServerForDevEUI

func GetNetworkServerForDevEUI(ctx context.Context, db sqlx.Queryer, devEUI lorawan.EUI64) (NetworkServer, error)

GetNetworkServerForDevEUI returns the network-server for the given DevEUI.

func GetNetworkServerForDeviceProfileID

func GetNetworkServerForDeviceProfileID(ctx context.Context, db sqlx.Queryer, id uuid.UUID) (NetworkServer, error)

GetNetworkServerForDeviceProfileID returns the network-server for the given device-profile id.

func GetNetworkServerForGatewayMAC

func GetNetworkServerForGatewayMAC(ctx context.Context, db sqlx.Queryer, mac lorawan.EUI64) (NetworkServer, error)

GetNetworkServerForGatewayMAC returns the network-server for a given gateway mac.

func GetNetworkServerForGatewayProfileID

func GetNetworkServerForGatewayProfileID(ctx context.Context, db sqlx.Queryer, id uuid.UUID) (NetworkServer, error)

GetNetworkServerForGatewayProfileID returns the network-server for the given gateway-profile id.

func GetNetworkServerForMulticastGroupID

func GetNetworkServerForMulticastGroupID(ctx context.Context, db sqlx.Queryer, id uuid.UUID) (NetworkServer, error)

GetNetworkServerForMulticastGroupID returns the network-server for the given multicast-group id.

func GetNetworkServerForServiceProfileID

func GetNetworkServerForServiceProfileID(ctx context.Context, db sqlx.Queryer, id uuid.UUID) (NetworkServer, error)

GetNetworkServerForServiceProfileID returns the network-server for the given service-profile id.

func GetNetworkServers

func GetNetworkServers(ctx context.Context, db sqlx.Queryer, filters NetworkServerFilters) ([]NetworkServer, error)

GetNetworkServers returns a slice of network-servers.

func (NetworkServer) Validate

func (ns NetworkServer) Validate() error

Validate validates the network-server data.

type NetworkServerFilters

type NetworkServerFilters struct {
	OrganizationID int64 `db:"organization_id"`

	// Limit and Offset are added for convenience so that this struct can
	// be given as the arguments.
	Limit  int `db:"limit"`
	Offset int `db:"offset"`
}

NetworkServerFilters provides filters for filtering network-servers.

func (NetworkServerFilters) SQL

func (f NetworkServerFilters) SQL() string

SQL returns the SQL filters.

type Organization

type Organization struct {
	ID              int64     `db:"id"`
	CreatedAt       time.Time `db:"created_at"`
	UpdatedAt       time.Time `db:"updated_at"`
	Name            string    `db:"name"`
	DisplayName     string    `db:"display_name"`
	CanHaveGateways bool      `db:"can_have_gateways"`
	MaxDeviceCount  int       `db:"max_device_count"`
	MaxGatewayCount int       `db:"max_gateway_count"`
}

Organization represents an organization.

func GetOrganization

func GetOrganization(ctx context.Context, db sqlx.Queryer, id int64, forUpdate bool) (Organization, error)

GetOrganization returns the Organization for the given id. When forUpdate is set to true, then db must be a db transaction.

func GetOrganizations

func GetOrganizations(ctx context.Context, db sqlx.Queryer, filters OrganizationFilters) ([]Organization, error)

GetOrganizations returns a slice of organizations, sorted by name.

func (Organization) Validate

func (o Organization) Validate() error

Validate validates the data of the Organization.

type OrganizationFilters

type OrganizationFilters struct {
	UserID int64  `db:"user_id"`
	Search string `db:"search"`

	// Limit and Offset are added for convenience so that this struct can
	// be given as the arguments.
	Limit  int `db:"limit"`
	Offset int `db:"offset"`
}

OrganizationFilters provides filters for filtering organizations.

func (OrganizationFilters) SQL

func (f OrganizationFilters) SQL() string

SQL returns the SQL filters.

type OrganizationUser

type OrganizationUser struct {
	UserID         int64     `db:"user_id"`
	Email          string    `db:"email"`
	IsAdmin        bool      `db:"is_admin"`
	IsDeviceAdmin  bool      `db:"is_device_admin"`
	IsGatewayAdmin bool      `db:"is_gateway_admin"`
	CreatedAt      time.Time `db:"created_at"`
	UpdatedAt      time.Time `db:"updated_at"`
}

OrganizationUser represents an organization user.

func GetOrganizationUser

func GetOrganizationUser(ctx context.Context, db sqlx.Queryer, organizationID, userID int64) (OrganizationUser, error)

GetOrganizationUser gets the information of the given organization user.

func GetOrganizationUsers

func GetOrganizationUsers(ctx context.Context, db sqlx.Queryer, organizationID int64, limit, offset int) ([]OrganizationUser, error)

GetOrganizationUsers returns the users for the given organization.

type RemoteFragmentationSession

type RemoteFragmentationSession struct {
	DevEUI              lorawan.EUI64             `db:"dev_eui"`
	FragIndex           int                       `db:"frag_index"`
	CreatedAt           time.Time                 `db:"created_at"`
	UpdatedAt           time.Time                 `db:"updated_at"`
	MCGroupIDs          []int                     `db:"mc_group_ids"`
	NbFrag              int                       `db:"nb_frag"`
	FragSize            int                       `db:"frag_size"`
	FragmentationMatrix uint8                     `db:"fragmentation_matrix"`
	BlockAckDelay       int                       `db:"block_ack_delay"`
	Padding             int                       `db:"padding"`
	Descriptor          [4]byte                   `db:"descriptor"`
	State               RemoteMulticastSetupState `db:"state"`
	StateProvisioned    bool                      `db:"state_provisioned"`
	RetryAfter          time.Time                 `db:"retry_after"`
	RetryCount          int                       `db:"retry_count"`
	RetryInterval       time.Duration             `db:"retry_interval"`
}

RemoteFragmentationSession defines a remote fragmentation session record.

func GetPendingRemoteFragmentationSessions

func GetPendingRemoteFragmentationSessions(ctx context.Context, db sqlx.Queryer, limit, maxRetryCount int) ([]RemoteFragmentationSession, error)

GetPendingRemoteFragmentationSessions returns a slice of pending remote fragmentation sessions.

func GetRemoteFragmentationSession

func GetRemoteFragmentationSession(ctx context.Context, db sqlx.Queryer, devEUI lorawan.EUI64, fragIndex int, forUpdate bool) (RemoteFragmentationSession, error)

GetRemoteFragmentationSession returns the fragmentation session given a DevEUI and fragmentation index.

type RemoteMulticastClassCSession

type RemoteMulticastClassCSession struct {
	DevEUI           lorawan.EUI64 `db:"dev_eui"`
	MulticastGroupID uuid.UUID     `db:"multicast_group_id"`
	CreatedAt        time.Time     `db:"created_at"`
	UpdatedAt        time.Time     `db:"updated_at"`
	McGroupID        int           `db:"mc_group_id"`
	SessionTime      time.Time     `db:"session_time"`
	SessionTimeOut   int           `db:"session_time_out"`
	DLFrequency      int           `db:"dl_frequency"`
	DR               int           `db:"dr"`
	StateProvisioned bool          `db:"state_provisioned"`
	RetryAfter       time.Time     `db:"retry_after"`
	RetryCount       int           `db:"retry_count"`
	RetryInterval    time.Duration `db:"retry_interval"`
}

RemoteMulticastClassCSession defines a remote multicast-setup Class-C session record.

func GetPendingRemoteMulticastClassCSessions

func GetPendingRemoteMulticastClassCSessions(ctx context.Context, db sqlx.Queryer, limit, maxRetryCount int) ([]RemoteMulticastClassCSession, error)

GetPendingRemoteMulticastClassCSessions returns a slice of pending remote multicast Class-C sessions.

func GetRemoteMulticastClassCSession

func GetRemoteMulticastClassCSession(ctx context.Context, db sqlx.Queryer, devEUI lorawan.EUI64, multicastGroupID uuid.UUID, forUpdate bool) (RemoteMulticastClassCSession, error)

GetRemoteMulticastClassCSession returns the multicast Class-C session given a DevEUI and multicast-group ID.

func GetRemoteMulticastClassCSessionByGroupID

func GetRemoteMulticastClassCSessionByGroupID(ctx context.Context, db sqlx.Queryer, devEUI lorawan.EUI64, mcGroupID int, forUpdate bool) (RemoteMulticastClassCSession, error)

GetRemoteMulticastClassCSessionByGroupID returns the multicast Class-C session given a DevEUI and McGroupID.

type RemoteMulticastSetup

type RemoteMulticastSetup struct {
	DevEUI           lorawan.EUI64             `db:"dev_eui"`
	MulticastGroupID uuid.UUID                 `db:"multicast_group_id"`
	CreatedAt        time.Time                 `db:"created_at"`
	UpdatedAt        time.Time                 `db:"updated_at"`
	McGroupID        int                       `db:"mc_group_id"`
	McAddr           lorawan.DevAddr           `db:"mc_addr"`
	McKeyEncrypted   lorawan.AES128Key         `db:"mc_key_encrypted"`
	MinMcFCnt        uint32                    `db:"min_mc_f_cnt"`
	MaxMcFCnt        uint32                    `db:"max_mc_f_cnt"`
	State            RemoteMulticastSetupState `db:"state"`
	StateProvisioned bool                      `db:"state_provisioned"`
	RetryInterval    time.Duration             `db:"retry_interval"`
	RetryAfter       time.Time                 `db:"retry_after"`
	RetryCount       int                       `db:"retry_count"`
}

RemoteMulticastSetup defines a remote multicast-setup record.

func GetPendingRemoteMulticastSetupItems

func GetPendingRemoteMulticastSetupItems(ctx context.Context, db sqlx.Queryer, limit, maxRetryCount int) ([]RemoteMulticastSetup, error)

GetPendingRemoteMulticastSetupItems returns a slice of pending remote multicast-setup items. The selected items will be locked.

func GetRemoteMulticastSetup

func GetRemoteMulticastSetup(ctx context.Context, db sqlx.Queryer, devEUI lorawan.EUI64, multicastGroupID uuid.UUID, forUpdate bool) (RemoteMulticastSetup, error)

GetRemoteMulticastSetup returns the multicast-setup given a multicast-group ID and DevEUI.

func GetRemoteMulticastSetupByGroupID

func GetRemoteMulticastSetupByGroupID(ctx context.Context, db sqlx.Queryer, devEUI lorawan.EUI64, mcGroupID int, forUpdate bool) (RemoteMulticastSetup, error)

GetRemoteMulticastSetupByGroupID returns the multicast-setup given a DevEUI and McGroupID.

type RemoteMulticastSetupState

type RemoteMulticastSetupState string

RemoteMulticastSetupState defines the state type.

const (
	RemoteMulticastSetupSetup  RemoteMulticastSetupState = "SETUP"
	RemoteMulticastSetupDelete RemoteMulticastSetupState = "DELETE"
)

Possible states

type SearchResult

type SearchResult struct {
	Kind             string         `db:"kind"`
	Score            float64        `db:"score"`
	OrganizationID   *int64         `db:"organization_id"`
	OrganizationName *string        `db:"organization_name"`
	ApplicationID    *int64         `db:"application_id"`
	ApplicationName  *string        `db:"application_name"`
	DeviceDevEUI     *lorawan.EUI64 `db:"device_dev_eui"`
	DeviceName       *string        `db:"device_name"`
	GatewayMAC       *lorawan.EUI64 `db:"gateway_mac"`
	GatewayName      *string        `db:"gateway_name"`
}

SearchResult defines a search result.

func GlobalSearch

func GlobalSearch(ctx context.Context, db sqlx.Queryer, userID int64, globalAdmin bool, search string, limit, offset int) ([]SearchResult, error)

GlobalSearch performs a search on organizations, applications, gateways and devices.

type ServiceProfile

type ServiceProfile struct {
	NetworkServerID int64             `db:"network_server_id"`
	OrganizationID  int64             `db:"organization_id"`
	CreatedAt       time.Time         `db:"created_at"`
	UpdatedAt       time.Time         `db:"updated_at"`
	Name            string            `db:"name"`
	ServiceProfile  ns.ServiceProfile `db:"-"`
}

ServiceProfile defines the service-profile.

func GetServiceProfile

func GetServiceProfile(ctx context.Context, db sqlx.Queryer, id uuid.UUID, localOnly bool) (ServiceProfile, error)

GetServiceProfile returns the service-profile matching the given id.

func (ServiceProfile) Validate

func (sp ServiceProfile) Validate() error

Validate validates the service-profile data.

type ServiceProfileMeta

type ServiceProfileMeta struct {
	ServiceProfileID  uuid.UUID `db:"service_profile_id"`
	NetworkServerID   int64     `db:"network_server_id"`
	OrganizationID    int64     `db:"organization_id"`
	CreatedAt         time.Time `db:"created_at"`
	UpdatedAt         time.Time `db:"updated_at"`
	Name              string    `db:"name"`
	NetworkServerName string    `db:"network_server_name"`
}

ServiceProfileMeta defines the service-profile meta record.

func GetServiceProfiles

func GetServiceProfiles(ctx context.Context, db sqlx.Queryer, limit, offset int) ([]ServiceProfileMeta, error)

GetServiceProfiles returns a slice of service-profiles.

func GetServiceProfilesForOrganizationID

func GetServiceProfilesForOrganizationID(ctx context.Context, db sqlx.Queryer, organizationID int64, limit, offset int) ([]ServiceProfileMeta, error)

GetServiceProfilesForOrganizationID returns a slice of service-profiles for the given organization id.

func GetServiceProfilesForUser

func GetServiceProfilesForUser(ctx context.Context, db sqlx.Queryer, userID int64, limit, offset int) ([]ServiceProfileMeta, error)

GetServiceProfilesForUser returns a slice of service-profile for the given user ID.

type TxLogger

type TxLogger struct {
	*sqlx.Tx
}

TxLogger logs the executed sql queries and their duration.

func (*TxLogger) Exec

func (q *TxLogger) Exec(query string, args ...interface{}) (sql.Result, error)

Exec logs the queries executed by the Exec method.

func (*TxLogger) Query

func (q *TxLogger) Query(query string, args ...interface{}) (*sql.Rows, error)

Query logs the queries executed by the Query method.

func (*TxLogger) QueryRowx

func (q *TxLogger) QueryRowx(query string, args ...interface{}) *sqlx.Row

QueryRowx logs the queries executed by the QueryRowx method.

func (*TxLogger) Queryx

func (q *TxLogger) Queryx(query string, args ...interface{}) (*sqlx.Rows, error)

Queryx logs the queries executed by the Queryx method.

type User

type User struct {
	ID            int64     `db:"id"`
	IsAdmin       bool      `db:"is_admin"`
	IsActive      bool      `db:"is_active"`
	SessionTTL    int32     `db:"session_ttl"`
	CreatedAt     time.Time `db:"created_at"`
	UpdatedAt     time.Time `db:"updated_at"`
	PasswordHash  string    `db:"password_hash"`
	Email         string    `db:"email"`
	EmailVerified bool      `db:"email_verified"`
	EmailOld      string    `db:"email_old"`
	Note          string    `db:"note"`
	ExternalID    *string   `db:"external_id"` // must be pointer for unique index
}

User defines the user structure.

func GetUser

func GetUser(ctx context.Context, db sqlx.Queryer, id int64) (User, error)

GetUser returns the User for the given id.

func GetUserByEmail

func GetUserByEmail(ctx context.Context, db sqlx.Queryer, email string) (User, error)

GetUserByEmail returns the User for the given email.

func GetUserByExternalID

func GetUserByExternalID(ctx context.Context, db sqlx.Queryer, externalID string) (User, error)

GetUserByExternalID returns the User for the given ext. ID.

func GetUsers

func GetUsers(ctx context.Context, db sqlx.Queryer, limit, offset int) ([]User, error)

GetUsers returns a slice of users, respecting the given limit and offset.

func (*User) SetPasswordHash

func (u *User) SetPasswordHash(pw string) error

SetPasswordHash hashes the given password and sets it.

func (User) Validate

func (u User) Validate() error

Validate validates the user data.

type UserProfile

type UserProfile struct {
	User          UserProfileUser
	Organizations []UserProfileOrganization
}

UserProfile contains the profile of the user.

func GetProfile

func GetProfile(ctx context.Context, db sqlx.Queryer, id int64) (UserProfile, error)

GetProfile returns the user profile (user, applications and organizations to which the user is linked).

type UserProfileOrganization

type UserProfileOrganization struct {
	ID             int64     `db:"organization_id"`
	Name           string    `db:"organization_name"`
	IsAdmin        bool      `db:"is_admin"`
	IsDeviceAdmin  bool      `db:"is_device_admin"`
	IsGatewayAdmin bool      `db:"is_gateway_admin"`
	CreatedAt      time.Time `db:"created_at"`
	UpdatedAt      time.Time `db:"updated_at"`
}

UserProfileOrganization contains the organizations to which the user is linked.

type UserProfileUser

type UserProfileUser struct {
	ID         int64     `db:"id"`
	Email      string    `db:"email"`
	IsAdmin    bool      `db:"is_admin"`
	IsActive   bool      `db:"is_active"`
	SessionTTL int32     `db:"session_ttl"`
	CreatedAt  time.Time `db:"created_at"`
	UpdatedAt  time.Time `db:"updated_at"`
}

UserProfileUser contains the user information of the profile.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL