app

package
v0.2.10 Latest Latest
Warning

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

Go to latest
Published: May 30, 2025 License: MIT Imports: 22 Imported by: 0

Documentation

Overview

Example
package main

import (
	"context"
	"errors"
	"net/http"
	"os"
	"os/signal"
	"syscall"
	"time"

	"github.com/gin-gonic/gin"
	"github.com/spf13/cobra"
	"github.com/virzz/mulan/app"
	"github.com/virzz/mulan/web"
	"go.uber.org/zap"
)

type Config struct {
	//lint:ignore SA5008 Ignore JSON option "squash"
	app.Config `json:",inline,squash" yaml:",inline"`
}

var (
	Version string = "1.0.0"
	Commit  string = "dev"

	Conf app.Configer
)

func main() {
	meta := &app.Meta{
		ID:          "com.virzz.mulan.example",
		Name:        "example",
		Description: "ExampleService",
		Version:     Version,
		Commit:      Commit,
	}
	std := app.New(meta)
	std.SetPreInit(func(ctx context.Context) error {
		return nil
	})
	std.SetValidate(func() error {
		return nil
	})
	web.SetVersionHandler(meta.Name, meta.Version, meta.Commit)
	routers := web.NewRouters()
	routers.Handle("GET", "/", func(c *gin.Context) {
		c.JSON(200, gin.H{"message": "Hello, World!"})
	})
	std.SetRouters(routers)
	std.SetAction(func(cmd *cobra.Command, args []string) error {
		ctx, cancel := context.WithCancel(cmd.Context())
		defer cancel()
		httpCfg := Conf.GetHTTP().WithRequestID(true)
		httpSrv, err := web.New(httpCfg, std.Routers(), nil, nil)
		if err != nil {
			return err
		}
		sig := make(chan os.Signal, 1)
		signal.Notify(sig, os.Interrupt, syscall.SIGTERM)
		go func() {
			err := httpSrv.ListenAndServe()
			if err != nil && !errors.Is(err, http.ErrServerClosed) {
				zap.L().Error("Failed to run http server", zap.Error(err))
				sig <- os.Interrupt
			}
		}()
		switch <-sig {
		case os.Interrupt:
			httpSrv.Close()
		case syscall.SIGTERM:
			ctx, cancel := context.WithTimeout(ctx, 10*time.Second)
			defer cancel()
			httpSrv.Shutdown(ctx)
		}
		return nil
	})
	if err := std.Execute(context.Background(), Conf); err != nil {
		panic(err)
	}
}

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type ActionFunc added in v0.2.2

type ActionFunc func(cmd *cobra.Command, args []string) error

type App

type App struct {
	*Meta
	// contains filtered or unexported fields
}

func New added in v0.2.2

func New(meta *Meta) *App

func (*App) AddCommand added in v0.2.2

func (app *App) AddCommand(cmd ...*cobra.Command)

func (*App) AddFlagSet added in v0.2.2

func (app *App) AddFlagSet(fs ...*pflag.FlagSet)

func (*App) AddMaintainCmd added in v0.2.4

func (app *App) AddMaintainCmd(name string, cfg *db.Config)

func (*App) Conf added in v0.2.7

func (app *App) Conf() Configer

func (*App) DisableConfigCmd added in v0.2.4

func (app *App) DisableConfigCmd()

func (*App) EnableRemote added in v0.2.2

func (app *App) EnableRemote(project string, publicKey ...string) error

func (*App) Execute added in v0.2.2

func (app *App) Execute(ctx context.Context, cfg Configer) error

func (*App) ExecuteE added in v0.2.2

func (app *App) ExecuteE(ctx context.Context) (err error)

func (*App) Register added in v0.2.2

func (app *App) Register(f web.RegisterFunc)

func (*App) RootCmd added in v0.2.2

func (app *App) RootCmd() *cobra.Command

func (*App) Routers added in v0.2.2

func (app *App) Routers() *web.Routers

func (*App) Run

func (app *App) Run(ctx context.Context, cfg Configer) error

func (*App) SetAction added in v0.2.2

func (app *App) SetAction(action ActionFunc)

func (*App) SetConfig added in v0.2.2

func (app *App) SetConfig(config Configer)

func (*App) SetPreInit added in v0.2.2

func (app *App) SetPreInit(f PreInitFunc)

func (*App) SetRouters added in v0.2.2

func (app *App) SetRouters(routers *web.Routers)

func (*App) SetValidate added in v0.2.2

func (app *App) SetValidate(f ValidateFunc)

type Config

type Config struct {
	HTTP  web.Config `json:"http" yaml:"http"`
	Token web.Token  `json:"token" yaml:"token"`
	DB    db.Config  `json:"db" yaml:"db"`
	RDB   rdb.Config `json:"rdb" yaml:"rdb"`
	Log   log.Config `json:"log" yaml:"log"`
}

func (*Config) GetDB

func (c *Config) GetDB() *db.Config

func (*Config) GetHTTP

func (c *Config) GetHTTP() *web.Config

func (*Config) GetLog added in v0.2.2

func (c *Config) GetLog() *log.Config

func (*Config) GetRDB

func (c *Config) GetRDB() *rdb.Config

func (*Config) GetToken added in v0.2.2

func (c *Config) GetToken() *web.Token

func (*Config) Template

func (c *Config) Template(typ ...string) string

func (*Config) Validate

func (c *Config) Validate() error

type Configer

type Configer interface {
	Validate() error
	GetHTTP() *web.Config
	GetDB() *db.Config
	GetRDB() *rdb.Config
	GetLog() *log.Config
	GetToken() *web.Token
}
var (
	Conf Configer
)

type Meta added in v0.2.2

type Meta struct {
	ID          string
	Name        string
	Description string
	Version     string
	Commit      string
	BuildAt     string
}

type PreInitFunc

type PreInitFunc func(context.Context) error

type Remote added in v0.2.2

type Remote struct{}

type ValidateFunc

type ValidateFunc func() error

Jump to

Keyboard shortcuts

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