From vmkteam-developer
Reference for vmkteam/appkit Go toolkit: Prometheus metrics for HTTP requests/responses/client, service metadata/dependencies, pprof endpoints, traced HTTP client, X-Request-ID middleware. For instrumenting Go services.
How this skill is triggered — by the user, by Claude, or both
Slash command
/vmkteam-developer:appkitThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
vmkteam/appkit (https://github.com/vmkteam/appkit) — набор middleware и утилит для Go-сервисов.
vmkteam/appkit (https://github.com/vmkteam/appkit) — набор middleware и утилит для Go-сервисов.
Связанные скиллы: /embedlog (логирование), /cron (cron-задачи), /prometheus (PromQL запросы к метрикам appkit).
Appkit автоматически регистрирует метрики app_*:
import "github.com/vmkteam/appkit/metrics"
func (a *App) registerMetrics() {
metrics.Register(a.echo) // /metrics endpoint
}
Server-метрики:
app_http_requests_total — HTTP запросы (labels: job, code, method, uri, server)app_http_responses_duration_seconds_* — HTTP latencyClient-метрики (исходящие запросы):
app_http_client_requests_total — исходящие HTTP запросыapp_http_client_requests_inflight — текущие исходящиеapp_http_client_responses_duration_seconds_* — latency исходящихMetadata-метрики:
app_metadata_service — информация о сервисе (version, зависимости)app_metadata_services — связи между сервисами (sync/async/external)app_metadata_db_connections_total — подключения к БДapp_log_events_total — log events (info/error)Декларация зависимостей сервиса для auto-discovery (используется в /onboard и /investigate):
import "github.com/vmkteam/appkit/metadata"
func (a *App) registerMetadata() {
md := metadata.New(a.appName, version)
// БД
md.AddDatabase("postgres", a.db.PoolStats)
// Зависимые сервисы (sync)
md.AddService("{dep_service}", metadata.Sync)
// Async (NATS, RabbitMQ)
md.AddService("{async_service}", metadata.Async)
// Внешние сервисы
md.AddService("{ext_service}", metadata.External)
md.Register() // регистрирует Prometheus метрики
}
Исходящие HTTP-запросы к другим сервисам с автоматическими метриками и internal headers:
import "github.com/vmkteam/appkit/httpclient"
// Создание клиента с метриками и internal headers
client := httpclient.New(
httpclient.WithMetrics("caller-service"),
httpclient.WithInternalHeaders(appName, version),
)
// Использование
resp, err := client.Do(req)
Метрики клиента: app_http_client_requests_total, app_http_client_requests_inflight, app_http_client_responses_duration_seconds_* по caller/origin.
import "github.com/vmkteam/appkit/pprof"
func (a *App) registerDebugHandlers() {
pprof.Register(a.echo) // /debug/pprof/*
}
Endpoints: /debug/pprof/, /debug/pprof/heap, /debug/pprof/goroutine, /debug/pprof/profile?seconds=30.
import "github.com/vmkteam/appkit/xrid"
// Middleware: генерирует/валидирует/пропускает X-Request-ID
a.echo.Any("/v1/rpc/", echo.WrapHandler(appkit.XRequestID(a.srv)))
// Получить из контекста
requestID := xrid.FromContext(ctx)
Автоматическое извлечение версии из Git (go build -ldflags или VCS info):
import "github.com/vmkteam/appkit/vcs"
version := vcs.Version() // git commit hash
Определение реального IP клиента с поддержкой trust CIDR ranges:
import "github.com/vmkteam/appkit/realip"
// Настройка trusted proxies
a.echo.IPExtractor = realip.Extractor(trustedCIDRs)
Автоматический HTML-список всех маршрутов (полезно в dev-режиме):
// GET / — список всех зарегистрированных маршрутов
appkit.RegisterRouteList(a.echo)
import "github.com/vmkteam/appkit/appctx"
// Хранение и получение метаданных запроса из контекста
ip := appctx.IP(ctx)
ua := appctx.UserAgent(ctx)
platform := appctx.Platform(ctx)
version := appctx.Version(ctx)
country := appctx.Country(ctx)
// pkg/app/handlers.go
func (a *App) registerHandlers() {
a.echo.Use(middleware.CORSWithConfig(middleware.CORSConfig{
AllowOrigins: []string{"*"},
}))
a.echo.GET("/status", a.statusHandler)
}
func (a *App) registerAPIHandlers() {
a.srv = rpc.New(a.db, a.Logger, a.cfg.Server.IsDevel)
a.echo.Any("/v1/rpc/*", echo.WrapHandler(appkit.XRequestID(a.srv)))
a.echo.GET("/v1/rpc/doc/*", echo.WrapHandler(smdbox.NewHandler(a.srv)))
}
npx claudepluginhub vmkteam/claude-plugins --plugin vmkteam-developerGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.