Compare commits
11 commits
054582103b
...
969e06e31e
Author | SHA1 | Date | |
---|---|---|---|
969e06e31e | |||
80cf699a73 | |||
af1403d0c9 | |||
836029cb7b | |||
c61186b22a | |||
|
7dd953ef84 | ||
|
4c4037fafc | ||
|
37e5c78e35 | ||
|
dad6bc042d | ||
|
0140265912 | ||
|
fd58773472 |
11 changed files with 69 additions and 31 deletions
|
@ -15,7 +15,7 @@ BASE_URL=http://localhost:5173
|
||||||
|
|
||||||
# S3/MinIO configuration, required for avatars, pride flags, and data exports
|
# S3/MinIO configuration, required for avatars, pride flags, and data exports
|
||||||
# Note: MINIO_ENDPOINT must be set and look like a minio endpoint, but doesn't
|
# Note: MINIO_ENDPOINT must be set and look like a minio endpoint, but doesn't
|
||||||
# have to actually point to one you have access to
|
# have to actually point to anything real
|
||||||
MINIO_ENDPOINT=example.com
|
MINIO_ENDPOINT=example.com
|
||||||
MINIO_BUCKET=
|
MINIO_BUCKET=
|
||||||
MINIO_ACCESS_KEY_ID=
|
MINIO_ACCESS_KEY_ID=
|
||||||
|
@ -40,5 +40,5 @@ TUMBLR_CLIENT_ID=
|
||||||
TUMBLR_CLIENT_SECRET=
|
TUMBLR_CLIENT_SECRET=
|
||||||
|
|
||||||
# Discord bot config - provide the app's public key in addition to client ID/
|
# Discord bot config - provide the app's public key in addition to client ID/
|
||||||
# secret from above to let the bot to respond to command interactions over HTTP
|
# secret above to let the bot respond to command interactions over HTTP
|
||||||
DISCORD_PUBLIC_KEY=
|
DISCORD_PUBLIC_KEY=
|
||||||
|
|
|
@ -6,6 +6,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/url"
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
|
"sync"
|
||||||
|
|
||||||
"codeberg.org/pronounscc/pronouns.cc/backend/log"
|
"codeberg.org/pronounscc/pronouns.cc/backend/log"
|
||||||
"emperror.dev/errors"
|
"emperror.dev/errors"
|
||||||
|
@ -41,6 +42,10 @@ type DB struct {
|
||||||
baseURL *url.URL
|
baseURL *url.URL
|
||||||
|
|
||||||
TotalRequests prometheus.Counter
|
TotalRequests prometheus.Counter
|
||||||
|
|
||||||
|
activeUsersDay, activeUsersWeek, activeUsersMonth int64
|
||||||
|
usersTotal, membersTotal int64
|
||||||
|
countMu sync.RWMutex
|
||||||
}
|
}
|
||||||
|
|
||||||
func New() (*DB, error) {
|
func New() (*DB, error) {
|
||||||
|
|
|
@ -48,7 +48,7 @@ func (f FediverseApp) ClientConfig() *oauth2.Config {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f FediverseApp) MastodonCompatible() bool {
|
func (f FediverseApp) MastodonCompatible() bool {
|
||||||
return f.InstanceType == "mastodon" || f.InstanceType == "pleroma" || f.InstanceType == "akkoma" || f.InstanceType == "pixelfed"
|
return f.InstanceType == "mastodon" || f.InstanceType == "pleroma" || f.InstanceType == "akkoma" || f.InstanceType == "pixelfed" || f.InstanceType == "gotosocial"
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f FediverseApp) Misskey() bool {
|
func (f FediverseApp) Misskey() bool {
|
||||||
|
|
|
@ -21,6 +21,11 @@ func (db *DB) initMetrics() (err error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("getting user count for metrics: %v", err)
|
log.Errorf("getting user count for metrics: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
db.countMu.Lock()
|
||||||
|
db.usersTotal = count
|
||||||
|
db.countMu.Unlock()
|
||||||
|
|
||||||
return float64(count)
|
return float64(count)
|
||||||
}))
|
}))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -35,6 +40,11 @@ func (db *DB) initMetrics() (err error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("getting member count for metrics: %v", err)
|
log.Errorf("getting member count for metrics: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
db.countMu.Lock()
|
||||||
|
db.membersTotal = count
|
||||||
|
db.countMu.Unlock()
|
||||||
|
|
||||||
return float64(count)
|
return float64(count)
|
||||||
}))
|
}))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -49,6 +59,11 @@ func (db *DB) initMetrics() (err error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("getting active user count for metrics: %v", err)
|
log.Errorf("getting active user count for metrics: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
db.countMu.Lock()
|
||||||
|
db.activeUsersMonth = count
|
||||||
|
db.countMu.Unlock()
|
||||||
|
|
||||||
return float64(count)
|
return float64(count)
|
||||||
}))
|
}))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -63,6 +78,11 @@ func (db *DB) initMetrics() (err error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("getting active user count for metrics: %v", err)
|
log.Errorf("getting active user count for metrics: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
db.countMu.Lock()
|
||||||
|
db.activeUsersWeek = count
|
||||||
|
db.countMu.Unlock()
|
||||||
|
|
||||||
return float64(count)
|
return float64(count)
|
||||||
}))
|
}))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -77,6 +97,11 @@ func (db *DB) initMetrics() (err error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("getting active user count for metrics: %v", err)
|
log.Errorf("getting active user count for metrics: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
db.countMu.Lock()
|
||||||
|
db.activeUsersDay = count
|
||||||
|
db.countMu.Unlock()
|
||||||
|
|
||||||
return float64(count)
|
return float64(count)
|
||||||
}))
|
}))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -107,6 +132,22 @@ func (db *DB) initMetrics() (err error) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (db *DB) Counts(ctx context.Context) (numUsers, numMembers, usersDay, usersWeek, usersMonth int64) {
|
||||||
|
db.countMu.Lock()
|
||||||
|
if db.usersTotal != 0 {
|
||||||
|
defer db.countMu.Unlock()
|
||||||
|
return db.usersTotal, db.membersTotal, db.activeUsersDay, db.activeUsersWeek, db.activeUsersMonth
|
||||||
|
}
|
||||||
|
db.countMu.Unlock()
|
||||||
|
|
||||||
|
numUsers, _ = db.TotalUserCount(ctx)
|
||||||
|
numMembers, _ = db.TotalMemberCount(ctx)
|
||||||
|
usersDay, _ = db.ActiveUsers(ctx, ActiveDay)
|
||||||
|
usersWeek, _ = db.ActiveUsers(ctx, ActiveWeek)
|
||||||
|
usersMonth, _ = db.ActiveUsers(ctx, ActiveMonth)
|
||||||
|
return numUsers, numMembers, usersDay, usersWeek, usersMonth
|
||||||
|
}
|
||||||
|
|
||||||
func (db *DB) TotalUserCount(ctx context.Context) (numUsers int64, err error) {
|
func (db *DB) TotalUserCount(ctx context.Context) (numUsers int64, err error) {
|
||||||
err = db.QueryRow(ctx, "SELECT COUNT(*) FROM users WHERE deleted_at IS NULL").Scan(&numUsers)
|
err = db.QueryRow(ctx, "SELECT COUNT(*) FROM users WHERE deleted_at IS NULL").Scan(&numUsers)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -67,7 +67,7 @@ func (s *Server) noAppFediverseURL(ctx context.Context, w http.ResponseWriter, r
|
||||||
switch softwareName {
|
switch softwareName {
|
||||||
case "misskey", "foundkey", "calckey":
|
case "misskey", "foundkey", "calckey":
|
||||||
return s.noAppMisskeyURL(ctx, w, r, softwareName, instance)
|
return s.noAppMisskeyURL(ctx, w, r, softwareName, instance)
|
||||||
case "mastodon", "pleroma", "akkoma", "pixelfed":
|
case "mastodon", "pleroma", "akkoma", "pixelfed", "gotosocial":
|
||||||
case "glitchcafe":
|
case "glitchcafe":
|
||||||
// plural.cafe (potentially other instances too?) runs Mastodon but changes the software name
|
// plural.cafe (potentially other instances too?) runs Mastodon but changes the software name
|
||||||
// changing it back to mastodon here for consistency
|
// changing it back to mastodon here for consistency
|
||||||
|
|
|
@ -4,9 +4,7 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"codeberg.org/pronounscc/pronouns.cc/backend/db"
|
|
||||||
"codeberg.org/pronounscc/pronouns.cc/backend/server"
|
"codeberg.org/pronounscc/pronouns.cc/backend/server"
|
||||||
"emperror.dev/errors"
|
|
||||||
"github.com/go-chi/chi/v5"
|
"github.com/go-chi/chi/v5"
|
||||||
"github.com/go-chi/render"
|
"github.com/go-chi/render"
|
||||||
)
|
)
|
||||||
|
@ -39,30 +37,7 @@ type MetaUsers struct {
|
||||||
func (s *Server) meta(w http.ResponseWriter, r *http.Request) error {
|
func (s *Server) meta(w http.ResponseWriter, r *http.Request) error {
|
||||||
ctx := r.Context()
|
ctx := r.Context()
|
||||||
|
|
||||||
numUsers, err := s.DB.TotalUserCount(ctx)
|
numUsers, numMembers, activeDay, activeWeek, activeMonth := s.DB.Counts(ctx)
|
||||||
if err != nil {
|
|
||||||
return errors.Wrap(err, "querying user count")
|
|
||||||
}
|
|
||||||
|
|
||||||
activeMonth, err := s.DB.ActiveUsers(ctx, db.ActiveMonth)
|
|
||||||
if err != nil {
|
|
||||||
return errors.Wrap(err, "querying user count")
|
|
||||||
}
|
|
||||||
|
|
||||||
activeWeek, err := s.DB.ActiveUsers(ctx, db.ActiveWeek)
|
|
||||||
if err != nil {
|
|
||||||
return errors.Wrap(err, "querying user count")
|
|
||||||
}
|
|
||||||
|
|
||||||
activeDay, err := s.DB.ActiveUsers(ctx, db.ActiveDay)
|
|
||||||
if err != nil {
|
|
||||||
return errors.Wrap(err, "querying user count")
|
|
||||||
}
|
|
||||||
|
|
||||||
numMembers, err := s.DB.TotalMemberCount(ctx)
|
|
||||||
if err != nil {
|
|
||||||
return errors.Wrap(err, "querying user count")
|
|
||||||
}
|
|
||||||
|
|
||||||
render.JSON(w, r, MetaResponse{
|
render.JSON(w, r, MetaResponse{
|
||||||
GitRepository: server.Repository,
|
GitRepository: server.Repository,
|
||||||
|
|
|
@ -14,6 +14,7 @@ import (
|
||||||
"github.com/go-chi/cors"
|
"github.com/go-chi/cors"
|
||||||
"github.com/go-chi/httprate"
|
"github.com/go-chi/httprate"
|
||||||
"github.com/go-chi/render"
|
"github.com/go-chi/render"
|
||||||
|
chiprometheus "github.com/toshi0607/chi-prometheus"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Revision is the git commit, filled at build time
|
// Revision is the git commit, filled at build time
|
||||||
|
@ -59,6 +60,12 @@ func New() (*Server, error) {
|
||||||
MaxAge: 300,
|
MaxAge: 300,
|
||||||
}))
|
}))
|
||||||
|
|
||||||
|
// enable request latency tracking
|
||||||
|
os.Setenv(chiprometheus.EnvChiPrometheusLatencyBuckets, "10,25,50,100,300,500,1000,5000")
|
||||||
|
prom := chiprometheus.New("pronouns.cc")
|
||||||
|
s.Router.Use(prom.Handler)
|
||||||
|
prom.MustRegisterDefault()
|
||||||
|
|
||||||
// enable authentication for all routes (but don't require it)
|
// enable authentication for all routes (but don't require it)
|
||||||
s.Router.Use(s.maybeAuth)
|
s.Router.Use(s.maybeAuth)
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@ one in the repository root (for the backend) and one in the frontend directory.
|
||||||
|
|
||||||
### Backend keys
|
### Backend keys
|
||||||
|
|
||||||
- `HMAC_KEY`: the key used to sign tokens. This should be a base64 string, you can generate one with `scripts/genkey`.
|
- `HMAC_KEY`: the key used to sign tokens. This should be a base64 string, you can generate one with `go run -v . generate key` (or `./pronouns generate key` after building).
|
||||||
- `DATABASE_URL`: the URL for the PostgreSQL database.
|
- `DATABASE_URL`: the URL for the PostgreSQL database.
|
||||||
- `REDIS`: the URL for the Redis database.
|
- `REDIS`: the URL for the Redis database.
|
||||||
- `PORT` (int): the port the backend will listen on.
|
- `PORT` (int): the port the backend will listen on.
|
||||||
|
|
|
@ -45,6 +45,9 @@
|
||||||
<a class="text-reset" href="/page/terms" target="_blank" rel="noopener noreferrer"
|
<a class="text-reset" href="/page/terms" target="_blank" rel="noopener noreferrer"
|
||||||
>terms of service</a
|
>terms of service</a
|
||||||
>.
|
>.
|
||||||
|
<br />
|
||||||
|
Note that we <strong>cannot</strong> take action on any reports that cannot be proven with just
|
||||||
|
the reported profile and any external pages linked on it.
|
||||||
</p>
|
</p>
|
||||||
</ModalBody>
|
</ModalBody>
|
||||||
<ModalFooter>
|
<ModalFooter>
|
||||||
|
|
1
go.mod
1
go.mod
|
@ -62,6 +62,7 @@ require (
|
||||||
github.com/russross/blackfriday/v2 v2.1.0 // indirect
|
github.com/russross/blackfriday/v2 v2.1.0 // indirect
|
||||||
github.com/sirupsen/logrus v1.9.0 // indirect
|
github.com/sirupsen/logrus v1.9.0 // indirect
|
||||||
github.com/tilinna/clock v1.1.0 // indirect
|
github.com/tilinna/clock v1.1.0 // indirect
|
||||||
|
github.com/toshi0607/chi-prometheus v0.1.3 // indirect
|
||||||
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect
|
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect
|
||||||
go.opencensus.io v0.24.0 // indirect
|
go.opencensus.io v0.24.0 // indirect
|
||||||
go.uber.org/atomic v1.10.0 // indirect
|
go.uber.org/atomic v1.10.0 // indirect
|
||||||
|
|
6
go.sum
6
go.sum
|
@ -145,6 +145,7 @@ github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2
|
||||||
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
||||||
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
|
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
|
||||||
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
|
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
|
||||||
|
github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
|
||||||
github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE=
|
github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE=
|
||||||
github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
|
github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
|
||||||
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
||||||
|
@ -291,6 +292,7 @@ github.com/jackc/puddle/v2 v2.2.0/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFr
|
||||||
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
|
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
|
||||||
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
|
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
|
||||||
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
|
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
|
||||||
|
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
|
||||||
github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||||
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
||||||
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
||||||
|
@ -298,6 +300,7 @@ github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1
|
||||||
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
|
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
|
||||||
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
|
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
|
||||||
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
|
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
|
||||||
|
github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
|
||||||
github.com/karrick/godirwalk v1.16.1 h1:DynhcF+bztK8gooS0+NDJFrdNZjJ3gzVzC545UNA9iw=
|
github.com/karrick/godirwalk v1.16.1 h1:DynhcF+bztK8gooS0+NDJFrdNZjJ3gzVzC545UNA9iw=
|
||||||
github.com/karrick/godirwalk v1.16.1/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk=
|
github.com/karrick/godirwalk v1.16.1/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk=
|
||||||
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
|
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
|
||||||
|
@ -385,6 +388,7 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb
|
||||||
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
|
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
|
||||||
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
|
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
|
||||||
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
||||||
|
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
||||||
github.com/nelsam/hel/v2 v2.3.2/go.mod h1:1ZTGfU2PFTOd5mx22i5O0Lc2GY933lQ2wb/ggy+rL3w=
|
github.com/nelsam/hel/v2 v2.3.2/go.mod h1:1ZTGfU2PFTOd5mx22i5O0Lc2GY933lQ2wb/ggy+rL3w=
|
||||||
github.com/nelsam/hel/v2 v2.3.3/go.mod h1:1ZTGfU2PFTOd5mx22i5O0Lc2GY933lQ2wb/ggy+rL3w=
|
github.com/nelsam/hel/v2 v2.3.3/go.mod h1:1ZTGfU2PFTOd5mx22i5O0Lc2GY933lQ2wb/ggy+rL3w=
|
||||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
|
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
|
||||||
|
@ -484,6 +488,8 @@ github.com/tilinna/clock v1.0.2/go.mod h1:ZsP7BcY7sEEz7ktc0IVy8Us6boDrK8VradlKRU
|
||||||
github.com/tilinna/clock v1.1.0 h1:6IQQQCo6KoBxVudv6gwtY8o4eDfhHo8ojA5dP0MfhSs=
|
github.com/tilinna/clock v1.1.0 h1:6IQQQCo6KoBxVudv6gwtY8o4eDfhHo8ojA5dP0MfhSs=
|
||||||
github.com/tilinna/clock v1.1.0/go.mod h1:ZsP7BcY7sEEz7ktc0IVy8Us6boDrK8VradlKRUGfOao=
|
github.com/tilinna/clock v1.1.0/go.mod h1:ZsP7BcY7sEEz7ktc0IVy8Us6boDrK8VradlKRUGfOao=
|
||||||
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
|
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
|
||||||
|
github.com/toshi0607/chi-prometheus v0.1.3 h1:KL0+MmVISNyKHsmvlU4fw00NDEUTB9K+OQt4scgD19U=
|
||||||
|
github.com/toshi0607/chi-prometheus v0.1.3/go.mod h1:2jErPypCR/0jMc4MTnEbjkWmJ3nkh5wmOVO9icayOaM=
|
||||||
github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
|
github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
|
||||||
github.com/urfave/cli/v2 v2.25.1 h1:zw8dSP7ghX0Gmm8vugrs6q9Ku0wzweqPyshy+syu9Gw=
|
github.com/urfave/cli/v2 v2.25.1 h1:zw8dSP7ghX0Gmm8vugrs6q9Ku0wzweqPyshy+syu9Gw=
|
||||||
github.com/urfave/cli/v2 v2.25.1/go.mod h1:GHupkWPMM0M/sj1a2b4wUrWBPzazNrIjouW6fmdJLxc=
|
github.com/urfave/cli/v2 v2.25.1/go.mod h1:GHupkWPMM0M/sj1a2b4wUrWBPzazNrIjouW6fmdJLxc=
|
||||||
|
|
Loading…
Reference in a new issue