3d962e2382
Expose a new API which can be scraped by prometheus to gather useful metrics from an instance. The new endpoint exposes photoprism build version information, golang version, edition and various count metrics.
47 lines
1.4 KiB
Go
47 lines
1.4 KiB
Go
package api
|
|
|
|
import (
|
|
"net/http"
|
|
"testing"
|
|
"regexp"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestGetMetrics(t *testing.T) {
|
|
t.Run("expose count statistics", func(t *testing.T) {
|
|
app, router, _ := NewApiTest()
|
|
|
|
GetMetrics(router)
|
|
|
|
resp := PerformRequestWithStream(app, "GET", "/api/v1/metrics")
|
|
|
|
if resp.Code != http.StatusOK {
|
|
t.Fatal(resp.Body.String())
|
|
}
|
|
|
|
body := resp.Body.String()
|
|
|
|
assert.Regexp(t, regexp.MustCompile(`photoprism_statistics_media_count{stat="all"} \d+`), body)
|
|
assert.Regexp(t, regexp.MustCompile(`photoprism_statistics_media_count{stat="photos"} \d+`), body)
|
|
assert.Regexp(t, regexp.MustCompile(`photoprism_statistics_media_count{stat="videos"} \d+`), body)
|
|
assert.Regexp(t, regexp.MustCompile(`photoprism_statistics_media_count{stat="albums"} \d+`), body)
|
|
assert.Regexp(t, regexp.MustCompile(`photoprism_statistics_media_count{stat="folders"} \d+`), body)
|
|
assert.Regexp(t, regexp.MustCompile(`photoprism_statistics_media_count{stat="files"} \d+`), body)
|
|
})
|
|
t.Run("expose build information", func(t *testing.T) {
|
|
app, router, _ := NewApiTest()
|
|
|
|
GetMetrics(router)
|
|
|
|
resp := PerformRequestWithStream(app, "GET", "/api/v1/metrics")
|
|
|
|
if resp.Code != http.StatusOK {
|
|
t.Fatal(resp.Body.String())
|
|
}
|
|
|
|
body := resp.Body.String()
|
|
|
|
assert.Regexp(t, regexp.MustCompile(`photoprism_build_info{edition=".+",goversion=".+",version=".+"} 1`), body)
|
|
})
|
|
}
|