{"head":{"version":"1.0.2","version_date":"2026-10-19","channel":"release","uptime_sec":12792,"updated_at":"2026-10-20T16:03:04+03:00","db_status":"ok"},"service":{"version":"1.0.2","version_date":"2026-10-19","channel":"release","requires_db":"5.0","commit":"d2efd57","build_date":"2026-10-19T11:16:31Z","go_version":"go1.26.5","platform":"linux/amd64","started_at":"2026-10-20T12:29:51+03:00","uptime_sec":12792},"http":{"listen":"0.0.0.0:9090","tls":false,"service_prefix":"/service/","max_body_bytes":1048576,"read_header_timeout_sec":5,"read_timeout_sec":30,"write_timeout_sec":120,"idle_timeout_sec":65,"max_conns":512},"db_pool":{"dsn":"postgres://api_authenticator:xxxxx@10.10.100.231:5432/smartroad_v5?application_name=SorbGate","stat":{"max_conns":5,"total_conns":4,"idle_conns":4,"acquired_conns":0,"acquire_count":22437,"empty_acquire_count":19,"acquire_duration_ms_total":609},"connect_timeout_sec":5,"acquire_timeout_ms":2000,"query_timeout_sec":60},"config":{"loaded":true,"last_ok_at":"2026-10-20T16:02:56+03:00","snapshot":{"api_root_path":"/api/v1/","config_cache_ttl_sec":60,"current_api_version":["1.0","2.0","3.0"],"current_projects":[],"jwt_algorithm":"HS256","jwt_secret_set":true,"auth_methods":["JWT","OTHER"],"cors_allowed_origins":[],"service_query_timeout_ms":5000,"slow_request_ms":1000,"login_rate_limit_per_min":10,"login_rate_limit_burst":5,"trusted_proxies":null,"segment_classes":2,"route_aliases":2,"key_aliases":5,"swagger_definitions":23},"param_groups":[{"title":"Сервис","params":[{"key":"api_root_path","description":"Корневой путь API инсталляции","value":"/api/v1/","source":"db"},{"key":"config_cache_ttl_sec","description":"Время обновления кэша конфигурации шлюза (сек)","value":"60","source":"db"},{"key":"current_api_version","description":"JSON-массив версий API инсталляции; пустой массив - все версии","value":"1.0, 2.0, 3.0","source":"db"},{"key":"current_projects","description":"JSON-массив API_PROJECT_CODE инсталляции; пустой массив - все проекты","value":"(все)","source":"db"},{"key":"service_query_timeout_ms","description":"Таймаут для запросов GATEWAY_SERVICE_QUERY (мс)","value":"5000","source":"db"}]},{"title":"HTTP и сеть","params":[{"key":"cors_allowed_origins","description":"JSON-массив разрешённых Origin для CORS; пустой массив - CORS выключен","value":"(выключен)","source":"db"},{"key":"login_rate_limit_per_min","description":"Rate-limit login/token_refresh: запросов в минуту с одного IP (0 - выключен)","value":"10","source":"db"},{"key":"login_rate_limit_burst","description":"Rate-limit login/token_refresh: ёмкость корзины (burst)","value":"5","source":"db"},{"key":"trusted_proxies","description":"JSON-массив CIDR доверенных прокси: клиентский IP берётся из X-Real-IP","value":"(нет)","source":"db"}]},{"title":"JWT и аутентификация","params":[{"key":"jwt_algorithm","description":"Алгоритм подписи JWT (HS256 | HS384 | HS512)","value":"HS256","source":"db"},{"key":"jwt_secret","description":"JWT секрет","value":"***","source":"db"},{"key":"jwt_access_token_lifetime","description":"Время жизни access-токена, секунды","value":"900","source":"db"},{"key":"jwt_refresh_token_lifetime","description":"Время жизни refresh-токена, минуты","value":"14400","source":"db"},{"key":"auth_methods","description":"Разрешённые способы аутентификации (JWT/OTHER)","value":"JWT, OTHER","source":"db"}]},{"title":"Логирование","params":[{"key":"log_level","description":"Уровень логирования шлюза (error|warn|info|debug)","value":"INFO","source":"db"},{"key":"slow_request_ms","description":"Порог фиксации медленных запросов в логе шлюза (мс, 0 - выключено)","value":"1000","source":"db"},{"key":"call_log_enabled","description":"Журналирование вызовов в БД","value":"да","source":"db"}]}]},"log":{"level":"INFO","format":"text"},"requests":{"app":{"total":234,"active":0,"by_class":{"2xx":14,"4xx":220},"by_code":{"200":14,"404":220},"avg_ms":0.881051282051282,"p50_ms":0.5318181818181819,"p95_ms":7.874999999999979,"p99_ms":22.76666666666666,"histogram":[{"le_ms":1,"count":220},{"le_ms":2,"count":0},{"le_ms":5,"count":0},{"le_ms":10,"count":4},{"le_ms":25,"count":9},{"le_ms":50,"count":1},{"le_ms":100,"count":0},{"le_ms":250,"count":0},{"le_ms":500,"count":0},{"le_ms":1000,"count":0},{"le_ms":2500,"count":0},{"le_ms":5000,"count":0},{"count":0}]},"service":{"total":7390,"active":2,"by_class":{"2xx":7334,"3xx":5,"4xx":50,"5xx":1},"by_code":{"200":7334,"303":5,"401":3,"404":41,"405":6,"503":1},"avg_ms":306.5166898511502,"p50_ms":32.295563869588456,"p95_ms":209.20365535248044,"p99_ms":247.7937336814622,"histogram":[{"le_ms":1,"count":250},{"le_ms":2,"count":19},{"le_ms":5,"count":93},{"le_ms":10,"count":22},{"le_ms":25,"count":2765},{"le_ms":50,"count":1871},{"le_ms":100,"count":1164},{"le_ms":250,"count":1149},{"le_ms":500,"count":3},{"le_ms":1000,"count":2},{"le_ms":2500,"count":4},{"le_ms":5000,"count":8},{"count":40}]}}}