Documentation
¶
Overview ¶
Package storage contains the storage backend for the LoRa Core server.package storage
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ErrAlreadyExists = errors.New("already exists")
ErrAlreadyExists is returned by the storage layer when the item already exists, ie there's a duplicate
var ErrDeleteConstraint = errors.New("constraint error")
ErrDeleteConstraint is returned by the storage layer when there's an constraint preventing the entity from being deleted
var ErrNotFound = errors.New("not found")
ErrNotFound is returned by the storage layer when the specified entity isn't found.
Functions ¶
This section is empty.
Types ¶
type AppOutputStorage ¶
type AppOutputStorage interface { // Put stores a new output Put(newAppOutput model.AppOutput) error // Update updates the configuration for the Update(output model.AppOutput) error // Delete removes the output. Outputs are also removed automatically when // an application is removed Delete(output model.AppOutput) error // GetByApplication returns outputs for a single application GetByApplication(appEUI protocol.EUI) (<-chan model.AppOutput, error) // List lists all of the application outputs ListAll() (<-chan model.AppOutput, error) }
AppOutputStorage is storage for the output configurations. Put, Update and Delete operate on single outputs while the ListAll method returns *all* outputs
type ApplicationStorage ¶
type ApplicationStorage interface { // Put stores a new application object in the storage. If an error occurs or // there's an duplicate an error is returned. Put(application model.Application, userID model.UserID) error // GetByEUI retrieves the application with the corresponding EUI. If the application // doesn't exist an error is returned. GetByEUI(eui protocol.EUI, userID model.UserID) (model.Application, error) // GetList returns all applications available to the specified user (ID). If // there's an error retrieving the applications an error is returned. The // channel will be closed when all of the applications are returned. GetList(userID model.UserID) (chan model.Application, error) // Delete removes the application from the backend store. If the application // has one or more devices defined it will fail with ErrDeleteConstraint. If // the application isn't found it will return ErrNotFound. Delete(eui protocol.EUI, userID model.UserID) error // Update updates name key of application Update(application model.Application, userID model.UserID) error // Close closes the storage and releases allocated resources. Once Close() // is called it cannot do any additional operations. Close() }
ApplicationStorage is used to store and retrieve application objects in a storage backend.
type DataStorage ¶
type DataStorage interface { // Put stores device data for the specified device Put(deviceEUI protocol.EUI, data model.DeviceData) error // GetByDeviceEUI returns the data stored for the device GetByDeviceEUI(deviceEUI protocol.EUI, limit int) (chan model.DeviceData, error) // GetByApplicationEUI returns data stored for application GetByApplicationEUI(applicationEUI protocol.EUI, limit int) (chan model.DeviceData, error) // Close closes the storage and releases allocated resources. Once Close() // is called it cannot do any additional operations. Close() // PutDownstream stores a new downstream message for given device. ErrConflict is returned // if there's already downstream message for that device PutDownstream(deviceEUI protocol.EUI, message model.DownstreamMessage) error // DeleteDownstream removes (ie cancels) the downstream message for the specified device DeleteDownstream(deviceEUI protocol.EUI) error // GetDownstream retrieves a downstream message. ErrNotFound is returned // if there's no downstream message for that device GetDownstream(deviceEUI protocol.EUI) (model.DownstreamMessage, error) // Update time stamps on downstream message. ErrNotFound is returned if there's no // downstream message for that device. UpdateDownstream(deviceEUI protocol.EUI, sentTime int64, ackTime int64) error }
DataStorage is used to store and retrieve device data in a storage backend.
type DeviceStorage ¶
type DeviceStorage interface { // GetByDevAddr returns the device that matches the given device address. GetByDevAddr(devAddr protocol.DevAddr) (chan model.Device, error) // GetByEUI returns the device with the matching EUI GetByEUI(devEUI protocol.EUI) (model.Device, error) // GetByApplicationEUI returns all devices within the given application GetByApplicationEUI(appEUI protocol.EUI) (chan model.Device, error) // Put stores the device in the storage backend. Put(device model.Device, appEUI protocol.EUI) error // AddDevNonce adds a new device nonce to the device's history. AddDevNonce(device model.Device, devNonce uint16) error // UpdateState updates the device state (ie frame counters and key warning flag). UpdateState(device model.Device) error // Delete removes the device from the backend store. If the device isn't found // it will return ErrNotFound. All of the device's data will be deleted. Delete(eui protocol.EUI) error // Update updates the fields on the device Update(device model.Device) error // Close closes the storage and releases allocated resources. Once Close() // is called it cannot do any additional operations. Close() }
DeviceStorage is used to store and retrieve device objects in a storage backend.
type GatewayStorage ¶
type GatewayStorage interface { // Put stores a new gateway. Put(gateway model.Gateway, userID model.UserID) error // Remove removes a gateway from the backend storage. If the gateway isn't // found it will return ErrNotFound. Delete(eui protocol.EUI, userID model.UserID) error // GetList returns a list of all the available gateways. GetList(userID model.UserID) (chan model.Gateway, error) // ListAll lists all available gateways ListAll() (chan model.PublicGatewayInfo, error) // Get returns the gateway with the specified EUI. Get(eui protocol.EUI, userID model.UserID) (model.Gateway, error) // Update updates fields (and tags) on the gateway Update(gateway model.Gateway, userID model.UserID) error // Close closes the storage and releases allocated resources. Once Close() // is called it cannot do any additional operations. Close() }
GatewayStorage is used to store and retrieve gateways
type KeyGeneratorFunc ¶
KeyGeneratorFunc is a function that generates identifiers
type KeySequenceStorage ¶
type KeySequenceStorage interface { // AllocateKeys allocates a block of keys. Individual sequences have // different names. If the sequence doesn't exist it will be created // and set to 0. The keys will be sent on the channel until the // keys are exhausted and the channel will be cloesd. AllocateKeys(name string, interval uint64, initial uint64) (chan uint64, error) // Close closes the storage and releases allocated resources. Once Close() // is called it cannot do any additional operations. Close() }
KeySequenceStorage is a storage interface for key sequences. Sequences of keys are allocated in blocks and cannot be reused. The Increment* methods are atomic. The order of allocations are not important as long as they are unique.
type Storage ¶
type Storage struct { Application ApplicationStorage Device DeviceStorage DeviceData DataStorage Sequence KeySequenceStorage Gateway GatewayStorage Token TokenStorage UserManagement UserManagement AppOutput AppOutputStorage }
Storage holds all of the storage objects
type TokenStorage ¶
type TokenStorage interface { // Put stores a new token in the storage backend. Put(token model.APIToken, userID model.UserID) error // Delete removes a token from the storage backend. Delete(token string, userID model.UserID) error // GetList returns the complete list of tokens that the user have created. GetList(userID model.UserID) (chan model.APIToken, error) // Get returns a single token. Get(token string) (model.APIToken, error) // Update token with new tags and resource. Update(token model.APIToken, userID model.UserID) error // Close closes the storage and releases any allocated resources. Once // Close() is called no more operations can be performed. Close() }
TokenStorage is the storage layer for tokens. Tokens are primarily identified by the token itself. The user ID parameter is for additional sanity checks.
type UserManagement ¶
type UserManagement interface { // AddOrUpdateUser adds or updates (if required) the user in the backend // storage. If the user doesn't exist a new owner entry will be added. // The key generator function is used to create a new owner entry (if // required). New owner entries are only created when the user is created. // There is no check if the owner exists. AddOrUpdateUser(user model.User, keyGen KeyGeneratorFunc) error // GetOwner will return an owner ID that can be used when asssigning // owners. If the owner already exists it will be returned. If not a new // entry in the owner table will be created. GetOwner(userID model.UserID) (uint64, error) // Close closes the storage and releases any allocated resources. Once // Close() is called no more operations can be performed. Close() }
UserManagement is used to manage and set users and owners of entities.