commands

package
v3.30.0 Latest Latest
Warning

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

Go to latest
Published: Apr 5, 2024 License: Apache-2.0 Imports: 89 Imported by: 0

Documentation

Overview

Package commands implements the commands for the ttn-lw-stack binary.

Index

Constants

This section is empty.

Variables

DefaultConfig contains the default config for the ttn-lw-stack binary.

View Source
var (

	// Root command is the entrypoint of the program.
	Root = &cobra.Command{
		Use:           name,
		SilenceErrors: true,
		SilenceUsage:  true,
		Short:         "The Things Stack for LoRaWAN",
		PersistentPreRunE: func(cmd *cobra.Command, args []string) error {
			if cmd.Name() == "__complete" {
				return nil
			}

			err := mgr.ReadInConfig()
			if err != nil {
				return err
			}

			if err = mgr.Unmarshal(config); err != nil {
				return err
			}

			experimental.EnableFeatures(config.Experimental.Features...)

			if err := shared.InitializeFallbacks(&config.ServiceBase); err != nil {
				return err
			}

			logger, err = shared.InitializeLogger(&config.Log)
			if err != nil {
				return err
			}

			logger.Use(logobservability.New())

			if config.Sentry.DSN != "" {
				opts := sentry.ClientOptions{
					Dsn:         config.Sentry.DSN,
					Release:     pkgversion.String(),
					Environment: config.Sentry.Environment,
				}
				if hostname, err := os.Hostname(); err == nil {
					opts.ServerName = hostname
				}
				err = sentry.Init(opts)
				if err != nil {
					return err
				}
				logger.Use(logsentry.New())
			}

			if _, err := maxprocs.Set(); err != nil {
				logger.WithError(err).Info("Failed to set GOMAXPROCS")
			}
			if _, err := memlimit.SetGoMemLimit(0.9); err != nil {
				logger.WithError(err).Info("Failed to set GOMEMLIMIT")
			}

			ctx = log.NewContext(ctx, logger)

			versionUpdate = make(chan *pkgversion.Update)
			if config.SkipVersionCheck {
				close(versionUpdate)
			} else {
				go func(ctx context.Context) {
					defer close(versionUpdate)
					update, err := pkgversion.CheckUpdate(ctx)
					if err != nil {
						log.FromContext(ctx).WithError(err).Warn("Failed to check version update")
					} else if update != nil {
						versionUpdate <- update
					} else {
						log.FromContext(ctx).Debug("No new version available")
					}
				}(ctx)
			}

			telemetryConfigFallback(ctx, config)

			return nil
		},
		PersistentPostRunE: func(cmd *cobra.Command, args []string) error {
			if cmd.Name() == "__complete" {
				return nil
			}

			select {
			case <-ctx.Done():
			case <-time.After(versionCheckTimeout):
				logger.Warn("Version check timed out")
			case versionUpdate, ok := <-versionUpdate:
				if ok {
					pkgversion.LogUpdate(ctx, versionUpdate)
				}
			}
			return nil
		},
	}
)

Functions

func FetchIdentityServerApplications added in v3.15.2

func FetchIdentityServerApplications(ctx context.Context, client ttnpb.ApplicationRegistryClient, clusterAuth grpc.CallOption, paginationDelay time.Duration) ([]*ttnpb.Application, error)

FetchIdentityServerApplications returns the list of all non-expired applications in the Identity Server.

func FetchIdentityServerEndDevices added in v3.15.2

func FetchIdentityServerEndDevices(ctx context.Context, client ttnpb.EndDeviceRegistryClient, clusterAuth grpc.CallOption, paginationDelay time.Duration) ([]*ttnpb.EndDevice, error)

FetchIdentityServerEndDevices returns the list of all devices in the Identity Server.

func NewASDeviceRegistryCleaner added in v3.15.2

func NewASDeviceRegistryCleaner(ctx context.Context, config *redis.Config) (*as.RegistryCleaner, error)

NewASDeviceRegistryCleaner returns a new instance of device RegistryCleaner with a local set of devices.

func NewApplicationServerDeviceRegistryRedis added in v3.16.0

func NewApplicationServerDeviceRegistryRedis(conf *Config) *redis.Client

NewApplicationServerDeviceRegistryRedis instantiates a new redis client with the Application Server Device Registry namespace.

func NewClusterComponentConnection added in v3.15.2

func NewClusterComponentConnection(ctx context.Context,
	config *Config,
	delay time.Duration,
	maxRetries int,
	role ttnpb.ClusterRole,
) (*grpc.ClientConn, cluster.Cluster, error)

NewClusterComponentConnection connects returns a new cluster instance and a connection to a specified peer. The connection to a cluster peer is retried specified number of times before returning an error in case of connection not being ready.

func NewComponentDeviceRegistryRedis added in v3.9.3

func NewComponentDeviceRegistryRedis(conf *Config, name string) *redis.Client

NewComponentDeviceRegistryRedis instantiates a new redis client with the Component Device Registry namespace.

func NewIdentityServerTelemetryTaskRedis added in v3.25.1

func NewIdentityServerTelemetryTaskRedis(conf *Config) *redis.Client

NewIdentityServerTelemetryTaskRedis instantiates a new redis client with the Identity Server Telemetry Task namespace.

func NewJSRegistryCleaner added in v3.16.0

func NewJSRegistryCleaner(ctx context.Context, config *ttnredis.Config) (*js.RegistryCleaner, error)

NewJSRegistryCleaner returns a new instance of Join Server RegistryCleaner with a local set of devices and applications.

func NewJoinServerDeviceRegistryRedis added in v3.18.0

func NewJoinServerDeviceRegistryRedis(conf *Config) *redis.Client

NewJoinServerDeviceRegistryRedis instantiates a new redis client with the Join Server Device Registry namespace.

func NewJoinServerSessionKeyRegistryRedis added in v3.18.0

func NewJoinServerSessionKeyRegistryRedis(conf *Config) *redis.Client

NewJoinServerSessionKeyRegistryRedis instantiates a new redis client with the Join Server Session Key Registry namespace.

func NewNSDeviceRegistryCleaner added in v3.16.0

func NewNSDeviceRegistryCleaner(ctx context.Context, config *redis.Config) (*ns.RegistryCleaner, error)

NewNSDeviceRegistryCleaner returns a new instance of Network Server RegistryCleaner with a local set of devices.

func NewNetworkServerApplicationUplinkQueueRedis added in v3.9.3

func NewNetworkServerApplicationUplinkQueueRedis(conf *Config) *redis.Client

NewNetworkServerApplicationUplinkQueueRedis instantiates a new redis client with the Network Server Application Uplink Queue namespace.

func NewNetworkServerDeviceRegistryRedis added in v3.9.3

func NewNetworkServerDeviceRegistryRedis(conf *Config) *redis.Client

NewNetworkServerDeviceRegistryRedis instantiates a new redis client with the Network Server Device Registry namespace.

func NewNetworkServerDownlinkTaskRedis added in v3.9.3

func NewNetworkServerDownlinkTaskRedis(conf *Config) *redis.Client

NewNetworkServerDownlinkTaskRedis instantiates a new redis client with the Network Server Downlink Task namespace.

func NewPackagesCleaner added in v3.15.2

func NewPackagesCleaner(ctx context.Context, config *redis.Config) (*packages.RegistryCleaner, error)

NewPackagesCleaner returns a new instance of packages RegistryCleaner with a local set of applications and devices.

func NewPubSubCleaner added in v3.15.2

func NewPubSubCleaner(ctx context.Context, config *redis.Config) (*pubsub.RegistryCleaner, error)

NewPubSubCleaner returns a new instance of pubsub RegistryCleaner with a local set of applications.

func NewRateLimitingRedis added in v3.29.1

func NewRateLimitingRedis(conf *Config) *redis.Client

NewRateLimitingRedis instantiates a new redis client with the Rate Limiting namespace.

func NewWebhookCleaner added in v3.15.2

func NewWebhookCleaner(ctx context.Context, config *redis.Config) (*web.RegistryCleaner, error)

NewWebhookCleaner returns a new instance of webhook RegistryCleaner with a local set of applications.

Types

type Config

type Config struct {
	conf.ServiceBase `name:",squash"`
	IS               identityserver.Config             `name:"is"`
	GS               gatewayserver.Config              `name:"gs"`
	NS               networkserver.Config              `name:"ns"`
	AS               applicationserver.Config          `name:"as"`
	JS               joinserver.Config                 `name:"js"`
	Console          console.Config                    `name:"console"`
	GCS              gatewayconfigurationserver.Config `name:"gcs"`
	DTC              devicetemplateconverter.Config    `name:"dtc"`
	QRG              qrcodegenerator.Config            `name:"qrg"`
	PBA              packetbrokeragent.Config          `name:"pba"`
	DR               devicerepository.Config           `name:"dr"`
	DCS              deviceclaimingserver.Config       `name:"dcs"`
	OutputFormat     string                            `name:"output-format" yaml:"output-format" description:"Output format"`
}

Config for the ttn-lw-stack binary.

Jump to

Keyboard shortcuts

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