Compare commits
3 Commits
healthchec
...
dev
Author | SHA1 | Date | |
---|---|---|---|
373fbc9c89 | |||
![]() |
dcb6d697c0 | ||
![]() |
5d9c6ffc7e |
123
cmd/validator/main.go
Normal file
123
cmd/validator/main.go
Normal file
@ -0,0 +1,123 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"fmt"
|
||||
"gitea.pena/PenaSide/common/validate"
|
||||
"gitea.pena/PenaSide/verification/internal/config"
|
||||
"gitea.pena/PenaSide/verification/internal/repository"
|
||||
"github.com/caarlos0/env/v8"
|
||||
"github.com/minio/minio-go/v7"
|
||||
"github.com/minio/minio-go/v7/pkg/credentials"
|
||||
"github.com/pioz/faker"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
cfg, err := loadConfig()
|
||||
if err != nil {
|
||||
log.Fatalf("error loading config: %v", err)
|
||||
}
|
||||
|
||||
err = validateNotEmpty(cfg)
|
||||
if err != nil {
|
||||
log.Fatalf("error validating config: %v", err)
|
||||
}
|
||||
|
||||
err = validateS3(cfg)
|
||||
if err != nil {
|
||||
log.Fatalf("error validating s3: %v", err)
|
||||
}
|
||||
|
||||
if err = validate.ValidateTgToken(cfg.TelegramToken); err != nil {
|
||||
log.Fatalf("error validating telegram token: %v", err)
|
||||
}
|
||||
|
||||
if err = validate.ValidateMongo(cfg.ExternalCfg.Database); err != nil {
|
||||
log.Fatalf("error validating mongodb: %v", err)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func loadConfig() (config.Config, error) {
|
||||
var cfg config.Config
|
||||
|
||||
if err := env.Parse(&cfg); err != nil {
|
||||
return cfg, err
|
||||
}
|
||||
return cfg, nil
|
||||
}
|
||||
|
||||
func validateNotEmpty(cfg config.Config) error {
|
||||
if cfg.TelegramChannelID == 0 {
|
||||
return fmt.Errorf("TelegramChannelID is empty")
|
||||
}
|
||||
if cfg.ClientHttpURL == "" {
|
||||
return fmt.Errorf("ClientHttpURL is empty")
|
||||
}
|
||||
if cfg.AdminHttpURL == "" {
|
||||
return fmt.Errorf("AdminHttpURL is empty")
|
||||
}
|
||||
if cfg.CustomerMicroserviceRPCURL == "" {
|
||||
return fmt.Errorf("CustomerMicroserviceRPCURL is empty")
|
||||
}
|
||||
if cfg.TrashLogHost == "" {
|
||||
return fmt.Errorf("TrashLogHost is empty")
|
||||
}
|
||||
if cfg.VerificationMicroserviceURL == "" {
|
||||
return fmt.Errorf("VerificationMicroserviceURL is empty")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func validateS3(cfg config.Config) error {
|
||||
if cfg.S3Endpoint == "" {
|
||||
return fmt.Errorf("s3 endpoint is empty")
|
||||
}
|
||||
if cfg.S3AccessKey == "" {
|
||||
return fmt.Errorf("s3 access key is empty")
|
||||
}
|
||||
if cfg.S3SecretKey == "" {
|
||||
return fmt.Errorf("s3 secret key is empty")
|
||||
}
|
||||
|
||||
ctx := context.TODO()
|
||||
|
||||
client, err := minio.New(cfg.S3Endpoint, &minio.Options{
|
||||
Creds: credentials.NewStaticV4(cfg.S3AccessKey, cfg.S3SecretKey, ""),
|
||||
Secure: true,
|
||||
})
|
||||
if err != nil {
|
||||
return fmt.Errorf("error creating minio client: %v", err)
|
||||
}
|
||||
|
||||
objectName := faker.String()
|
||||
content := []byte(faker.String())
|
||||
contentType := "text/plain"
|
||||
|
||||
exist, err := client.BucketExists(ctx, repository.VerificationBucket)
|
||||
if err != nil {
|
||||
return fmt.Errorf("error find s3 bucket in validate: %w", err)
|
||||
}
|
||||
|
||||
// не создаем бакет так как бакет могут не дать создать
|
||||
if !exist {
|
||||
log.Println("bucket does not exist")
|
||||
return nil
|
||||
}
|
||||
|
||||
_, err = client.PutObject(ctx, repository.VerificationBucket, objectName,
|
||||
bytes.NewReader(content), int64(len(content)),
|
||||
minio.PutObjectOptions{ContentType: contentType})
|
||||
if err != nil {
|
||||
return fmt.Errorf("error create test object: %w", err)
|
||||
}
|
||||
|
||||
err = client.RemoveObject(ctx, repository.VerificationBucket, objectName, minio.RemoveObjectOptions{})
|
||||
if err != nil {
|
||||
return fmt.Errorf("error remove test object: %w", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
12
cmd/validator/main_test.go
Normal file
12
cmd/validator/main_test.go
Normal file
@ -0,0 +1,12 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"gitea.pena/PenaSide/verification/internal/config"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestValidateS3(t *testing.T) {
|
||||
err := validateS3(config.Config{S3Endpoint: "localhost:9000", S3AccessKey: "minioadmin", S3SecretKey: "minioadmin"})
|
||||
assert.NoError(t, err)
|
||||
}
|
@ -1,36 +1,37 @@
|
||||
version: "3"
|
||||
services:
|
||||
verificationv1.0.0:
|
||||
container_name: verification_servicev1.0.0
|
||||
restart: unless-stopped
|
||||
image: $CI_REGISTRY_IMAGE/staging:$CI_COMMIT_REF_SLUG.$CI_PIPELINE_ID
|
||||
image: gitea.pena:3000/penaside/verification/staging:$GITHUB_RUN_NUMBER
|
||||
hostname: verification_servicev1.0.0
|
||||
ports:
|
||||
- 10.8.0.6:7036:7035
|
||||
- 10.8.0.6:7037:7036
|
||||
- 10.7.0.6:7036:7035
|
||||
- 10.7.0.6:7037:7036
|
||||
- 10.7.0.6:7137:2345
|
||||
command: dlv --listen=:2345 --headless=true --log=true --log-output=debugger,debuglineerr,gdbwire,lldbout,rpc --accept-multiclient --api-version=2 exec ./app
|
||||
environment:
|
||||
MONGO_URI: mongodb://$MONGO_USER:$MONGO_PASSWORD@10.8.0.6:27017/?authSource=verification
|
||||
PENADISK_URL: $PENADISK_URL
|
||||
TELEGRAM_TOKEN: $TELEGRAM_TOKEN
|
||||
TELEGRAM_CHANNEL_ID: $TELEGRAM_CHANNEL_ID
|
||||
CLIENT_HTTP_URL: ":7035"
|
||||
ADMIN_HTTP_URL: ":7036"
|
||||
S3_ENDPOINT: s3.timeweb.cloud
|
||||
S3_ACCESS_KEY_ID: 5CV77KVDUU9H0II9R24M
|
||||
S3_SECRET_KEY: 0W0m8DyvdAKRJnsAy6mB5zndQ7RouJBLhqhtThcu
|
||||
JWT_SECRET: $JWT_SECRET
|
||||
HTTP_ADDRESS_USER: ":7035"
|
||||
HTTP_ADDRESS_ADMIN: ":7036"
|
||||
MONGO_HOST: "10.8.0.6"
|
||||
MONGO_PORT: "27017"
|
||||
MONGO_USER: $MONGO_USER
|
||||
MONGO_PASSWORD: $MONGO_PASSWORD
|
||||
MONGO_AUTH: "verification"
|
||||
MONGO_DATABASE_NAME: "verification"
|
||||
CUSTOMER_SVC_ADDRESS: "http://10.8.0.6:9065"
|
||||
STAGING_URL: "https://sadmin.pena"
|
||||
S3_FOLDER: verification
|
||||
S3_FILE_URL: https://3c580be9-cf31f296-d055-49cf-b39e-30c7959dc17b.s3.timeweb.cloud
|
||||
CUSTOMER_SVC_MICROSERVICE_RPC_URL: "http://10.8.0.6:9065"
|
||||
VERIFICATION_MICROSERVICE_URL: "https://sadmin.pena"
|
||||
CUSTOMER_RPC_HOST: 10.8.0.6:9060
|
||||
TRASH_LOG_HOST: 10.8.0.15:7113
|
||||
TRASH_LOG_HOST: trashlog.pena:7113
|
||||
MODULE_LOGGER: staging-verification
|
||||
MONGO_URL: mongodb://verification:54143ffdd9304865586e5cf1@10.7.0.6:27017/?authSource=verification
|
||||
MONGO_DB_NAME: verification
|
||||
JWT_SECRET: >
|
||||
-----BEGIN PUBLIC KEY-----
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCLW1tlHyKC9AG0hGpmkksET2DE
|
||||
r7ojSPemxFWAgFgcPJWQ7x3uNbsdJ3bIZFoA/FClaWKMCZmjnH9tv0bKZtY/CDhM
|
||||
ZEyHpMruRSn6IKrxjtQZWy4uv/w6MzUeyBYG0OvNCiYpdvz5SkAGAUHD5ZNFqn2w
|
||||
KKFD0I2Dr59BFVSGJwIDAQAB
|
||||
-----END PUBLIC KEY-----
|
||||
|
||||
tty: true
|
||||
|
7
go.mod
7
go.mod
@ -5,7 +5,7 @@ go 1.22.0
|
||||
toolchain go1.22.2
|
||||
|
||||
require (
|
||||
gitea.pena/PenaSide/common v0.0.0-20241128160655-fe730a08b5f1
|
||||
gitea.pena/PenaSide/common v0.0.0-20241206095133-a4a6f7df8b45
|
||||
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
|
||||
@ -19,7 +19,10 @@ 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
|
||||
github.com/pioz/faker v1.7.3
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/ClickHouse/clickhouse-go v1.5.4 // indirect
|
||||
|
5
go.sum
5
go.sum
@ -1,5 +1,5 @@
|
||||
gitea.pena/PenaSide/common v0.0.0-20241128160655-fe730a08b5f1 h1:w1AAxrlZGmxUI9NAa/0TYsc6sqWWF9yAzQaLL/KxwrM=
|
||||
gitea.pena/PenaSide/common v0.0.0-20241128160655-fe730a08b5f1/go.mod h1:l71j3W1yROhOSfjWZ6wcMuzjBR37gu2ZTcXsorEJoiw=
|
||||
gitea.pena/PenaSide/common v0.0.0-20241206095133-a4a6f7df8b45 h1:0YzvHSgRitVeqvniSCPr6BERHusGP5yrGozAITYbWmg=
|
||||
gitea.pena/PenaSide/common v0.0.0-20241206095133-a4a6f7df8b45/go.mod h1:BDk6/EA9ekKun+UP7UBLcczhlmFRLxglYi00G9FBkUw=
|
||||
gitea.pena/PenaSide/customer v0.0.0-20241118214409-34a88a3a7001 h1:bnwlhVx7LzwAYgx25G8/qezqkXvatL1de9nQZvpO0IE=
|
||||
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=
|
||||
@ -128,6 +128,7 @@ github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpE
|
||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
|
||||
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
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=
|
||||
|
@ -2,6 +2,7 @@ package app
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
mongo "gitea.pena/PenaSide/common/mongo"
|
||||
"gitea.pena/PenaSide/customer/pkg/customer_clients"
|
||||
"gitea.pena/PenaSide/trashlog/app"
|
||||
@ -49,12 +50,12 @@ func Run(cfg *config.Config, build Build) {
|
||||
return zapcore.NewTee(core, clickHouseLogger)
|
||||
}), zap.AddCallerSkip(2))
|
||||
|
||||
loggerHlog := hlog.New(loggerForHlog).Module(cfg.ModuleLogger)
|
||||
loggerHlog := hlog.New(loggerForHlog).Module(config.ModuleLogger)
|
||||
loggerHlog.With(models.AllFields{})
|
||||
loggerHlog.Emit(app.InfoSvcStarted{})
|
||||
|
||||
mongoDB, err := mongo.Connect(ctx, &mongo.ConnectDeps{
|
||||
Configuration: &cfg.Database,
|
||||
Configuration: &cfg.ExternalCfg.Database,
|
||||
Timeout: 5 * time.Second,
|
||||
})
|
||||
|
||||
@ -63,7 +64,7 @@ func Run(cfg *config.Config, build Build) {
|
||||
}
|
||||
|
||||
minioClient, err := minio.New(cfg.S3Endpoint, &minio.Options{
|
||||
Creds: credentials.NewStaticV4(cfg.S3AccessKeyID, cfg.S3SecretKey, ""),
|
||||
Creds: credentials.NewStaticV4(cfg.S3AccessKey, cfg.S3SecretKey, ""),
|
||||
Secure: true,
|
||||
})
|
||||
if err != nil {
|
||||
@ -80,15 +81,20 @@ func Run(cfg *config.Config, build Build) {
|
||||
logger.Fatal("TelegramBotApi", zap.Error(err))
|
||||
}
|
||||
|
||||
_, err = tgBot.Send(tgbotapi.NewMessage(cfg.TelegramChannelID, fmt.Sprintf("PING MSG from %s", config.ModuleLogger)))
|
||||
if err != nil {
|
||||
logger.Fatal("Send TG ping", zap.Error(err))
|
||||
}
|
||||
|
||||
telegram := client.NewTelegram(client.Deps{
|
||||
Logger: logger,
|
||||
Bot: tgBot,
|
||||
ChatID: cfg.TelegramChannelID,
|
||||
StagingURL: cfg.StagingURL,
|
||||
StagingURL: cfg.VerificationMicroserviceURL,
|
||||
})
|
||||
cons := initialize.NewControllers(reps, telegram, customer_clients.NewCustomersClient(customer_clients.CustomersClientDeps{
|
||||
Logger: logger,
|
||||
CustomerServiceHost: cfg.CustomerRPCHost,
|
||||
CustomerServiceHost: cfg.CustomerMicroserviceRPCURL,
|
||||
}))
|
||||
|
||||
userSrv := server.NewHTTP(server.ServerConfig{
|
||||
@ -104,13 +110,13 @@ func Run(cfg *config.Config, build Build) {
|
||||
})
|
||||
|
||||
go func() {
|
||||
if err := userSrv.Start(cfg.HttpAddressUser); err != nil {
|
||||
if err := userSrv.Start(cfg.ClientHttpURL); err != nil {
|
||||
logger.Fatal("Server startup error", zap.Error(err))
|
||||
}
|
||||
}()
|
||||
|
||||
go func() {
|
||||
if err := adminSrv.Start(cfg.HttpAddressAdmin); err != nil {
|
||||
if err := adminSrv.Start(cfg.AdminHttpURL); err != nil {
|
||||
logger.Fatal("Server startup error", zap.Error(err))
|
||||
}
|
||||
}()
|
||||
|
@ -7,21 +7,24 @@ import (
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
TelegramToken string `env:"TELEGRAM_TOKEN,required"`
|
||||
TelegramChannelID int64 `env:"TELEGRAM_CHANNEL_ID,required"`
|
||||
HttpAddressUser string `env:"HTTP_ADDRESS_USER,required"`
|
||||
HttpAddressAdmin string `env:"HTTP_ADDRESS_ADMIN,required"`
|
||||
S3Endpoint string `env:"S3_ENDPOINT,required"`
|
||||
S3AccessKeyID string `env:"S3_ACCESS_KEY_ID,required"`
|
||||
S3SecretKey string `env:"S3_SECRET_KEY,required"`
|
||||
CustomerSvcAddress string `env:"CUSTOMER_SVC_ADDRESS,required"`
|
||||
StagingURL string `env:"STAGING_URL,required"`
|
||||
S3Folder string `env:"S3_FOLDER,required"`
|
||||
S3FileUrl string `env:"S3_FILE_URL,required"`
|
||||
CustomerRPCHost string `env:"CUSTOMER_RPC_HOST,required"`
|
||||
TrashLogHost string `env:"TRASH_LOG_HOST,required"`
|
||||
ModuleLogger string `env:"MODULE_LOGGER,required"`
|
||||
Database mongo.Configuration
|
||||
TelegramToken string `env:"TELEGRAM_TOKEN,required"`
|
||||
TelegramChannelID int64 `env:"TELEGRAM_CHANNEL_ID,required"`
|
||||
ClientHttpURL string `env:"CLIENT_HTTP_URL,required"`
|
||||
AdminHttpURL string `env:"ADMIN_HTTP_URL,required"`
|
||||
S3Endpoint string `env:"S3_ENDPOINT,required"`
|
||||
S3AccessKey string `env:"S3_ACCESS_KEY,required"`
|
||||
S3SecretKey string `env:"S3_SECRET_KEY,required"`
|
||||
S3Folder string `env:"S3_FOLDER,required"`
|
||||
S3FileUrl string `env:"S3_FILE_URL,required"`
|
||||
CustomerMicroserviceRPCURL string `env:"CUSTOMER_MICROSERVICE_RPC_URL,required"`
|
||||
TrashLogHost string `env:"TRASH_LOG_HOST,required"`
|
||||
// TODO: совсем непонятное название. эта штука собой представляет домен, админки стейджинга или прода в зависимости от того, со стейджинга или с прода пришла заявка и нужен только для формирования удобного для админа сообщения в телегу
|
||||
VerificationMicroserviceURL string `env:"VERIFICATION_MICROSERVICE_URL,required"`
|
||||
ExternalCfg External
|
||||
}
|
||||
|
||||
type External struct {
|
||||
Database mongo.Configuration
|
||||
}
|
||||
|
||||
func NewConfig(file ...string) (*Config, error) {
|
||||
@ -36,3 +39,5 @@ func NewConfig(file ...string) (*Config, error) {
|
||||
|
||||
return &cfg, nil
|
||||
}
|
||||
|
||||
const ModuleLogger = "verification"
|
||||
|
Loading…
Reference in New Issue
Block a user