Files
healthlog/cmd/healthlog/main.go
T
av 41f2f05f2f добавлен приём пакетов Health Auto Export
- POST /api/v1/ingest: токен, лимит тела, gzip, durable-запись тела в сырой
  архив, учёт доставки в SQLite
- код ответа отражает доставку, а не разбор: битый JSON — 400, непонятое
  содержимое — 200, данные уже сохранены и доразберутся позже
- сохраняется полный набор заголовков запроса с вычисткой секретов по имени
  и по совпадению значения с токеном
2026-08-01 12:37:17 +03:00

49 lines
1.5 KiB
Go

// Команда healthlog — коллектор данных Apple Health из Health Auto Export.
//
// Подкоманды:
//
// healthlog [serve] --config <path> принимать пакеты (по умолчанию)
// healthlog healthcheck --config <p> проверить /healthz (для docker HEALTHCHECK)
package main
import (
"os"
"strings"
"git.vakhrushev.me/av/healthlog/internal/logging"
)
func main() {
args := os.Args[1:]
// Первый позиционный аргумент (не флаг) — подкоманда. Без него (и при
// `--config ...`) запускаем сервис.
cmd := "serve"
if len(args) > 0 && !strings.HasPrefix(args[0], "-") {
cmd, args = args[0], args[1:]
}
var err error
switch cmd {
case "serve":
err = runServe(args)
case "healthcheck":
err = runHealthcheck(args)
default:
_, _ = os.Stderr.WriteString("unknown command: " + cmd + "\n")
os.Exit(2)
}
if err != nil {
if cmd == "serve" {
// Фатальный сбой старта сервиса — структурный лог ERROR (как в
// проде), затем ненулевой код возврата.
logging.NewStderr().Error("fatal startup", "command", cmd, "error", err)
} else {
// Диагностический CLI — человекочитаемый stderr, это
// пользовательский вывод, а не лог сервиса.
_, _ = os.Stderr.WriteString("fatal: " + err.Error() + "\n")
}
os.Exit(1)
}
}