Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,6 @@ lint:
@golangci-lint version
@golangci-lint config verify
@golangci-lint run

run:
@go run example/main.go
62 changes: 62 additions & 0 deletions example/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
//nolint:sloglint,noctx
package main

import (
"log/slog"
_ "net/http/pprof"

"github.com/vmkteam/appkit"

"github.com/labstack/echo/v4"
"github.com/prometheus/client_golang/prometheus/promhttp"
"github.com/vmkteam/zenrpc/v2"
)

const appName = "apisrv"

func main() {
version := appkit.Version()
slog.Info("app started", "app", appName, "version", version, "addr", "http://localhost:8080")

// create echo server
e := appkit.NewEcho()
e.Use(appkit.HTTPMetrics(appName))

md := registerMetadata()

e.Any("/debug/pprof/*", appkit.PprofHandler)
e.GET("/debug/metadata", md.Handler)
e.GET("/metrics", echo.WrapHandler(promhttp.Handler()))
e.GET("/v1/rpc/doc/", appkit.EchoHandlerFunc(zenrpc.SMDBoxHandler))
e.GET("/", appkit.RenderRoutes(appName, e))

// register metadata as metrics
md.RegisterMetrics()

// HTTP headers for client requests
httpHeaders := appkit.NewInternalHeaders(appName, version)
_ = httpHeaders

// start echo
if err := e.Start(":8080"); err != nil {
slog.Error("http server exited", "err", err.Error())
}
}

// registerMetadata creates metadata manager with service metadata.
func registerMetadata() *appkit.MetadataManager {
return appkit.NewMetadataManager(appkit.MetadataOpts{
DBs: []appkit.DBMetadata{
appkit.NewDBMetadata("master", 5, false),
appkit.NewDBMetadata("replica", 1, true),
},
HasPublicAPI: true,
HasPrivateAPI: false,
HasBrokersrvQueue: false,
HasCronJobs: false,
Services: []appkit.ServiceMetadata{
appkit.NewServiceMetadata("yandex", appkit.MetadataServiceTypeExternal),
appkit.NewServiceMetadata("apisrv", appkit.MetadataServiceTypeAsync),
},
})
}