feat(metrics): add metrics server (#1930)

* feat(metrics): add metrics server

* chore: update license headers

* feat(metrics): add optional basic auth

* feat(metrics): add go and process collectors

---------

Co-authored-by: ze0s <43699394+zze0s@users.noreply.github.com>
Co-authored-by: ze0s <ze0s@riseup.net>
This commit is contained in:
Antoine 2025-01-25 17:58:18 +01:00 committed by GitHub
parent 0d5902c8f6
commit 3f8bc0140c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
16 changed files with 1191 additions and 83 deletions

View file

@ -27,6 +27,7 @@ import (
"github.com/autobrr/autobrr/internal/irc"
"github.com/autobrr/autobrr/internal/list"
"github.com/autobrr/autobrr/internal/logger"
"github.com/autobrr/autobrr/internal/metrics"
"github.com/autobrr/autobrr/internal/notification"
"github.com/autobrr/autobrr/internal/proxy"
"github.com/autobrr/autobrr/internal/release"
@ -176,6 +177,22 @@ func main() {
errorChannel <- httpServer.Open()
}()
if cfg.Config.MetricsEnabled {
metricsManager := metrics.NewMetricsManager(version, commit, date, releaseService, ircService, feedService, listService, filterService)
go func() {
httpMetricsServer := http.NewMetricsServer(
log,
cfg,
version,
commit,
date,
metricsManager,
)
errorChannel <- httpMetricsServer.Open()
}()
}
sigCh := make(chan os.Signal, 1)
signal.Notify(sigCh, syscall.SIGHUP, syscall.SIGINT, syscall.SIGQUIT, syscall.SIGTERM)

View file

@ -24,6 +24,7 @@ import (
"github.com/autobrr/autobrr/pkg/errors"
_ "github.com/lib/pq"
"golang.org/x/crypto/bcrypt"
"golang.org/x/term"
)
@ -278,6 +279,19 @@ func main() {
fmt.Println("Database reset and reseed completed successfully!")
}
case "htpasswd":
password, err := readPassword()
if err != nil {
log.Fatalf("failed to read password: %v", err)
}
hash, err := CreateHtpasswdHash(string(password))
if err != nil {
log.Fatalf("failed to hash password: %v", err)
}
fmt.Println(hash)
default:
flag.Usage()
if cmd != "help" {
@ -316,3 +330,15 @@ func readPassword() (password []byte, err error) {
return password, nil
}
// CreateHtpasswdHash generates a bcrypt hash of the password for use in basic auth
func CreateHtpasswdHash(password string) (string, error) {
// Generate a bcrypt hash from the input password
hash, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
if err != nil {
return "", fmt.Errorf("failed to generate hash: %v", err)
}
// Return the formatted bcrypt hash (with the bcrypt marker "$2y$")
return string(hash), nil
}