Compare commits

...

4 Commits
dev ... metrics

Author SHA1 Message Date
Pasha
d2f71e93d6 added logic for prometheus controllers 2024-12-10 12:04:47 +03:00
Pasha
8b6458b85d - 2024-12-09 23:59:56 +03:00
Pasha
eaf6cb0ae1 added handle prometheus metrics 2024-12-09 23:51:26 +03:00
Pasha
1f0dd799c7 added metrics dunc for serch it 2024-12-09 22:57:05 +03:00
16 changed files with 200 additions and 49 deletions

@ -1,12 +1,12 @@
package main
import (
"gitea.pena/PenaSide/verification/internal/app"
"gitea.pena/PenaSide/verification/internal/config"
"go.uber.org/zap"
"log"
"os"
"gitea.pena/PenaSide/verification/internal/app"
"gitea.pena/PenaSide/verification/internal/config"
_ "gitea.pena/PenaSide/linters-golang/pkg/dummy"
"time"
)

19
go.mod

@ -7,11 +7,10 @@ toolchain go1.22.2
require (
gitea.pena/PenaSide/common v0.0.0-20241128160655-fe730a08b5f1
gitea.pena/PenaSide/customer v0.0.0-20241118214409-34a88a3a7001 //dev
gitea.pena/PenaSide/trashlog v0.0.0-20241119225515-2fd267647ca4 //dev
github.com/caarlos0/env/v8 v8.0.0
github.com/go-playground/validator/v10 v10.14.1
github.com/gofiber/contrib/fiberzap v1.0.2
github.com/gofiber/fiber/v2 v2.52.1
github.com/gofiber/fiber/v2 v2.52.5
github.com/joho/godotenv v1.5.1
github.com/minio/minio-go/v7 v7.0.56
github.com/themakers/hlog v0.0.0-20191205140925-235e0e4baddf
@ -19,12 +18,22 @@ require (
go.uber.org/zap v1.27.0
)
require gitea.pena/PenaSide/linters-golang v0.0.0-20241207122018-933207374735
require (
gitea.pena/PenaSide/linters-golang v0.0.0-20241207122018-933207374735
gitea.pena/PenaSide/trashlog v0.0.0-20241209132057-d978ecf39d21
github.com/prometheus/client_golang v1.20.5
)
require (
github.com/ClickHouse/clickhouse-go v1.5.4 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58 // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/prometheus/client_model v0.6.1 // indirect
github.com/prometheus/common v0.55.0 // indirect
github.com/prometheus/procfs v0.15.1 // indirect
github.com/skeris/appInit v1.0.2 // indirect
go.etcd.io/bbolt v1.3.10 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20240730163845-b1a4ccb954bf // indirect
@ -45,7 +54,7 @@ require (
github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/klauspost/compress v1.17.7 // indirect
github.com/klauspost/compress v1.17.9 // indirect
github.com/klauspost/cpuid/v2 v2.2.4 // indirect
github.com/leodido/go-urn v1.2.4 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
@ -60,7 +69,7 @@ require (
github.com/rivo/uniseg v0.4.7 // indirect
github.com/rs/xid v1.5.0 // indirect
github.com/sirupsen/logrus v1.9.2 // indirect
github.com/stretchr/testify v1.8.4
github.com/stretchr/testify v1.9.0
github.com/valyala/bytebufferpool v1.0.0 // indirect
github.com/valyala/fasthttp v1.52.0
github.com/valyala/tcplisten v1.0.0 // indirect

32
go.sum

@ -4,17 +4,21 @@ gitea.pena/PenaSide/customer v0.0.0-20241118214409-34a88a3a7001 h1:bnwlhVx7LzwAY
gitea.pena/PenaSide/customer v0.0.0-20241118214409-34a88a3a7001/go.mod h1:6lKbvPc2E2TcNSxG8WlC/XBuhqW6smKQtpYPLedheqU=
gitea.pena/PenaSide/linters-golang v0.0.0-20241207122018-933207374735 h1:jDVeUhGBTXBibmW5dmtJg2m2+z5z2Rf6J4G0LpjVoJ0=
gitea.pena/PenaSide/linters-golang v0.0.0-20241207122018-933207374735/go.mod h1:gdd+vOT6up9STkEbxa2qESLIMZFjCmRbkcheFQCVgZU=
gitea.pena/PenaSide/trashlog v0.0.0-20241119225515-2fd267647ca4 h1:y9B4CSPIgiUoaXKyXLZxs1A9hxzDj26F9MH2R6uTkHQ=
gitea.pena/PenaSide/trashlog v0.0.0-20241119225515-2fd267647ca4/go.mod h1:Bp5fJX0XsTV3QYximX6R2kCRvVKQAPwxjjCPm+ToTY8=
gitea.pena/PenaSide/trashlog v0.0.0-20241209132057-d978ecf39d21 h1:IhcxvF9yjjJojSsKmFufbWU4STf0SFGe5XuvBouf6kg=
gitea.pena/PenaSide/trashlog v0.0.0-20241209132057-d978ecf39d21/go.mod h1:qyckHw1gGv2BVCl1VoiKMa7vidf5gb6AlGnZzhGRJEI=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/ClickHouse/clickhouse-go v1.5.4 h1:cKjXeYLNWVJIx2J1K6H2CqyRmfwVJVY1OV1coaaFcI0=
github.com/ClickHouse/clickhouse-go v1.5.4/go.mod h1:EaI/sW7Azgz9UATzd5ZdZHRUhHgv5+JMS9NSr2smCJI=
github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M=
github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
github.com/bkaradzic/go-lz4 v1.0.0 h1:RXc4wYsyz985CkXXeX04y4VnZFGG8Rd43pRaHsOXAKk=
github.com/bkaradzic/go-lz4 v1.0.0/go.mod h1:0YdlkowM3VswSROI7qDxhRvJ3sLhlFrRRwjwegp5jy4=
github.com/caarlos0/env/v8 v8.0.0 h1:POhxHhSpuxrLMIdvTGARuZqR4Jjm8AYmoi/JKlcScs0=
github.com/caarlos0/env/v8 v8.0.0/go.mod h1:7K4wMY9bH0esiXSSHlfHLX5xKGQMnkH5Fk4TDSSSzfo=
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58 h1:F1EaeKL/ta07PY/k9Os/UFtwERei2/XzGemhpGnBKNg=
github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58/go.mod h1:EOBUe0h4xcZ5GoxqC5SDxFQ8gwyZPKQoEzownBlhI80=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@ -43,8 +47,8 @@ github.com/go-telegram-bot-api/telegram-bot-api/v5 v5.5.1 h1:wG8n/XJQ07TmjbITcGi
github.com/go-telegram-bot-api/telegram-bot-api/v5 v5.5.1/go.mod h1:A2S0CWkNylc2phvKXWBBdD3K0iGnDBGbzRpISP2zBl8=
github.com/gofiber/contrib/fiberzap v1.0.2 h1:EQwhggtszVfIdBeXxN9Xrmld71es34Ufs+ef8VMqZxc=
github.com/gofiber/contrib/fiberzap v1.0.2/go.mod h1:jGO8BHU4gRI9U0JtM6zj2CIhYfgVmW5JxziN8NTgVwE=
github.com/gofiber/fiber/v2 v2.52.1 h1:1RoU2NS+b98o1L77sdl5mboGPiW+0Ypsi5oLmcYlgHI=
github.com/gofiber/fiber/v2 v2.52.1/go.mod h1:KEOE+cXMhXG0zHc9d8+E38hoX+ZN7bhOtgeF2oT6jrQ=
github.com/gofiber/fiber/v2 v2.52.5 h1:tWoP1MJQjGEe4GB5TUGOi7P2E0ZMMRx5ZTG4rT+yGMo=
github.com/gofiber/fiber/v2 v2.52.5/go.mod h1:KEOE+cXMhXG0zHc9d8+E38hoX+ZN7bhOtgeF2oT6jrQ=
github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk=
github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
@ -59,8 +63,8 @@ github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwA
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/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/klauspost/compress v1.17.7 h1:ehO88t2UGzQK66LMdE8tibEd1ErmzZjNEqWkjLAKQQg=
github.com/klauspost/compress v1.17.7/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA=
github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
github.com/klauspost/cpuid/v2 v2.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk=
github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY=
@ -71,6 +75,8 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q=
github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4=
github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
@ -95,6 +101,8 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/montanaflynn/stats v0.7.1 h1:etflOAAHORrCC44V+aR6Ftzort912ZU+YLiSTuV8eaE=
github.com/montanaflynn/stats v0.7.1/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
github.com/onsi/ginkgo v1.16.0 h1:NBrNLB37exjJLxXtFOktx6CISBdS1aF8+7MwKlTV8U4=
@ -110,6 +118,14 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y=
github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE=
github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
github.com/prometheus/common v0.55.0 h1:KEi6DK7lXW/m7Ig5i47x0vRzuBsHuvJdi5ee6Y3G1dc=
github.com/prometheus/common v0.55.0/go.mod h1:2SECS4xJG1kd8XF9IcM1gMX6510RAEL65zxzNImwdc8=
github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc=
github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk=
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
@ -132,8 +148,8 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/themakers/bdd v0.0.0-20210316111417-6b1dfe326f33 h1:N9f/Q+2Ssa+yDcbfaoLTYvXmdeyUUxsJKdPUVsjSmiA=
github.com/themakers/bdd v0.0.0-20210316111417-6b1dfe326f33/go.mod h1:rpcH99JknBh8seZmlOlUg51gasZH6QH34oXNsIwYT6E=
github.com/themakers/hlog v0.0.0-20191205140925-235e0e4baddf h1:TJJm6KcBssmbWzplF5lzixXl1RBAi/ViPs1GaSOkhwo=

@ -99,7 +99,7 @@ func Run(cfg *config.Config, build Build) {
adminSrv := server.NewHTTP(server.ServerConfig{
Logger: logger,
Controllers: []server.Controller{cons.VerificationAdmin},
Controllers: []server.Controller{cons.VerificationAdmin, cons.PrometheusAdmin},
HLogger: loggerHlog,
})

@ -2,10 +2,10 @@ package client
import (
"bytes"
"gitea.pena/PenaSide/verification/internal/models"
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
"github.com/stretchr/testify/assert"
"go.uber.org/zap"
"gitea.pena/PenaSide/verification/internal/models"
"testing"
"text/template"
"time"

@ -0,0 +1,60 @@
package prometheus
import (
"gitea.pena/PenaSide/verification/internal/repository"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp"
"net/http"
)
type Prometheus struct {
verificationRepo *repository.VerificationRepository
metrics prometheusRegistry
}
type prometheusRegistry struct {
totalBytes prometheus.Gauge // Общее количество загруженной памяти
totalTime prometheus.Gauge // Общее затраченное время на 1 загрузку
totalUploads prometheus.Gauge // Количество всего загрузок файлов
}
func NewPrometheus(verificationRepo *repository.VerificationRepository) *Prometheus {
registry := prometheusRegistry{
totalBytes: prometheus.NewGauge(prometheus.GaugeOpts{
Name: "s3_total_uploaded_bytes",
Help: "Total memory loaded in bytes to S3",
}),
totalTime: prometheus.NewGauge(prometheus.GaugeOpts{
Name: "s3_total_upload_time_ns",
Help: "Total time spent downloading files to S3",
}),
totalUploads: prometheus.NewGauge(prometheus.GaugeOpts{
Name: "s3_total_upload_count",
Help: "Number of total file downloads to S3",
}),
}
prometheus.MustRegister(
registry.totalBytes,
registry.totalTime,
registry.totalUploads,
)
return &Prometheus{
verificationRepo: verificationRepo,
metrics: registry,
}
}
func (receiver *Prometheus) Metrics(w http.ResponseWriter, r *http.Request) {
receiver.updateMetrics()
handler := promhttp.Handler()
handler.ServeHTTP(w, r)
}
func (receiver *Prometheus) updateMetrics() {
receiver.metrics.totalBytes.Set(float64(receiver.verificationRepo.Metrics.TotalBytes))
receiver.metrics.totalTime.Set(float64(receiver.verificationRepo.Metrics.TotalTime))
receiver.metrics.totalUploads.Set(float64(receiver.verificationRepo.Metrics.TotalUploads))
}

@ -0,0 +1,14 @@
package prometheus
import (
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/adaptor"
)
func (receiver *Prometheus) Register(router fiber.Router) {
router.Get("/metrics", adaptor.HTTPHandlerFunc(receiver.Metrics))
}
func (receiver *Prometheus) Name() string {
return ""
}

@ -1,4 +1,4 @@
package admin
package verification_admin
import "github.com/gofiber/fiber/v2"

@ -1,12 +1,12 @@
package admin
package verification_admin
import (
"github.com/gofiber/fiber/v2"
"gitea.pena/PenaSide/common/log_mw"
"gitea.pena/PenaSide/customer/pkg/customer_clients"
"gitea.pena/PenaSide/verification/internal/models"
"gitea.pena/PenaSide/verification/internal/repository"
"gitea.pena/PenaSide/verification/pkg/validate_controllers"
"gitea.pena/PenaSide/customer/pkg/customer_clients"
"github.com/gofiber/fiber/v2"
)
type VerifyAdminControllerDeps struct {

@ -1,23 +1,28 @@
package initialize
import (
"gitea.pena/PenaSide/verification/internal/client"
"gitea.pena/PenaSide/verification/internal/controllers/admin"
"gitea.pena/PenaSide/verification/internal/controllers/user"
"gitea.pena/PenaSide/customer/pkg/customer_clients"
"gitea.pena/PenaSide/verification/internal/client"
"gitea.pena/PenaSide/verification/internal/controllers/admin/prometheus"
"gitea.pena/PenaSide/verification/internal/controllers/admin/verification_admin"
"gitea.pena/PenaSide/verification/internal/controllers/user"
)
type Controllers struct {
VerificationAdmin *admin.VerifyAdminController
VerificationAdmin *verification_admin.VerifyAdminController
PrometheusAdmin *prometheus.Prometheus
VerificationUser *user.VerifyUserController
}
func NewControllers(reps *Repositories, telegram *client.Telegram, customer *customer_clients.CustomersClient) *Controllers {
return &Controllers{
VerificationAdmin: admin.NewVerificationAdminController(admin.VerifyAdminControllerDeps{
VerificationAdmin: verification_admin.NewVerificationAdminController(verification_admin.VerifyAdminControllerDeps{
Repository: reps.Verification,
Customer: customer,
}),
PrometheusAdmin: prometheus.NewPrometheus(
reps.Verification,
),
VerificationUser: user.NewVerificationUserController(user.VerifyUserControllerDeps{
Repository: reps.Verification,
Telegram: telegram,

@ -5,16 +5,17 @@ import (
"errors"
"fmt"
"mime/multipart"
"time"
"strings"
"sync/atomic"
"time"
"gitea.pena/PenaSide/verification/internal/models"
"github.com/minio/minio-go/v7"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"go.uber.org/zap"
"gitea.pena/PenaSide/verification/internal/models"
)
type VerificationRepository struct {
@ -22,6 +23,14 @@ type VerificationRepository struct {
mongo *mongo.Collection
s3 *minio.Client
folder, url string
Metrics Metrics
}
type Metrics struct {
TotalBytes int64
TotalTime int64
TotalUploads int64
}
const (
@ -54,10 +63,12 @@ func (r *VerificationRepository) Insert(
return nil, err
}
startTime := time.Now()
_, err = r.s3.PutObject(ctx, VerificationBucket, fmt.Sprintf("%s/%s/%s", r.folder, userID, innFH.Filename), inn, innFH.Size, minio.PutObjectOptions{})
if r.err(err) {
return nil, err
}
r.recordMetrics(innFH.Size, time.Since(startTime).Nanoseconds())
rule, err := ruleFH.Open()
if r.err(err) {
@ -65,10 +76,12 @@ func (r *VerificationRepository) Insert(
}
// Put rule file
startTime = time.Now()
_, err = r.s3.PutObject(ctx, VerificationBucket, fmt.Sprintf("%s/%s/%s", r.folder, userID, ruleFH.Filename), rule, ruleFH.Size, minio.PutObjectOptions{})
if r.err(err) {
return nil, err
}
r.recordMetrics(ruleFH.Size, time.Since(startTime).Nanoseconds())
// Put certificate file
if certFH != nil {
@ -77,10 +90,12 @@ func (r *VerificationRepository) Insert(
return nil, err
}
startTime = time.Now()
_, err = r.s3.PutObject(ctx, VerificationBucket, fmt.Sprintf("%s/%s/%s", r.folder, userID, certFH.Filename), cert, certFH.Size, minio.PutObjectOptions{})
if r.err(err) {
return nil, err
}
r.recordMetrics(certFH.Size, time.Since(startTime).Nanoseconds())
record.Files = []models.VerificationFile{
{
@ -195,17 +210,17 @@ func (r *VerificationRepository) UpdateFile(ctx context.Context, userID, fileNam
return nil, err
}
fileURL := fmt.Sprintf("%s/%s/%s/%s", r.url, r.folder, userID, fileHeader.Filename)
fileURL := fmt.Sprintf("%s/%s/%s/%s", r.url, r.folder, userID, fileHeader.Filename)
// remove old file
verification, err := r.GetByUserID(ctx, userID)
if r.err(err) {
return nil, err
}
if verification == nil {
return nil, fmt.Errorf("no verification found")
}
if verification == nil {
return nil, fmt.Errorf("no verification found")
}
found := false
for iterator, file := range verification.Files {
@ -228,7 +243,6 @@ func (r *VerificationRepository) UpdateFile(ctx context.Context, userID, fileNam
// update in mongodb
result, err := r.Update(ctx, &models.Verification{ID: verification.ID, Files: verification.Files})
if r.err(err) {
return nil, err
@ -244,3 +258,9 @@ func (r *VerificationRepository) err(err error) bool {
}
return false
}
func (r *VerificationRepository) recordMetrics(bytes int64, duration int64) {
atomic.AddInt64(&r.Metrics.TotalBytes, bytes)
atomic.AddInt64(&r.Metrics.TotalTime, duration)
atomic.AddInt64(&r.Metrics.TotalUploads, 1)
}

@ -3,12 +3,12 @@ package server
import (
"context"
"fmt"
"gitea.pena/PenaSide/common/log_mw"
"github.com/gofiber/contrib/fiberzap"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/recover"
"github.com/themakers/hlog"
"go.uber.org/zap"
"gitea.pena/PenaSide/common/log_mw"
)
type ServerConfig struct {

@ -3,12 +3,12 @@ package main
import (
"context"
"fmt"
"gitea.pena/PenaSide/verification/internal/models"
"github.com/minio/minio-go/v7"
"github.com/minio/minio-go/v7/pkg/credentials"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"gitea.pena/PenaSide/verification/internal/models"
)
const (

@ -1,20 +1,17 @@
TELEGRAM_TOKEN=6712573453:AAFbioUuXf0Te73MUCqa0_h09qEQ1iQREas
TELEGRAM_CHANNEL_ID=542073142
TELEGRAM_TOKEN=6712573453:AAFqTOsgwe_j48ZQ1GzWKQDT5Nwr-SAWjz8
TELEGRAM_CHANNEL_ID=-1002217604546
HTTP_ADDRESS_USER=0.0.0.0:8080
HTTP_ADDRESS_ADMIN=0.0.0.0:8081
MONGO_HOST=localhost
MONGO_PORT=27020
MONGO_USER=test
MONGO_PASSWORD=test
MONGO_AUTH=admin
MONGO_DATABASE_NAME=admin
S3_ENDPOINT=localhost:9005
S3_ACCESS_KEY_ID=admin
S3_SECRET_KEY=admin123
MONGO_URL=mongodb://test:test@localhost:27020/
MONGO_DB_NAME=admin
S3_ENDPOINT=localhost:9000
S3_ACCESS_KEY_ID=minioadmin
S3_SECRET_KEY=minioadmin
CUSTOMER_SVC_ADDRESS=localhost:9003
STAGING_URL=https://sadmin.pena
S3_FOLDER=videodata
S3_FILE_URL=http://localhost:9005/videodata
S3_FILE_URL=http://localhost:9000/videodata
CUSTOMER_RPC_HOST=localhost:9003
TRASH_LOG_HOST=localhost:7113
MODULE_LOGGER=verify-local

@ -3,12 +3,12 @@ package e2e
import (
"bytes"
"fmt"
"gitea.pena/PenaSide/verification/tests/helpers"
"github.com/gofiber/fiber/v2"
"github.com/stretchr/testify/assert"
"io"
"mime/multipart"
"os"
"gitea.pena/PenaSide/verification/tests/helpers"
"testing"
)

@ -0,0 +1,30 @@
package e2e
import (
"fmt"
"gitea.pena/PenaSide/verification/tests/helpers"
"github.com/gofiber/fiber/v2"
"github.com/stretchr/testify/assert"
"testing"
)
func Test_Metrics(t *testing.T) {
url := "http://localhost:8081/metrics"
client := fiber.AcquireClient()
token, err := helpers.CreateJwt("64e53ed187392e122e5d3d50")
assert.NoError(t, err)
assert.NoError(t, err)
agent := client.Get(url)
agent.Set("Authorization", fmt.Sprintf("Bearer %s", token))
statusCode, respBody, errs := agent.Bytes()
if len(errs) > 0 {
assert.NoError(t, errs[0])
}
assert.Equal(t, 200, statusCode)
fmt.Println(string(respBody))
}