1
0
Fork 0
forked from jriou/coller

feat: Add metrics

Fixes #7.

Signed-off-by: Julien Riou <julien@riou.xyz>
This commit is contained in:
Julien Riou 2025-08-26 09:25:10 +02:00
parent e486d3df98
commit 0ce540e92d
Signed by: jriou
GPG key ID: 9A099EDA51316854
7 changed files with 141 additions and 18 deletions

View file

@ -14,6 +14,7 @@ import (
"git.riou.xyz/jriou/coller/internal"
"github.com/gorilla/mux"
"github.com/prometheus/client_golang/prometheus/promhttp"
)
var passwordLength = internal.MIN_PASSWORD_LENGTH
@ -23,6 +24,7 @@ type Server struct {
db *Database
config *Config
version string
metrics *Metrics
}
func NewServer(logger *slog.Logger, db *Database, config *Config, version string) (*Server, error) {
@ -44,6 +46,10 @@ func (s *Server) SetPasswordLength(length int) {
passwordLength = length
}
func (s *Server) SetMetrics(metrics *Metrics) {
s.metrics = metrics
}
type ErrorResponse struct {
Message string `json:"message"`
Error string `json:"error"`
@ -312,8 +318,15 @@ var templatesFS embed.FS
func (s *Server) Start() error {
r := mux.NewRouter().StrictSlash(true)
// API
// Healthchecks
r.HandleFunc("/health", HealthHandler)
// Metrics
if s.metrics != nil && s.metrics.reg != nil {
r.Path(s.config.PrometheusRoute).Handler(promhttp.HandlerFor(s.metrics.reg, promhttp.HandlerOpts{Registry: s.metrics.reg})).Methods("GET")
}
// API
r.Path("/api/note").Handler(&CreateNoteHandler{logger: s.logger, db: s.db, maxUploadSize: s.config.MaxUploadSize}).Methods("POST")
r.Path("/{id:[a-zA-Z0-9]+}/{password:[a-zA-Z0-9]+}").Handler(&GetProtectedNoteHandler{logger: s.logger, db: s.db}).Methods("GET")
r.Path("/{id:[a-zA-Z0-9]+}").Handler(&GetNoteHandler{logger: s.logger, db: s.db}).Methods("GET")