initiator

package
v0.22.7 Latest Latest
Warning

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

Go to latest
Published: May 16, 2026 License: GPL-3.0 Imports: 33 Imported by: 0

README

libApplication Package Documentation

The libApplication package provides the application bootstrap and runtime infrastructure layer for requestCore.

It is responsible for:

  • application initialization
  • environment loading
  • database setup
  • server startup
  • runtime configuration
  • non-request execution support
  • metrics integration

This package acts as the operational foundation of services built on top of requestCore.


Package Structure

libApplication/
├── db.go
├── env.go
├── init.go
├── listen.go
├── noReq.go
└── metrics/
    └── upTime.go

Purpose

The package centralizes common application-level concerns that are typically duplicated across Go services.

It provides reusable abstractions for:

  • bootstrapping applications
  • loading environment configuration
  • initializing DB dependencies
  • starting HTTP services
  • handling background execution contexts
  • exposing operational metrics

Architectural Role

libApplication sits at the top-level initialization layer:

Application Startup
        ↓
libApplication
        ↓
Context / Params / DB Initialization
        ↓
Framework Adapter Setup
        ↓
Request Handlers
        ↓
Business Logic

It acts as the runtime orchestration layer for applications using requestCore.


Core Components


Database Initialization

File:

libApplication/db.go

This module handles database-related application setup.

Typical responsibilities include:

  • DB connection initialization
  • DB configuration loading
  • query runner setup
  • integration with libQuery
  • DB lifecycle management
  • connection reuse

Likely integrations:

libParams
libQuery

This allows application startup logic to centralize database bootstrapping.


Environment Management

File:

libApplication/env.go

This module manages environment and runtime configuration.

Typical responsibilities:

  • reading environment variables
  • runtime configuration setup
  • application mode detection
  • environment abstraction
  • configuration normalization

Potential configuration domains:

  • database settings
  • networking
  • logging
  • tracing
  • security

This works closely with:

libParams

Application Initialization

File:

libApplication/init.go

This file provides core application bootstrap behavior.

Typical responsibilities:

  • startup orchestration
  • dependency initialization
  • runtime preparation
  • initialization sequencing
  • shared application setup

This likely acts as the primary entry point for initializing services built with requestCore.


Server Startup / Listening

File:

libApplication/listen.go

This module manages server startup and listening behavior.

Typical responsibilities:

  • starting HTTP listeners
  • binding application ports
  • runtime server execution
  • graceful startup integration
  • framework runtime coordination

This package likely integrates with:

  • Gin
  • Fiber
  • net/http

depending on the configured framework.


Non-Request Execution Support

File:

libApplication/noReq.go

This module appears to support execution flows outside traditional HTTP request contexts.

Typical use cases:

  • cron jobs
  • background workers
  • CLI-triggered execution
  • async processing
  • internal service operations
  • scheduled tasks

This is particularly important because many backend systems need shared infrastructure even when no incoming HTTP request exists.

The package likely provides:

  • synthetic/internal context initialization
  • logging/tracing support without request context
  • application-scoped execution helpers

Metrics

Directory:

libApplication/metrics/

Files:

metrics/upTime.go

The metrics package provides operational monitoring utilities.

Current functionality appears focused on:

  • uptime tracking
  • application runtime metrics
  • service health visibility

This package may integrate with:

  • Prometheus
  • OpenTelemetry
  • custom observability systems

depending on the wider application setup.


Integration with requestCore

libApplication integrates with several core packages:

Package Purpose
libParams configuration loading
libQuery database initialization
libContext request/runtime context
libLogger structured logging
libTracing tracing setup
response response integration
handlers request processing

Typical Startup Flow

A typical service initialization flow may look like:

Load Environment
        ↓
Initialize Parameters
        ↓
Setup Logging
        ↓
Initialize Tracing
        ↓
Initialize Database
        ↓
Configure Framework
        ↓
Register Handlers
        ↓
Start Listener

Design Characteristics

The package design suggests several architectural goals:


Centralized Bootstrapping

Application startup logic is consolidated into reusable modules instead of being duplicated across services.


Framework Portability

The package avoids hard coupling to a single web framework.

Supported frameworks in the repository include:

  • Gin
  • Fiber
  • net/http

Environment-Driven Configuration

Runtime behavior appears designed to be controlled through environment/configuration layers.


Observability-First Design

The package integrates naturally with:

  • tracing
  • structured logging
  • metrics
  • runtime visibility

Support for Non-HTTP Workloads

The existence of noReq.go indicates support for:

  • workers
  • jobs
  • internal execution pipelines

which is a strong architectural capability for backend platforms.


Example Conceptual Usage

A service built with requestCore may initialize as follows:

func main() {
    // load environment
    // initialize application
    // initialize DB
    // setup tracing/logging
    // configure routes
    // start server
}

libApplication appears intended to centralize this flow.


Operational Benefits

Using libApplication provides several advantages:

  • standardized startup behavior
  • consistent environment handling
  • reusable infrastructure initialization
  • reduced service boilerplate
  • easier observability integration
  • cleaner application entrypoints

Testing Considerations

The package structure suggests it can support:

  • isolated initialization testing
  • environment mocking
  • runtime simulation
  • integration testing
  • startup validation

especially when combined with:

testingtools/
mockdb/
fake API support

Suggested Enhancements

Potential future improvements for libApplication:

  • graceful shutdown management
  • lifecycle hooks
  • dependency injection integration
  • healthcheck framework
  • Prometheus exporters
  • readiness/liveness probes
  • startup profiling
  • configuration validation
  • service registry integration

Summary

The libApplication package provides the runtime and bootstrap foundation for applications built with requestCore.

It centralizes:

  • environment handling
  • initialization logic
  • database setup
  • listener startup
  • non-request execution support
  • operational metrics

The package enables services to maintain:

  • consistent startup patterns
  • framework portability
  • observability integration
  • cleaner application architecture

while reducing infrastructure boilerplate across projects.

Documentation

Index

Constants

View Source
const DefaultRequestFields = "id,dt,incoming,action_id,national_id,branch_id,user_id,outgoing,result,events"
View Source
const LogRequest = "log_req"
View Source
const NoRequest = "no_req"

Variables

This section is empty.

Functions

func GetEnv

func GetEnv(
	name, title string,
	wsParams libParams.ParamInterface,
	requestFields string,
) *requestCore.RequestCoreModel

func InitDB

func InitDB(dbParams *libParams.DbParams)

func InitDataBases

func InitDataBases(params libParams.ParamInterface, dbNames []string)

func Listen

func Listen(netParams *libParams.NetworkParams, app *gin.Engine)

func StartApp added in v0.16.6

func StartApp[T any](app App[T])

Types

type App added in v0.16.6

type App[T any] struct {
	Instance Application[T]
	Params   *libParams.ApplicationParams[T]
	Engine   *gin.Engine
	Model    requestCore.RequestCoreInterface
}

func InitializeApp

func InitializeApp[T any](app Application[T]) *App[T]

type AppEnv

type AppEnv struct {
	Params    libParams.ParamInterface
	Interface requestCore.RequestCoreInterface
}

type Application

type Application[T any] interface {
	AddRoutes(
		model *requestCore.RequestCoreModel,
		wsParams *libParams.ApplicationParams[T],
		roleMap map[string]string,
		rg *gin.RouterGroup,
	)
	Title() string
	Name() string
	Version() string
	BasePath() string
	HasSwagger() bool
	SwaggerSpec() *swag.Spec
	RequestFields() string
	InitGinApp(*gin.Engine)
	InitParams(wsParams *libParams.ApplicationParams[T])
	GetDbList() []string
	GetKeys() [][]byte
	GetCorsConfig() *cors.Config
}

type NoReq

type NoReq struct {
}

func (NoReq) AddRequestEvent

func (n NoReq) AddRequestEvent(_ webFramework.WebFramework, _, _, _ string, _ libRequest.RequestPtr)

func (NoReq) AddRequestLog

func (n NoReq) AddRequestLog(_, _ string, _ libRequest.RequestPtr)

func (NoReq) CheckDuplicateRequest

func (n NoReq) CheckDuplicateRequest(_ libRequest.RequestPtr) error

func (NoReq) InitRequest

func (n NoReq) InitRequest(_ webFramework.WebFramework, _, _ string) error

func (NoReq) Initialize

func (n NoReq) Initialize(
	_ webFramework.WebFramework, _, _ string, _ libRequest.RequestPtr, _ ...any) (
	int, map[string]string, error)

func (NoReq) InitializeNoLog

func (n NoReq) InitializeNoLog(
	_ webFramework.WebFramework, _, _ string, _ libRequest.RequestPtr, _ ...any) (
	int, map[string]string, error)

func (NoReq) InsertRequest

func (n NoReq) InsertRequest(_ libRequest.RequestPtr) error

func (NoReq) LogEnd

func (n NoReq) LogEnd(_, _ string, _ libRequest.RequestPtr)

func (NoReq) LogStart

func (NoReq) UpdateRequestWithContext

func (n NoReq) UpdateRequestWithContext(_ context.Context, _ libRequest.RequestPtr) error

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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