initiator

package
v0.28.1 Latest Latest
Warning

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

Go to latest
Published: Aug 11, 2026 License: MIT 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

Overview

Package initiator provides application initialization utilities for Gin-based services.

Index

Constants

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

DefaultRequestFields is the default comma-separated list of request fields used in SQL insert/update.

View Source
const LogRequest = "log_req"

LogRequest is the request mode constant indicating log-only request tracking.

View Source
const NoRequest = "no_req"

NoRequest is the request mode constant indicating no request tracking.

Variables

This section is empty.

Functions

func GetEnv

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

GetEnv creates and returns a RequestCoreModel configured with query runner and request handler.

func InitDB

func InitDB(dbParams *libParams.DbParams)

InitDB opens and pings the database connection, initializing both the sql.DB and gorm.DB handles.

func InitDataBases

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

InitDataBases initializes all databases listed in dbNames using the provided parameters.

func Listen

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

Listen starts the Gin engine on the configured HTTP or HTTPS port.

func StartApp added in v0.16.6

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

StartApp starts the HTTP/HTTPS server for the given application.

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
}

App holds the initialized application instance, parameters, Gin engine, and model.

func InitializeApp

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

InitializeApp initializes and returns a fully configured App from the given Application instance.

type AppEnv

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

AppEnv holds the application parameter interface and request core interface.

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
}

Application defines the interface that a requestCore-based service must implement.

type NoReq

type NoReq struct {
}

NoReq is a no-op implementation of RequestInterface that skips request tracking.

func (NoReq) AddRequestEvent

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

AddRequestEvent is a no-op that does not add a request event.

func (NoReq) AddRequestLog

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

AddRequestLog is a no-op that does not add any request log.

func (NoReq) CheckDuplicateRequest

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

CheckDuplicateRequest is a no-op that returns nil without checking for duplicates.

func (NoReq) InitRequest

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

InitRequest is a no-op that returns nil without initializing a request.

func (NoReq) Initialize

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

Initialize is a no-op that returns success without tracking the request.

func (NoReq) InitializeNoLog

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

InitializeNoLog is a no-op that returns success without logging the request.

func (NoReq) InsertRequest

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

InsertRequest is a no-op that returns nil without inserting the request.

func (NoReq) LogEnd

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

LogEnd is a no-op that does not log the request end.

func (NoReq) LogStart

LogStart is a no-op that returns nil without logging the request start.

func (NoReq) UpdateRequestWithContext

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

UpdateRequestWithContext is a no-op that returns nil without updating the request.

Directories

Path Synopsis
Package metrics provides Prometheus metrics collection for requestCore applications.
Package metrics provides Prometheus metrics collection for requestCore applications.

Jump to

Keyboard shortcuts

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