package
0.23.2
Repository: https://github.com/mainfluxlabs/mainflux.git
Documentation: pkg.go.dev

# README

Things

Things service provides an HTTP API for managing platform resources: things and channels. Through this API clients are able to do the following actions:

  • provision new things
  • create new channels
  • "connect" things into the channels

For an in-depth explanation of the aforementioned scenarios, as well as thorough understanding of Mainflux, please check out the official documentation.

Configuration

The service is configured using the environment variables presented in the following table. Note that any unset variables will be replaced with their default values.

VariableDescriptionDefault
MF_THINGS_LOG_LEVELLog level for Things (debug, info, warn, error)error
MF_THINGS_DB_HOSTDatabase host addresslocalhost
MF_THINGS_DB_PORTDatabase host port5432
MF_THINGS_DB_USERDatabase usermainflux
MF_THINGS_DB_PASSDatabase passwordmainflux
MF_THINGS_DBName of the database used by the servicethings
MF_THINGS_DB_SSL_MODEDatabase connection SSL mode (disable, require, verify-ca, verify-full)disable
MF_THINGS_DB_SSL_CERTPath to the PEM encoded certificate file
MF_THINGS_DB_SSL_KEYPath to the PEM encoded key file
MF_THINGS_DB_SSL_ROOT_CERTPath to the PEM encoded root certificate file
MF_THINGS_CLIENT_TLSFlag that indicates if TLS should be turned onfalse
MF_THINGS_CA_CERTSPath to trusted CAs in PEM format
MF_THINGS_CACHE_URLCache database URLlocalhost:6379
MF_THINGS_CACHE_PASSCache database password
MF_THINGS_CACHE_DBCache instance name0
MF_THINGS_ES_URLEvent store URLlocalhost:6379
MF_THINGS_ES_PASSEvent store password
MF_THINGS_ES_DBEvent store instance name0
MF_THINGS_HTTP_PORTThings service HTTP port8182
MF_THINGS_AUTH_HTTP_PORTThings service Auth HTTP port8989
MF_THINGS_AUTH_GRPC_PORTThings service Auth gRPC port8181
MF_THINGS_SERVER_CERTPath to server certificate in pem format
MF_THINGS_SERVER_KEYPath to server key in pem format
MF_THINGS_STANDALONE_EMAILUser email for standalone mode (no gRPC communication with users)
MF_THINGS_STANDALONE_TOKENUser token for standalone mode that should be passed in auth header
MF_JAEGER_URLJaeger server URLlocalhost:6831
MF_AUTH_GRPC_URLAuth service gRPC URLlocalhost:8181
MF_AUTH_GRPC_TIMEOUTAuth service gRPC request timeout in seconds1s

Note that if you want things service to have only one user locally, you should use MF_THINGS_STANDALONE env vars. By specifying these, you don't need auth service in your deployment for users' authorization.

Deployment

The service itself is distributed as Docker container. Check the things service section in docker-compose to see how service is deployed.

To start the service outside of the container, execute the following shell script:

# download the latest version of the service
git clone https://github.com/MainfluxLabs/mainflux

cd mainflux

# compile the things
make things

# copy binary to bin
make install

# set the environment variables and run the service
MF_THINGS_LOG_LEVEL=[Things log level] \
MF_THINGS_DB_HOST=[Database host address] \
MF_THINGS_DB_PORT=[Database host port] \
MF_THINGS_DB_USER=[Database user] \
MF_THINGS_DB_PASS=[Database password] \
MF_THINGS_DB=[Name of the database used by the service] \
MF_THINGS_DB_SSL_MODE=[SSL mode to connect to the database with] \
MF_THINGS_DB_SSL_CERT=[Path to the PEM encoded certificate file] \
MF_THINGS_DB_SSL_KEY=[Path to the PEM encoded key file] \
MF_THINGS_DB_SSL_ROOT_CERT=[Path to the PEM encoded root certificate file] \
MF_HTTP_ADAPTER_CA_CERTS=[Path to trusted CAs in PEM format] \
MF_THINGS_CACHE_URL=[Cache database URL] \
MF_THINGS_CACHE_PASS=[Cache database password] \
MF_THINGS_CACHE_DB=[Cache instance name] \
MF_THINGS_ES_URL=[Event store URL] \
MF_THINGS_ES_PASS=[Event store password] \
MF_THINGS_ES_DB=[Event store instance name] \
MF_THINGS_HTTP_PORT=[Things service HTTP port] \
MF_THINGS_AUTH_HTTP_PORT=[Things service Auth HTTP port] \
MF_THINGS_AUTH_GRPC_PORT=[Things service Auth gRPC port] \
MF_THINGS_SERVER_CERT=[Path to server certificate] \
MF_THINGS_SERVER_KEY=[Path to server key] \
MF_THINGS_STANDALONE_EMAIL=[User email for standalone mode (no gRPC communication with auth)] \
MF_THINGS_STANDALONE_TOKEN=[User token for standalone mode that should be passed in auth header] \
MF_JAEGER_URL=[Jaeger server URL] \
MF_AUTH_GRPC_URL=[Auth service gRPC URL] \
MF_AUTH_GRPC_TIMEOUT=[Auth service gRPC request timeout in seconds] \
$GOBIN/mainfluxlabs-things

Setting MF_THINGS_CA_CERTS expects a file in PEM format of trusted CAs. This will enable TLS against the Users gRPC endpoint trusting only those CAs that are provided.

In constrained environments, sometimes it makes sense to run Things service as a standalone to reduce network traffic and simplify deployment. This means that Things service operates only using a single user and is able to authorize it without gRPC communication with Auth service. To run service in a standalone mode, set MF_THINGS_STANDALONE_EMAIL and MF_THINGS_STANDALONE_TOKEN.

Usage

For more information about service capabilities and its usage, please check out the API documentation.

# Packages

Package api contains API-related concerns: endpoint definitions, middlewares and all resource representations.
No description provided by the author
Package postgres contains repository implementations using PostgreSQL as the underlying database.
Package redis contains cache implementations using Redis as the underlying database.
Package standalone contains implementation for auth service in single-user scenario.
Package tracing contains middlewares that will add spans to existing traces.

# Functions

New instantiates the things service implementation.

# Constants

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# Variables

ErrConnect indicates error in adding connection.
ErrDisconnect indicates error in removing connection.
ErrEntityConnected indicates error while checking connection in database.
ErrRetrieveGroupChannels indicates failure to retrieve group channels.
ErrRetrieveGroupThings indicates failure to retrieve group things.

# Structs

No description provided by the author
No description provided by the author
Channel represents a Mainflux "communication group".
ChannelsPage contains page related metadata as well as list of channels that belong to this page.
Connection represents a connection between a channel and a thing.
Group represents the group information.
No description provided by the author
GroupPage contains page related metadata as well as list of groups that belong to this page.
No description provided by the author
No description provided by the author
Identity contains ID and Email.
No description provided by the author
No description provided by the author
PageMetadata contains page metadata that helps navigation.
No description provided by the author
Thing represents a Mainflux thing.
ThingsPage contains page related metadata as well as list of things that belong to this page.
No description provided by the author

# Interfaces

ChannelCache contains channel-thing connection caching interface.
ChannelRepository specifies a channel persistence API.
GroupRepository specifies a group persistence API.
No description provided by the author
No description provided by the author
No description provided by the author
Service specifies an API that must be fullfiled by the domain service implementation, and all of its decorators (e.g.
ThingCache contains thing caching interface.
ThingRepository specifies a thing persistence API.

# Type aliases

GroupMetadata defines the Metadata type.
Metadata to be used for Mainflux thing or channel for customized describing of particular thing or channel.