application

package
v2.12.1 Latest Latest
Warning

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

Go to latest
Published: Jul 24, 2026 License: MIT Imports: 52 Imported by: 0

Documentation

Index

Constants

View Source
const (
	MiddlewareGroupHttp = "http"

	MiddlewarePriorityStatic = -1000
	MiddlewareNameStatic     = "static"

	MiddlewarePriorityDefault = 0
)
View Source
const ServiceProcessRole = "service.application.process_role"

ServiceProcessRole resolves to the process role string (config.RoleWeb, config.RoleWorker or config.RoleAll) so services can gate background work without reaching back to the application instance.

Variables

This section is empty.

Functions

func NewSignalContext added in v2.11.0

func NewSignalContext() (context.Context, context.CancelFunc)

NewSignalContext returns a context that is cancelled by the first SIGINT or SIGTERM, giving the application a graceful shutdown window. A second SIGINT or SIGTERM received while that shutdown is still running prints one line to stderr and forces the process to exit with the conventional 128+signal code, so an operator facing a hung shutdown is never reduced to SIGKILL; a second signal landing within half a second of the first is absorbed as a duplicate delivery of the same shutdown request, so a supervisor and a terminal both forwarding one interrupt do not skip the graceful shutdown.

The returned stop function unregisters the signal notifications, cancels the context, and releases the watcher goroutine; it is safe to call more than once and from concurrent goroutines.

func ProcessRoleMustFromContainer added in v2.10.0

func ProcessRoleMustFromContainer(serviceContainer containercontract.Container) string

func ProcessRoleMustFromResolver added in v2.10.0

func ProcessRoleMustFromResolver(resolver containercontract.Resolver) string

Types

type Application

type Application struct {
	// contains filtered or unexported fields
}

func NewApplication

func NewApplication(
	embeddedEnvFiles fs.FS,
	embeddedPublicFiles fs.FS,
) *Application

func (*Application) Boot

func (instance *Application) Boot() kernelcontract.Kernel

func (*Application) Close

func (instance *Application) Close()

func (*Application) MarkParameterSecret added in v2.12.0

func (instance *Application) MarkParameterSecret(name string)

MarkParameterSecret marks a parameter that already exists — typically one melody registered automatically from the .env artifacts — as holding a credential. A name that matches nothing does not fail the boot, since an environment key is legitimately undefined in some environments; it is retried before the configuration resolves and again at the end of the boot, and warned about only then, so a misspelled name is visible instead of silently redacting nothing.

func (*Application) ProcessRole added in v2.10.0

func (instance *Application) ProcessRole() string

ProcessRole is the resolved process role (config.RoleWeb, config.RoleWorker or config.RoleAll): an explicit --role flag wins over the MELODY_PROCESS_ROLE parameter, which defaults to all. Melody gates nothing on it — wiring code queries it to decide whether to register background runners (outbox relays, consumers) on this process; services resolve the same value through ServiceProcessRole.

func (*Application) RegisterCliCommand

func (instance *Application) RegisterCliCommand(command clicontract.Command)

func (*Application) RegisterConfiguration added in v2.2.0

func (instance *Application) RegisterConfiguration(name string, configuration any)

func (*Application) RegisterHttpMiddlewareFactories

func (instance *Application) RegisterHttpMiddlewareFactories(
	factories ...MiddlewareFactory,
)

func (*Application) RegisterHttpMiddlewares

func (instance *Application) RegisterHttpMiddlewares(middlewares ...httpcontract.Middleware)

func (*Application) RegisterHttpRoute

func (instance *Application) RegisterHttpRoute(
	method string,
	pattern string,
	handler httpcontract.Handler,
)

func (*Application) RegisterModule

func (instance *Application) RegisterModule(moduleInstance applicationcontract.Module)

func (*Application) RegisterModuleProvider added in v2.8.0

func (instance *Application) RegisterModuleProvider(provider applicationcontract.ModuleProvider)

func (*Application) RegisterParameter

func (instance *Application) RegisterParameter(
	name string,
	value any,
)

func (*Application) RegisterSecretParameter added in v2.12.0

func (instance *Application) RegisterSecretParameter(
	name string,
	value any,
)

RegisterSecretParameter declares a parameter holding a credential. It is registered and resolved like any other; the marking only keeps it, and every parameter whose template reads it, out of the rendered configuration.

func (*Application) RegisterService

func (instance *Application) RegisterService(
	serviceName string,
	provider any,
	options ...containercontract.RegisterOption,
)

func (*Application) Run

func (instance *Application) Run(ctx context.Context)

type HttpMiddleware

type HttpMiddleware struct {
	// contains filtered or unexported fields
}

func NewHttpMiddleware

func NewHttpMiddleware(
	staticOptions *static.Options,
	configuration configcontract.Configuration,
) *HttpMiddleware

func (*HttpMiddleware) LastBuildReport

func (instance *HttpMiddleware) LastBuildReport() *middlewarepipeline.MiddlewareBuildReport

func (*HttpMiddleware) Use

func (instance *HttpMiddleware) Use(middlewares ...httpcontract.Middleware)

func (*HttpMiddleware) UseFactories

func (instance *HttpMiddleware) UseFactories(factories ...MiddlewareFactory)

func (*HttpMiddleware) UseFactoriesWithPriority

func (instance *HttpMiddleware) UseFactoriesWithPriority(priority int, factories ...MiddlewareFactory)

func (*HttpMiddleware) UseWithPriority

func (instance *HttpMiddleware) UseWithPriority(priority int, middlewares ...httpcontract.Middleware)

type HttpShutdownConfiguration added in v2.8.0

type HttpShutdownConfiguration interface {
	GetShutdownTimeout() time.Duration
}

type HttpTimeoutConfiguration added in v2.6.0

type HttpTimeoutConfiguration interface {
	GetReadTimeout() time.Duration

	GetReadHeaderTimeout() time.Duration

	GetWriteTimeout() time.Duration

	GetIdleTimeout() time.Duration

	GetMaxHeaderBytes() int
}

type MiddlewareFactory

type MiddlewareFactory func(kernelInstance kernelcontract.Kernel) httpcontract.Middleware

type RouteRegistrar

type RouteRegistrar func(kernelInstance kernelcontract.Kernel)

type RuntimeFlags

type RuntimeFlags struct {
	// contains filtered or unexported fields
}

func NewRuntimeFlags

func NewRuntimeFlags(mode string) *RuntimeFlags

func NewRuntimeFlagsWithRole added in v2.10.0

func NewRuntimeFlagsWithRole(mode string, role string) *RuntimeFlags

func ParseRuntimeFlags

func ParseRuntimeFlags(defaultMode string) *RuntimeFlags

func ParseRuntimeFlagsWithRole added in v2.10.0

func ParseRuntimeFlagsWithRole(defaultMode string, defaultRole string) *RuntimeFlags

ParseRuntimeFlagsWithRole resolves the runtime mode and process role from os.Args. The mode: an explicit --mode/-mode wins, any other non-runtime argument implies cli, otherwise the configured default applies. The role: an explicit --role/-role wins over the configured default — the flag exists because melody reads configuration only from .env artifacts, never from the process environment, so a docker-compose deployment differentiates containers built from one image with `command: ["/app", "--role=worker"]`. Both flags are runtime-only: they never imply cli mode and are stripped before the cli framework parses the arguments. Any other value-taking flag placed before the command must use its --flag=value form — a foreign flag's arity is unknowable, so a space-separated value would read as the command name and end the runtime-flag region early (see subcommandBoundaryIndex).

func (*RuntimeFlags) Mode

func (instance *RuntimeFlags) Mode() string

func (*RuntimeFlags) Role added in v2.10.0

func (instance *RuntimeFlags) Role() string

type SecurityModule

type SecurityModule interface {
	applicationcontract.Module
	RegisterSecurity(builder *securityconfig.Builder)
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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